From 9854160490a13d6cef04eef8f3e6561219101beb Mon Sep 17 00:00:00 2001 From: Bryan Guner Date: Wed, 2 Mar 2022 03:57:00 -0500 Subject: [PATCH 1/6] overwriting with better lost history --- .gitpod.yml | 4 +- .mailmap | 1 + .nvmrc | 2 +- .travis.yml | 17 +- README.md | 126 +- TODO.md | 17 +- bash-commands.md | 8 +- gatsby-config.js | 20 +- gatsby-node.js | 14 +- gatsby-ssr.js | 10 +- inject-netlify-identity-widget.js | 14 +- package-lock.json | 43796 ++++++++++++++++ package.json | 9 +- robots.txt | 2 +- stackbit.yaml | 1 + stackbit.yml | 574 + static/admin/config.yml | 1603 +- static/admin/index.html | 32 +- static/ads.txt | 40 + static/css/algolia.css | 377 +- static/images/apple-touch-icon-114x114.png | Bin 17855 -> 14256 bytes static/images/apple-touch-icon-120x120.png | Bin 19441 -> 15287 bytes static/images/apple-touch-icon-144x144.png | Bin 25182 -> 17767 bytes static/images/apple-touch-icon-152x152.png | Bin 27637 -> 17048 bytes static/images/apple-touch-icon-180x180.png | Bin 34555 -> 18721 bytes static/images/apple-touch-icon-57x57.png | Bin 6409 -> 5786 bytes static/images/apple-touch-icon-72x72.png | Bin 9154 -> 8377 bytes static/images/apple-touch-icon-76x76.png | Bin 10076 -> 9160 bytes static/images/apple-touch-icon.png | Bin 6409 -> 5786 bytes static/images/favicon-750d4390.png | Bin 0 -> 4625 bytes static/images/favicon.ico | Bin 34494 -> 34494 bytes ...z-blog-netlify-app-2022-01-20-23_58_59.png | Bin 0 -> 1923327 bytes static/images/web-development-abstract.jpg | Bin 0 -> 93939 bytes static/js/inject.js | 0 static/js/misc.js | 15 + static/js/prism.js | 1396 +- 36 files changed, 45074 insertions(+), 3004 deletions(-) create mode 100644 .mailmap create mode 100644 package-lock.json create mode 100644 stackbit.yml create mode 100644 static/ads.txt create mode 100644 static/images/favicon-750d4390.png create mode 100644 static/images/screencapture-bgoonz-blog-netlify-app-2022-01-20-23_58_59.png create mode 100644 static/images/web-development-abstract.jpg create mode 100644 static/js/inject.js diff --git a/.gitpod.yml b/.gitpod.yml index 2d44ba310f..e3d4496ab5 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,3 +1,3 @@ tasks: - - init: npm install && npm run build && make - command: npm run start + - init: npm install && npm run build && make + command: npm run start \ No newline at end of file diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..0767f3a77a --- /dev/null +++ b/.mailmap @@ -0,0 +1 @@ +Bryan Guner \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index d430b8ac29..5af7433da6 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -14.15.0 \ No newline at end of file +14.17.3 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index e73d2dd69d..1fd1e0b288 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,11 @@ language: node_js dist: xenial node_js: - - '6' - - '8' - - '10' - - '12' - - '14' - - '16' + - "6" + - "8" + - "10" script: - - cd test/support/express3 && npm install - - cd ../express4 && npm install - - cd ../../.. - - npm test + - cd test/support/express3 && npm install + - cd ../express4 && npm install + - cd ../../.. + - npm test \ No newline at end of file diff --git a/README.md b/README.md index f2a2055981..6e377c83da 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,10 @@ # [⇨WEBSITE🗺️⇦](https://bgoonz-blog.netlify.app/) -https://testmysite.io/61e5ff836a840eeeef7e78e9/bgoonz-blog.netlify.app - + + https://testmysite.io/61e5ff836a840eeeef7e78e9/bgoonz-blog.netlify.app + + ##### [⇨Privacy policy⇦](https://codepen.io/bgoonz/pen/LYLJZrW) @@ -12,17 +14,18 @@ https://testmysite.io/61e5ff836a840eeeef7e78e9/bgoonz-blog.netlify.app
-##### [Cloudfare-Backup](https://bgoonz-blog-2-0.pages.dev/) ⇨ [search](https://www.algolia.com/realtime-search-demo/web-dev-resource-hub-9e6b8aa8-6106-44c5-9f59-ff3f9531abd4) ⇨ [Backup Repo Deploy](https://bgoonzblog20-backup.netlify.app/#gsc.tab=0) ⇨ [Github pages](https://bgoonz.github.io/BGOONZ_BLOG_2.0/) ⇨ [Go To Site Wiki](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) ⇨ [Gatsby Cloud Version](https://bgoonzblog20master.gatsbyjs.io/) +##### [Cloudfare-Backup](https://bgoonz-blog-2-0.pages.dev/) ⇨ [search](https://www.algolia.com/realtime-search-demo/web-dev-resource-hub-9e6b8aa8-6106-44c5-9f59-ff3f9531abd4) ⇨ [Backup Repo Deploy](https://bgoonzblog20-backup.netlify.app/#gsc.tab=0) ⇨ [Github pages](https://bgoonz.github.io/BGOONZ_BLOG_2.0/) ⇨ [Go To Site Wiki](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) ⇨ [Gatsby Cloud Version](https://bgoonzblog20master.gatsbyjs.io/)
-[![Netlify Status](https://api.netlify.com/api/v1/badges/a1b7ee1a-11a7-4bd2-a341-2260656e216f/deploy-status)](https://app.netlify.com/sites/bgoonz-blog/deploys)[![CodeFactor](https://www.codefactor.io/repository/github/webdevhub42/bgoonz_blog_2.0/badge)](https://www.codefactor.io/repository/github/webdevhub42/bgoonz_blog_2.0)[![CodeScene System Mastery**](https://codescene.io/projects/17026/status-badges/system-mastery)](https://codescene.io/projects/17026)![Profile views**](https://views.whatilearened.today/views/github/bgoonz/views.svg)[![Gitter**](https://badges.gitter.im/bgoonz/community.svg)](https://gitter.im/bgoonz/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)[![CodeScene Code Health](https://codescene.io/projects/17026/status-badges/code-health)](https://codescene.io/projects/17026)[![CodeQL](https://github.com/bgoonz/BGOONZ_BLOG_2.0/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/bgoonz/BGOONZ_BLOG_2.0/actions/workflows/codeql-analysis.yml)[![CircleCI](https://circleci.com/gh/bgoonz/BGOONZ_BLOG_2.0/tree/master.svg?style=svg)](https://circleci.com/gh/bgoonz/BGOONZ_BLOG_2.0/tree/master) +[![Netlify Status](https://api.netlify.com/api/v1/badges/a1b7ee1a-11a7-4bd2-a341-2260656e216f/deploy-status)](https://app.netlify.com/sites/bgoonz-blog/deploys)[![CodeFactor](https://www.codefactor.io/repository/github/webdevhub42/bgoonz_blog_2.0/badge)](https://www.codefactor.io/repository/github/webdevhub42/bgoonz_blog_2.0)[![CodeScene System Mastery**](https://codescene.io/projects/17026/status-badges/system-mastery)](https://codescene.io/projects/17026)![Profile views**](https://views.whatilearened.today/views/github/bgoonz/views.svg)[![Gitter**](https://badges.gitter.im/bgoonz/community.svg)](https://gitter.im/bgoonz/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)[![CodeScene Code Health](https://codescene.io/projects/17026/status-badges/code-health)](https://codescene.io/projects/17026)[![CodeQL](https://github.com/bgoonz/BGOONZ_BLOG_2.0/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/bgoonz/BGOONZ_BLOG_2.0/actions/workflows/codeql-analysis.yml) [![Run in Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/aac9892cd5e6fe8241ce?action=collection%2Fimport#?env%5Bblog%5D=dW5kZWZpbmVk)![GitHub visitors](https://visitor-badge-reloaded.herokuapp.com/badge?page_id=bgoonz.visitor.badge.reloaded&color=00bbbb&style=for-the-badge&logo=github) + ![preview](https://github.com/bgoonz/BGOONZ_BLOG_2.0/blob/master/static/images/screencapture-bgoonz-blog-netlify-app-2022-01-20-23_58_59.png?raw=true) - +
@@ -945,7 +948,7 @@ echo ' ' echo "
    " - awk '{print ""}' $listing + awk '{print ""}' $listing # awk '{print "
  • "}; @@ -1435,13 +1438,13 @@ sudo -u postgres psql ### Technologies Used -| URL | | -| -------------------- | -------------------------------------------------------- | +| URL | | +|----------------------|----------------------------------------------------------| | Miscellaneous | webpack ; Prism | | Widgets | Facebook ; AddThis | | Analytics | Moat ; Google Analytics ; Google Ads Conversion Tracking | | Comment systems | Facebook API & REPL.it Database | -| Security | Netlify Access | +| Security | Netlify Access | | Font scripts | Google Font API | | CDN | Unpkg ; jsDelivr ; jQuery CDN ; Netlify | | Marketing automation | MailChimp | @@ -1517,40 +1520,40 @@ find . -name *right.html -type f -exec sed -i 's/target="_parent"//g' {} + ## Wiki Nav -- [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) -- [add copy to code blocks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/add-copy-to-code-blocks.md) -- [Add site search w algolia.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Add-site-search-w-algolia.md) -- [adding mailing list.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/adding-mailing-list.md) -- [Adding search 2 gatsby site.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Adding-search-2-gatsby-site.md) -- [awesome.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/awesome.md) -- [broken links.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/broken-links.md) -- [configure custom domain.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/configure-custom-domain.md) -- [contentauthoring.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/contentauthoring.md) -- [full text search w lunar.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/full-text-search-w-lunar.md) -- [inject 4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject-4.md) -- [inject3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject3.md) -- [inject4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject4.md) -- [injected content part2.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-content-part2.md) -- [injected js part4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-js-part4.md) -- [injected part3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-part3.md) -- [links 2 embed.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-2-embed.md) -- [links to remember](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-to-remember) -- [Netlify Injected Content](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Netlify-Injected-Content) -- [old version of index.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/old-version-of-index.md) -- [optimize vscode.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/optimize-vscode.md) -- [possibly useful snippets.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/possibly-useful-snippets.md) -- [privacy policy.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/privacy-policy.md) -- [random stuff.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random-stuff.md) -- [random.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random.md) -- [ref type](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/ref-type) -- [SEO.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/SEO.md) -- [stable points.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/stable-points.md) -- [tech used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/tech-used.md) -- [Technologies Used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Technologies-Used.md) -- [THINGS TO EMBED.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/THINGS-TO-EMBED.md) -- [validation report.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/validation-report.md) -- [web archive.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/web-archive.md) -- [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) +- [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) +- [add copy to code blocks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/add-copy-to-code-blocks.md) +- [Add site search w algolia.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Add-site-search-w-algolia.md) +- [adding mailing list.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/adding-mailing-list.md) +- [Adding search 2 gatsby site.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Adding-search-2-gatsby-site.md) +- [awesome.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/awesome.md) +- [broken links.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/broken-links.md) +- [configure custom domain.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/configure-custom-domain.md) +- [contentauthoring.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/contentauthoring.md) +- [full text search w lunar.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/full-text-search-w-lunar.md) +- [inject 4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject-4.md) +- [inject3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject3.md) +- [inject4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject4.md) +- [injected content part2.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-content-part2.md) +- [injected js part4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-js-part4.md) +- [injected part3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-part3.md) +- [links 2 embed.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-2-embed.md) +- [links to remember](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-to-remember) +- [Netlify Injected Content](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Netlify-Injected-Content) +- [old version of index.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/old-version-of-index.md) +- [optimize vscode.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/optimize-vscode.md) +- [possibly useful snippets.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/possibly-useful-snippets.md) +- [privacy policy.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/privacy-policy.md) +- [random stuff.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random-stuff.md) +- [random.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random.md) +- [ref type](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/ref-type) +- [SEO.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/SEO.md) +- [stable points.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/stable-points.md) +- [tech used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/tech-used.md) +- [Technologies Used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Technologies-Used.md) +- [THINGS TO EMBED.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/THINGS-TO-EMBED.md) +- [validation report.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/validation-report.md) +- [web archive.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/web-archive.md) +- [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) --- @@ -1558,7 +1561,7 @@ find . -name *right.html -type f -exec sed -i 's/target="_parent"//g' {} +
    Click to expand! - + [![@algolia**](https://avatars.githubusercontent.com/u/2034458?s=40&v=4)](https://github.com/algolia)[algolia / algoliasearch-client-javascript](https://github.com/algolia/algoliasearch-client-javascript)@algolia/client-search `^ 4.10.3` @@ -2373,9 +2376,9 @@ A quick look at the top-level files and directories you'll see in a Gatsby proje Looking for more guidance? Full documentation for Gatsby lives [on the website](https://www.gatsbyjs.com/). Here are some places to start: -- **For most developers, we recommend starting with our [in-depth tutorial for creating a site with Gatsby**](https://www.gatsbyjs.com/tutorial/).\*\* It starts with zero assumptions about your level of ability and walks through every step of the process. +- **For most developers, we recommend starting with our [in-depth tutorial for creating a site with Gatsby**](https://www.gatsbyjs.com/tutorial/).\*\* It starts with zero assumptions about your level of ability and walks through every step of the process. -- **To dive straight into code samples, head [to our documentation**](https://www.gatsbyjs.com/docs/).\*\* In particular, check out the _Guides_, _API Reference_, and _Advanced Tutorials_ sections in the sidebar. +- **To dive straight into code samples, head [to our documentation**](https://www.gatsbyjs.com/docs/).\*\* In particular, check out the _Guides_, _API Reference_, and _Advanced Tutorials_ sections in the sidebar. ## 💫 Deploy @@ -2403,24 +2406,24 @@ Inside a Gatsby project, you may see some or all of the following folders and fi ## [](https://www.gatsbyjs.com/docs/reference/gatsby-project-structure/#folders)Folders -- **`/.cache`** _Automatically generated._ This folder is an internal cache created automatically by Gatsby. The files inside this folder are not meant for modification. Should be added to the `.gitignore` file if not added already. -- **`/plugins`** This folder hosts any project-specific ("local") plugins that aren't published as an `npm` package. Check out the [plugin docs](https://www.gatsbyjs.com/docs/plugins/) for more detail. -- **`/public`** _Automatically generated._ The output of the build process will be exposed inside this folder. Should be added to the `.gitignore` file if not added already. -- **`/src`** This directory will contain all of the code related to what you will see on the frontend of your site (what you see in the browser), like your site header, or a page template. "src" is a convention for "source code". +- **`/.cache`** _Automatically generated._ This folder is an internal cache created automatically by Gatsby. The files inside this folder are not meant for modification. Should be added to the `.gitignore` file if not added already. +- **`/plugins`** This folder hosts any project-specific ("local") plugins that aren't published as an `npm` package. Check out the [plugin docs](https://www.gatsbyjs.com/docs/plugins/) for more detail. +- **`/public`** _Automatically generated._ The output of the build process will be exposed inside this folder. Should be added to the `.gitignore` file if not added already. +- **`/src`** This directory will contain all of the code related to what you will see on the frontend of your site (what you see in the browser), like your site header, or a page template. "src" is a convention for "source code". - - **`/api`** JavaScript and TypeScript files under `src/api` become functions automatically with paths based on their file name. Check out the [functions guide](https://www.gatsbyjs.com/docs/reference/functions/) for more detail. - - **`/pages`** Components under `src/pages` become pages automatically with paths based on their file name. Check out the [pages recipes](https://www.gatsbyjs.com/docs/recipes/pages-layouts) for more detail. - - **`/templates`** Contains templates for programmatically creating pages. Check out the [templates docs](https://www.gatsbyjs.com/docs/conceptual/building-with-components/#page-template-components) for more detail. - - **`html.js`** For custom configuration of default `.cache/default_html.js`. Check out the [custom HTML docs](https://www.gatsbyjs.com/docs/custom-html/) for more detail. + - **`/api`** JavaScript and TypeScript files under `src/api` become functions automatically with paths based on their file name. Check out the [functions guide](https://www.gatsbyjs.com/docs/reference/functions/) for more detail. + - **`/pages`** Components under `src/pages` become pages automatically with paths based on their file name. Check out the [pages recipes](https://www.gatsbyjs.com/docs/recipes/pages-layouts) for more detail. + - **`/templates`** Contains templates for programmatically creating pages. Check out the [templates docs](https://www.gatsbyjs.com/docs/conceptual/building-with-components/#page-template-components) for more detail. + - **`html.js`** For custom configuration of default `.cache/default_html.js`. Check out the [custom HTML docs](https://www.gatsbyjs.com/docs/custom-html/) for more detail. -- **`/static`** If you put a file into the static folder, it will not be processed by webpack. Instead it will be copied into the public folder untouched. Check out the [assets docs](https://www.gatsbyjs.com/docs/how-to/images-and-media/static-folder/#adding-assets-outside-of-the-module-system) for more detail. +- **`/static`** If you put a file into the static folder, it will not be processed by webpack. Instead it will be copied into the public folder untouched. Check out the [assets docs](https://www.gatsbyjs.com/docs/how-to/images-and-media/static-folder/#adding-assets-outside-of-the-module-system) for more detail. ## [](https://www.gatsbyjs.com/docs/reference/gatsby-project-structure/#files)Files -- **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-browser/) (if any). These allow customization/extension of default Gatsby settings affecting the browser. -- **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you'd like to include, etc. Check out the [config docs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-config/) for more detail. -- **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby node APIs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-node/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process. -- **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-ssr/) (if any). These allow customization of default Gatsby settings affecting server-side rendering. +- **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-browser/) (if any). These allow customization/extension of default Gatsby settings affecting the browser. +- **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you'd like to include, etc. Check out the [config docs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-config/) for more detail. +- **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby node APIs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-node/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process. +- **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](https://www.gatsbyjs.com/docs/reference/config-files/gatsby-ssr/) (if any). These allow customization of default Gatsby settings affecting server-side rendering. ## [](https://www.gatsbyjs.com/docs/reference/gatsby-project-structure/#miscellaneous)Miscellaneous @@ -2570,12 +2573,13 @@ For more information, have a look in the working example `using-markdown-pages`.
    + --- # Technoloy: - + ![tech-stack](https://github.com/bgoonz/BGOONZ_BLOG_2.0/blob/master/static/images/madewith.png?raw=true) - + --- # SOURCECODE diff --git a/TODO.md b/TODO.md index d46ecc4c6f..06e8fd6a89 100644 --- a/TODO.md +++ b/TODO.md @@ -1,10 +1,9 @@ -# To Do +# ToDo: + +1. embed this [tool](https://bgoonz.github.io/html-2-md-converter/) +2. Fix broken Links +3. Algolia Search +4. Visitor Content Authoring. +5. Dark Mode +6. https://github.com/bgoonz/MainBlogContent -1. embed this [tool](https://bgoonz.github.io/html-2-md-converter/) -2. Fix broken Links -3. Algolia Search -4. Visitor Content Authoring. -5. Dark Mode -6. -7. Break up iframe heavy pages into multiple -8. Add sandbox=allowscripts diff --git a/bash-commands.md b/bash-commands.md index 757ba63d66..1fe500e13e 100644 --- a/bash-commands.md +++ b/bash-commands.md @@ -1,4 +1,4 @@ -# My Commands +## My Commands #### Find @@ -802,7 +802,7 @@ echo ' ' # awk '{print "
  • "}; - # {print " ",$1,"
  •  "}' \ $listing + # {print " ",$1," "}' \ $listing echo "" @@ -916,11 +916,11 @@ echo ' ' echo "
      " - awk '{print ""}' $listing + awk '{print ""}' $listing # awk '{print "
    • "}; - # {print " ",$1,"
    •  "}' \ $listing + # {print " ",$1," "}' \ $listing echo "" diff --git a/gatsby-config.js b/gatsby-config.js index 97e71aaf61..e38e9bbaff 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -1,4 +1,4 @@ -const siteMetadata = require('./site-metadata.json'); +const siteMetadata = require('./site-metadata.json') module.exports = { pathPrefix: '/', @@ -14,12 +14,12 @@ module.exports = { path: `${__dirname}/src/pages` } }, - { - resolve: `gatsby-plugin-disqus`, - options: { - shortname: `webdevhub-1` - } - }, + { + resolve: `gatsby-plugin-disqus`, + options: { + shortname: `webdevhub-1`, + } + }, { resolve: `gatsby-plugin-sass`, options: {} @@ -32,14 +32,14 @@ module.exports = { resolve: `@stackbit/gatsby-plugin-menus`, options: { sourceUrlPath: `fields.url`, - pageContextProperty: `menus` - } + pageContextProperty: `menus`, + }, }, { resolve: `gatsby-plugin-disqus`, options: { shortname: `webdevhub-1` } - } + }, ] }; diff --git a/gatsby-node.js b/gatsby-node.js index a1bfac02e7..9e57598d59 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,5 +1,9 @@ -/** - * Implement Gatsby's Node APIs in this file. - * - * See: https://www.gatsbyjs.org/docs/node-apis/ - */ +const path = require('path'); + +exports.onCreateWebpackConfig = ({ actions }) => { + actions.setWebpackConfig({ + resolve: { + modules: [path.resolve(__dirname, 'src'), 'node_modules'], + }, + }); +}; diff --git a/gatsby-ssr.js b/gatsby-ssr.js index 5b626dfb8d..adf89d4e77 100644 --- a/gatsby-ssr.js +++ b/gatsby-ssr.js @@ -4,11 +4,14 @@ * See: https://www.gatsbyjs.org/docs/ssr-apis/ */ -const React = require('react'); -const withPrefix = require('./src/utils/withPrefix').default; +const React = require("react"); +const withPrefix = require("./src/utils/withPrefix").default; exports.onRenderBody = function ({ setHeadComponents, setPostBodyComponents }) { - setHeadComponents([]); + + setHeadComponents([ + + ]); setPostBodyComponents([ @@ -26,4 +29,5 @@ exports.onRenderBody = function ({ setHeadComponents, setPostBodyComponents }) { + - - - - + ----> + + diff --git a/static/ads.txt b/static/ads.txt new file mode 100644 index 0000000000..693b316dea --- /dev/null +++ b/static/ads.txt @@ -0,0 +1,40 @@ +disqus.com, 4622518, DIRECT +google.com, pub-6650322601660058, RESELLER, f08c47fec0942fa0 +aax.media, AAXN9V74H, DIRECT +media.net, 8PR6YK195, RESELLER +pubmatic.com, 158984, RESELLER, 5d62403b186f2ace +indexexchange.com, 192393, RESELLER +rubiconproject.com, 23280, RESELLER, 0bfd66d529a55807 +openx.com, 543731411, RESELLER, 6a698e2ec38604c6 +appnexus.com, 3153, RESELLER, f5ab79cb980f11d1 +amxrtb.com, 105199574, DIRECT +appnexus.com, 12290, RESELLER +indexexchange.com, 191503, RESELLER, 50b1c356f2c5c8fc +pubmatic.com, 158355, RESELLER, 5d62403b186f2ace +lijit.com, 260380, RESELLER, fafdf38b16bf6b2b +sovrn.com, 260380, RESELLER, fafdf38b16bf6b2b +aniview.com, 616704c962b31624e671e171, RESELLER, 78b21b97965ec3f8 +advertising.com, 23089, RESELLER +appnexus.com, 12637, RESELLER, f5ab79cb980f11d1 +google.com, pub-3565385483761681, DIRECT, f08c47fec0942fa0 +pubmatic.com, 161335, RESELLER, 5d62403b186f2ace +rubiconproject.com, 13918, RESELLER, 0bfd66d529a55807 +adyoulike.com, 65821909b0ce70f6e87747d8f22c3cf0, DIRECT +appnexus.com, 9733, RESELLER +spotxchange.com, 230037, RESELLER, 7842df1d2fe2db34 +spotx.tv, 230037, RESELLER, 7842df1d2fe2db34 +appnexus.com, 2797, DIRECT +criteo.com, B-060574, DIRECT, 9fac4a4a87c2a44f +onetag.com, 5cd7fb62fac7ec9, DIRECT +openx.com, 537133236, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 158685, RESELLER, 5d62403b186f2ace +rubiconproject.com, 13380, RESELLER, 0bfd66d529a55807 +sovrn.com, 279534, DIRECT, fafdf38b16bf6b2b +lijit.com, 279534, DIRECT, fafdf38b16bf6b2b +yahoo.com, 56704, DIRECT +taboola.com,1003147,DIRECT,c228e6794e811952 +spotx.tv,71451,RESELLER +advertising.com, 8603, RESELLER +contextweb.com, 560382, RESELLER +openx.com, 539154393, RESELLER +rubiconproject.com, 16698, RESELLER, 0bfd66d529a55807 diff --git a/static/css/algolia.css b/static/css/algolia.css index d160c45cad..d9ffce08ae 100644 --- a/static/css/algolia.css +++ b/static/css/algolia.css @@ -4,11 +4,11 @@ --aa-input-icon-size: 20px; --aa-base-unit: 16; --aa-spacing-factor: 1; - --aa-spacing: calc(var(--aa-base-unit) * var(--aa-spacing-factor) * 1px); - --aa-spacing-half: calc(var(--aa-spacing) / 2); + --aa-spacing: calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px); + --aa-spacing-half: calc(var(--aa-spacing)/2); --aa-panel-max-height: 650px; --aa-base-z-index: 9999; - --aa-font-size: calc(var(--aa-base-unit) * 1px); + --aa-font-size: calc(var(--aa-base-unit)*1px); --aa-font-family: inherit; --aa-font-weight-medium: 500; --aa-font-weight-semibold: 600; @@ -36,8 +36,8 @@ --aa-selected-color-alpha: 0.205; --aa-description-highlight-background-color-rgb: 245, 223, 77; --aa-description-highlight-background-color-alpha: 0.5; - --aa-detached-media-query: (max-width: 680px); - --aa-detached-modal-media-query: (min-width: 680px); + --aa-detached-media-query: (max-width:680px); + --aa-detached-modal-media-query: (min-width:680px); --aa-detached-modal-max-width: 680px; --aa-detached-modal-max-height: 500px; --aa-overlay-color-rgb: 115, 114, 129; @@ -47,18 +47,18 @@ --aa-scrollbar-track-background-color-rgb: 234, 234, 234; --aa-scrollbar-track-background-color-alpha: 1; --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb); - --aa-scrollbar-thumb-background-color-alpha: 1; + --aa-scrollbar-thumb-background-color-alpha: 1 } @media (hover: none) and (pointer: coarse) { :root { --aa-spacing-factor: 1.2; - --aa-action-icon-size: 22px; + --aa-action-icon-size: 22px } } body.dark, -body[data-theme='dark'] { +body[data-theme=dark] { --aa-text-color-rgb: 183, 192, 199; --aa-primary-color-rgb: 146, 138, 255; --aa-muted-color-rgb: 146, 138, 255; @@ -71,13 +71,13 @@ body[data-theme='dark'] { --aa-icon-color-rgb: 119, 119, 163; --aa-panel-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309; --aa-scrollbar-track-background-color-rgb: 44, 46, 64; - --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb); + --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb) } .aa-Autocomplete *, .aa-DetachedFormContainer *, .aa-Panel * { - box-sizing: border-box; + box-sizing: border-box } .aa-Autocomplete, @@ -93,7 +93,7 @@ body[data-theme='dark'] { line-height: 1em; margin: 0; padding: 0; - text-align: left; + text-align: left } .aa-Form { @@ -107,25 +107,23 @@ body[data-theme='dark'] { line-height: 1em; margin: 0; position: relative; - width: 100%; + width: 100% } .aa-Form[focus-within] { border-color: #3e34d3; border-color: rgba(var(--aa-primary-color-rgb), 1); box-shadow: 0 0 0 2px rgba(62, 52, 211, 0.2), inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor; + box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; + outline: medium none currentColor } .aa-Form:focus-within { border-color: #3e34d3; border-color: rgba(var(--aa-primary-color-rgb), 1); box-shadow: 0 0 0 2px rgba(62, 52, 211, 0.2), inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor; + box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; + outline: medium none currentColor } .aa-InputWrapperPrefix { @@ -134,7 +132,7 @@ body[data-theme='dark'] { flex-shrink: 0; height: 44px; height: var(--aa-search-input-height); - order: 1; + order: 1 } .aa-Label, @@ -143,7 +141,7 @@ body[data-theme='dark'] { flex-shrink: 0; height: 100%; padding: 0; - text-align: left; + text-align: left } .aa-Label svg, @@ -156,27 +154,28 @@ body[data-theme='dark'] { stroke-width: 1.6; stroke-width: var(--aa-icon-stroke-width); width: 20px; - width: var(--aa-input-icon-size); + width: var(--aa-input-icon-size) } .aa-LoadingIndicator, .aa-SubmitButton { height: 100%; padding-left: 11px; - padding-left: calc(var(--aa-spacing) * 0.75 - 1px); + padding-left: calc(var(--aa-spacing)*0.75 - 1px); padding-right: 8px; padding-right: var(--aa-spacing-half); width: 47px; - width: calc(var(--aa-spacing) * 1.75 + var(--aa-icon-size) - 1px); + width: calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px) } @media (hover: none) and (pointer: coarse) { + .aa-LoadingIndicator, .aa-SubmitButton { padding-left: 3px; - padding-left: calc(var(--aa-spacing-half) / 2 - 1px); + padding-left: calc(var(--aa-spacing-half)/2 - 1px); width: 39px; - width: calc(var(--aa-icon-size) + var(--aa-spacing) * 1.25 - 1px); + width: calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px) } } @@ -186,23 +185,23 @@ body[data-theme='dark'] { appearance: none; background: none; border: 0; - margin: 0; + margin: 0 } .aa-LoadingIndicator { align-items: center; display: flex; - justify-content: center; + justify-content: center } .aa-LoadingIndicator[hidden] { - display: none; + display: none } .aa-InputWrapper { order: 3; position: relative; - width: 100%; + width: 100% } .aa-Input { @@ -217,31 +216,31 @@ body[data-theme='dark'] { height: 44px; height: var(--aa-search-input-height); padding: 0; - width: 100%; + width: 100% } .aa-Input::-moz-placeholder { color: rgba(128, 126, 163, 0.6); color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1; + opacity: 1 } .aa-Input:-ms-input-placeholder { color: rgba(128, 126, 163, 0.6); color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1; + opacity: 1 } .aa-Input::placeholder { color: rgba(128, 126, 163, 0.6); color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1; + opacity: 1 } .aa-Input:focus { border-color: none; box-shadow: none; - outline: none; + outline: none } .aa-Input::-webkit-search-cancel-button, @@ -249,7 +248,7 @@ body[data-theme='dark'] { .aa-Input::-webkit-search-results-button, .aa-Input::-webkit-search-results-decoration { -webkit-appearance: none; - appearance: none; + appearance: none } .aa-InputWrapperSuffix { @@ -257,7 +256,7 @@ body[data-theme='dark'] { display: flex; height: 44px; height: var(--aa-search-input-height); - order: 4; + order: 4 } .aa-ClearButton { @@ -271,49 +270,49 @@ body[data-theme='dark'] { height: 100%; margin: 0; padding: 0 12.8333333333px; - padding: 0 calc(var(--aa-spacing) * 0.83333 - 0.5px); + padding: 0 calc(var(--aa-spacing)*0.83333 - .5px) } @media (hover: none) and (pointer: coarse) { .aa-ClearButton { padding: 0 10.1666666667px; - padding: 0 calc(var(--aa-spacing) * 0.66667 - 0.5px); + padding: 0 calc(var(--aa-spacing)*0.66667 - .5px) } } .aa-ClearButton:focus, .aa-ClearButton:hover { color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)) } .aa-ClearButton[hidden] { - display: none; + display: none } .aa-ClearButton svg { stroke-width: 1.6; stroke-width: var(--aa-icon-stroke-width); width: 20px; - width: var(--aa-icon-size); + width: var(--aa-icon-size) } .aa-Panel { background-color: #fff; background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); border-radius: 4px; - border-radius: calc(var(--aa-spacing) / 4); + border-radius: calc(var(--aa-spacing)/4); box-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), 0 6px 16px -4px rgba(35, 38, 59, 0.15); box-shadow: var(--aa-panel-shadow); margin: 8px 0 0; overflow: hidden; position: absolute; - transition: opacity 0.2s ease-in, filter 0.2s ease-in; + transition: opacity .2s ease-in, filter .2s ease-in } @media screen and (prefers-reduced-motion) { .aa-Panel { - transition: none; + transition: none } } @@ -324,7 +323,7 @@ body[data-theme='dark'] { background: none; border: 0; margin: 0; - padding: 0; + padding: 0 } .aa-PanelLayout { @@ -335,33 +334,33 @@ body[data-theme='dark'] { overflow-y: auto; padding: 0; position: relative; - text-align: left; + text-align: left } .aa-PanelLayoutColumns--twoGolden { display: grid; grid-template-columns: 39.2% auto; overflow: hidden; - padding: 0; + padding: 0 } .aa-PanelLayoutColumns--two { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: hidden; - padding: 0; + padding: 0 } .aa-PanelLayoutColumns--three { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); overflow: hidden; - padding: 0; + padding: 0 } .aa-Panel--stalled .aa-Source { filter: grayscale(1); - opacity: 0.8; + opacity: .8 } .aa-Panel--scrollable { @@ -373,19 +372,18 @@ body[data-theme='dark'] { padding: 8px; padding: var(--aa-spacing-half); scrollbar-color: #fff #eaeaea; - scrollbar-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)) - rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); - scrollbar-width: thin; + scrollbar-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); + scrollbar-width: thin } .aa-Panel--scrollable::-webkit-scrollbar { width: 13px; - width: var(--aa-scrollbar-width); + width: var(--aa-scrollbar-width) } .aa-Panel--scrollable::-webkit-scrollbar-track { background-color: #eaeaea; - background-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); + background-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)) } .aa-Panel--scrollable::-webkit-scrollbar-thumb { @@ -394,45 +392,45 @@ body[data-theme='dark'] { border-radius: 9999px; border: 3px solid #eaeaea; border-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); - border-right: 2px solid rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); + border-right: 2px solid rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)) } .aa-Source { margin: 0; padding: 0; position: relative; - width: 100%; + width: 100% } .aa-Source:empty { - display: none; + display: none } .aa-SourceNoResults { font-size: 1em; margin: 0; padding: 16px; - padding: var(--aa-spacing); + padding: var(--aa-spacing) } .aa-List { list-style: none; - margin: 0; + margin: 0 } .aa-List, .aa-SourceHeader { padding: 0; - position: relative; + position: relative } .aa-SourceHeader { - margin: 8px 0.5em 8px 0; - margin: var(--aa-spacing-half) 0.5em var(--aa-spacing-half) 0; + margin: 8px .5em 8px 0; + margin: var(--aa-spacing-half) 0.5em var(--aa-spacing-half) 0 } .aa-SourceHeader:empty { - display: none; + display: none } .aa-SourceHeaderTitle { @@ -441,7 +439,7 @@ body[data-theme='dark'] { color: #3e34d3; color: rgba(var(--aa-primary-color-rgb), 1); display: inline-block; - font-size: 0.8em; + font-size: .8em; font-weight: 600; font-weight: var(--aa-font-weight-semibold); margin: 0; @@ -449,7 +447,7 @@ body[data-theme='dark'] { padding: 0 var(--aa-spacing-half) 0 0; position: relative; z-index: 9999; - z-index: var(--aa-base-z-index); + z-index: var(--aa-base-z-index) } .aa-SourceHeaderLine { @@ -459,14 +457,14 @@ body[data-theme='dark'] { height: 2px; left: 0; margin: 0; - opacity: 0.3; + opacity: .3; padding: 0; position: absolute; right: 0; top: 8px; top: var(--aa-spacing-half); z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1); + z-index: calc(var(--aa-base-z-index) - 1) } .aa-SourceFooterSeeAll { @@ -477,11 +475,11 @@ body[data-theme='dark'] { border-radius: 5px; box-shadow: inset 0 0 2px #fff, 0 2px 2px -1px rgba(76, 69, 88, 0.15); color: inherit; - font-size: 0.95em; + font-size: .95em; font-weight: 500; font-weight: var(--aa-font-weight-medium); - padding: 0.475em 1em 0.6em; - text-decoration: none; + padding: .475em 1em .6em; + text-decoration: none } .aa-SourceFooterSeeAll:focus, @@ -489,7 +487,7 @@ body[data-theme='dark'] { border: 1px solid #3e34d3; border: 1px solid rgba(var(--aa-primary-color-rgb), 1); color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); + color: rgba(var(--aa-primary-color-rgb), 1) } .aa-Item { @@ -498,19 +496,19 @@ body[data-theme='dark'] { cursor: pointer; display: grid; min-height: 40px; - min-height: calc(var(--aa-spacing) * 2.5); + min-height: calc(var(--aa-spacing)*2.5); padding: 4px; - padding: calc(var(--aa-spacing-half) / 2); + padding: calc(var(--aa-spacing-half)/2) } -.aa-Item[aria-selected='true'] { +.aa-Item[aria-selected=true] { background-color: rgba(179, 173, 214, 0.205); - background-color: rgba(var(--aa-selected-color-rgb), var(--aa-selected-color-alpha)); + background-color: rgba(var(--aa-selected-color-rgb), var(--aa-selected-color-alpha)) } -.aa-Item[aria-selected='true'] .aa-ActiveOnly, -.aa-Item[aria-selected='true'] .aa-ItemActionButton { - visibility: visible; +.aa-Item[aria-selected=true] .aa-ActiveOnly, +.aa-Item[aria-selected=true] .aa-ItemActionButton { + visibility: visible } .aa-ItemIcon { @@ -524,7 +522,7 @@ body[data-theme='dark'] { color: rgba(var(--aa-icon-color-rgb), var(--aa-icon-color-alpha)); display: flex; flex-shrink: 0; - font-size: 0.7em; + font-size: .7em; height: 28px; height: calc(var(--aa-icon-size) + var(--aa-spacing-half)); justify-content: center; @@ -533,7 +531,7 @@ body[data-theme='dark'] { stroke-width: var(--aa-icon-stroke-width); text-align: center; width: 28px; - width: calc(var(--aa-icon-size) + var(--aa-spacing-half)); + width: calc(var(--aa-icon-size) + var(--aa-spacing-half)) } .aa-ItemIcon img { @@ -542,35 +540,35 @@ body[data-theme='dark'] { max-height: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); max-width: 20px; max-width: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); - width: auto; + width: auto } .aa-ItemIcon svg { height: 20px; height: var(--aa-icon-size); width: 20px; - width: var(--aa-icon-size); + width: var(--aa-icon-size) } .aa-ItemIcon--alignTop { - align-self: flex-start; + align-self: flex-start } .aa-ItemIcon--noBorder { background: none; - box-shadow: none; + box-shadow: none } .aa-ItemIcon--picture { height: 96px; - width: 96px; + width: 96px } .aa-ItemIcon--picture img { max-height: 100%; max-width: 100%; padding: 8px; - padding: var(--aa-spacing-half); + padding: var(--aa-spacing-half) } .aa-ItemContent { @@ -583,11 +581,11 @@ body[data-theme='dark'] { gap: var(--aa-spacing-half); grid-auto-flow: column; line-height: 1.25em; - overflow: hidden; + overflow: hidden } .aa-ItemContent:empty { - display: none; + display: none } .aa-ItemContent mark { @@ -596,57 +594,57 @@ body[data-theme='dark'] { color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); font-style: normal; font-weight: 700; - font-weight: var(--aa-font-weight-bold); + font-weight: var(--aa-font-weight-bold) } .aa-ItemContent--dual { display: flex; flex-direction: column; justify-content: space-between; - text-align: left; + text-align: left } .aa-ItemContent--dual .aa-ItemContentSubtitle, .aa-ItemContent--dual .aa-ItemContentTitle { - display: block; + display: block } .aa-ItemContent--indented { padding-left: 36px; - padding-left: calc(var(--aa-icon-size) + var(--aa-spacing)); + padding-left: calc(var(--aa-icon-size) + var(--aa-spacing)) } .aa-ItemContentBody { display: grid; grid-gap: 4px; gap: 4px; - grid-gap: calc(var(--aa-spacing-half) / 2); - gap: calc(var(--aa-spacing-half) / 2); + grid-gap: calc(var(--aa-spacing-half)/2); + gap: calc(var(--aa-spacing-half)/2) } .aa-ItemContentTitle { display: inline-block; - margin: 0 0.5em 0 0; + margin: 0 .5em 0 0; max-width: 100%; overflow: hidden; padding: 0; text-overflow: ellipsis; - white-space: nowrap; + white-space: nowrap } .aa-ItemContentSubtitle { - font-size: 0.92em; + font-size: .92em } .aa-ItemContentSubtitleIcon:before { border-color: rgba(128, 126, 163, 0.64); border-color: rgba(var(--aa-muted-color-rgb), 0.64); border-style: solid; - content: ''; + content: ""; display: inline-block; left: 1px; position: relative; - top: -3px; + top: -3px } .aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before { @@ -654,9 +652,9 @@ body[data-theme='dark'] { margin-left: 8px; margin-left: var(--aa-spacing-half); margin-right: 4px; - margin-right: calc(var(--aa-spacing-half) / 2); + margin-right: calc(var(--aa-spacing-half)/2); width: 10px; - width: calc(var(--aa-spacing-half) + 2px); + width: calc(var(--aa-spacing-half) + 2px) } .aa-ItemContentSubtitle--standalone { @@ -669,7 +667,7 @@ body[data-theme='dark'] { grid-gap: var(--aa-spacing-half); gap: var(--aa-spacing-half); grid-auto-flow: column; - justify-content: start; + justify-content: start } .aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before { @@ -678,26 +676,26 @@ body[data-theme='dark'] { height: 8px; height: var(--aa-spacing-half); width: 8px; - width: var(--aa-spacing-half); + width: var(--aa-spacing-half) } .aa-ItemContentSubtitleCategory { color: #807ea3; color: rgba(var(--aa-muted-color-rgb), 1); - font-weight: 500; + font-weight: 500 } .aa-ItemContentDescription { color: #262627; color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-size: 0.85em; + font-size: .85em; max-width: 100%; overflow-x: hidden; - text-overflow: ellipsis; + text-overflow: ellipsis } .aa-ItemContentDescription:empty { - display: none; + display: none } .aa-ItemContentDescription mark { @@ -707,22 +705,22 @@ body[data-theme='dark'] { color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); font-style: normal; font-weight: 500; - font-weight: var(--aa-font-weight-medium); + font-weight: var(--aa-font-weight-medium) } .aa-ItemContentDash { color: rgba(128, 126, 163, 0.6); color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); display: none; - opacity: 0.4; + opacity: .4 } .aa-ItemContentTag { background-color: rgba(62, 52, 211, 0.2); background-color: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)); border-radius: 3px; - margin: 0 0.4em 0 0; - padding: 0.08em 0.3em; + margin: 0 .4em 0 0; + padding: .08em .3em } .aa-ItemLink, @@ -732,16 +730,16 @@ body[data-theme='dark'] { display: grid; grid-gap: 4px; gap: 4px; - grid-gap: calc(var(--aa-spacing-half) / 2); - gap: calc(var(--aa-spacing-half) / 2); + grid-gap: calc(var(--aa-spacing-half)/2); + gap: calc(var(--aa-spacing-half)/2); grid-auto-flow: column; justify-content: space-between; - width: 100%; + width: 100% } .aa-ItemLink { color: inherit; - text-decoration: none; + text-decoration: none } .aa-ItemActions { @@ -750,8 +748,8 @@ body[data-theme='dark'] { height: 100%; justify-self: end; margin: 0 -5.3333333333px; - margin: 0 calc(var(--aa-spacing) / -3); - padding: 0 2px 0 0; + margin: 0 calc(var(--aa-spacing)/-3); + padding: 0 2px 0 0 } .aa-ItemActionButton { @@ -763,19 +761,20 @@ body[data-theme='dark'] { cursor: pointer; display: flex; flex-shrink: 0; - padding: 0; + padding: 0 } .aa-ItemActionButton:focus svg, .aa-ItemActionButton:hover svg { color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)) } @media (hover: none) and (pointer: coarse) { + .aa-ItemActionButton:focus svg, .aa-ItemActionButton:hover svg { - color: inherit; + color: inherit } } @@ -783,15 +782,15 @@ body[data-theme='dark'] { color: rgba(128, 126, 163, 0.6); color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); margin: 5.3333333333px; - margin: calc(var(--aa-spacing) / 3); + margin: calc(var(--aa-spacing)/3); stroke-width: 1.6; stroke-width: var(--aa-icon-stroke-width); width: 20px; - width: var(--aa-action-icon-size); + width: var(--aa-action-icon-size) } .aa-ActiveOnly { - visibility: hidden; + visibility: hidden } .aa-PanelHeader { @@ -804,27 +803,27 @@ body[data-theme='dark'] { margin: 0; padding: 8px 16px; padding: var(--aa-spacing-half) var(--aa-spacing); - position: relative; + position: relative } .aa-PanelHeader:after { background-image: linear-gradient(#fff, rgba(255, 255, 255, 0)); background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); bottom: -8px; - bottom: calc(var(--aa-spacing-half) * -1); - content: ''; + bottom: calc(var(--aa-spacing-half)*-1); + content: ""; height: 8px; height: var(--aa-spacing-half); left: 0; pointer-events: none; position: absolute; - right: 0; + right: 0 } .aa-PanelFooter, .aa-PanelHeader:after { z-index: 9999; - z-index: var(--aa-base-z-index); + z-index: var(--aa-base-z-index) } .aa-PanelFooter { @@ -837,24 +836,24 @@ body[data-theme='dark'] { margin: 0; padding: 16px; padding: var(--aa-spacing); - position: relative; + position: relative } .aa-PanelFooter:after { background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(128, 126, 163, 0.6)); background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha))); - content: ''; + content: ""; height: 16px; height: var(--aa-spacing); left: 0; - opacity: 0.12; + opacity: .12; pointer-events: none; position: absolute; right: 0; top: -16px; - top: calc(var(--aa-spacing) * -1); + top: calc(var(--aa-spacing)*-1); z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1); + z-index: calc(var(--aa-base-z-index) - 1) } .aa-DetachedContainer { @@ -873,16 +872,16 @@ body[data-theme='dark'] { right: 0; top: 0; z-index: 9999; - z-index: var(--aa-base-z-index); + z-index: var(--aa-base-z-index) } .aa-DetachedContainer:after { - height: 32px; + height: 32px } .aa-DetachedContainer .aa-SourceHeader { margin: 8px 0 8px 2px; - margin: var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px; + margin: var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px } .aa-DetachedContainer .aa-Panel { @@ -893,7 +892,7 @@ body[data-theme='dark'] { flex-grow: 1; margin: 0; padding: 0; - position: relative; + position: relative } .aa-DetachedContainer .aa-PanelLayout { @@ -906,7 +905,7 @@ body[data-theme='dark'] { position: absolute; right: 0; top: 0; - width: 100%; + width: 100% } .aa-DetachedFormContainer { @@ -917,7 +916,7 @@ body[data-theme='dark'] { justify-content: space-between; margin: 0; padding: 8px; - padding: var(--aa-spacing-half); + padding: var(--aa-spacing-half) } .aa-DetachedCancelButton { @@ -932,13 +931,13 @@ body[data-theme='dark'] { margin: 0 0 0 8px; margin: 0 0 0 var(--aa-spacing-half); padding: 0 8px; - padding: 0 var(--aa-spacing-half); + padding: 0 var(--aa-spacing-half) } .aa-DetachedCancelButton:focus, .aa-DetachedCancelButton:hover { box-shadow: inset 0 0 0 1px rgba(128, 126, 163, 0.3); - box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); + box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)) } .aa-DetachedContainer--modal { @@ -949,7 +948,7 @@ body[data-theme='dark'] { max-width: 680px; max-width: var(--aa-detached-modal-max-width); position: absolute; - top: 3%; + top: 3% } .aa-DetachedContainer--modal .aa-PanelLayout { @@ -957,7 +956,7 @@ body[data-theme='dark'] { max-height: var(--aa-detached-modal-max-height); padding-bottom: 8px; padding-bottom: var(--aa-spacing-half); - position: static; + position: static } .aa-DetachedSearchButton { @@ -980,19 +979,18 @@ body[data-theme='dark'] { height: var(--aa-search-input-height); margin: 0; padding: 0 5.5px; - padding: 0 calc(var(--aa-search-input-height) / 8); + padding: 0 calc(var(--aa-search-input-height)/8); position: relative; text-align: left; - width: 100%; + width: 100% } .aa-DetachedSearchButton:focus { border-color: #3e34d3; border-color: rgba(var(--aa-primary-color-rgb), 1); box-shadow: 0 0 0 3px rgba(62, 52, 211, 0.2), inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 3px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor; + box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 3px, inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; + outline: medium none currentColor } .aa-DetachedSearchButtonIcon { @@ -1004,12 +1002,12 @@ body[data-theme='dark'] { height: 100%; justify-content: center; width: 36px; - width: calc(var(--aa-icon-size) + var(--aa-spacing)); + width: calc(var(--aa-icon-size) + var(--aa-spacing)) } .aa-Detached { height: 100vh; - overflow: hidden; + overflow: hidden } .aa-DetachedOverlay { @@ -1023,7 +1021,7 @@ body[data-theme='dark'] { right: 0; top: 0; z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1); + z-index: calc(var(--aa-base-z-index) - 1) } .aa-GradientBottom, @@ -1035,34 +1033,34 @@ body[data-theme='dark'] { position: absolute; right: 0; z-index: 9999; - z-index: var(--aa-base-z-index); + z-index: var(--aa-base-z-index) } .aa-GradientTop { background-image: linear-gradient(#fff, rgba(255, 255, 255, 0)); background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); - top: 0; + top: 0 } .aa-GradientBottom { background-image: linear-gradient(rgba(255, 255, 255, 0), #fff); background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-background-color-rgb), 1)); border-bottom-left-radius: 4px; - border-bottom-left-radius: calc(var(--aa-spacing) / 4); + border-bottom-left-radius: calc(var(--aa-spacing)/4); border-bottom-right-radius: 4px; - border-bottom-right-radius: calc(var(--aa-spacing) / 4); - bottom: 0; + border-bottom-right-radius: calc(var(--aa-spacing)/4); + bottom: 0 } @media (hover: none) and (pointer: coarse) { .aa-DesktopOnly { - display: none; + display: none } } @media (hover: hover) { .aa-TouchOnly { - display: none; + display: none } } @@ -1077,27 +1075,27 @@ body[data-theme='dark'] { --color-source-icon: rgba(80, 80, 80, 0.32); --height: 32px; --height-icon: 16px; - --font-size: 16px; + --font-size: 16px } .aa-Panel { min-width: 350px; z-index: 1100; - margin-top: 2px; + margin-top: 2px } .aa-Panel .aa-PanelLayout { padding-top: 0; padding-bottom: 0; - background-color: var(--color-background); + background-color: var(--color-background) } .aa-Panel .aa-PanelLayout .aa-PanelLayoutPreview { - border-left: solid 1px var(--color-selected); + border-left: solid 1px var(--color-selected) } .aa-Panel .aa-GradientBottom { - background-image: none; + background-image: none } .aa-Autocomplete .aa-Form, @@ -1105,22 +1103,22 @@ body[data-theme='dark'] { height: var(--height); font-size: var(--font-size); padding: 0; - background-color: var(--color-background); + background-color: var(--color-background) } .aa-Autocomplete .aa-Form:focus-within, .aa-DetachedFormContainer .aa-Form:focus-within { - box-shadow: none; + box-shadow: none } .aa-Autocomplete .aa-Form .aa-InputWrapperPrefix, .aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix { - padding: 0; + padding: 0 } .aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label, .aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label { - padding: 0; + padding: 0 } .aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg, @@ -1128,54 +1126,54 @@ body[data-theme='dark'] { left: 0; vertical-align: middle; color: var(--color-input-icon); - width: var(--height-icon); + width: var(--height-icon) } .aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input, .aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input { height: var(--height); - color: var(--color-text); + color: var(--color-text) } .aa-Autocomplete .aa-Form .aa-InputWrapperSuffix, .aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix { - height: var(--height); + height: var(--height) } .aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton, .aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton { - padding: 0; + padding: 0 } .aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover, .aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus, .aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover, .aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus { - color: var(--color-text); + color: var(--color-text) } .aa-Item { color: var(--color-text); - padding: 2px 0; + padding: 2px 0 } .aa-Item a { color: inherit; - text-decoration: none; + text-decoration: none } .aa-Item[aria-selected='true'] { - background-color: var(--color-selected); + background-color: var(--color-selected) } .aa-Item .aa-ItemContent { display: flex; - color: var(--color-text); + color: var(--color-text) } .aa-Item .aa-ItemContent mark { color: var(--color-mark); - background-color: transparent; + background-color: transparent } .aa-Item .aa-ItemIcon { @@ -1183,13 +1181,13 @@ body[data-theme='dark'] { color: var(--color-source-icon); background: none; box-shadow: none; - margin: 0 var(--aa-spacing-half) 0 2px; + margin: 0 var(--aa-spacing-half) 0 2px } .aa-Item .aa-ItemTitle { font-size: 14px; font-weight: bold; - line-height: 18px; + line-height: 18px } .aa-Item .aa-ItemHierarchy { @@ -1197,33 +1195,33 @@ body[data-theme='dark'] { font-style: italic; line-height: 18px; opacity: 0.8; - padding: 1px 0; + padding: 1px 0 } .aa-Item .aa-ItemDescription { font-size: 12px; line-height: 16px; - color: #797979; + color: #797979 } .aa-DetachedContainer { - background: var(--color-background); + background: var(--color-background) } .aa-DetachedContainer .aa-DetachedFormContainer .aa-DetachedCancelButton { - color: var(--color-text); + color: var(--color-text) } .aa-DetachedOverlay { - z-index: 10; + z-index: 10 } .aa-DetachedSearchButton { - background-color: var(--color-background); + background-color: var(--color-background) } .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon { - color: var(--color-input-icon); + color: var(--color-input-icon) } .aa-powered-by-link { @@ -1237,7 +1235,7 @@ body[data-theme='dark'] { background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0ODUgMTIwIj48ZyBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjNTQ2OEZGIiBkPSJNMTYuOC0xLjAwMWg4OC40YzguNyAwIDE1LjggNy4wNjUgMTUuOCAxNS44djg4LjQwNWMwIDguNy03LjA2NSAxNS43OTUtMTUuOCAxNS43OTVIMTYuOGMtOC43IDAtMTUuOC03LjA2LTE1LjgtMTUuNzk1VjE0Ljc1OWMwLTguNjk1IDcuMDYtMTUuNzYgMTUuOC0xNS43NiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik03My41MDUgMjUuNzg4di00LjExNWE1LjIwOSA1LjIwOSAwIDAwLTUuMjEtNS4yMDVINTYuMTVhNS4yMDkgNS4yMDkgMCAwMC01LjIxIDUuMjA1djQuMjI1YzAgLjQ3LjQzNS44LjkxLjY5YTM3Ljk2NiAzNy45NjYgMCAwMTEwLjU3LTEuNDljMy40NjUgMCA2Ljg5NS40NyAxMC4yMSAxLjM4LjQ0LjExLjg3NS0uMjE1Ljg3NS0uNjlNNDAuMjIgMzEuMTczbC0yLjA3NS0yLjA3NWE1LjIwNiA1LjIwNiAwIDAwLTcuMzY1IDBsLTIuNDggMi40NzVhNS4xODUgNS4xODUgMCAwMDAgNy4zNTVsMi4wNCAyLjA0Yy4zMy4zMjUuODA1LjI1IDEuMDk1LS4wNzVhMzkuODc2IDM5Ljg3NiAwIDAxMy45NzUtNC42NiAzNy42OCAzNy42OCAwIDAxNC43LTRjLjM2NC0uMjIuNC0uNzMuMTEtMS4wNm0yMi4xNjQgMTMuMDY1djE3LjhjMCAuNTEuNTUuODc1IDEuMDIuNjJsMTUuODI1LTguMTljLjM2LS4xOC40Ny0uNjIuMjktLjk4LTMuMjgtNS43NTUtOS4zNy05LjY4NS0xNi40MDUtOS45NC0uMzY1IDAtLjczLjI5LS43My42OW0wIDQyLjg4Yy0xMy4xOTUgMC0yMy45MTUtMTAuNzA1LTIzLjkxNS0yMy44OCAwLTEzLjE3NSAxMC43Mi0yMy44NzUgMjMuOTE1LTIzLjg3NSAxMy4yIDAgMjMuOTE2IDEwLjcgMjMuOTE2IDIzLjg3NXMtMTAuNjggMjMuODgtMjMuOTE2IDIzLjg4bTAtNTcuOGMtMTguNzQgMC0zMy45NCAxNS4xOC0zMy45NCAzMy45MiAwIDE4Ljc0NSAxNS4yIDMzLjg5IDMzLjk0IDMzLjg5czMzLjk0LTE1LjE4IDMzLjk0LTMzLjkyNWMwLTE4Ljc0NS0xNS4xNjUtMzMuODg1LTMzLjk0LTMzLjg4NSIvPjxwYXRoIGZpbGw9IiM1NDY4RkYiIGQ9Ik0yNDAuMjE0IDk0LjE3N2MtMjMuMzY1LjExLTIzLjM2NS0xOC44NTUtMjMuMzY1LTIxLjg3NWwtLjA0LTcxLjA0NSAxNC4yNTQtMi4yNnY3MC42MWMwIDEuNzE1IDAgMTIuNTYgOS4xNSAxMi41OTV2MTEuOTc1aC4wMDF6bS01Ny43OC0xMS42MWM0LjM3NCAwIDcuNjItLjI1NSA5Ljg4LS42OVY2Ny4zOTJhMjkuMTk2IDI5LjE5NiAwIDAwLTMuNDMtLjY5NSAzMy43NDIgMzMuNzQyIDAgMDAtNC45NTYtLjM2NWMtMS41NyAwLTMuMTc1LjExLTQuNzc1LjM2NS0xLjYwNS4yMi0zLjA2NS42NTUtNC4zNCAxLjI3NS0xLjI3NS42Mi0yLjMzNSAxLjQ5NS0zLjEgMi42Mi0uOCAxLjEzLTEuMTY1IDEuNzg1LTEuMTY1IDMuNDk1IDAgMy4zNDUgMS4xNjUgNS4yOCAzLjI4IDYuNTUgMi4xMTUgMS4yNzUgNC45OTUgMS45MyA4LjYwNiAxLjkzem0tMS4yNC01MS42ODVjNC43IDAgOC42NzQuNTg1IDExLjg4NCAxLjc1IDMuMjA2IDEuMTY1IDUuNzk2IDIuOCA3LjY5IDQuODc1IDEuOTM1IDIuMTEgMy4yNDUgNC45MTUgNC4wNDYgNy45Ljg0IDIuOTg1IDEuMjQgNi4yNiAxLjI0IDkuODZ2MzYuNjJjLTIuMTg1LjQ3LTUuNTA2IDEuMDE1LTkuOTUgMS42Ny00LjQ0Ni42NTUtOS40NC45ODUtMTQuOTg2Ljk4NS0zLjY4IDAtNy4wNy0uMzY1LTEwLjA5NS0xLjA1NS0zLjA2NS0uNjktNS42NS0xLjgyLTcuODQtMy4zODUtMi4xNS0xLjU2NS0zLjgyNS0zLjU3LTUuMDY1LTYuMDQtMS4yMDUtMi40OC0xLjgyNS01Ljk3LTEuODI1LTkuNjEgMC0zLjQ5NS42OS01LjcxNSAyLjA0NS04LjEyIDEuMzgtMi40IDMuMjQtNC4zNjUgNS41NzUtNS44OTUgMi4zNy0xLjUzIDUuMDY1LTIuNjIgOC4xNjUtMy4yNzUgMy4xLS42NTUgNi4zNDUtLjk4NSA5LjY5NS0uOTg1IDEuNTcgMCAzLjIxLjExIDQuOTYuMjkgMS43MTUuMTg1IDMuNTc1LjUxNSA1LjU0NS45ODV2LTIuMzNjMC0xLjYzNS0uMTg1LTMuMi0uNTg1LTQuNjU1YTEwLjAxMiAxMC4wMTIgMCAwMC0yLjA0NS0zLjg5NWMtLjk4NS0xLjEzLTIuMjU1LTIuMDA1LTMuODYtMi42Mi0xLjYwNS0uNjItMy42NS0xLjA5NS02LjA5LTEuMDk1LTMuMjggMC02LjI3LjQtOS4wMDUuODc1LTIuNzM1LjQ3LTQuOTk1IDEuMDItNi43MSAxLjYzNWwtMS43MS0xMS42OGMxLjc4NS0uNjIgNC40NDUtMS4yNCA3Ljg3NS0xLjg1NSAzLjQyNS0uNjYgNy4xMS0uOTUgMTEuMDQ1LS45NWguMDAxem0yODEuNTEgNTEuMjg1YzQuMzc1IDAgNy42MTUtLjI1NSA5Ljg3NS0uNjk1di0xNC40OGMtLjgtLjIyLTEuOTMtLjQ3NS0zLjQyNS0uNjk1YTMzLjgxMyAzMy44MTMgMCAwMC00Ljk2LS4zNjVjLTEuNTY1IDAtMy4xNy4xMS00Ljc3NS4zNjUtMS42LjIyLTMuMDYuNjU1LTQuMzM1IDEuMjc1LTEuMjguNjItMi4zMzUgMS40OTUtMy4xIDIuNjItLjgwNSAxLjEzLTEuMTY1IDEuNzg1LTEuMTY1IDMuNDk1IDAgMy4zNDUgMS4xNjUgNS4yOCAzLjI4IDYuNTUgMi4xNSAxLjMxIDQuOTk1IDEuOTMgOC42MDUgMS45M3ptLTEuMjA1LTUxLjY0NWM0LjcgMCA4LjY3NC41OCAxMS44ODQgMS43NDUgMy4yMDUgMS4xNjUgNS43OTUgMi44IDcuNjkgNC44NzUgMS44OTUgMi4wNzUgMy4yNDUgNC45MTUgNC4wNDUgNy45Ljg0IDIuOTg1IDEuMjQgNi4yNiAxLjI0IDkuODY1djM2LjYxNWMtMi4xODUuNDctNS41MDUgMS4wMTUtOS45NSAxLjY3NS00LjQ0NS42NTUtOS40NC45OC0xNC45ODUuOTgtMy42OCAwLTcuMDctLjM2NS0xMC4wOTQtMS4wNTUtMy4wNjUtLjY5LTUuNjUtMS44Mi03Ljg0LTMuMzg1LTIuMTUtMS41NjUtMy44MjUtMy41Ny01LjA2NS02LjA0LTEuMjA1LTIuNDc1LTEuODI1LTUuOTctMS44MjUtOS42MSAwLTMuNDk1LjY5NS01LjcxNSAyLjA0NS04LjEyIDEuMzgtMi40IDMuMjQtNC4zNjUgNS41NzUtNS44OTUgMi4zNy0xLjUyNSA1LjA2NS0yLjYyIDguMTY1LTMuMjc1IDMuMS0uNjU1IDYuMzQ1LS45OCA5LjctLjk4IDEuNTY1IDAgMy4yMDUuMTEgNC45NTUuMjlzMy41NzUuNTEgNS41NC45ODV2LTIuMzNjMC0xLjY0LS4xOC0zLjIwNS0uNTgtNC42NmE5Ljk3NyA5Ljk3NyAwIDAwLTIuMDQ1LTMuODk1Yy0uOTg1LTEuMTMtMi4yNTUtMi4wMDUtMy44Ni0yLjYyLTEuNjA2LS42Mi0zLjY1LTEuMDktNi4wOS0xLjA5LTMuMjggMC02LjI3LjQtOS4wMDUuODctMi43MzUuNDc1LTQuOTk1IDEuMDItNi43MSAxLjY0bC0xLjcxLTExLjY4NWMxLjc4NS0uNjIgNC40NDUtMS4yMzUgNy44NzUtMS44NTUgMy40MjUtLjYyIDcuMTA1LS45NDUgMTEuMDQ1LS45NDV6bS00Mi44LTYuNzdjNC43NzQgMCA4LjY4LTMuODYgOC42OC04LjYzIDAtNC43NjUtMy44NjYtOC42MjUtOC42OC04LjYyNS00LjgxIDAtOC42NzUgMy44Ni04LjY3NSA4LjYyNSAwIDQuNzcgMy45IDguNjMgOC42NzUgOC42M3ptNy4xOCA3MC40MjVoLTE0LjMyNnYtNjEuNDRsMTQuMzI1LTIuMjU1djYzLjY5NWguMDAxem0tMjUuMTE2IDBjLTIzLjM2NS4xMS0yMy4zNjUtMTguODU1LTIzLjM2NS0yMS44NzVsLS4wNC03MS4wNDUgMTQuMjU1LTIuMjZ2NzAuNjFjMCAxLjcxNSAwIDEyLjU2IDkuMTUgMTIuNTk1djExLjk3NXptLTQ2LjMzNS0zMS40NDVjMC02LjE1NS0xLjM1LTExLjI4NS0zLjk3NC0xNC44NS0yLjYyNS0zLjYwNS02LjMwNS01LjM4NS0xMS4wMS01LjM4NS00LjcgMC04LjM4NiAxLjc4LTExLjAwNiA1LjM4NS0yLjYyNSAzLjYtMy45MDQgOC42OTUtMy45MDQgMTQuODUgMCA2LjIyNSAxLjMxNSAxMC40MDUgMy45NCAxNC4wMSAyLjYyNSAzLjY0IDYuMzA1IDUuNDI1IDExLjAxIDUuNDI1IDQuNyAwIDguMzg1LTEuODIgMTEuMDEtNS40MjUgMi42MjQtMy42NCAzLjkzNC03Ljc4NSAzLjkzNC0xNC4wMXptMTQuNTgtLjAzNWMwIDQuODA1LS42OSA4LjQ0LTIuMTE0IDEyLjQxLTEuNDIgMy45NjUtMy40MjUgNy4zNS02LjAxIDEwLjE1NS0yLjU5IDIuOC01LjY5IDQuOTg1LTkuMzM2IDYuNTE1LTMuNjQ0IDEuNTI1LTkuMjYgMi40LTEyLjA2NSAyLjQtMi44MS0uMDM1LTguMzg1LS44MzUtMTEuOTk1LTIuNC0zLjYxLTEuNTY1LTYuNzEtMy43MTUtOS4yOTUtNi41MTUtMi41OS0yLjgwNS00LjU5NC02LjE5LTYuMDU0LTEwLjE1NS0xLjQ1Ni0zLjk3LTIuMTg1LTcuNjA1LTIuMTg1LTEyLjQxcy42NTQtOS40MyAyLjExNC0xMy4zNmMxLjQ2LTMuOTMgMy41LTcuMjggNi4xMjUtMTAuMDggMi42MjUtMi44MDUgNS43Ni00Ljk1NSA5LjMzLTYuNDggMy42MS0xLjUzIDcuNTg1LTIuMjU1IDExLjg4NS0yLjI1NSA0LjMwNSAwIDguMjc1Ljc2IDExLjkyIDIuMjU1IDMuNjUgMS41MjUgNi43ODYgMy42NzUgOS4zMzYgNi40OCAyLjU4NCAyLjggNC41OSA2LjE1IDYuMDUgMTAuMDggMS41MyAzLjkzIDIuMjk1IDguNTU1IDIuMjk1IDEzLjM2aC0uMDAxem0tMTA3LjI4NCAwYzAgNS45NjUgMS4zMSAxMi41OSAzLjkzNSAxNS4zNTUgMi42MjUgMi43NyA2LjAxNCA0LjE1IDEwLjE3NSA0LjE1IDIuMjYgMCA0LjQxLS4zMjUgNi40MTQtLjk0NSAyLjAwNS0uNjIgMy42MDYtMS4zNSA0Ljg4Ni0yLjIydi0zNS4zNGMtMS4wMi0uMjItNS4yODYtMS4wOTUtOS40MS0xLjItNS4xNzUtLjE1LTkuMTEgMS45NjUtMTEuODggNS4zNDUtMi43MzYgMy4zOS00LjEyIDkuMzItNC4xMiAxNC44NTV6bTM5LjYyNSAyOC4wOTVjMCA5LjcyLTIuNDggMTYuODE1LTcuNDc2IDIxLjMzLTQuOTkgNC41MS0xMi42MSA2Ljc3LTIyLjg5IDYuNzctMy43NTUgMC0xMS41NTUtLjczLTE3Ljc5LTIuMTFsMi4yOTUtMTEuMjg1YzUuMjE1IDEuMDkgMTIuMTA1IDEuMzg1IDE1LjcxNSAxLjM4NSA1LjcyIDAgOS44MDUtMS4xNjUgMTIuMjQ1LTMuNDk1IDIuNDQ1LTIuMzMgMy42NDUtNS43ODUgMy42NDUtMTAuMzc1di0yLjMzYy0xLjQyLjY5LTMuMjggMS4zODUtNS41NzUgMi4xMTUtMi4yOTUuNjktNC45NTUgMS4wNTUtNy45NSAxLjA1NS0zLjkzNSAwLTcuNTEtLjYyLTEwLjc1LTEuODYtMy4yNDUtMS4yMzUtNi4wNTUtMy4wNTUtOC4zNS01LjQ2LTIuMjk1LTIuNC00LjEyLTUuNDItNS4zOTUtOS4wMjUtMS4yNzUtMy42MDUtMS45MzUtMTAuMDQ1LTEuOTM1LTE0Ljc3NSAwLTQuNDQuNjk1LTEwLjAxIDIuMDQ2LTEzLjcyNSAxLjM4NC0zLjcxIDMuMzUtNi45MTUgNi4wMTQtOS41NyAyLjYyNi0yLjY1NSA1LjgzNS00LjY5NSA5LjU5LTYuMTkgMy43NTUtMS40OSA4LjE2LTIuNDM1IDEyLjkzNS0yLjQzNSA0LjYzNSAwIDguOS41OCAxMy4wNTUgMS4yNzUgNC4xNTUuNjkgNy42OSAxLjQxNSAxMC41NyAyLjIxNXY1Ni40OWguMDAxeiIvPjwvZz48L3N2Zz4=); background-repeat: no-repeat; background-size: contain; - vertical-align: middle; + vertical-align: middle } .aa-powered-by { @@ -1245,7 +1243,8 @@ body[data-theme='dark'] { font-size: 12px; color: #969faf; padding: 8px 8px 4px 0; - font-weight: normal; + font-weight: normal } + /*# sourceMappingURL=algoliasearchNetlify.css.map*/ diff --git a/static/images/apple-touch-icon-114x114.png b/static/images/apple-touch-icon-114x114.png index 91cb07376bb03dd22d6737a99ac52792578a7488..7ab5f967d7bcb939230c41ee29478746d6e197b5 100644 GIT binary patch literal 14256 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%0D9;0iVi;d~h?^lW<9 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 JPDHLkV1oJ38SnrA literal 19441 zcmV(?K-a&CP)&IdTYFd4dERH=zWtn;o}S?hIT{Wh5+9;O zIwoksv1B2V?Zi=Fh?GRbhNA!u66Av-NQNN<28;-S?AWprTY)Xh5bVfy1P5UVo1{hB zqNtHLq(R^l;e4$>mhdvzx}gcPR3Kg>rT3bhuDW9GWdeGayq) z!sm@s459`kKAuBypbo)-6oM{{$^r-vnTT++FZ_iX+k}H%bF8q#v6wn|_jlZ=TDjEetTB@!Z$IAd8x|2t8*8VR{NlAscF zIlNyq99I-oP*Fg>A<9=o<+nQ`FK$?Kql3Nk)8o6v88`lqq9o>zay&WXAe?bh-o^?% z)kOb9XB7*{y0ybO?($gO4?6ha6!YE{G1-b3=IYqdl0uK096``X=%_{liwtf2m&maT zR1J~~pVvrxWARHc{SrSb;=hc_q65#b81pY2{HsGPZ|2HKq4=L>2M=qOd5C-ccFcSo zh@56N-GhAP83EP9Twou#4*Zo4@*g|Q`drl@Fm*~HB_-fgkXmS7lQjrKv~7K0Pe@x>bmaYg91O1i2O&_Owt9i`|6meqYPTr zHk{F4sv!XgTBly<#`{RW5Y!9B`yd}c3C#kigs+M}Ul61hZrkkV8m**CumTv=fW8VTkf_iJ(XT;BD^05(mFD@+I_H0<#$Y9^ z6{o1rnb1nek;Tu$vvXh}Pyo5W%v2h@6sbiEGJ&0ek=OcSJ}>Yae|^0Bl~ZDohfR;n z15(u1@#GBo+B+sq)?ut~w}TTbH*|dgGK080!@gFv%ip19h0I2U?olHSPQCXQF@cFKGmvSK(He7ApBi* z?BO_4)I(S~;OKSLalsmsP*>?{a%sz~KPJEv{gv~b( zSSe?%M)MQh)m4RORru2b_>oM^qY7D}jWF{QFHwV4RK!&gwAaTJ!_zin%UCu|!bO|1 zW-JLpzjBhPH>0XTKr+ak;~@9$aHEsaPb}&biV~cHQ~&?U>^rZUbM?vBEm!iEE4ipZ_P1lcctdm8o=yKc6b2!Y`*`l9CyNs#5083)ZRk-OkZj6m;hcM3t3$ zcQDSeKb>(fn=vX14%Bhm`IL7aggX)CP`vprS<1=7!n4f{`^OIbwNmw~D;Yb#aClfe zWRPVZ00lo3(D6`d&S|UZCwi*}%ceN_kpc3T&xw7`0{67^L6kP9_Q6p2DIMaJ1YsbC zff%;M^0Bnfim@>0;#PYs23@}X10Ut?J09cSxpTaE=?aHyYmiyYO3$y7#A~oqC{;Wz zsoM#gT~8DGDy_9PsF!UD6`w2mZHzMt?SC_4T(HzPUqsFh!k% zqCi!chQRDwa74#Y*COGN$#&in%K%n6!#mis#^?r|qY z(GS9%A1WC8@!sm6vhXu0<{2vt{eAN{bzVV<;pP&w*MyYkIg|2;SUSB9Y^|Z2tIRK+ zXXj%dqF5PV20hHMPnjg_UfyCl95Bv09QJz5(iAa*P3^I0wu;r_sJe7binMSVtV*~Z zRXX#W{%nD$W9!yUY*{cooX{UnS-F3}rB`q8U0?oPa7zEB+n8C-NFDoHGDn#i$J{DM zs{ElA+){@M%)?r!7LEv57+H7`0A5_oQ1pVVlA%o*JiDs!|;eCbkh#Sa7ezj&hFK1?!E7wj5pUXgFbfHM~z{Y zrWDqa8-p5y3EE^^S{R{OL6MUxsx~2x3OAvQAWc<8vyAB=1(ffsJdP;z=L>rIf{opM zOlElUrI(S?F--4~EJ{`#^aF6R5X0Ok_tkOJIg*gy*Vhsx92VKIgl7@`YyV|$bAj;X z|9*0R^bmD{Wmzr1*I1UUQl!}~iiu(ybWFHE*;~0P$PWm7#)$b|K~fVA(n+C{A&I5q z94oUKqwRCZXvVzXMbm`NA}1@AL=4vY^G;PU2ty2r&=YgqjtVKtMG>|N)yW5w?!DhB zW|Jj(#4?a2xtS$d0%-Dps?UQ82JR<%YnMSkA;@QdkC<@iLTQx%no}zs6*dtz#RC&h zr9A*f&ppkX?|OoKdxQDKbIi9lnGXBRH`gh%jA>$-N+Ur38_Hmc>k4*tgE?qoyp$e+o-R%gq=K$mY#92j|=>mC?7L&+&;(>?mIx}Agm&+7(>rkY?g8V z$wvT~oL?s&^e8$RMPeybDUjO4m$kOVpg&D{FI=F6^r(7Mwdh>rm&=f=R#>$OrAHHM zc6e&#z#LvJRJ30($^u7hxj89ar*VIpZ6}993_=MWjg^g|BvnpZ;5u{m;Hlz{vnE zc>vCQEHD1C?z$0pzpDPsa_)A_-^O)Xd0^Ul?6VD$Tzz3drP4t;`9qP;`qOHZe8$Bd z!m(PlrRZ|CZ6+jEFI~!YPsqt7s&pF5Jsfe7IzT(j-;E zA>6j1Ku%Rc^ha>PY&#Khgn3w0v+$XYKo%B^Lu-h&3S{Qz&#`##GmH<8SYMR9b$^fS zXu|N#9Xfj>FV{c|8CXk442cy|>2kp&%?F!hoB!v)DCI>#eiY#oeUWa0aHNizdcb{|2PD7>!c!!45!NN8XD!on z8{B)}yZF`*d=zIa^DGUY^J#<&H`#@{tgQnkA(6^NOU;!s4L(&@xr=~7r$9%%kc)sD z19U5M9&%%;D^6a>6O?f{|3M%F*hrXO0A8~vAz;&$Aq;xBtqqQD+~Vl53v}-v(!GB~ zclXezWI;PSBxGXz^;u!VSZ3<@Vm=O$eFL7A&`0m&OoqQ zLLYVqn+85C!e@YP5ll%LN@+1Xm;}Lg5H>LM)zB4KY^}3c9dh`{MW$QpXrn53D*73N{I>5-aMt zV2uxHc?Ks!VT47RGTvBc@7h)R{re2ReV2iFNI@bDv^rmg&y5YjRxqkZ>X@RwHttW+ zb;4&XytLoj_&n3S`#hMpZtMv>!#JrnfcvrTT591#R`|(|m=7li3sq*J2wt|4Uk1QC zUCKLL!Xuh+nS`zwZv62NaO0!z0uOYQQk4;m39;&6x|M!OWTY$)>(h`O;+A`%U^d@1`Xd+>SGu(5uCzhlQKscY2yaMBHb{E zRk-n7lHGc~n3qe!je!uYfDZEz{M+k-{AmL}l!cXhq^_}*sH^1jy>|eRSX!{(RC6TbG1>(hMuyIZsOn0*awO&|y4BoFyX>-#xyuYl{sDQFj zGdZYPAxZG>X~<6xPzr@onqaSD;F$_c5f6+MD5VwlE}kd9c%JEC$ar%dwHBO13Kz84 zKa4^e7F7v6ZZkxLw_L#;DO%WdARqi$QN1O|UEsx201metMW04o=cgbWtNYJXIGL}w1=fIbC8b;7H^JN z+#cbIDU0bHoXasJ7|9TXL=sH!z6}eqsqQ4vVrhafq3~1>)b@OgX)P{I!6syD9XjhB zl8&W26nbkWpkYE5zO56%sn!<31z%r*Dh+bvL6ym%%k5{MBpHqA9gKMN`4>qRMM%_L zxQ_;mzuIBA{!L>!?-DwcjPd3=Qqe!JaQIX3*MHFy`phX6CX+m;9x9O)ym#(Vhgo8pOjjxt+_som{&kC*fq%Vs9+Dws zDXgwS*1RnnmGD&7RoRDB&dXtzSJR^Im)!Mq);ukfuu z@j-4scb)Su-{A5ezDiP*K^)Fw-XW$i0vpyZz{@VBuy9{XZkIVzS43`KHjU^<%HG;1 znI8P+8Cpzo7F+()z0GyB{9yyniuk<4E%EgvVpw-XSivv^I>B$v(}c;!kTOkJ4146g z4rM3vz(j~rT`+Gmg^`2F%(2*=liwJj<2}loZ=j2PgcXprU`YEw76fdYf&@!@kXbZ;zF$%3y|YQ{h!D$lC$XZ~V$V6dy7wW#e5_~wnaQNH#?!#!%7n|KdP3FLQlL#jW^eM>3hGMMX$r|#cdX8 z)&xbwmOw}hbc|3KLrFsJGH_`WKg>~%5H+aG8iS}dlnJC_+eL|51cGSfl@>c_*?}TK zTo2L|`PM3Ww1y75jJMX{;wHvezV*!0*eqrBO3Lt3Lb77WYgU`5=vLIAxp;UrQT3pe zwaf;6G)Wj=*y7;bPcR>i>EC#Z?EVNT%NAp_x)a7B-s`8nx$mLbzz1w;Zz;Z0OnPVc1r~)1l&O0>kj|!ZyGA10QFy zKBO}kkOb{5L@2~GF`@{mfu03tEjcMt_E4AAZ3U_`(0SBxA|X4rwH8BX3DpYLN(0QH zo^+>kSLa815X|Jw6r=;vC6`AS+3QG}are)igTat%-#_4L->^C~L5-x&+DtIZF2I|e zD#}lU$?6&lf!?BE=lkAGcRJ(zzj>ZyGA9|A4YH=xCi}ciIByfy%7QzZV=4k+XrxmQ z%3M{|Pk*Yn{W*})uT0-M*0_+I0$g`N-!Jg}4(&TmDE)#7nx-fs4e35cJZ*?JT)_JY(Y(Sc z@bRhI_XGbvbWpgnph^>>!BvpIszP?8%Cszz0OPTQSUqVop0i!H#IRN;&Iy5b2^=L^?nZ zALn)u*^JtX1l7Xd7HI_Q!TcOm2U4IqL!?CY5aq~Q3HK^mej7>y|Hlo~q}-nTG4^I3 zrvLO+Hn)Vwu4^4-o3M0>5DB>ukXnH}nCs&FIezOu`5~-xJlpGY>Ea)-dg~s8odZ^O z4t&a1wYjPXZdS$cfuzS1CgrY{d}%RZPaO+j<`K2*#d7dhfzRNZ*jX+%v~2dL`)fm| z`kbJj1W8=YTW+ABm_E=$*c8L2SUSP0su32wjM++;V$eYni?Py$1^;=GA2J6#T*c#OR#F0*&-5%M&l2pXFQ9-6>{AM-33pYDjUh{P?~*85m7 z_{1eaBmqq-c)~vfM5~2Rf@BRiSKU7~9{P|pH2;^uIvYghsE&X`Z(rS!N7mll!F}yE z`MAgIT|Ew-*z_1;$JdiJ_(=`;fQl#Z72;u7i&9vN0q#8c7;|G7T-jmp>JBS|yO^@% zu~%P!0Djo8bi9*sEU+B7jD1ZwQrJ}w^^m1Xf{Lw6Xd;zKHX#kNs9JmmXQFZdA@p0ODV3-$B8yNlFthM_ibx05IY@$P z9=`P0TdrF>Xz?cHZkJhdj)Onu1)OFLHt3|H;x>(JMW{hrq{fzSzvFT4UD_tSeMo2H z9=+r((tOV5D=&CrK0-I7MkUGuVXB6G?XauLeKovUdT!Skp%nM0RL#GE58i~Y%$BQ3 zF66Qo6?reh^;7~eNVHA!3{lZa=mqL)z-YCpca~Yo_~Lo?uU%!_?~xmCp3BfiA`$Lu zXlS)H&rN~`heu}{og>wV)CljW5Rjg=tl~<)r7Xmg{L8Gd5f#mS~CdJk!^d^{t6_PtcviX$n z3K7|gLO*=&NDU(ucGYm8DTfOC3ioT6R#EgRkmp3)H&l6jxtdhT=DNU#05em?M#z;c z#io}{N>_w)r6F}e!-83I*0Sh!m=5~PvWz?={aV9`Z3rR_NP0arr3z@RL_O-2fRnn9 z(3|XTXfy5xt*uIrS@5l=lu9Lzcw@q%Z9Rk_6a~ryT>b`{8#M2F*DejKUFwRM)@ip! zu#)1{?R8cCV*TMK{9Jy9||mwKv}nOg2T!&_=NP+_VCTDKhw0!Br? zTX0{F1Z-OMU`4JgykCL6x|kp+ZFWY2@O@d2HDgKVC0S913W-8uDLW~Ln``V|*kUHa zQ2-%|I^vW-d-1n$5NxzZze1VM3S@$$LC8{-5IR2ekY4yb1U5kW!RU9wwGL~4Osl9E zgsgkOER-N-p?F}zG1Z?(yP*;sT2G4Cy@@`$gd3H(@t>$kdr36>#f8AiRoHb6>L{H+ z#5)w2BkY+DH?u9?=x?Ah;-61?;c6$Lg6$Wv$Z8N%7sTT90Js+|N&$F3=yl-p)rzj8 z=T8mRuL18CxXl0m^Z&^ofor1rzLfV|TSl@R&V7$jo@q*K+TspL0K;u4qxC{YT2FDY zmf6NS;|tsDK6Z(5f51Y7DZ)`jfDgaZ;IAqsMIKP85)J-LJVaS`piD!=D~POO%{V!<9DBaG_y; zmiVT($|U=krZLxP>X>#ObOE3D(+lsJg)_TlcH1*5d=JWv<)*QB z3p`olL?;X@k%$vjnOYO^iCvPg==CVNU60b#9O(vob`hJP8J8f{#F`e-wmL)Ot&@=J zcA@(1ha1&qv_`;KZWhy}h+2G9js-Qeu{PI&J5?hrQI(~h{uVnVepE=AoY0*o5pN9# zt^_T$^-gU_NcH__9Gh7RCc?QypG0_f^+l3Erdu`Yu4N+IS@5}&r6wsWzCgEXOh|De z)fP}A%vQSWUtZ^MdxgB4HtiunkaP8GvJ*P-6KP-zBGN#Md?@icY`$QK!Xmm|88}^r zHiuCg;RLWxYxtp}4QQa+R(`$+xoklGYWDsL!U|%pkk}2fBv`eI)L*kbw8rR-cmllD zrZ@qhq2bNt;6^3v{(RuOd?`$xNaq?sA+^yDj?e^*SdUob;iFRB|d0%R}Eb3 zigZ`R_^`t{oHXCf;!~rmCaq6fPp<)-HH9s;W$QW<0`TB2` zE*VH67nrNB!nl}>E)B@k`b^Zd5LYGqXw-yn46>D(icpQ#A zF0y0H5V6~cy?{y9NRwtP$8r~kh+tJcI;T~fs}ak@$LFq8bW)=GIh1)o*P6TDcyVce zA2A4>urO^j2tyELQ$?Sx1Pn&r?L(;&-iifa7{;=Y3 z>GH}IC`+Lzm3&^}CKEWk4{lm(qH2nWts&U}I{`_ZNjKl!v|KwJW;`{Jcc>{KJ3*euv;mTh4D<%^!gH&2pt*#hU2ByqJ%{b`Lv+e-{BFODF6T< z07*naR7daL3Id*nEFcXepbV8xsFsDCI0`&P)N|X~Gtsuey&oX?)L^iQ)5{>;Dn4{4 z=U6q46i|l6l(G=Y(xK%7$}y_b=I&}$IyH4efNF&THas)GXj>CDQM9YdW%$5mLTRster!_! zi)auSQEO!qhKywufjg#9ho-5!0$&eRqeB|TVX=fI#b}R_Di8KdMHfsoWeIr>MG>jS z4CQ{%;55!cL(r9ml^%P;yj?D=U!T|CR0&wK?t$*2Oi{)mb5AhIcLP0o?|cV?k8Ut{ zI%DmMupL0N#CT1vT2gD8YY4t7_Lwhj`m#tlf$0b)2V>@=*C=QIF682s3RT}FtMmQ3 zTv|o@k|Ile3L&*J2z_hJ)dYA{Jt$bG@_K^iR?u(~4>O5;we!U_Ziuu-fyR2G5pAPt z+%}=3Peb5Ur<~6Dx~Fpydt(8N!}7{%K1l^%5`3t4g%x1nLS*VIL=8S&gwkLUK!XCf zk8&6F^Y&_3)7b04DxE8r7`%7D%CiZpJ!LJ8oPk!YHEp7Z5$I@jg-RM4(#wUgn8IQ* zrXK`sXp&&!=FQSJLqz(RZU@urA|@rfa1OCU2A6xRt|Y9aFtClSs0eo= ze#yxaz>!4#Q;X1^Ge2@n?>XkX1;w=DXJ}35_unNCk$s#Gn&Mvj{LBsY#~_P2E37?^4Jkj6Q@P8)UeYUq1Y98GEvyZ4^R(%wZ|=VyCjp%bdf9$JUAH70F9w-aC$U*cU#WsakUvfQX2^IQe2F(lS{3|g9?Z636= zh-OE|zIhR)QdS`8W!S4*$a5BsrpR|TeA3wILw5*bFg7qcB!V(cH~^qlEAp71`qJ?h zCh7QKrQ1!&QiD~cUnq%#?pi|cTuQGaTQ-!yRoO|VhBfM+NYnw4&f@)h6 zuM%K25p*?*OzM3Kv=(SHS|A>x-D4rs1LIiHf)P0>3nq0djyJ~lHD{&;MF1>45}*dOpP0MM>rmMDAG5v}jZ$%cmXYKLx5U{Ruvb)a;ZB*iAay)rQt8#?k# z)MuNS2v`v%O@wYDq!nIoy@|eb>n^K@hxA4xE`9Uc40aDmx=PxE#42khXWix@&(*qv z68@+H_9emDB#d#qbrXtx)Q&@>UkSLZWBgJ}a-)n)$;dh8EZAe8oFrr@h7#q=Ot|gl z9H?;LSw>V?g=PsMg06;zIBnqD+O36~XhNiAZ$g27g4gy{Af15DA(1bA!gQbBiy->O8g_NwqvEDJc$N7Ud zSUG%)C%^V3HeR{auJ02MkkR&kY0`_D^j42#)YD_WW^zuzs0ETL&z7vG&G+_Z)H|B+6!5gJzCK)4dS&c&1DC+s8B5ln*sb;>^^|SmX>gMRB@AIG~ zudNQiGxQ;j=tbUUL@g)$EyvTy6F(M>L~Q4aO$8^ee90*-EK5^(>cMME-({I_(Ta^k z9_|+SH9t%mJXub>|8>_oTJKJBlC(4g`s0S!Qh(24i6^oAxoV8tBm{E-AmV>P#9aBaU9vQ^acWoRznBdHS>e7J#RJ{c~);@XCYN$4R6R(Ixt=HY-|>wP}P# zriYot|8{<=Mj7Rj88bEu&I>%DhLIX}HQ`IeDn^h+Ejx*zLOmrFqP+=Kdr`LSn}|LX zC|1q1Iu^ym%S_uQK~+zcfS$1U9%xGRffsqYWvXh*Cn(1;8V_ff?xp9JCk8&i=`YL4 zDU1^JDQUk#I3ykzrp?xHzMCxu9FL7JuSXK8dIEdJ9IAVO+f&Hua&2tls^TJ*8D(cY5pgrB-V6Q=KVeErL}@?40Qjb{?nExy_s&)vSUODA+uMRp+`!!4FMgxd7x z*1%n8kgjjW(zThqpucl)EMRQ#8YSKXtM&TQbI0$sv;)C_7v;W zf>((uy%O<^H45I$()%p+J{&E6a$N1v)3SlHVr^aWgwaUFrc<$v>S?V8)diUo5b@=G zGW7)Ps}b^P35n{-SXP27`jm$Wa2LeYu(d9+d*TRKmWR_W`GV51SmZckP-Brq16jZa zT&?XQB~BUjSS`y&C4Ikzth7+IPUzOF=-_F%ji#dFMSBx!m=4>zdAhvG$8nDF@l>iI z%(XV-kT?$}>eyehcB*HjmrVsvgLc(DQ4$OLc&ZrlU8r@;Eg)}s+Sp};VHT-xZ z^+~GQXimJ#nw}A8Ycm;4PmYPIfYcw$g$+nt*sAa3P<`2a*EH-U6AbOkY{@1>-IduE zm?`>7;*?hv77_xZDu;JXup8foW~*fz>XwCu87E3Ho3l7LM3V%UX1Fw^B6Zf=u*y!i^1mtEF!$fmFj|Ew+zoHw^3Y?rniy~wOu2nxa zCxj@~o(K}=K^u`)2hLhxUG^jDx2+vSLjkI~1~eihsGJ7JoQ-+OlEB-TmmEWuwB>S^ zz)vx#C-vaFfp}LO-_w!#sdcz z3#Bk{q%aR;ye>i!YLbgc#??&;n?%)fouyO`7s}0r!#Jh0@Dta?gkh!ls#P^jHf{?M zIev=~=!}KlC}9%nt(ne9PTn=Kwa3zl!I++)1l2xJ>Y5#9T;z(hqS)#Q@Z$;0(m0CN zrV6AX%y(f>X`y~1ZMhVviLfvtHxg`l6K5uZIIEa6)N%80unJx*6hC2BUCm9DXd=2* z*l_SN=xFJ1bS1!?qwXxIbSZ+dw8f`mXN2Dlc3{h*$Ls9Iw;GC?P6+Q z91(~cD;d?`b;%KHJt^RL_kA_Sd7+LxnBTJ9#_j|riA`=MzcL=*|5R`F7VsoOzrD50 zaT8Dm=U>%#<8vqK=$0j}v?Qu^R9kH}DW{l5)7m3Jpj3)^K|aYT7mnG{!go5P36iD0 zENBgCjc*lGzrZ9e0!Y&dX${D9&TN`94r3kqB6O4%zgr@Hu`bQ9eIV4jY=Y~^t6{~f z$SIL@<8(D5$4LxtF9px4)$np%-U0yiCH7mNAHRM-!O!PS9QG*8jO;ARVOvq+@A;H@nrI{w{I1?xs>2{WF< ze_tz8w&>6m%T4Lf6N{z5P+-N;7ss&btPdTD(p~YCp)5nX1~atn;){z45``jp(>qaJ zgBpK#yORlNzQE)KGA}TTd?~;>8FQ$PwLsZ(Wtd}j3wrEBLppm^n@UK7dNi#aDD+VV zBEFHWyFxKM53?~$GH`ZDh}j9*aWzK^V1=eZyaE|)9o781e88(kk3_n3Wz+xG5gj?A zN6w>m!4rumwQ1@5gw57f%*7`#=Qc^UQ?jSJVJVd@_GD%9swuQ(wRJqMCdys@_IFs@ zy-(-zwz_pDWQ@q(BEcN}`N60rM~+5X|Ddn>Oml)DS` zQ9^K1nHmXW^Cl=0RkGkyTeaWPk?tMRpG}!!u#;(>{8tloI)SWfQHH=Ubj5e7olr#R z3Y5mO$a+X`4RjdVO-%ctU68b9R7!1%`{90Ugs&HNEL7L3(0sG(@y!6Mh+IG!GT=T# z3`3dmT{@!-^+qi{EztHhv76ViSFVsg-lhM&er#eA8pb_0%+>&ogjU=n`y6|1#S@gw`%G@^#=9;8AJi zZc>|CjUwnWY|UQhpel${Y~e7aVqC=y4)c`5)YOD}0C3G8))uVZm|c-HFukJWv!cj~ z1xX^*x@zy}1~;8j&AIaRX4fJJ#S>~Z%&Bx*kmHyG2P)ihwzb!>nNF|=yVyaO?A!*! z*%kn+>jl<&rAWlI@@I#7JU|trC8_hRHj8eDS(cKd35hW+oLTE|T927$r%?}eWSb%c z1 z3)))*O42M8;;%Trw1)TYvB>AFPv&g*cj!mhxv10)d$E-)!*QJYJ((9YWz@*3zbL|2 zV*m<(Uzr}hBqCo^)jOx=dvAj>^8fyi9s^nRZGGbHok}Bou@wPFtd*wKUr#@~KE!pN z)TH1~@wy1V_sf(0*JBNiCWPxNB7D`LKe!C^HE?$3`>&4&FCcTkPQHar?BwRjN1u*$(D) zfRF`}&H%LIeKP%Uhq}ScyO0CK6=kAgWJNEixFk8=`OL$}h>Cohp*lyo2jdx&Z*8*k zYtJJc%Qv5Tiq7ROTRphahh9P$1mOd$ydJ#b2T=G16|IA>p>sZG7C{qxLe}el4qU<4 z@)?KfxaEr0hGapQ&s%scQeGF&s&oRcDEzj-4|c>0pumxW$&Bv7h{9e z@pNj}w9k?RrgRX#%)?e+Rnz&R<}CZPYywPhxl-KUWBSdzNXN3ff1PX%GEugA&6e?b zH40c8oOm9-)ig}snFT!gRPtT)Ge^1Y3U*xC+P5nD`JJQ@u!}V~D5l&6{e6Vj3gx;7 zwNEZt9jU|O+n*L8$27q_**s_E?mfduaOvX0c-14t{sZa5>&&a-c{P)2seEvG_Dywz%~#zK`NbsVbmsZpD?`jSIm zNR_*hX=>9m{{HM>hVY8QXGiKdbdE)c(2 zU;Q>&QIM#%A3>uNeA<MhWilPHJCAXaFZ%nlO6iC;G24+*Q zK)={$;U-MONv8qyPJv`TXY2JFtc~_iqhv*n(~Lw+Yil*D_2{uWAV|X8ED?=>sftNq z10gmEP)Qom%xpBbvN~FvKf9$uXcdFTEXj)f6}F!fQ;%G#Ckh~l7Es>9xqCpD`R*9g zDVPl{^TJQpSO7EipXgRieA>=uTiRN)LbP3`RX_P)j)x>?IA(2p3{hqR|I9ddv&E+6 zguUPY{^VeU^7|lPRJ5oJR6=_{lj`789J@Gnv}7ErIiiZ4E=Z21B;z?rUXtVm);T{M zEZkI8PT^NaLtbRLOe*zFig!#qa?#K52WHg))5EXIqEq3L87S%<>$&I%L-AP*@W-d(4j!#$ALzCo}=FyXhwR6LM8T4)t_q}le`2Ulf- z)N9z z4O?chhWr9rcL241THAp~&(HAt@cfqe+10fMh_nd^6*(Xe9<0_qrrs%LQE z^h69+Bx?3LWu=QOk=FDiLYuU-I3@)=d_LW5KPL~!pwDVm@$6DPn_I4JGhK%Jdu#%d zaES6-3G#d*t>GnSYOwj0*$Ck9)4kPSo}rJH&aFxypxdw%%O!ekuF5?e-(*2Y;ez^M z1S|J;dH28iJVn3DH$L`3-n#Y(uGg*Vl=UQAv0~H$l>Bj<(h)cN0?ts*-BtP@0`t)U;{72d?Bzm$U0i_FZ|5JtlD1 zz?Ti?bEjD5R*+?uIPL~;|6qE5U(w%C_(nw`t4H$1yBvpMoC}mA93vdF%8TVC+1`lm z-Vxoy5xvob&U8jv6c|do^SP#n$q6Xc%>aIO4$TYlGg^!k0vaGh86*#@~Kd@ zBbu@Z@6RJc=s&BP*G)7^%xgAa`jA`zyN&Ip*sfsGhI2;kmV9>MG(JMazm}N$9Ihgy zLPzQttMhP66p*PenZE$~8~@|U+Uu4zc-aTnZ&;ZgeRkAc`H&#b8DXnpoHXo6@97I* zkCFmq9m6)3Obp3nPXD#L7$cm2`3AGK6-F1&Gd;h_?A%7sFBhUaQ!@pfQ_s0Beb1ao zgjUrX0aSY-&G2(=qiN}yAgzUg7qZMkAk&l(tD)bj!9;7A4W#1`%oQ~xAt;y*l3l~} zK7w>oI@_z*OG3I1l0?fiNTlli^Nz(eRUnNs35OG9FCa^|T*0@C1&2Y%OYzHHb^P0O ze(+fyu>W&%!jmoV;}>D^VNdKN@?UABK5fcT4#h`&y+y(L-2W>L}tO_%RMZvS7B&(r1dWFlUGqtqHUh z4qcgQzZk0VM6NlPq>!A)_P-lChHR}*vTjKGim`1DmY<;OT2rgdu}VernQGGho-4Vl zC8G*-X$O+OuEIb0#b!X!iQ0RT2A{N(v;lcVMSr7&%M0|+R#1M$^eD7VXCIosTn0Gj3nn^7||e`t`{( zlvEs69M}>}86f&O=swQ9*_s#Krtw&)>%qPEKD;WT7&l4D4I6ve3Y%O27DGMBUR=&zFPPNcvSh` z=*Pl~g8piPyzmcZ`-=z2wyq{EYw$_F*j$+&?SH4c@)bpXS%jZWpj&OuA=>VzDS^X~ z0`-7NC|Ydn9?;u6Vlo`iy}L(xaD=8Qc^NoOYViMju%e=be_XA5*ZVKSa@dp2dKSkwav zm(g1b6NP^*Vt?HlyYq7=yVO&o=;Z*bCD>S_|KaRl@#*f`E#T+()NLU=mx}bWu=977 zP*l_0QDsL;z90?}p(x>TRn~9aio@9wvJ!Fu z$qP307Z4{Cpu)W%lu&dCL$bXvMG-kfg==ZMim1mpOYnB zk7o}Kas_2e(`{5Kbczd(e0z`*ofWi{iJ#9hD1g%<`qWPwSKpi>rn2MiXKb1@;WZvD zR=;SJ$BoEglU0S0KKiexGJ`TBE_ocPVz@~h_85npm*cjBccB9BeBxfN+<6P<^bz3z4OyhRl&9JV4nw^ zSwGTOhi{++Vu@2km9LNwVeVqmd759Y5iQKHzUfkk%7__7(&|g{Z$X-nVHXYnfJ_g> z+P}kmiVpEX=0Ii;XE(;#3%LTuFJX51NDgwh8Qii^sv7)?;OB*kDCIQ94%2@P3C)#E zsnW3)XEVfUwQ%bjcxNwQ8UeP`q#cKJtnGEXhmO~QW5Dt2wCz?*);3#z%K|vos@IPe zXI@K48yX6HTGHpAlW{X~rhXlxw6N6D{|HZ&GtDG*iQijdMwMIbD)(Pmp&ZN+cxx=( zdyr6WrBkTVF3l#%g|+GM(6lR77kL-o)j?7BF2=!o5AsBk-SIl zW{=zf597j~-GY;cN)dcdDLBbU`)-HK#xYiv;zkp{Rwvi);H}s3YS)N69U7}wsW&z- zAFL46>qxsp(}rwn^11ADz)cqGYY4{>UVlDVt6!&q?J!%*Zqr5_y8s?7RQ3w;kcd2D zL_Q zSKuzel)5EIleY3~N*<5Wp*2lSIzO$ndb5AEhO9LyI}Q~mhjCq2 zly90xjYA|kR2(*q&~gotF@uWl8KVwlxZT}i`n}|ws~7{uN&Y$lC8PLGvP>4OO;W)) ziRvY`nAl>XWai;!tBtjm;?gpea~JWiT%~gAEHnQ&jYJ_fYSXlvebDYufhASh3xG48 z$g_yN`Akr&Z)4PKb7-8$weE;Ar5$zRm}hbC=VQUOI`Haa#j0oFJ285j+gnJf={4zn_qh2o1_FSwn zL|$$n9v%K|RtBSEF^N8OS2(^qi!iT>8zL<3${L^q?G9Fz z{QFmEox8~9TAk+l8f$S#!$vgKj-}K~BAd~0;4~`Vf2LLY(-gbaZnJ|2T=aEE(Ia-a z1vpx)+ymy@qVm~-P~B}D48m272(lP!m4UpV%SLqtN@6I9;U?p9*ef%WUc(UwTP{-j z(x(Ux9$;6cjy){**JbeOC_!u0 ziNAIn6i3Ht+UmITLE&ViJc-dK5KiyVPE(yDW48Lly7UOwy~Rx&tyEmyl!XFvpCj^> z82xJYp`O%Q`!fu))r{;Upgh97agw3b0uBb(by(c9NZBt_EadTvMe<%U!@=adtzS?w zd2m-M!P+gvA{~W|QqWG)RjM}wHd+BeyUj);U}g1ckN-Xv<-qI|;~atXtWF7ihsa_VQnwvB@ib;tylJE>%8r!=qyI8vH% zfqf;_hg~tBw5s<;u+Jh!QlMShN=O2(QT4tQ%;uz=seQ(!A`Vq!*lirjVsH?=o=#-e zrDjB09O;3Bv!dcX*DbPzliRe(v$SSou4%#xTDLLp$I+N7Y(_FEf#X|&B?~9S@@H}N zMUbWEf@{$fJM?;XuNf6&G0ElbVCRng{L^5T3Y7;H`7+3ZA{=m#>TcttKr>4#(@`0o zwI{tnAwsb`5mgd5?xvz>t_<$_zF>IL5OG8@C~NvG17Qeh-G4t!YwV$B&|4{^Lr2xh zrJsd6uwKGkC?Lm0dC6_pjz9e&47Sq+AUjwoW}9M&o!0n|l*@k3Iu9A-F$Xz(i*Y@` zU9|~BB_6Kw>!hmuKt;M&$joB6v)B$dBdXXnVs9wxCP| zDVu%k)RNJLcZMX3x9af7kQ42vZ8~J&Y@SEM^hNIX#eBSj9$K?;hJx8odt_+mjq;l^YUhvhuR3(TjLw03eBWe+oU-s1 z@YkZqnO)*sFqq5V3s&3zYvWCGJsD#(yHj6(odMXEpTEW)ceWVL7DR9N#kr%U`mvgg z?~c*C1lb4pMuf5?5V%AQzAwfZZ2=Q>g$Hz7`(~r=Y~<8Me&v!}yrFQZt@=(IJ%jR3 zg|lkSxj6LJf6JBV2JX!3HTsq)dMA-GV_utN#O(?tW53Xm;`{;{-3Q!b;7%j5&q3zr zjaeuoiy`N7Vv3&ecIWLlts4I95#KKuEBib(hvpn}uaCLEqwH_1 z`kSh5gnA*`7YtC0B8g;If`B&}>ANo2IYqWhBxoqfi1ARANRWoWr9Au%1#xA_anJWePXuk@#D;xm1O+@Z6s`G+WL3|Z_(2_tk z{lfL6vZxK9p$QFh72&Li{72z@9P9Z`$GP+ZYrzzY`~UX%FaPQ*f*=uJQUCw|07*qo IM6N<$f~nnX?*IS* diff --git a/static/images/apple-touch-icon-144x144.png b/static/images/apple-touch-icon-144x144.png index db2b5ab17a0126e8907ca84780170216264123b4..9a53b1e533bb9819c446145bbef881f57fa00d16 100644 GIT binary patch literal 17767 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 diff --git a/static/images/apple-touch-icon-152x152.png b/static/images/apple-touch-icon-152x152.png index 03dbfb4b13f084c7694060581e309abc14c9d7c6..c92058d95075c068195c2a375b4406d9df1c5a99 100644 GIT binary patch literal 17048 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 diff --git a/static/images/apple-touch-icon-180x180.png b/static/images/apple-touch-icon-180x180.png index c644e341eab823580400890115380b46df367954..2c4cf999763317c5d27642789ea8d9d4461007a6 100644 GIT binary patch literal 18721 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 Q9RL6T07*qoM6N<$f=RIPX#fBK literal 34555 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 diff --git a/static/images/apple-touch-icon-57x57.png b/static/images/apple-touch-icon-57x57.png index 72e0f27b2e08c5bd7f93a6481a09e40a680272dc..193593470f2620ddf3de3860ea564d09e957383f 100644 GIT binary patch delta 5782 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 U84rTD-2eap07*qoM6N<$g2t})5C8xG literal 6409 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 X3R;n&D>bro00000NkvXXu0mjff0t9h diff --git a/static/images/apple-touch-icon-72x72.png b/static/images/apple-touch-icon-72x72.png index 441ce432078d6dedc274b0b4733a56e6de30db8e..0dac37d0d732cd6f04f636da1e7f5a3e0246a0f9 100644 GIT binary patch literal 8377 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 P00000NkvXXu0mjfQ_-0@ literal 9154 zcmV;zBR$-SP)CSqtKuY;xLkg4DUQmeavtK?ju*vA#h0}cHgYnecR3*?y9>X7j6+aBrvPc2HFBBY@@oZ!nzl?Z5*L=NP<%eeCxx3ltJ~I=Q{qk;y95c#2O=E7H7khnAb-u4k zA4L^Z6bGm(BJzqmh>+nQTg{Lc8Y0gn!nfB{AMbW~^!M1vuX59`cKug#hF5*PyoROC z>lo;&mVdC>G?cPf7jyTlu^;KE`{1U!x+s|yAwp2VDL5P;2#O9bWoRHB{eujjiC_Th zU(qkot}0&?l|Py@=FygkR)1-CrR4kgC4a~FUDY`MGMhS(8hKz_-A4p@=aiVJugZ=( zWO$?gP7xiMWb`{h#vY`K0?P1zZy=qx2o*&T3{o~k9(L&G`>J33On>X;H+c_l$Uv_b zyI1|dpUqmPa;9DweV`%c7nh7Zx~5gLr#iYxH#A7N)8X?7@rF^b;xEQd7_3xqC{-|w z11c01P!TW&6%7|BAatDSGc}Q4osI05oTK|IyKCvgzSkWUow9t%+> zhMp>=D(Zqo)c>KT8uo}~K_c45P{a6$G6KOE{i>p7EvYfMvcjq2R8jRfmE%}b$12K2 zar99t385JbnF?hh^3Xu_SDoRJ&+KmY|Gox#qnT_3WFO1gO@&{m2_H?x9LOD%D8=wY zRT1YsMN}~u=1s)WDCLGYW6{R6#2^;b3QmPwmCZb7Dv4=C7R@WD99lWVIh=FkuHv*S zI9ZiEOTiY7(m-Vd6*Iyu6(NF`4E#ZCd^7E-fx$XX=O*FhZeFDU_8^IVdXV z^Z|8buHuH5E^_3|OT6phzhw65Gt|$lP!%PmQ~C&BHhoS>$u^F1^45eB)rVVFetyo{ zXa4o}+M5D#J8|=)WN{V4jBxTTarz?>=65W-4aM}qhm(S!7zc+X=DM`T($XBsZ8x&> z_P4Nk&uy$6yP1o3+{D^7``DeGLfdt!T0)hjRB3`{36iF0cwW^Kq#k1$2~iqRHd6+z zl#P8$?Ce{lrWFa0_6jPL7Q&n{SP{B`I(Q71!=k*c>-7A$%KkHN)`QGz@Pm<&ex}w= z9DFcBK9eBx2BD`R$0*p!VHF|_57gTnn4hJ8%K@H!-`jZVeeb}`O;g1&gD9e74Sg}h z;x9o*7b8UBA{;OXxTJun1E*+N(i{xfbKw&A|KXo-?c>if^PMx$>r**LH+DRxIp1^z z+X2+w_-0q@$b+ToL%-YK%-={Bv%xduiVUWcUiGosR4T~N8syh4GUrAa#=k3Z%5_+d znw0yJI@>?_0B3&U{k-_Y@8sOETiM#Xz{OgPjU;BrTDr!Pi=ZNuVkkvG3{Hfe2&D)v zfUXfkB!V@D*c#eVgiRC5MvcL>`&d7?kBw%=^vWj9ogT5VOkufBEEr29!j8J(BGjF7 zzZ16aNwVXQ7X9*S_dDqr(N(gSdnJ?B4;ti`1epbo6+^3L3R4*Nn}~glCVThqor08quF#~;YSR7 zrY_7opgZI#szgq?hnRaMrCqOc?%ntB#ZUh$2F)6I6461}6`?1F9Ee27RLDgr5no=2 zjChO*A+`hbP;X3CoG5}4E6f5hO03>kHK$AiOAmdG17ClF`~KTsP~X@=3}`HL1TKp3 zaK6hkRi9$)A1j&g@yyyU{d#9De>I9@uL8&;VtZGV9BYdFc0=S~4wQij8=$Ge4-#{O zNtv3P<>?Q zAhZRV2yv*%NHv#Dsbp$ zYOg4V6yT?_sb(yEqG8NWmWp&x?>z_!aJP%OTNAD&=FA6vh{qoMQ7+thBZKJ{Vl0su zOzRKg}Qem z@=*{|q7>?j!VF| zBO)S}$ftJkp=a?AzjTH|BCsiH6EsbU+Zm0;I?Y)_l=+Yx)?_(C1q?)paY&l7x^Ibd zx8KOgcOB#UuRlpt6lkSbqlhsav=Lhxvn(YWloX07(Vqdn@z0a`7k@YJUIyCHl~P7& zlUa*?Qjo>mc{d(n`K%c3G%1IipIbA!io3Z%krJq^RXZMd0H3Nkh}sT7z0Z-<_Jn(l_$#{>r|-9VkCUBGRfaU zcYPADqbr0Whq#}d5qqyeSa)vp%0z?(EVpUQvmb{x#-I@*79|P#j{z#50V>d5g5(MGGT3V3PR()Y^M~l{xt8^N?q>g6 zo6O&udW;dDJbLP@{tQF6*@QUZ!u#%_eCj0A$4?@vUWBrSB@>}BoN@y;D<5i3xmV#s z!0%t_K_e#pV6A;r;a}L0DTZhjAuLJ6UMx#$sOl-Z^D~@1c01)v8$=ic+=#>w8;FfX zr~$FhCKTQXQi7)bPfHR2&;^vMKno~$(9(G-y)9H{V|L9l-MPbTZnx3t>o5oQP;Y=l zf(R6W5*QIonxbjSxwqbqiXnS>g><)vaXzax#IT2mJtm^#9BVi#RZ8UN?oY1$+C%x- zVL4((O!~q4R3z|IC?D#pM%@W0uZ!Ww(l$pWB2`$sVJ{bd;4r6uxRJENg&nqt5aT*P%c5K4#_*(|UG=TfXxZ5*1>x z*ifgfXq^=&Tyi$Mr1m4F^#3Qy%R>zE_#^tB2y<-8SO%`52!yaDh6SjFT0d84%WR6elN&-fX_{4F$ePFJ(NqqIKvv`rYPlZn^Nz2L~@B`dv2Pwg*kS_ zP%uu_F`n3^0+A6U5wG{ah#woNfh-`j1E0=7vI&k>2Ra~KbXb{5if9HTD1sY&mujb^ z+PMYo&tj%S=R-A+M-SX7N-n~#SYFJQSgU9JO{az-$4Ws#o1SJYlhI`Z=y~50^AAxz zH!4;?T5I1S%DoO4OmrBG2-9NNVD5K+`^qQx?<$kA#{6e{syHf)ZF3I-o`Tbgp-HRx0k zszK?H$a^(S9J@e&*kyTpBzN9X>UW+p;l}QdkoIJ)Zv4b;Sv7jgd&c6C{dhFP4)`w6;9|8+NkdKoG~0mwU=_A&TBYBWqGmAPRVCfu;zF4zELS3VErxb2<8K7oi*cF$1iBu6>|} zFcY){mw`H?FRQB`7%CGN>mCU!lVbWjoV4H21zm|a>HPb!!iio zKxGNlY9Bqj<8e(SxIi4PM?;1+INcpKs%~`R_C*T&9CCfv>1BA5iQ%RwWk&Jc34obt z+?}`3ot~z{SZ*kR9fTGzub>Vp=Wv4(3XdbI7sBeqxPU1B9YZ=AD4CZ2Vl@k^oTEAj zMigKQGk+`5b@yS~Eldn54Q zbhjP(&KauRCxhvtpi3kmai|H0#*wgOZW@srBa|bEkWXYUi|?T);@>*-_D$fakRn{* z8N=?mPpxAns~UXURl%h<1HL3c4M=?slnB%ybbN?ObA(e$2W1to=q&AYE- z;X?^a^N__}AJ2lR5hYWfD^pR(p}XnGJI~|#k025UpiToZ@qgdzlzL_R??`0f=%^SQ zw--DHGfpxBL|IBUKTn>f48ocY5DMT@NHQ&jwE=8(I+PoaqP&Rw^g&=jPujW;U zC|!o`g&AF>qKMr?RQ~|&WA{vh zc#ECqUqtp!RAp*c~O+TbDzsz)Q>5GtYHJvm6ggwPQ}&lsXKAvYF>&<|l2 zvZ!Yg5`LCgxTcA8ufc5J0Z|6VYe0wr@q-E~V`LQr#u{I$7$I^HrAwqUx3T~B!%W?< zht>@V``Zh^@tn!5ASk z62e(&WkPHPBEz0@=UF_v%;CqsLp|@2HI#WfpkXQ^Gn%2f3>Dy&IMM4Uy1a=FUPf)t zE0t7KM5QoG0Bob?wKe~j&a;}1lWsiLVMwVLi|?~ms|o{Ay>5ouDAZi=hTZ@HsmfV-YD@fdP7#PuWoSL7aros z7rx5AZ=IO5L%89~Y~wRcm_ZUZ9JLC)HZgCw|L)&akWg~a?4pr!&{!TRTSN+dMVka_ zjxx6TaK&^y3TMNxleug?b%gLb!D?26$JJ$=Bg*hzBT!Q%79kEKFWT*~_Z#1(adCZY zgAn$^P!{~Gkf?f#>F^~JzN6~dn3z|@pz0Oh$mO2tP(&Rm(4^`_2-`sON{hPDt#TPe z*+9sm%a-=?g&k(NiAw)*1 zfiljD>O7TK7xO|cnq)No9hqH9oAC+iqwTuSQrr{21iV=yStstOhJ z1O{C(a3mAebsn-?FMJyE}HRzSoIx;fK(1+BR%WhZX3d=GHU~-vZGz>{<2vZkA7?ez^7o!TE zaqy$b1fNj+z<>f+Zw4((szJ_ReSl52=qBY zHWOsJ2rtwyR=1-Sv6`U43C*(N;7*rnuA~>jXM4mq3|66rk|9B_k4Xc+IR>E;%TC!S_`risk9 zNk$>&r{x<6hXu~`VdLZ$`M>`f)v0e&^^YUQ&kAh~N57HK@fd<`%yR?7(;drCClwFG z$~DH9FOwsBuMB1#L$C>8fB+BCa+5LX!1Ork^-Le9Mh+-8FuIQk5D?3QP;ksBm6E21<3IqCB&P z>%8F8Fou$7f`j`qQ$h=RmxN8Tz*i-uP{WdGkx`LKk3FWKAr-16GQAfwyGXPYBWd8% z&W{~a3}>npOhMY~(q7*nUf)5wgE9C|Oz{I;auw%XK{2-8bD+!7=la{72W#!eR$cWI z0*Qom>ftz14LEFLR1y>=Ils#MmmeX0&wZF+m=;1QFprly+5*!CdU48NYAL{EdZil5aXSw;2$C&!t?~O!-2U(^bb}+#szKaV4$utIV9a zz{b%7l-A(Gsq2<210Yf2g;^0*!A_J7JZ#h!{ z4U|=i?NhA(*%RcuhW_1m677N68ssQN$WmKDDQK$WfOAl}&@0su``OTnFAqAbxN>5D z8h>U&n-hvS>D8)*>|cst)Dq-_Si*v3BZKw%dlJ zCiI58hZHI=Z1_*R%J!;Um98omT}gjPE=9jpz{9WDpdv<=`>LPcQkN@3FMvVdLu*>G ztq!S5_I~eK4uAUzYDG@!9Emz&9I^Tm!t2As-Gf6VAPaM?jeuCm$T&(oYQK0folwDr z-ii8IL*E|@8PE-=29Hu~eV6Xb1--t~1$I>#s8S6p{t1I<*fKG!xwh4@;VO0syOV^z zD1RhQmtV2{^0VEoTyb9zcwtHm(_t!Os1*LW>+-jn1D3{%t4tq1!}QuF?OvZcidFR- zR23t>#v)`Ek;!s!qT18a8$$Dt?qff=Ksg>+R-JJ4GN?_(c=wnqC!kY+Esf)iDrbytxGY%;>PBKYH1ZYaKT^u8KwRwn)xLH-~%EUGG1Fw}-Pj+4_S zA?oF{A3MqZBTsYq$RV~4AE0VBFrt(g3RPU?P-hXz0^UU4Aksy25ac)C)%2;|f$RpO z`C$e>Bh&-k_68gp&NQ&i2S^v+O7pP6*8Gkj!BGaolwtNzhdUP4amgtstAeMBK07)R zj4xD1{$}U(_KRJnlssPM{X3%csTjFWVZlvI5tb-L;5eqJX!U&w zn&kyM*DkVZ3>)jp`d2#SD<{zI@qjsne~<@{%29egPwEb^CVS_>;xH(gDz$)#HFcyHR;V3+nw@7)v3zlr=Up)#of1xn$j|=!ePM&4g_ld3$~Lq9Q4{!2|{(WplUC(u#l>ylGAnAzIqjz9ftmM*Sx{+^qW zeGyJ#G^$YJ0uS8|VHD?G~9}FnhH+iPJ!&=$*In)=cD=~Z`v+~qyoiZVBWGnc`YV8kM@v)MaKQcT8?a z5EP^ep*MvwH)4{#$kYMM-7V6aGiKkFuyjqGJqtDVHz2cK9xekhj8th}TBCLG5{+N{ zEw+{~aCUQze!ovyx?#pzwea!(+}r%q*V_^wz206`U$@E^9ehgAPg-Qr23@xj35~>x zmld?TOZ}ynX?^#3j?R?4b8CxJ^U9@#yXds{QyGgohZ70=$R@R+;Y5cEm3|W&9l#{> z*w!A>TN~7l#LOQR=B8k_rZiMB>KK$2a~D>rZ)}rYT%*6T!tUxS?)lSnwzlY1x!+sw zhh0{HPa%BijX1{}-8XMOmbDWV?vIfFI^NXlMug2`h{Haw_cdlXlr$)9#?x=Rm+!py z9XxmRAcHie(ukfl42&6#24Xt{``DC7rhA$O{D&{bsj!YKD5}kq;C0T#K z?8Z7X&z@xF__OT!i*FKLTw_4RU*%oSR0W&riQ+^`E)^b53_m|-%rmcZPRT3o_f4O? zFns>gS-T1RLMHrlBIcT0!wAylBRZHc%pHp`Z)0wVGj2*U_SlG;u@mjU;5ycTbC-1w zhyA)rm0efyQkiqA9PqtCmmTLuE#t{{IY6TFvNiJA2>FfQ>TPuXE(b5k8$7q;YKIWH z2kTSyy6O*te6m#DX+=y;gk4p?ok7N4;b)jF3u0L^5mUy7y&dCzn%_PtqtXD>dr#1h zEA{f|x+_`Jiu0w{aVCc-1SRn!>|ZTZe?<+C{Kwu__ce_2nm_-$oF8p)st;^A*H*}kTz)o(n`n{il~$WPqAPgfa7oShh^}p?d`aQ+3&uQJ!>)d+ zyXyWPi~X8B$i2ywf36U?vp-gE)!UQD1mbSW;TGV4 zD6{(mm;e9( diff --git a/static/images/apple-touch-icon-76x76.png b/static/images/apple-touch-icon-76x76.png index 2c3f01140494f40bffda4f3b98ce0d3b53d68028..d9064f8c809e20b3343450f762a7ba7dc3c1d74f 100644 GIT binary patch literal 9160 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 diff --git a/static/images/apple-touch-icon.png b/static/images/apple-touch-icon.png index 72e0f27b2e08c5bd7f93a6481a09e40a680272dc..193593470f2620ddf3de3860ea564d09e957383f 100644 GIT binary patch delta 5782 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 U84rTD-2eap07*qoM6N<$g2t})5C8xG literal 6409 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 X3R;n&D>bro00000NkvXXu0mjff0t9h diff --git a/static/images/favicon-750d4390.png b/static/images/favicon-750d4390.png new file mode 100644 index 0000000000000000000000000000000000000000..51b9df5069e34ba013a26950419e0900a7bf4e43 GIT binary patch literal 4625 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 B8rlE= literal 34494 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 pM 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%0A;z|L;{_M>IHiNzxuU5=(ZdJ# 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 zμ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

    • T|)p zgkUhoT*?p_9CnnmjLnQA!i!t$^C)gCqC$Hm@q(7|zuGj>Z)InG9o`NftY-2;j&rT0 z=dp^g2fc9jb)wAiw)#V`5d+H67&P)A&*Ekzxyg%OM~`l`9hv;rO?~38%meLr+jbs` zzN^NszNb65?bMp&D*1C-ExIw=y;x0CpIhwElG7YMc9+`4BD_R0&0M>B6$ScA*KTqg zYUN(?j-UAO2N7jFy!N%P!$^)PnKnkph8Pd3C`g@_owK~<1>f(Jb zS{wS!%jAs9Dkk6ifsc~oI&uBdDeA~xB#7Outr+xy9>mD2$~R7-Ev0|-4q_AWbg)ll z-O^i3Xf~}hdi&OfrLd05_5w9n6lN>OKxaggye7ULL6M)3O-BW46pBDhj1D75 zU9&|_Bnutv^Af1k>zm8Y*YvN0H)cJxi|hDI_w>2=h47Nn-7bW;Vs z|C_!4fU-Ti&ilac=3MvQ$~nIr`*qIUXrK{^L=X%jMN^byD|uO-@vO0DW|_;o?;F*vHj%`HuwT9jfj^>JO9)lGMLac6a%&sfmOi|4if)|)Ek@~U=x zs-T4;>8P4qx1ENxa3Pla0F+TjM&*=I)SKUcZ(@wVWT&oxVs6GGy|MW>j zK~&U;%_s=I?C?%_Xjp}ASCdn4-s3%$(0RRJP}WAv6N<>H2{to_ZZo&*g)3WCt5TlV z_R#Nsb^UhG?ZJLW8*OOo83I4f)tYwZ5-zX4Aiig{(A8fgHC*}QPYlo#-EAjL{YFNNb_l=9g;usuN0}Gm0u69jH|;@xG&qBoeBlnXQVeRRpY}6}fap(Zhbmyj*FZO|dz~ zIAN!0@%1Y2(W$o8w8Rev-}>%OV0$&RTbWqgLI>L3f*qb{HL8xEMZxy69Xvt^_F7%1 zkB8CO*M9XM8VqUA_JukgjZH6D)oeA;)*j|FIyr~#ML;rsmH^)&W+Vm%nai3xfDquC zrqOIEc()IYSa)lRc-zR3OAMHpnNnqE%N>^NwI8(6>>r!ZsYf2u_Qr-v`H~87@J7!1 zJqO+Xj^7v3FnprHc&0~((0e7f=ZC0uV{#gMnj9O_6OUX{ZSWB@KUcNUzFUa>-p}^< z{-3}9@1H;UV8hfNf9EafSC+VJ?)!Uxe|cK^Po9w;9{t}A2)|bj8CcR%?!oWuMD_J! z%nWP#{*C4@tv~qwC*9v4z5lzv^*`eGb$7zw+JkvhDf!`ZRXftsdT=zC5ThA-YFt@7IUh93zO{dJsxC=Y2n@aZqlq2pq zcLN9PS;mz7vlt-mv@lp4 zstQPkAYNAb)kp9inwwF9du{FSDK#~v!I>GYTzyv+0)MYmbf+FY5i7%r(*d*-3+Lno zH0s5ID?`@O7{0FIY59s z&Z?U+gDJR0>L#x>P_e~13)Nl%WPQsrds?dO9yx&*pBUE3XJ1qxIH2Orv0IE0ARk6B zMhI?0latQLOPQR@7#vCVxn6XIy#tL-%`v7uRS&Ttyx_`*5RTchhEJVhJabx@pK`&d zxV0q}0qa~=p+pE{PVhM%RSC+mfl_eLzc}nIX|a7bKeIDS1qf`O3S7PHTT$4%CwmmJ59=5aiPw(e0I_v{M-M%e*fm0vWhA;IjfkzU#R(X}sGs?*0BBu; z^o}b9Zi|VwVP+X`<%2ba5kekr+t+NnhWkB;%*0DCs|KEQ2sBnkIcGSucH5nBw?#)Q zxnfy!-QvFMi)dMXXI^?yF?{{b)vFp#4C~<5GB(>&IyJ)m@&5S#<)g0&z`UyrQ4{>;ImPd|th74c?129pB$n-4l_2cmfRY>h>$&*3QzB zs&{T{Y;ICDe_MHiwIv)h!3y(_3Ulp;Xn1&^p>$l2ERHFO&HN!@^B`Rt1?Y8XQE_WHUqkY6i*ZrLL5Sns3>1XEH+vR;fBN+5l^wdEp8D#E<{5+K`uf@4PKv zIxRmKP=pjU+da2nR%YXnX$%dzn;ga8gBZa_0Oc&7FHx^`;lHPms1!7>l#uaa#S@RTDejDdaSW z{}#bEYZqW8);EYP1&qLlAhdElVe3ti>Q@FIB1|#9K@HEG(owagp>t<-;aRYvc%)lz zy{dhPWME`Mlb0^JlFwn=7$!D`5lMbqoF|@IHGt^&ydud#mEV0$<*g;xXS)q%RIq_+ z_CWRWF{Cx-Hc$e@^3)Kq39=fGMbu$Tci+9{O19X^$u^(SA@;Pv-gdPN28O{-FMMH> z>ngjlJg!_e@qEY+cd9n(7TrI5JwWz8yB}p_qLAlZ^ko zD!1++eVm(hJyJ1Pk#2}`dk0e zzo&kL)+XaNK6?^uY3Rcr`H+_G+)#cA;Xn)+n4VXCZPgWmFmY5PUUYVC6AZUBP5}Q1 zC3t^GdN3MPu8If~{0BR4!DH%$Bb_*N0#ZDz7F;YM8r;Q?MNzmu;x zUKE@;q3G;s#0TTZ7!5Mcr_U@9lX-5?tI_dMWx&H!GNF%s_(NJpAT94^g?%g-u)@yI#vv8={lV{-q z9qr%0El+<`@!1LW;?^q!#tXlB+Ukl1!(ms# zefGI$nCGgpa2h{i*h=3SMz^rz1H^uOd{(=B_VB3%#bM_cE?m_7*$b}PhE;BP>d_A< z6-yJ-wso*{TMZN02*m6g-_)rWpH>rly2txi@?aaj;>Rw#m9p}it9;K9Cvz&7j?^%2 z)~zuZ>+;kx^75Se(h8iUtJv5SJUmEjY$?oqdHp_c&oYj4D&W7ZWJ)i-@S;Ba=p#B> zS=KtQD>IjS4UYZ}xNUxOT{*_0cmTG+$xPITMzL);>3yy* zfUl2ZSH^cUXoVqg_{Oc9E^+hR;N)INa+nRDx4J@!Sh~{^{pj%Y$aM;YzDcOipWRZc)oCTS`Rx z9oJ6!yDGl(rkXoDN{_=$i7`bq!s3O8)QqQ9<5R2T#5bK;f4bEo);|{=Dod!cW9+S zUK5CgTs4wfy9vfv2{`V{_0kQx68;rSK03gD6GN&Mi32sXAi5_Iv0nS|CF4ea3_beZ z<6q9==%3je{gKB%A%uS>58JqSKUey`PSfn%k#B!PGnX$r3|U^=)Y&U=9&jwytLgS{ z{<v#)%;?(2wkqX{PR~wjp7?tIi@)LU zr5Us|`|n=ypK#&tXTI%W&wB7o{`>x3^4^c{4$%*?(EXm{`rSVT3TUw9ccny9Z8YHO zK}H*^%jz7iOtN1oK>vkQ9Xl~=TXxTEmQ zup-m5>JH7x8;QZstrb_0&wB4U`&WLG=?8qg-%Z>1ePHL4QwycH3=+U3ugo72$AIe@v-U=M_cc z*-}hrcNflwf1vC4;q1L&3*KS8zpeo9V?9CD>j-JDW~1qn3GMWm2fykDt;GL(kM+N* zbM}5Q%pUK@M?71vs=NNSv+)>w(u@ABqh~GYG}S-g*1e19c562hPDWh+)|RcK+ui~C zcK*U;J@U-6y715yg?&A3G8d_#5%m${%3ZVsdeiIky2DcGR7#INbXkF}SG()zMfCX- zA9`LN|Lmvr!UsO!HjJ-+{cEaPtG=muSII3Dv4d3s4b7a@>VDR(7dFtVeFG!PuB}R# zfK|9_z;~_eZeJ>>;@Vx+b~oHcbIa?|xu>7j{KX6Sb02*8r1FJ2yfvwXM;_MeSFfor zkx=gb9q_t37>t2MWF)#+NrQFLG3 zdeP=w1vamhX0~dWV2&UB_XJQR?V7r_>xGVukBlkGcovEWDmN<%SfAEJze+n>$}Qh= z>*YOO*CSroOB(s2rqLQF&z#kME^ifo-P*Vv^zsD!@^|a%i+FT=yrV!OBCl!HQdaG~ zT~~Q>=+tQqqp^*XY`*!n;_0;dCq{G@9en32uc*AajgE^Edjd)gj;QS61BhpX7cVOZ z=bL``ii(+{x*abZu&7DKvl5J`h5qW5xd!Gmg0Am#WuT+73Sa4w5qF5pmVIpFy%)l^ z@WrU7tt#WvtaIICivm~`>WgcT*EWu`sx;tNRuLwikSCjUEf+1GT6@7ddfE1*{C#On z&d<6-C)rFMo)l!h>k75nvX+!qrKoLd5!kakw1DolLy0}F4;?!$nZ~sE%EiTJCb7+k zD%OIN*IQMr*w}>5Kl6enMkaNozRP;n;tu~YB z?<&`5+St|$Y@N#1=xg{z5uM(_U|Z<=f$;@ZdH(GA3oaQri0xJm4@|W(>|r%3=q`M{ zmx{^LZ*97yD;LkHh;D9|YN}`KaAU@;!`U8O84l4bfO+V&9*2GD`r(g$ zP*=-CZVlMn-thCm_Xj`YB7f-T@Bh2?sr}x@?Q2ll<-#BQJ;CrjGTPJW0d%9?=l_Ne z`@AQa#><1!QMIT2Du~U6jYfNV!gAht91;$`yz$=mXWzg7?;BtIdDV+{;IE;Nik46Y=b=9kunb2`{#H~-Hos@B>vFv1kWdaZ~Y8{U{(LQ&K-7?gCT?3{UiG=N)V}tJJD9$M_c>gYA<8wWEJ6-Pk_`ofs5$V;BFs<2%x=>V!NZ6fri;hoeV0ubF z{Q1x5V;}jDJBjecFMLU_f9G3TziFAukUiTR;htIrK+_xvP`7z$Rx4^$0oUOXO)ShQ z80K25*4P}-0X;&P` z77GAk3KH2UYjA#E)?~c2zposDq_DRq>$_{FkhQ?Dx+Vc+#T?gF2i!2u(EKT_A?h1@ zj2+izo1%NG_mu!pidN158|q*(5#+jg#;4uX2*f%Fp|%s;W}CHQ-fezZB0-I@s}i8br{~=1 zmc#WmUQ00a1F!_m#_qn7;g}-*{VHI$?LuC5irj*GX%D|B5?FD<^ysjwS$|wEyE2CD zp3l{o4-X8eZJx|E<+gSu-p8Nr=Wp0H;9z~9{Z=}epCeY{l3;C{09J~{Td8SuY}{Sn z!~#GJ&|0wQda&mM?l&HlHy%@NZJBW(Fb6#N3%-FZwIE6n1e$Hy#BCvMFr|zU4Q%%Q zy){T^Si6Tu1ofu7cgy5DVvOx%wza70y0XCyhz74EVA{#}*1?Vj#;n}gfT~;T*h56V zMA-SGl`U>z+ve*Yo?o%eMF^NBW7M<9*eLT6>{D=HT#IK<>xpL`$5*hC41p9ou`D=W zFs$RvE!DTUJ_v_x*83q<{i#0J3$0B6_G1%G?ypm-LhX7QUzk>KD5WOB#t5CALQ4+~ z=<=0|+9!x7FF%4ES9Jd?zo*vjf%1oW4Nc83?#yqyr*IguxW1*S$6wI$_K}vp{uSo7 zgV>q}BU4IDOzVYDe#-Sk*yeuTxN#fuxZ?JdtSP&RVcQ(sy7rF4EbAE%<@5cCsB(~p z2;|g=iuH9EnwPmT@g{3kx5wdFPa`kOa&74i`UBd`4VpOkld zOZV0{G#dx7J2m$8ue;6AkDfWBg;~Z2JN@_HNwJjW^#^ z=IyK8e@Cw)ZgQ5@1=%(1wvxzxNP+dcuyM5>w|&VZbLayreeMKn72~?|&V5%pGyyrv zGyfd~Qp>Wy>v`S48`fu_51+~DDn{U0TJ?y|vt`~`Q)-yZ^W|SDWt$TNL zh%aS{Db<|=#o`dLAn}L~@P-mjNJOV5G%z~q2(qsOwnBI))Z)aB?VrY6~RBhtH%-ItILh$av>Fii?D8`9SA=JQZk9B*RsuKV_sY|$X%L^XY6i!*ZWCX*H}1U$fgd8i^&wb~ zSC`f0xj}?(d;ro09@@sORVY9SyQHtC#Vg3Hos6HteiC3s_5fklX%dTTTx;C*XSK!0 zC_-v<;j~L?unpb@B=^*n%kI>2d~iycqpVBru`IOe`l`G`gT#OCnb_mm-qfiVKj2PZ z8WyF&x<>v8;<>5k9=oD{|8M+tefE>jGiPo6mw)@eX6%AGb@rlu>L)(0(+jiu_Se4* z_JVO>VytgK!5HG~a95`3z}$B5rLC1E zUB~7<%uyflCCywEO8D8{hRYt0O-{Rh&J|zW37k%D51aD4N*C3Pm4i=e06$8=SF*=B zR|a-*W{$YO$35<7bLEbFjfx&(9M7LQt?i>@{+7|FKk~BXh!soV%H;G6LMg6O+>6EZ zyEkuZ=Z)8hCkL9p^oWv-K@ChYd+`m7YU0cVhaXm^|KRXg$9spaT1XWiiXqPDxyN*R zfcKr27vXvH&TZYhaSIH-u5s|}g-?FMRax0blpR^$QNC)}Y~3=9;VU7yiIs{9L6Fk} zX=RD?L-3t&8~(YrqS4D|bP^7A``fQN9#bNg4h|11zrF_!zjDP!NnN z!THZEbFbq!IzN;o!@S%@=L;?Ki z5CQr6tFOAOV@nXK9v-TUukC_`)_a`5!`S6i&F;W8ays?g^Kgw}=4TQu(*+A_DrZaF z_XFNvJJ?p{{%xJcW@qpl6Gv8dZU6Q?O-#;eVD79+Esr}zUdrxkb$dlUUk5!tqzd>} z-rQ6RzmMXh{rt|d=Y8#&908a#dk@g6pT4W5>QUbi40vFztgPkr$3YVJ@YLw)F*u+j-)0>0F( z6`bB0I(J!HYg=#ubR5{-#dn6lkH;Q)Oj8qMN`b@gTzgyJ_~I8G&y>Yzxb=(AKaXve zG{F5>|IEX!P2Kw1*OdXUtfc!OJn?|>D8tK)qg$flAvSQlvjN`)_dNt+a4d=*vQo>f zUX{0wIPPS;pmlJ>{A5)o=GJWS0sdiq+r!NF6g+CiN~pnA?K9e;nEK}yHH_X&C;NF{ z;u7)Gsv}L0rj)H1C*tAA&>#Q!H-16;2YrC)50(=C^vC;Il${Jzv@n>|9=KgtSp~0i z>Jmo}h+kFsb?Mr>PFHlZ1;Iez8&>|UuI#(->Z3pWIX&~tlNtu^fAu%Mrv0OwJ9TTx z0^1uqvT}yU1$5r#Jy$YM1CzYNd(YGRneXpC?3oXq{oe2SCqBMAmVfX*@9*)x7Q2s^ z)vM;*xqB{+{vyQDcgv16ycN*mjH;!~ejKHRV4A{x@xBH)YV z-Hh_Jwp)AIhkN23CzEj(GN$Ed86y7SOV?%U(v^tu1DnxpSN`n)AIH*OF& z6K)-^iVkS*ZmD8x6S<;Gf*VGUp1ycdUQbNN_m@@4AFB-ym|r}p9Pum&Pqg*a%AFMr zPcFiz@~YVSQlp?wy{f^A-mJr~ zqQS6R%Wf2p6!iDh34V7?=RGd|{m$8gXMOj%fBH-Q*&g2=>-YP3KjW<}wCUcvX!@wz zz$)bn_(xYAxVFc1upJQE+bJbkl3Rc7Rm$@8ELGo%Th+CbE$TRzS0M}MhxgX; zor*W+D#i>?PQk5xs_`1zfVWL_CdI8oeD-sn)L;55e?gZXKBq&t$uIrFuc!*g2wO!T zxM#Cf*5%8m^|OEJFR55<>tKIZKlG88^yyE3M$0?<+N(93cAAGbSA6Kv?6J7HB5u{8<%d^;=>K)>bh-xLB&-bkNYKOdW)b}h^LQiJ;FCqAw!n6-T4npJlNX65wEcdrB=}`!ROn0Nr(5HJ$c4e zkSK3#y3P68@u4g0Tx~E$Hir0K3C-<`#x*!GlwrPR-RHqc!yTQ9N`(cso&X!0ofc=zr- z4WBxrKse4ARa7b0)wNg@3c7<0<+XKr$Hx`6cARi+Z#t=d){{@o;Id4nE3`tT+B!MoD#u6nh)t7P@zkAGA@^;4g83584Elg{m#`hVj7 z@8{>2Xa8X1_WTfbX{TKC4}NaoPuCAU`u#0wj4AmSStj{Udf2snaMm_#rG->aKXLXC zHj!=P_V?D``~Lpu&xhasMR&^kG(Opm#MFu<)eV3xd14UuRwcGri&J0I?ISgZ+aV!;tdUdyL7ktce~$Dv?ULpk2V!7UMfOZzt$=i|baiU7eQ8=4jUWTdS?{iBWet zr)|=7FHq?1fE0G|AiDhH??PMs|ZsS|B zo+HTtO-@X^1;0A?Sc8zav5NWWA${d{e?!0ekA6d$^ihJYD&tcB*7fb;f;n>9)Gn!UM3gWBiP1a%%2DNolU7VVmC`uY4_nL7-0|GZG&l zNZ{-T=pu=fJ3Y}-M*#v<9I!8C_5d9M>p&V1tP%9MpA@eJG_9OjCl+^Q3>g#zrk8sg zCa{jH?hVQdkSx6PAsy{+sCTf6T@(S2ZTSEyD+lcdoMSw<$;{aTdEY<^pt9 zamNiH4lD!_FFTvp5}g^fI8n_&RAC%^pIiPzh~=&huQ7yHN%3=q2nqB!GY z3t6^!+kg5j_T+IJXjb;E2I!6^!}2uq%vVu9h(LgV9VeirM+X!hh^Ywp4s*YQljF+n zt}*8ohzX_>i^|7!w0eG3D;ejc&7IHuKS#7TGVW%N{uCA7e zdVH#bFM06Y0KcyuAGuR54Q$9tlQhZ=rH3aVN%-=+-%=vjcD)G`iMSfuYi{G#HXEI< zK;>pHKBSRT7t~4($vZitW+S!+~-_(>Fzf`PWyL(v$(!;708)_Yw6dIo)AT#dR zo_{o@ZW!{`^eQlZf_n)nzp|vEN6x9*1Rr2GGpA4LpjcKNJKEb^*6rW=4eX>VAJa*pLC^d@gCm`oUhD?$?QN z<_ceM&~E7d;6LB}{$MfmpZtnPk2z}ZGp{F3yVFa)Y*r`6MiA$xU9f%q?y^2~;gpiI zGrD!-uD*5WzK)sW;dVopKK>DTnEUnnOBx|E1bA)gsizbH6H@ra9OE9ub~HV$SAO|d zbQiMs(&bB9ICoxNo|9yJzy0>x`c*624u%_!SRAol)?SZ&54lse0qi}5n6XlxA@0-X zu@m%7t!*A?zY|hEUs48QVhg?-v=BeT?{7f`>mDaXld{#`PGJPO%71GPitLcC=w|qh+UjyE?dcU5(s<+RZBS z?$r=})!g3FZ!7|AwRLZ0tt&juDYHUc6Qa3nVdd# zPTsyDRaX(GwsAK)tS+%6&S$!QC|1cKLVVd-RcGn021X_vL9KV|3J#|g9UlQZ>dLL& zSD5dU6JxGCe0~$628oO#kb=aC1B6qSuNbe1#UR887E4}A4-63Jh+)SWx4~_tW)s!} zAM%(;;ft$FDkCDSa)6cSi4BY>njBOce6ZxD0RC{izT&d_tW;u?d6;|XvWAJfd#h`@ za`6KAVw)uW$}L@0{{pe4(?nPesy95QD-hTvaKULFH z+T6+O7k=^A_3Bq&(_j6Y|AAh5@de^}$(2-ITU!BJ;wtWCToO?jB0hCuPR9krBDP@% zBrjb)r(T5lOD37FfY$G>YJdOOod5-Kv6GVHM7-}DLanq z3BjY_Z_P|mnazD-vSp_Z6M>5=5(i%X#OH|dUg5on>9+O{j+mP=@iVRrcwDVy74Ky!6zQkGoCJw}@v4#8psDqvx<$ z_|`Gv!7^e;r{O3Fup*e7KU`NMzpJ_>10eE;rzaF@)?DJ7ZJJvtx()nbd3hBP(Zzib zNZ`J03|g|@4z}B|${^s6ui4YNGw0#4qbkC)EIHwLbrqrK)6E<2$VvlQMs+v@9>Di} z!47c{h&bng&$ap4dineqWB>Rw&*}Q@`})S$zM(hn zEW;_8+tcS%+gjJ*?zSqykh08oG#1oF6U=X2Qv(c37;mVQ6fgLVsT3ndc#VeO|%zQRO z0rhc>J)VDRXk42&ZYel3r_*pAzf~@<{)}*N@%k-n_wevg{zO0?@WxL}Z5SqvSk)gm z_U(7{#LLeqH8-MTc)j&yN)fxd@H&MOlDsjI#Fywe2AF~8eVqga`ULwA19_*yL^tU$M|Q!@+1&vAJJaI1SOYJjcAF_MwE zYT!T+KK(O4`Q!5T>RMjEr|Zl2Tv_9#Z+=amyR_%oYd_b*R;F2245x~ zwi@yfLmqwp1=V=XLN79u9v<5|6{oMH60SScWrliDRn6N6TCHRa?4&e`Fli z83*kKg2YU89yr&H!3(+LG_gtWgDv=A8Q&kn7L(lP_U0y>u%TEosB&f--g~V6sY#{5 z7EcB4jIg&7hwt_Hffq;r^r!#p_h4?{?*h0z{3r&2cj21CnJcvFi zgLA!FK?r)q9(f+UIHB$`{)}F%7r^tC`|1u&$(tC~#KfHb*I)U^THQU+J8()*ucLH& zP}Oc&PrdkY;yc;|JL(h;R^BXTHDxVbA{F*L%J(kME7)A3XmDd;DqR znuZFs@4xL%y4YHXwb5ySeR1?=spCca&w^bKsT$~)^|p-+PNL_^N}xp*j4O~BR31E@ zoSOw_@|vC)Qf^~g$v)ys4SunDm-*RY2zf5PZKuXEcW)}%gpS)jY9322Zy( zH}CQI*LLpzjIqyGCq`G{S(#n=OLfhhxupKlNgZu7mbU)c;`L!-+i_O$iBZi?&+A|Z z9hJ*D477#N0?c3nfR&Mjka~~qsZR3yo>I+x@lfBqTIS)h(qIebgiyKfM)Y%R_&Mpu&$KcWIL#wybIQ-f~fuW_&m2j*uhe++La z=gSJEhjii6W%XMUXP!6)A5X{8tmpGsmG{@efIOWNE#M9=iYvkx>ip4JDSdsu(tul@zs zR_Z(7{<@xi^t{fWnAA7F`enWLtyeWNe-^zMR=j^w7tUVR#?n3QUj2^R=%4tBld8hk zx2|4y{@;NA+S*r`d*qJYT6EFcw4pJ&xg!SH*8IXMfgk1LZCPJ(J8gXJYhP8PQgE$G z?0}CyomMcNRFl|j2aH&pC35>QBL zQL)J}G-Vjg#+di_!+(;hXG&@w7tza6#hI(tA)1!=?KJ9c%_KRLgzFyb<||)!$sEyv zIQCma+vLzz*l`X0gChm8(F}3B&UMtfXyv^fA&BHh{|%l#t3GQ-%3Ni^{!+Q>s=KCV zXY}MtAJECOXVF+bZ4eI@PM+WzBWTf*V%WAP0InSEx#Va|{+>8>Mp5F)_V%tynWE-D z@F8v7hhH;B0>f0vyOutt)9iF-4=f5Y?^dFJ;mlc=6l`WxUlR02(SphrvS5>WDcl&RtxhYMaKdY6UBYo*BuPAozqxju-(aa92xySc@c0cg= zr~m%_8@IM0`sBoeQ?6@yDcgAP{1OuR>zMK_+-Ly_U_AMM>xX^r#i2iZ^7nfix9@d- z4}Nw(@bGBqcmA$?iI^r%EUH?nsa(8}%Yxe{qD{#`_zS?^KnN0=TOQX~|@ zXdx=i21e2WoB`5y+ns6&MnVdPBkEu@T>_>3?B&8-KV3jJM9{N<;pctLNUOFeUc=DB z3B?A66yP(OI9a<)AmuZftquXV<4%Zl`7GOLOiltWfuLJ3wbBdTKtSOr&dR`AM_ zvtCv$gbXi{2e2ERo>DRyR}s=>3uM!0ACfiJ-dWjD|H+eTPL8N=WB_o;sUJ|O01CEg z>#5ZgOC&WlbJ7KnuBWRwz%V{Bp#p#?0L9xECrGtjmPV&#j_#8+jOLdA0X*IiT-TuZGwSD~^m2wpok8|#Xa*)aPFs4=pFY5OI z6b*H&4^EcJZ>L8+09Oz320#uZ0UU%{HqW@n-9nVr%(q3OE{@*Cku9?(K|riqHZCH& zbO5+8r&hwQlF2E}I1TluRL(+Pb|I+NTFa$)wR2l>&3_1RO_0!d_^s6va!RwjN1GoJNCA@ zF2=G_ccloTC(meTVZklrB$6>b^~^Im+TGXg%DSp{d>=cs-gTXPMWf@B8XFlVC|H@) zx;qKMq`4lw^@{a}>ng@`IygzCUR7lS5p#b<4eqnJy`oONs0$Y^=$Yp~NT4Lp93C^a z_y@wOh2@%%PWKPU`ah11k7|BmOv|@!tB4QTsXhzR*7MmPNw|%GIQG6kpzrWn`?+Te zU|k6M;U3p9=1v^iiRsMdmRmscGgqEYM^(3ZR8w-GUnRau1 zx(S&Lj|@3m%@!*vG^{)=L5b^XGk&%KVcCU7fbBG5dTd(WdI$UG-$r7q0;JpuAe`c&lIo`9hwWq|?qDsthB#8*cwle#Nj5nXlfOa9@wqZWW*YTZqb^7@y z5nLx-&pshq2d8G`W6nkx)7_2xI`PnX=AnfTUYBj?TN&GWVNVfkzTJS7A)KwLy$7Ed zwgqHx$}-#&gNz*n)K2Nx#^TK4X-zMlQW+oLyK_%v+w2C^dp@Wywqm^mJp{ss7Ogq_ z_ZFo1kA45%myu-m-TrB;l(~RlWtP?yyZDgG_wMO)P7gQ*dNdvBgEb z`fIQ8IhY%s`Hj++h?9_sM$*97ifbw_mB7X9WO#pmPyK*9R5B3!dsdV!OLJ2X9 zFfL~qTjs=0J=&s{m065}2Ocoj#=_rdVIw2@KKuOBy18^$x3AyO^7Y$@?}7@)YcP)kVUVt$XnC)wGWL!+D+H}7uVI5W zuf#qgjXTj9v{ldoB(qruuZfY-sLq~Va2qH&@U72IY2Le|8rK`0oO0QNO@e=cI5q_7 zj@zkF!*b$f4Q%TWhk9U<;hsO})!dm=t_MbDYwJO&Al|2h4b@gx)joi19wBfLu7f8} zD>6N&fth(VnD6Y)HsdGeE}<}AmT}x7=K14s=A%aJl2YT-a05%=={o<7!WF9gyUBd| z`TGC_)DnYi1K`P*KFIY%wY9S4uq6&jwQ@gw%ypTu-&nDEX)A|cP{b}7@KGd)L`WN;8`oI0B%6UTi z(SQ4|xsB0pe)AjprC<7Aw88kNA*N%*}rB7;REU7R4&bRen|L6Z7HR35(T03*&mVK)0$sL5JSZj!qRj0sq=kaSRaT^($ zQZ=527uYFsE8*Nxrr6NY)f+123o5?*uG%Am?sIF{_Yi{Rr57I8+4)KR^}qPzdg1Z& zy0f&dzxSX2m&$?4O>aPUGT%;CTF;urQ>Rq~!}k#0)+aMMJmj)Rt%Q3Ee$~z&yN%cd zgh;vGLeL<}*6(Y4pifV|_(5W!l+Pp5I(6j{kK0Qt;AU4RPAn*rN~^+MSs(uZBCLVU zE#1D2SoFgAyxPBh%bfr(!#(%c*09y6ODt@Ism2Ayh~3k(b81#<+PQX1y@8Z^2$u?6 z$x8PcZ?zsXbK?WrUA`_M&a65}3R~?Dd-bUgKd=Ay|Ko4yL(iVp#$jDw{N^k2#ITLY zS=9m&mq~1kMGKEzK`1wswFSOzQx$Br4$h5E&TvnMN_ee;Lq?l#zoibiIW#e=iOG{% zUfagETUt1G608Ciz&neDoqA9E`0xJahK9jzS#MG9tAou<!)R$D;+f^du zgTGF?WQ1FHZtFhtSi|OQv!nn=iV{El(WJ80%c}-P!!xWZOADt4F~Md8tF`J#4HA3d zc{}S0FlIw%E-T6XX7_hoqF>bne>9}1RX^bG)hZYP*2b})cVGVwn6juk;{ZD8_&cv? z|Jn`4d;&yJ++k>FT*pOXZJ?_Pd?A?{(YeQ;c9>$Pcz@_KAJODk zT6b3Nx<$^pnOPmdKQhEzADGwR^Q{(G2@de+<4=IG*mxwMa<{C+aKE1W;D?#dnD!5H z_B40;xQFlCyyaJy_&G1+ljG0v@hNQ42R>%G&NkyzK|{go;rK1Ey@1bm;ZhN>Erd9tK~mFSzxDw%-{JJ#_J5#xkqJd&?S{n&9)Zx_#>{ zY=`%l#NNT0x$!i9?|1refA2u$Oi4BTX5*l!)XDQahgfSpvF>KsbqghpB3PsF*f{oi0sfLeo9u0E zD#Vyu#gNk{<~2h6s=|*vUbs%Ps2X@>n$0Ra*hW>!P7;G(?d?0n8A}`t@%1OG`R~f- zKlNeHdhksC`~F_?ulB=H#~*BC>AeZSxjR@FzXq?|lE!hrQ~(zW#Y0?=`L?v4EbO zPiw+kRs;+H#H<>3{` z6P0$Bolw z|Kp#*uk7(B+CVigPi0FdCS#hKoYYaSz&xUHz}BWEG7?`?XU?mgDXO}*#r(!JiajKW z&v~?F4Ba;}Goxo8zo;Mo0!O-s6iQR?c16S#-!B-;P zr(SBnC6OK2$+S>U?X8>YV|tqCLBT8kq{qM3{`qG-XDS~_t5@YYy33HE5%M{C(N{xg zk5GD0S@=kd!J>*|Wd*<^KDFy!^Yv_0NJ|_IR)H z4tA;<@}W;Quc_O{N8pTB?$ci3hv(X-+FE`n90r4|f`mu2Cr={%eJWK-Xt_a+GUnFe zuvWFhN+o6B<&b}Q;E7)1ohA6z;ou6|UcsPZ#7j#?Di^Zo|Gb^c(5cfW^wd+Ab@9@o z-nhD^zy1IFMeQ9|6+ly13$|Fhs?U7xQ~HZP`%_w3UeSN@xBiy;QYpRg!gKniU;O*} z{ono_*P1GKn2|3%%=?zLx4EW;*)i9uuZ)JK7LqYYAPb#yt>bP{{ zXir1qBkCJSxb>8P9Xi3bQiBP!X2Gp-*#V;>T)J5=>(Z4gYI?Z7MniSm%nW$Z7#+qb zt&e`{hc%3z9G#lg^uh_HxNlpBE^b?kxst5hv8{3UqgR8GxXM;07|v`hC-LcVe(#eZ-equO~l#k-d3S1vrQu$`fPn zjU-iWwYlG6&CJc}8^8UVdi(3&kd^Dd;Vj{sR*Kd(xx%~9wiO*6g8_GLI(=$~s#?rrhcUHQqINJ@U2Anzcb*lW z99PiRHsNM|#<5-^UN9G7^lXjKNrB;;Z@lFWJA}E1$rC3W-pOH!~?+nq{TO+Y9;JFg>b_uyd9RlDh(Jf~_fgb(6hye4XGLW2R9oIf~!LSu7_ z8lRle{%dcz_*GzTY;Pw*EUFM=+W4wfZ}k&^SGhL!V{`X+MAX`${E$?_ocGY(egn>vbU9PTtz{_b|WT zU6GEs)QiJF!1ryU{>ymS#_gBZzWc+UaDRXF=iIH|a~jEfxU_eu{N9l+o;j!Io_xx! z6WzacO_ieAX-}O@mftlsJdZ60LPJ02LFCpd$ni$o)}7r+v6^iH@+7QK1Jlz8vzY1_ zXQ$J|pqr4CsJeiYIg4$k)&L9}w=RG0@nt6*Q)z$zC+XPn{yKLB@eBssY77_Rli!@q z%Lm$u17g80)HbK=B&`P_7)8)oPti8Pw8LiyF&rx`*tAVu^9(~}F1Tllg9L=y-li)N z5E|&$=-iwekV3|KaS?>u=1G3_0#UUCadiU$47RE=25Xzm*4HvQGDcwbsgNzYYkc7+ ze$;IaXWo5NBP0C`>Xv5DpHrY0)baW@0A6u5`s4jW>Tu0DKEI2Tj6VL9JH6E0f&6mc zQN&ThA5hWOSI%$H9AE)d>ipc*e%?a3OoB6 ze&!kF&He~(-CRaN#=XVQogCg-ZRx~wPrF_L(NtQ;jBh{YRM_9v9$;hT7N)1?bdq3J z*xDp$MF@_7C*t2uX#1_aRNJRWdQ9n&X+V~7>tnoluO7Byy)qkX8%iLA{17@jT4m*F zKJtl=>xV!0IJ1bLP$;E|*+sqset=iy@R)1HMp`Yv zudI&CuwVD8brJUDPsGX1qdR8&G&~0wTJgTIpEPzMujSQadT!tkwwxA$4}Q)Y{q5 zKr&8HAdrRw3K1Z2JhyN#F*VIK&Ztx@W6RcaxuE@{Egf1P%hhdlZ6m&zam1uyr_ZpT z81FxFa)E#VrX26M)9a~JLQ|K{suA#jMUxsB;yyOF@twAEh)wT6n)w`-l?G`vx|)0V z5gnDX_-RMA`^&N=yfT582~cbh|G~GbtG85Gzr+223y{CfJ?4@*v0Z^~*dw2PHxdtl z>@gqx+&XQ)rK_#)Ros~7ceT&bB#63SZr8CbwtrdvD z+qds%1VOUS^S#*I%rnm_yS1%1Zrsq=iAALrPw2H@`!(Gw6!p?W7c~#D*t>C4ufFmM zWZ^)UAT(tzFbmEG!I>z*-O8_pj64Le9lre7V#tUgHdDM zGmanS<>B|WEIxq0)woVuKpe#$KK9}>`pM6I5^`AAO~#^fcqlJ^AD9?cmH1bM&;%gb zhhVhJ!Yv-Eo!M0Yn>zpGa~eN!Ub%3b_r%sL8xKrQotQ_I5Tl4^{rFBHUse^8+*-P) z7I>1HKkaNKyS3^P9;{?fY;;O>#yQkK0!dv&I1XC)BJM)kAZ%7PxmKwu1<|(?_#@Nv zV0|3IT2PF6nVpzW*G_nWH!(ijgAcZj@XcduFo6y7u%`KznK(8%r3yaKpNQ+yY3vJ3 zvQo{KG1$ykWaam56Uj)#yWWQgj)wmOjFV8pM|_L{m!2aZ?{At*{*L$$)VZbA03sQ~^E@OP~_8X4l zSm~0jjSW?>vo3br9>CUmO?)-%%3;?I4t4jHR~_a*{@jbM+;292jF?$>n{dW8nv89i z_}U~Mh7kfO?%Pg-CBWKYu(kyWtK_O0UO21q%MZy5SL$GEwT(56jSlJD`7AECYb*W8CAX;5-MOg`zVxtu>PJ7W=bpVFUoxdHy?S5&-OvAht=zbyPSQ>~BD|rN z)^BD2QPP4hTKV#|yZ4!Q%Z%+hp_IVirbnz~aT~IV2msft%um3wLg9K|{(g`tU?bQ? zw+1%nH90!2nVCgp5O#OpdKHX71dcK`%voO~puN=cj6d zjA;{L=!g5H(kT_IW#T(r2mkBvK0SP_g*bAr=UUn;_mxP)8;DyaV(HAu(;DuN>G5-O z`s@GJ=ky~Vc~ry1lYFVI|Mc(tH`>ByufS>SRMX!5`z}!;J(SeJ`V!nUqbDAJR32<* zW_CuqTf5MwtXc?IYbOA(z-hM-ry-XFc9?JSzHq!=S;tH7>geWGM1Gxn!gk=1PkrEn z>LO0J5&wQ$oKFnlw^nX_L?yUN=Ji*Us^l~>)~{fHLTkB#Zfxvm9RXJ2e(j{Z$8dCT zMh#z|O4+>P@Qes{Y^B>1i9yvfMWwOlE;d<5l%_6TX8u}Ecn60@Rjza$Z#5y^=Jyu= z5@1T6`RRbk?OIRW@iAo&_te;j2T47ii2ZTMSq7~E)LAJu|h{Gm^~ zc(}28UyZk3M1QFHagYYe{eB8%{ zCmxdzUU;;+p)}*}M}N$rH5M*jaLEXDaL&qk`N!dx#F%quPiqL=*xB7wd~6hs(^8W- zaZFr2-rjV{Ih_y;rR!0H_w0uQeeC0()ZFB>w)ZkxT3S|aece_2=`a^rF!Z4-mo$ej z_88yu^Annki*Z@ePNA));t24fRyW|?-GFM$akm5Czxj>^o_|p(Fk}1vRbBtx-{jtt zTHCZ!#vWyew_`I_Ci*Nswx{ym20VHJ?bUKg5oKHOKzp@&9$7n*dN!xg`BU(`sv2Nu zFb>ydp8R2-Yi$!78drq-A4NA>88$!TH!wP;E_edtM=SUh0~1@3FkEg0TAbH0T4!%( z$6=XmHYb?NbTS0a9=k+H%UW+9f?LFSE1_rH=p^>_%wv!0fH4i&21H1zY~54D({+nJ zEuQOQ7%}tvA3w@W3$jWRrTiXRIj4ye=d`hWM<>T3@Tx8C zg1e`meA4mwNYH2bCnLuEshUsf8`$B8m$h0uJgQ!Q)g91i&_ah zm3HL~pyuGOmiT1J$ZjFykKFJNx*+~9>hXsbyWuG)RE3H4(N|*)32a!>^3J9X z;cM{|r*z`d!^HWv*1!Etb>Uv7FRVh4C37@d6?h!HZXiJpOm(OW*%s?EbkoJkS#!_^Su*8>$}5pWRZVevE$ey0$^P>uZVu7^}MU1G7k3nKR#D&M~;Z>Z}Q+dB=o{PBiDwXCAVNV{4qg-;;lrvKoM|COHm z@0*_=^rQZekJ=m&M?7#RPi|YW!iqv=bgHMJ0=mgg%GgGd&*N7Z3_3;&MA3)!fF+7| zlo%RO1x%}za`0aGC9$f^-=6%`kH9ne`OYm_YbmvTt~_Y3SJ&dglu`r4$~Jn!IDV(i zpRE;6pXxa@g|Dl=EH6S< z)!ea~p+3c@&%q&M57s1_Tr@UdEgu5#_F=Sx7v5ya_+3kqw%w*c*sW*#nmO=v$JrB~ z0;u9sE?)h?9sje&Dtpx*{rcX2zxVilpZJ64{NRu8_Yp7G-iJ;PwMyvp6&J%2y^Q8& zC)`GLm{`+4I-wpK)Lz*^@7vmGuZrF-WECR*MJ!<-&FO(xTV*^eh1<>_sojLTALmuh z5To$79x=$)rF+bg2P|yoi*Nw+AmiMM5F6nj-90#Sz34Uq!}#E-XFjOAn??QIpZ|w& z>J2rS+Y&Lco!QbLbM-@?{t@ugtN-@z{tqft;k=PPS04HH+J;JS%_e#;7z=1(ZcO>r z+ZtOKQ6aYvz9tlopaX(QRSR`=%#oV-tI!Vd5%kaw`VFnrtL4-Rcr=JMC}K-(JMjtb zb|F2s|I)~poi6r6V7tWcgCp#%JSgI#De<4 zp(gtW^zai;!^MIsG|?mwgyX{#Q*4OV^T3PF~GJX;CclFe>kLxe|%ugy54(icI9@WX2NqzGRzwO%L^)frI_1)Z+ z7gPQ`SRl5C(CF57F09$v6B-&E)W(gs z-CoeZ%#^DJ*Fg(5%Qcq}Y%LJ2>~$DTY;6LqQr#l2%c4okX!kC>!-oQnL{sX*|7-cG zg5fyxj<28p@E-unAN~Hl#~<_e4}af@+dulSQ?4JM7uYOaJK`5S-wB*ZKKM- zjjQMp>>@aPC_SP^5mE%W+Xmsu#RWb8^2@FUx|JI)6%Z1ZK@x(@;3%@q$yy1(4Z9n& z@&I-^#~Nu{gLzw&YTCwhtHU)AU?8k^B)ro!!qg?s_ZYk?KzD@kcHBatFO^g+cck3C z8!F+Xwy}hAQ47Piqv=rwIh5>E8BplsGfX5|#)X|~oWYUufT^9N9Gjg}DFcv=Pr8!P z`8(G!?t~LTwd0&SA!Q3iUAJK!=R0Jg-E!qQy#%2k;27dQ8b;6o&qlSx*w}&$*KLcS zTw4nO>2-XJ4J6FrQ3z|H4QORUd+3j^TAU3wKZyS1jjAf1YjPU-k{(iS0YZ+>GDtTzIUj^#{;c2_< zv>;<$vqf0~L}hDL1p;=Xn%6YrZ>2D;l1X9Ix*mIv`<&Rm2I(dpqhMpHM6{00@^| zc8(Rz?(h}t8_?kRl$r&`g!>OnOfW8fCrqpXya}UOgwKzB{&V{L=Rd3C<0JjnZ~czm zc=M_&4`-QOl>_Tf3}P4<0?a}D#}Wgq+~WSuwygYOfVrvRls&$~?$skudLf4vWcag& zC&pFmw%np~4Lj`Rv+5>O4%ks>YC}2(hY9}KlIqw(7+-trnI|DJN2;zaD{G}&Aup&g zRgSYd-T*Z`JzXGh?yW4VzPsx-BGU77YIzWXYn$rS8}777qxIkvYBL;FWDL*-Me5ws z5G2NDo5R>+6GBnovznztchbYkC$+5f5BC$mR;=fNKZZcT_v&1$l|hN)&(U~_Q4YxZ zIF~IEgU{>`6zX;EgRi(Pof3MDg@sM`#f5hU(jcM{3l%o z-Ok&uYhY?ZpZ>8w2WPB6`nW&FAprTbO(QEmVJEolWHUcG8}0DFCSz30LOk}joxZAL z6Na6!k#SdD;Ba|WO-R-A4==in2N#+cYy0-#@%`uzfn%PQZb90XH#GAs7-7bJ>^bB-@LoxO3#na&nQr@X>)ZA;qTLrJn^V&YX58h=vTGN_?;gaRt6lod*`km z=DlA1;+M3tx37oJpI6_^v~GRzi`p%f^umSnnqFMg{_>K3z9A!AM23k_OMAGpXtR`EUT|b{3;z4mFgcRHq}(y z*@Rs{>b#KR5}1iC7Q5grak7I=^uT35B+JKGMF)pfT;Eb`dI3V!&`Y2El)Mn42KQM; z=s*7CqnfsjhS>#`5q-AE)8@M+$k?Waox(O#so6>V-|;krHje4m|C)XJ*k`*x!17=oYO+0pjWUFEs%CPXq$9JZ5X zmVwtlJByI>B51K~aK=u3w;<91#x{s8v5(X7++zw^;wsrH8a*f@fyfKe4l^9W=(#<*GBZ81i*17aaD-A?*`1#!i}o+fFEe@yFoO=G|Ma+)@)PX%buQ9xNL_g+J5~zlK3MVw}CsdZ~o4 zi;sNp1DaqAZ(O^j|LGt6Lw(_kU*)~_Ty+XdFdIVD)oKOs)DlSW73|!@SPq|iNKu5c zRjj!3!t*MYt2(;BteLra9o)OGx^3>y&FR3BTd>!$GpCiuPZJ|au(6~6=>PQB^~mWd zWwH(Z`q!@NH^2HS&pmc0mVFTaW)o=`ifMRk0?6vPYu{eqR3z1}`BNucg%yjZ4Ps^H z)-`#$ZB5M2s}GwsPE^Hyyq5e%RB6Hky3BnGQD*j3$(6Lfy5-_jo!{AJoHv}q6TQSk(#XO|d` z-B@p?D0W!fLD+Hsk#L{eSpDp$U(o;gulsy3p3X5+7ha`pY+U0r6*?b)h+qWzX&I%;O@gyquK{gcT05@ zn5PQ1ZwZ%O;&1`1F%B89lQ`I)r(RTn`7thF6?t4G6yk0R&R>H|8n?6f6pn`A_buk7 zp(t^z=keehKBd6VI`Pc7h%eTse)NP@=&^PTQ|B+Zo=?^yBO2iO;P43CDq@-NmZTQ) zY5Fwx#e1c|g=IL6A1tWhA20v-kGay*w{I-#@Qru$&`U4kvl)HsfBt#!X-k8A#uG1m zh%sH%#z9UEd_6o2uOL?V@Vm2@nTKLtJvf1Boi6AZARr&@9ie9;8lN23{QR_^(s4aUP7o}B>q_Tlhdo;$1&c;Pnj zx3IsdYp;Dvd*ErI7eS|#(Hc32GksQ8-THyHN=l56C^B&(|g8|1`@VmnNA0Bg$ zBiOBBJ)Z}kvi2w!PoC04@Mx>VaCDq;)iQ>s=QX=%$ykf>V9O2kO}odvhS7>WVlx9b zJ~^!m=TG6=d)nVx!l(S&UfFQfW_s9}og_34ZuI`!@28uML?FBLkHMs@9$6UFU;M;nJ$eHEX(y`~gU<1aS{pazv2s}3D+=|>O7(f|~do|`kC$3#rd*==|Tv51J)!Eq*jiy5g|GV<>{5bb0{Gz*e zSAooZDZ2qC6u|`BG%TX8_B9aeX)pxtfG^>lWu2c+Yc4Itx=>$A87xuf;}w2-*F?fkX0V=cv`C9FXn4UM@QOw{X4=T6|@bfN>;hu746=; zhb@KSKOWWKVm0u(Oq`oKcR`~={jP%7^z5RGZFk@N4jixQG*WdFK7e23!6B<+WbJWG zdzudJ!Sk%8Q?JAvs;XcBU-uGWi~H(h90&M!Z|Ad^b(h|dXY*}&cHU9w_^wi&oMN>s@q3TgI5Rostsrtq}bu-)Wes~!C!xzpx@`SSWu68$xk6?YgKk2a3%Eq5~_#t>sK`9`t$!A@;d{U3U@B%)abJczF zwm80x=4(}<$qh|`0TXbHDPrJ(ooGP=*T4&FXVJ|b5G!XK?<`xNLHNel{GwYZs=y`N zS!{^7=3^Xt72@I1nu3h0H?yv^iW*INm4*w%y=b7?z5>Vh)!Tei-Tj-4@t#i44r*qs zPsew@E&t&SUQj#V-{eFh{+E6%9l>y0S2#sdPX`TQ|{Z_~A%e$%sdBPnGvrQ}x^bNZ$SHXdU!@aZ|&6 z;0%82+gn!;e@#?(^kW}}tqgalK2cxh?b}I%8)AUnt3Q_f_@# z;o18)rntZLi#OHW6-o~cxE7(9IZ{E}ZSTWM)S7&co z@n%7O#<6{{3V6U(ZSyD?R=ZGA*(y?1%J@}S9x&BTby`Ve<3g3)J!oaxVSLe&<^5d+ z;r(%bXA8D=z=BYr-+$$8RXTp{6w$Mm#9qfY58(cXhw@ENDu%CFU-WYRSnYO0R`TCY zYK_k zYAgUQF$T@trUJ}!@BZsxd=489C}@kzaMyUZf$eRpyYiL>JosW|Rjqs9Q9Qu4w2SiN z%VF?0f{%6YzpByBu|j1qU>zF@)HM+y{@i;-b^hirZljs)gb`p=#JBOqq_3waW6{~T zp-}dYLYXBsSFS43K2oH(!Mtp$uP?xJO7hi?2quTbOSmQP9qbkqZ)em3TRmWF7i{ok zwp>*|Z+bw%SVBeOq9p;2Pfo%PygGdM9Wbt}@q&^%+bZOI(y}cHox^1<gk!0^ntJ8%!krY`?8UWkdZQVmUb0T)QT3b_J}1^L7rMZ+gK$|MolT-TtbAnOh1R z-B$2;33~=h4%Z-}oAMqlVe2JL_j^>{yRUF|RT19n)SzEgJJFBNc(9+5SX&9^y8PBR zCA+E+TL&U7o#?A7_r~vn0k^Q7tNO9ee_T`X zj&{HOkBMzJlq}s*K0CA;vD zZphYmOKPIqtc6;Fd8vbyEx3!7v+Yz%s_*Z@O%qCtp`+kSUF=v^ns*v*JwB{@{!j(0 za8hmHOOqNsb&)t_ZNt#vrfc!>ZY77kWt`u8!Lz^-ezoz2BFA^s*FD77Zi5|WuWL$! zX(C4Th%0`^th>ovuDyAl`zfQcmrs2sxO%8`K<-771Hr3m@tKm*o zwYPsq+PzL}ZQ+m1^E z(kmK|6dBjM`1rRqlWyyiFI>_h*jl*#4drkCzFNeFZja9(b{y^=D!a7mPGnl^nyOXR zATGIzn6a2*=q!v{HCyMmjXw`Mo46iCuf`$)>>Dk9a0qUI8F1@<^jx$bO;M{jKG?D~ zd9<0e-?5XU0k~m25@fs%G&%xDgoj(w@ph%5*RS5ihEpl2<$DduGnImn|rHV(~Sk;H$_#!(8_+s9hmZf*>=F_-08Eb z`MhdiN461NTgJwH9xYxttsK5w%n?id;7uPK8QTE{-MV~_`|zR_`i2JFeR+Hlx87=1 z<*e#tJJIhdKG~Yu5!nCerE~hBkG`aGE~l@5^{d4A7M~Z^laD;A7oK|#J=Uka!z1)S zPUkM1)7eXxbcnWDUD;LL_Dh(b>d}r0=x(=$fqh!lKP$DoW0e@ZL5F7*{9KOCU0jHjL z{#pHvzy4R8*4)|NC6)#CKmB(<@76!9qTvwn$TZ?n0j)7Lrz%>hbng!1gsyMH)!~4> zc8iJVC=lt>7=Bei=hWahrmK>08*6Rm*5&KAuhY@M?1ECmlPZ_%E}6cA?j0T<)#T&^ zJk{qajD*muUR(1%+(iSdp!I6*Fj>7`)6wdERgE`y@Immrjjj5)Uw=5{DqvukZcVyo z`!CptZ3rL6yng__lpLRyKbGYFc^>v}CAzESEWGtW z>FG7><@!5d0-Uc1N3Ju5R)H=akMkZ44HAPAfuQnR)^^E6B^v15N%@D+l##gd$HaK- z#|}O=7~{4bDuOqUE}p`^g1UYczs6Q=ttC&4X&&s!A7Or7+qEv7ps30b{t@m|wc638 z%a7}cM<3Jl__*@fj7rwqoBIyM``jT+TYGQfYelsC)N?=KeCD65TYvv|Tf+Y1e$V5* zHg4@plKOJ&-~VPTao7{kiYo_xIbs z_IKf9#9{EP)$1rVIOx`Xo_+3Vee@$AP;O@fs$bM3JR&tdsT#Vvvb7^$#~=H-SgKEr zCWL@@8=8d7n?MEx`Y`BN|B%a)ahWX`kJ^9~1g%;EfH1%WB+~k%wyFhJQq1}_SySj9 zf-D4qwCsRt84_Z`3LvmPw7zK4ozAr5zt%st*>0-^K{O|@vOHaY)C`li!jTi2nw!_z z^A}xa`!P59&TCdzz9A3SW#u?6BfMn+l)FfD%q zaOcaNHf6>=@r29bv3+S@U!Nk0IPdG%(e0aVAtKPLW1u{@)paHGntYy};HFfHw zf{`fBR(EyV?X;Jj{IkWejvZt0L(aKAw@JXbc^FsgMQEk0djtSq(ki6eLLdRA+ku>$ z09=^YA%v#kf#~4iRxa1dKU;rA+i15eYFn_eMeI-_siENkWe*@35Os_~rM+#&3$hH6 z3E}Xgh;-X1NsrGGJdPPV0w^G2J$XBb4NJ3l=7TTj`rB{oTfh7(01lwbeR~7ap`Cj#U6a?(O>3)0(F}Hi*Hs>cU zp4W39ei2eo(^tRvyL$6m-_p_Xf!aZjD%g-MB>VZii7St4c*07B9jSbIN-Na&+?hFZZo|x#PF4NTIRtt|ltwO^}k|o_HZ6}vi!O9UHK%fa2mX($qoPc2D zH2KVP>OXr{rR5bx;!!mSc3%9v#T;6H>E6bYe9VuPTn!`>@}(g{Nh@*Qa(#un4WB!8 zlT1WZCzz#1C!Cb){6wcJp?eHb-cHQZ*o5bDt~f7Bi0)u&{c73&7DAR1$?S^JCF*$<}W>?<4j2c zAU%-3a45#TWz`!TbJrRH8&C53AN!$C>E#zcr0q;qU;X>Pq-y_wCeNPH^`&b%LZnz3 zkOcRV1aGVl>*%TTd?tR{L^whUx&U+2(~*_EzHspZL3>dCC;|?F(8OljdkB_fQhies znmBbzL#e1vA$T09ajg$FZw=tU3H#ztb~3(Ru9X ztvmO1E|t=y#RZqOIEkHK=3362IH3skmxPo(H_)#aUwDCl;?cM6t|;I0DV0h?o?~tk zBZ&Q_h!Nx1(sbIdr%r|R(xX1z00X~v%Sdxd#Xdo z3J^nfQY;?U{E1T#%`^cGyv28n%vv8yI|9)0#j)fu}juwim~LN7mdS)cg8 ziz*kY`tp~)uD4#hrsbt=h4F)a%WCYyr@^I8p#o8YFgX$&a0wlW$$9mX!{F|$Dt4L` z0^hKbWOlM~?zCGZv$DReR=K82S_RRA-K!EI6U)5Y*xlIVZohlz5CGJ3ci3y#|vD?J=4k9dxsV0(a1Kfx; zvqLP&IIQg(9M-@Pwt*nX9_=ZAbO3>4Ad-kS!k;CVHM#c=v20}egc6~Yj#sx3pdD9E zxdMI4LjHGlcXWGcMb~fKQHj@d5Lsx}pLQ>S(D@kdmKTNWF}84*#|H;8)+!EfRdGj5Yy;I1DbpXK#_u+U;& zk@4x^1J-)LHjpETlrR`(<%r``Qwrh(me^!j*cIlk05`G?xgPgy;v@}@B|<%&U6|8n zKk^Cvm7o1_edc42YiuBffc3l0)1#*J_R5|z4Ucw-yL-R)I^*btOXf8`Jf!KVSshrS z3_PQUEqY>uLOyC9AGRbh55lY&4Rb963W6!tmcz;+*=dR-0@;!VEi3kupZbJME*3iQ zGK6depET~8z?RRQzl4ab6WcPX@9n6TdC-SC&wQ>R){PfgcC9TS_J})eE5!x3u(GxZ z?!SW%6_#(QzP8MLg%m$|(P;onrik(W-hgeM^}BLjKK$HD-?l0Z1rftmW~))}X@Ki) zWe-&a&(gzF3NR-NLqi(l{x)u0cVz<0U{jp2_cM=PY$CtBq>6E9V&mk=MFjS=9(wq3 zRqGwCtZg7nPpIIW|b4{bi8fwR@xzVYM@a-JTp(Z zU9c3MVHJ{khle7dDm*lxRvkVF&ITE)A^hP02 z*w%yp9T0=yBuP?2<>D|dEOKvP8$>PIuSZN&ti z40D}V9=YO9MCEy(CfcYEURMRz;uB~AUehSni9H3L-qPGDVtFd2bEjs3lp}2QT~#;H zBZmjN^5Qf4@TWem3Euzh>(>=0z9boIOZdHX{v28>qw>~@+WY&8rc;nKGzz%d*jN=N zt-{)E^{}gtzwoSHdhuCxV-dZ6XIb~|uj}ysin?6m!0?E($7h~?OrQ9~3!27mtIThS zuX?woN~fU!V zl?CgW*aJ6Q>lkdgPJFR4-&P^23bvLG_jQ2Q@PRoUUYEzeEpcIcdt3kT7k>@DJm+xB z7KJ*6g2pB%6#++Vv(?U#9v+~J;GdmHQX$^Iytgi&aifYfvv@`4o_tY{zW8D7pc%sR z3tD{QIk(vO(xaC(2L7dNgPwR$#GfnJ)70gQs_=6h8}kuoOXwY|(B+bC!JQyj=w*Ct zQ8XNX(5|3i32|`HmaSi)i<>=oNq~7#6yHL}XV7&`xFGSZft`fWtKnq78eqRA+Zjjf zd4iglIjJ*Op41>VoI+F7;BQq+76Xc+{iBKujXQr0sHyDIP2QjDn3+@u&1XG-!x10X z6xR`Nbi@_Vl!A(n$dFmsdR%&8F*Y2bF0$|MW#DmR4w5A_C zJ6u`S_=U$*?1dEwCBTA!TG(}+IAea&Vk|%WnNKJ}tlj3CH;K!+cdp8ZPhWoGN#%*D zWi&?J{EcyTtsG24`XdSt&uHPHXB8ZnP%G5uc)lg%nbvcgGmI6e4R^zDnCDn(n7a(P zBz0>s)tzMNKfw)KaKR3|%5tM^Gr{zp*|}B95&GU*|8)4djg2S`FGM3*l`v1c zs?^w!lIdaiPD){Pge4!_`r6tm^G-b2y>m~|@kzIyFgP=<2Keu{g9**LTR&=`_k4w# z22MVzF8;B%iw?(zYK&tQPEz9U5wNbdvF`5CXB)|IQ9HTi;hIK>`G&2rK76Co)acxp z3YK`eci{T*bArNDf8+$m!_aN!Ln!Kpzt(QdXj6pkmcX+N6f2;8;`OC9)&SGA(8 zZKkCJd>lWH4vZ;8ya@R`;B?U?E?N5r+tBfDufiGQgc$A>JMGnRUQ4_so_X!0*Wd&f zVu@rcs$#=U#yd5?sEM3hU_5Rp&cl zYlvu;-F>Sl0iMP~8Wq+-*}bLTJU;pbk|xksMV?lJMCfi0nr43h`&{ruL3 zEA?t_*WBM!Hwza4H_gASEm~q^#3e#7WEw+@PcyFtY`2izS3kTuOsw}4v%F2-duLsB ze8%{quMdtAA99+>4kxwBN8ryEnCx+DQ%x|v2e$EK{Jn+E^eKVA+v!P+R*85_3Q){{9M~_wboXOMY zxDP9)RBhvnPo0*eVAo)aMs8`nsypXYQC{k0z4 zdT>-xcz6>ITHV`{wHNAO&oOX4=whs$YK2>Q8yX%NRUCVdVH@EvcFy}&;q(n`Fo<1S zCAO?ptzb>((;_0eaZ(X&rHp$%~5+O1p4;ctC|1CArzyLro% zu(bm`3AAt;zTC`a+*sKu**bcqRck7g9#vo%zDfLO=J(;ftN0K&(Df-`>lR(xz+LAW z?-8%1xs#{#!efu=Z~m2^)u%uD1o{>Y1rPn7|G}@qSqiRNLuq>nUg*=yAN!2<_mB09 z|Lfm(o0|XQ&;J7#19G{2<|D5fI@60iPfU$!?-rcfs=&e#6an87F?ebku4gz7S1~)- zVJ_`JR3zxuSK_IJYWsV{-=+dXQ$h&1if*|hFlKX8LsqdAUQvL{=So@rOsp_I3{FJg z&|cz?Z9K-EJ)yISKMgw|Xltzyy*9DZ+66`W;E&(kbF%8Pb_k{i&kI{3F8bcq3lxPP zq~e4iv_{CQh^p(k+B4pb&)7Qn=q+XJx*Y+d4&A9iPLJg4ysz+Dk|cm;iE8~Sz<*)1U(Z$J

      NxNp}@g>f1Bqsd49HESVhoM0_)kod6 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

      ( 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 Cx}NXetUUqHkK}9u0T#2Oy4Ot$Ptk!M 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%0DF)DeQGi_`Sjy+iZF zjX$*XaGJMFq<(o+`REjXCw|*uRs3}-QA6g=X|kzY*jDeai$%v3rWP#8Zk1F<5@l1h z6(EF69Jy8aVYnyW=4o7%xD=_$f z8kucDMK4v*K$E)%U44D#?YC0L_j3?WKPA1-srsr11bK|9(VG%NL{GxF zLVY{Jg5|$$-fVv`&D%8D>qPe6q5AZ+qfgQ3>BA)wUKGuC+pJ-s)SO8KP2p{)Ne`!K zf*dX&Y)UI@kC^N6Gw-6#BRmLA;KzN5enD=?2c@Trl4oG8Sh_{h2ep;oGGnl-xc5nL z$JXv}vr+i*7l%+Ivl)Xg&}kV%XFmPL=Rots1C?Z+Bz6_#V|`w)i1JQ3$=QI4x&FTeFL_^{38KSM=rGVRG6R0jk}he#92rU zA8ymlEKnigNOo5$n;*dPDJTC#5d4v(G`|T3v zi8&ouFbRE2*ne0aOVKG2vpY+N!4jo(TB@tFMs<;s*ZP{yEz#!(iDazU&W2}tnn}4u zMvC668B+2MIrMNHj^|4#ft?e&&LPzj-C|(1l6%DlJ?=R7oQ&gTP;cm%&NpMvD%{@N z8&v&VDLoI<9Vs2SP)|5o*&T`3qaUE6pnHYhOUxcA?IylKFbpH)lZ@}#nk%XT@))yI zs=$ls?OK~;MVLGJvKyYy#7>?4yt97JD@~$GK*P2=A-`XbO2ELXaFT8 z%duUNrvOYW=YFBBFrW07#_Q+LhLoR>7Gv7?S3g0p&j+!W zp1RRhFX+B5wLfCwIJ>KZPOFpk`?Ua9tDP%$74SQ%JXY@VE5Y=EYfjn9^bsea=$?CX z)#Dr9i)D;6g(VPs!lD7Zqo6P12+D`w#7u0v41bG#zje^gYuR5j!DpZfy38t!xvJ8^ zzTv%?2d(zw&Z?)Vop`%l5b)*xuzZqhTXX||D#{r;yo+%v<{Mp64y-ryINe^|gr6C? ztIlYjif?F~cSd^JG^V9Bt>H^Jz0(sh=7pboT7{5aU-Sk3Rq+Diq!+st$P-brD9fQf z;D!zS`3*1uTG(#zcC~5$=HgpGG;(*Rv2;Lh_*;guC@m0YB?{aiob7odnho}|9)(2#nCKis@wv6cX=c3!;! z%31jvLPGf&8vW^Lx*ih)Kw#WS$ZjlAXY~jQv`^ zLc8}h=un%aGqqcZHcBz}-$6u_55dF#3Eg*7;=kKtvG-7$LPz^XRFETYtAS0!@T8Og zs+#Tk>Ky!PSH;p4QTHtUWo(Xk&F~S!Y1g=qIiC0OKQbdKlhqn!#&r)%l1^%sO!8+o zf~xdye(^}02v~G~SaGX9D}58P-$SjbJn+%-cZH{wodr6~!36L6EIIaQiZ!eu_ib^M z|D0PWLPQ~;trMgiKz+j*mhoy?x%1+-bXxjGl^nZZ2kMNWGuiUbrXCgR%Yz7nU_+c( z#Ag!KR`aMI6FbnX3_yU~MSSBIU-#839Um{oL22I4dz}Lq0wYT6b`$4q5TdtZfyhP0 zVED;wbVu}!&%t8}%fctEon{V9G%XBeP3m{Xc4>}p5cODH>~ejHl(sX`{Z`OkyF|fS z{%Dwgd_2Y+1UJtgmECy!lsNt6GI6ev<@5lvN{UF`vzLsc^{tS5l=-o1Ekl*XGQKPt z{_Hd0etL}RTvX^WK|(u*L)xk%j2h1FDF|ZRrENzDQ-zk1@d#0yL`f5MmShJ3^^ns9F*3?xJd~DbFE!yC=LDH6Jq%vZ1$l^L3zNY#NdN8XshV^ zn9S9RZon7`v*GVyyK2d5vfCft-+h);7_J~e_9UpDTxyzGI%kkWHkQlcmpy-nZ#U)N zF(=R0A?@It`cGTtLuq@zPNSPuq*}wR3w>w0r8z!y*4+#&Hg~M=mW;-04Y8VZ8Jd5OJf|K1 zA$AQ+(ayoc^Me%iPor7Bkf~r3Bky1sCX=(z2raG)cI`G; z{WkOzQBy?+c}r*dQN+;#CmGOLfS$NMG}zZS<>c6+c40L9Nsu${^WN~76dFi#!|dAv z_6H(H>~PT~;_^%Up?KxSGbz_j;^?k;ectM?F)j#-G7+#~yRw1hn6j3D?S$fuo2xx7 zh%uXKsz+I&A$zj~1A7)R8q?hfUbr;Mv~H+RhL!Hp{On{nCtI23t5N4z zwP;`}_@=OyqGrY2DK51r;4}!gnaGhrH>Dhx7?2w!f z`lu!ONFPAU7mnt6aHn;Q8_9v;u3oymB8!RV?#;CA2%>8VM@ifS@V$vrH12@2wqTQ0*6QuxDS(&-c`yyUH#(>|NbS z3SQ%l^^Vv<|Bmgp83q@U?r1eh5!%kw-m1i=xn|9`I5j`Q?4fM+#^ZSQu|!FE-M27O zI;Vc)!0s!>AcLW)x}mt(b+pKG0%NYNsi_k1*`QmRhe6I#EM?m$#Y0o54Sa-W;c@k| zv$2biQ{1CX0HNL{-g1#$d7qUT<6@iF*A$Z|o7i^tXcR^E?Z+(sNxLoXO6 z!KJ=a*zm5KHdtYI%A(kG&aKyfBtslkSfs1JcD*L9#uc0Jbjfr>NoCZmJv66I4w?6V z!fFVu5`35*8b}=wm(L`auqrnVH4}M1z13?44LZzH9~V_mE&?Avo7!!e=+)eJx&%8> zXj0D1-@f)6#X7OpAin?8rsmnGj!xfn*1YU0m}e`wd~-#3E4_E_mgqBH8F&9FjL9A! z=wQJT0i3dN6VJ?GrJ6MHBBrk&<^)&NQbx9E+%^c~ANzd0onSj2xH(oAUTWnC-2YM| zb8WKNCQ1JNz2B&Yv(zZ0|C9Q+yybb2fE3AC#>x9aw)VlO7|gA(=|t$4Gid@cs^OJs zdRcJ_4UDBF{1Gq#*S4rRsb#@?gdW;eI9ruO0&5mMAlXG?E;DET+z@9vs3aZ_$w>?s$gu2ird?Y)rbtJ*fKTyASV8SPP#)xGzU4lF(kV@ zOKKnd+ksX0LF|h!^CT@^?;B#Arl&hd7CwX)LmOWOFI2y_zSnVZ@J1&-sZ{iBKfyDiC18rd&=ZofaH7XPOh>iM_8Jr~y$I6F#d#4Z>>Hr8C`ax2ST zDt(KWAqL3*5yNt)x27KW8AOgkJ|iEcVk5(@o87L3juw)~8-ZlBB2@=3oHyRd2|L;9 za?h5Uv@AG363KZfli|ZkGklY%O^FWi{F#OfwvzHxqIPe^zS$ui`wkAMZtWB=LnIX4 zPp7t(gi}bQ8(Ri$!=}H$6neX-i@$jIbT3&D_^eXW9~RV0MiR6r4|q6xn&c+P-*^S6 z&)!6c*Nf&>NZBWBjtoU@(6o1X^U>lBCk#)7V8;G|@4sJElCgM7xPln;Y%ANXl@E3z z$!;QibLgir=2EtB*I?G4g3w9+PUnP?+%hF)>D=*lMN+F%8;|ad*4c9Ji{)zjo$rDD zIWzb68=OOx+j6{D1D6Oab8XiHG_$R;-)&k+$pyETKpQ#ICR85lb zeT-wTD-^(Vf19hW4=u0T-UtBv1lE)q82Y2y=ofw8c=fN3s-wW{ zAO&Nfjb$B^=Wi`bI4w5a{o^*`+z)zShj^HBNMCs9T*}tu(s>PptbZ{7ghQ6uAP=SMk5K8`~w)gvijjZh1aqoxAMI)y~Qke}+fr=})RkISW zk__m4%^G8hA^U`I7BSDvPd`s*f<};}r;>~`R=KXzl{|UQ1tfOw!Bp~I=3Eh z5j^UCpku6qJKb}gI&x{?YG{`Qj+_rPw|9`y5;NainRRcu1t>NeR^-oYT1Xy6*o7Zq zZ+VVDA^5s2eU_(G|A18-aR!#oonby2hcnD30Ltj-_K`cHZ~P(a0ckmUcv zpWDZ73X3&p0Gg=eggD=R@wn%{Q?3g?yg)ap-I7MqxxSuON_MO$klbD?0Un{qOw?G4 zjP71@^gieKe12C#h1G&hCSS_dy(6pn(w7u{C~a} z^Y>@<+ZMB6oZ1ZROH(GQxt9+6>;hhO`Iujq$p0>sS<#5YP5m$1c8B9)@~yhq8r%rI zbK+W+fy$s+-QY9PX@WNBCNH4*QByYa#>sErty!5QBb$Hu_to!BJiW1C%lN34<$4XV zNk;_y1pWO?zkXU|rUQe2prZ%;0K%vr^p^3aC4d@MdEJ|oBC)9cx423+R;t8CHK^S3 z`{)0~x~23Jwzi$zrD+Nw*yNVoP0++xI+9(JX;wx+8;5jgf-l~jjq;nJiN6wA(gmHi>ThUy{^ga2u(3fa3L+I}Vnk)YeCK*s+s*3HGU zIO1Hjl=9&ERJ=2IfIYrgo4sQ{+BzPVzd#RF6^^eVlPor>F^w+F9NFevbEnYhyC5zQ zYRn?#G32B;5O$0Rt$ogxYkL#6R-UZKD$?^#YDQP;h)%Dsz9V_4%ZO_*> zSINw(keeI8Y$?nU*UFlxC(Z`{88!Y6{UpM||~rXZ!x2t7#&B68ux16K&7=DYqhakiFz} z?(xWI2eKrnN?4KE zW64KO`iTO?mbsJF1L?oT!IxW3yL8P6AAUp|W7PW_orE5YbP0*E;mayd2cP-a8qD8E zztb}t34Crr%@85aOn5XGyIjw6GiQ8OzVAh74|T3FFa(Iw`>Xm@9Z@uck5b8|VJu!- zEF_{eIpRI65iiY#2(@Z_snE}iUja3v75}D9W`Xc!o?J;3Z&1W%1KYE$$;s@WYHmPQ z6o?BP!l<^HyKEbmzS@HX2OOo9d?gJ}>+I0OcWbvqAWL-_%-dyf`#TD{85D=G51hKj zvAuVkW@Fk4dNJD`4MoP4382^!ok}q>NM$|fcS}F(X+l%=_pMsF;)@clI&yjalO+*{ zUJ?HT*kdNQK^S#`CF3fBlZtSxT_B6o{+&Dh(WfZJ(#&Y0H zgy|0L^~!#Sw0D?4ROEH8A0H?S0icWFwQ{9&#fkAz7Xv{h$cDWy-?rmws* zK(O@H``=H&P`oGh_o0KXM^>MPj9ERN{t+cYQsxj}7OQJB1Dd%#==gp{oLJ{)D%{T-KJ%-)u#ntOGNS7HsG+4ikpU@dM$T(wKam1^$1y1Y4O!hTz{jOz%bysdyQehyj9rvhxFIdII0?xsCNa#H3kTH>eayu= zpf(F(I{hPWHDrO+^2=WX%J7GUG2MjJ(wcnzZ+liEy!SgU_F^=6r8j9U5- zy2tk?0Jmya$EnUI>l9$1GpjbAAoH3fN~7=^w|pmecF(;m^+{MXQ$45bkpdH^*R3SB z7#8oRkC=|cVjh(agn3H?j@}E1G`pcQ$ep9sio!9Pe;8GSba5uEqL?XO_GOvf zu?8F|ZhxbtwVc3aUM`ty1R?g-2b#t(iV749`> zWSvndLRGj%$Ea*yI{d?2L+%U{f)7d1FsAE@yKnS z{ic8J)VJ*r|7S~@r|N$Kki0a0P4T(XShjM)7+0#?!mRy}y0B!t zVzz1DAFD~au_sl6LE5{+Z_mEze4gRN{^O9*4CNT?Q7Z8zKGL2`;GP;6uF9_xo|fGa zIDanB-}S2#lnBhioAAFhz46MM0_=-Pj7WPl-WG5-_u*~VbZrS>Z<)fJzKpQA)-{+~`hK9S55E_JyD@#_Eay#d0+dS{8WsWpw!C>o)O>q;Cj+*51me zmJKlvmg1NNKB@VJlnZ{#l#M8(Es3q1>F#Gwl)CyXpg263xE^yA*!3c#&U+(u>%05Q zn)sJM>w&T^+UlLV(v#{+0twxGwj5VhY>RrrPDU{vO9ohXto&{M213>-n%NOnWwz)& zc5f15ebJuHh^UZ3I;z%jkQ*HT&yu9qr_m(X%2V#51)dh!W8x&pAszpVXET|Kv>Ldce~kPQo?%;Xd{! zs=`iB{~Kc|QjF1d>`%Bj3R))LamOh4%YvKscLkL}VIPCXYu-(3Ny_%|u2&@9s`<-0V1H@rQ825#o9{YOCIagUo%`1?qNM+WZ-zD`Y4KE5tVD3!XH zSY8>x06>QA_%8%h+@Tg(G&7OM{TA%xb<@ymK7}RCSN;Tj%nv@30lH$ymFRa#l3h&1 zFCc9(7*i9jAo&Xu@?V}@R{YwX(E_t~3r0wrBUAjJcd-z1)F#paH~|?|5e==ew znfh};%;bA;4bBp&y39!m>|obe>QVa^X(DCmG2N z$+dbeR|d{?&VaZ++xEABskD;5-4vUrzK8>UOgw!2G9@e0^Mol+DvO+hvK&p`I|}n-kASN_mm+Y&n zj4y~BNIH}J?R_uo?KH>XFLmzEURADvC0yWwCR_O?oH`->)>Dchf49#HIknyzjTsxL zM!RB=aD<+vr-QB;tA#OH$Srs=Xtq9k%J(~%S>DQ8oRZ4DcUy#dpt-o|&VSF}|FRkmZ$5j9qD(aoSv@2M zvgy2_F(Q<1SCZA{_5YN_RsUe|3z6<}l#ufOp);#0U$fA|)Q8K{QBmxHBNYQu6kX>{ zr&e$EYE558>JKVRtDUQGWXYOam$csx_IOqbUfzKtVI zQCTso-Gq4F{C{$`*oDcp+Y+=Vt@@8GPhx|g+dChW2$}x>nrW12->K03pP8mNn5|v8 z#Ww``NVVB;CDgpF?`;&^)7W5gxa?21VUQAUjW1Em6b`K)>8f8W#5KE^sr|<#raqDQ zsj`)xTs<74sylvdmnLDs(jU59{f5pZ4(?2gYp>Y=&G$i-2p{Sdd_NJsn!BBY{{uS8 ze5WIdoQqLT^2GZFlt#+6wBJnPbel@Gm-XbWSz0|JvS=>u!R0`ZFT9Q;zVd>{5^q&! z9G59Evfp1s?Z^(Sly=bwKJz^)Gw*Mf5%6+mNKndRjl}VqExD(SH;Rl|hUq<}Vx9Zg zuyz8#6c+@ixNEaUQ!lSNKY9TwqkS-L1U8_cyYGAO+6Y-L8Fmj7+iZkxFe0(%tl2ae( z&n2uFMNn?yF}8xfERPho&B@dWZ?GCRV8$181ue|%(74Ub&Q19jI{_v3B%j7|Y~ENd zUfO2e+L?v?5mQr<2dP_9Z=OV%hHjkTzgF~6bAZk zTsEGm?_Fqdxs5`A(Q-EM$rUN${EuE*2nxCTjNZY6moq&7_WtE>+7lU91MEc$=WfVu zsP;T~)7gIa5+Y?-agdlF&_D2Up8Zt6FT0A!`{BsTe%gGu_PT(>Em7Q~W2Nu?dN=Y=Q}hL@Tvp&q z#?wcgP>KhLPVwl}>CoSA z40rPg)7q&^)JLohYfsrt-O?g)%U*heCwHp4nSZPiU!{6Qp~A8Kq`w4VC6m9%>gZb`HKf@l4Se9XoK^DRiK1lD`9+hBd8?$ z`{&?;=38o1h==VyB;^Y6Hzgjoyq>;T7#^*L8s>^thLG)&u zwk19}5V^qWPxORzsH?qN^dS+@s|F;?VATlBIqo!#Ux)O!?*R~lwc{^ujZjU!#5@7G=;L*C&y#HOtrp-p7jEeDVv~(3MDtj+{EB_ z{pZh@jZo;{>+G#0Nv?r3dbchYVZXptEIKO>`m+^h8aPPn8m&-~#&=Mkb|ZL5)^lZZ zG}UPo*1nrEIW;sz)*%tix)oc~7F^vZxd?8F(%EPJkmEMEe)NMS9KYwZ_^V`a@WE~6 z5KD$nKRo~oPgztg;}CFHcE8}L?30yoG}GuYWAtB>Td3cs0~nkg{et{mj~F9oqhKYw z&(1YX_Fa-lCB(^bWy2U-TpAY#o9kDCGuIqc^v^n7asb=b_< zwRl@_)Ih;Aov_ln(AhTP0+BH(I8H?$MBZI^*F;fK5sr-44=ZodKPE00kR*0UtWULv zC;^k&JMd&lK!4b9P+AdA+~NJLnKl0x?QMMxcAxBTR{jNobVn{G53AQxTP_N+2`h?& zbd{9wwE*cQdsj+%dtA$siXBzfslcyftn)!d(c8wNB|Br3ABa6GN{ZOuP zQfTjUS36kqE5n_c|C;QSv<#U<3X;j4X~uz(nj>QS1y9isGj$)gsDjYT(vMlIpmo+9 zUWo#)@2l6_h(5inBY~T5ZTJnQmY1IaY+g0^f2|tkFe6w!iH)9PL=~lXzz6w%% z^*=FRwDqy}6jP$fC4X!WmLkv&{^I8TXtZb|@2$J;O>Ue`yAaiea_WHX*X4PEm4;6hMmdEKfj-?4Zr0o6r8mmMz>vi5; zL!-{!bbiyNe}6hF!AlAn58Jo=i2tcU(Mx|<@VKGYptbuMF6qiL$K7Z__b<0`IOtY{ z*WDsU8OLbp)}PBAo?%eL(i) zEZRBsvodvcxW|u|^O+pBrpy0JS1Ac|F`nQQic)o_SbI>|mMKTkh0oMt*J{P*Xl{~8;ZV;9Wc$^h&*H0v9Y{H*$}okFAe z*e^iIwo2-NUYZN)%j!8>c-#6U4jwV#i2n%#2}^AIdMbis+Xbn74392L#8jtP8(pI` z7^P*y#8c_-yep}OQcYARF{mtricpq$tWc7C0tn0%0sLn){!2qCm}7k6Fd<5m65Pdv z9n{!s-mS_wcKrRxOCQbBVH5is(6pAdSkpTZ%hp3#awskS+>qN zWl_oFAa6GF{~|s|B4O2SkvTu2`6)GG)y=HgwXh5hxFaQO_!i37bF+rzBHkfOBT}hE zdaJTxYX{;&q0cskVt&q{*ezkr7wA8JC( zFvNf5aa)`ZeC|bqdt1kxBY}1^V~$0jfo)(MHsodjJhRdc`WEIBqRP@w(?84vl}wue zK5Uq^usq(EUq6o~>wqr00#T`4#24FcaSL`U(^)_N$2=Zs(tt0Qhl+o8&M-`;|Ipb5`?{w5_`K%!oGMVbcY91L2T}SI0eNLF}r>N-y{37 z%HciJ{!e}iJXmV?ExAFg1}nC=dw!Nc>@1^8(*A%;PICbzH3`AVS{eAToM1DSC-$13@Pp zNCmpIWSB$7=rEEaOg?q)n8GxeN&CHvK06BpJO#jacnv?$6rmiJ&K@f-vy`G&E1@s3xQo56C500| zzr=ziNXa?k73k!m&8{?Bif{KIRWfENW3Qme^?uu>sVZoW1B~i?t;?=T|8Pdyza@Lz zztn^z;B!EOSWuXV9`!?{wQ0_bh@^Q=2Nom*vRPafe7&#ySt^SqUvvF{Va)L7Ytg%L z>zR-KEe`%1`RpzD?{=cuNdAMFySt|iOXO1mpY7274RbHG(SY2g7QdW>1I0vwvxH}N#1 zeyIGhW*Tr7(L8V3eDmD4n1tvPz zVB}(=6q&IE{eVaJFV@c!nJV;0$Xf&?6KQBKNE>`OuqjDsBGayH&KzQ+(KSoZFL?aL zdcXObpkVUz+?cB2c?JbLS26jI9_PPbB7<|WX`zaaA>GDeisxSfQw7LJd*}^rDk}2v z^T!Y06s71A|3%-_m9B*RO-oTRA1K<%lW>FKc97zW;|L?wu0hP$5*h6Y7a_LybA4-; zJbc!eAxqoFYDE_+X=1wiel>(OCH8HY9QIjM?&d&$SfaZCB_*mdvC4vJ!OX{qPfnhh z%*_6(FLm;6PR3+y5yV?+I-%)3GTNVkE&I2~JO0bEYtPmnq_Jx~y5#oAjTav%_$kEF zkZ?)$>oZ=D&_w3jwLRn4?GYNR8|E2D^gYC1YzF??3~`V$nTxMN?P2K!8Q35eeG8RT z*3L&pabXPn`S8y{ZLDgvwYTYSHjNk-uQfJ)cd%yH{J=l;SyJhmt5{1-s+Qo@(Kq}z z<)^D?3`{(9%`P1{(f6xG4{3KtNaS&rKZ>gUXZi@i7Lg!k_Ir9XQ7^($RL}Hza-_2Y zzdL^jnnowLBKWERta>7UVJf|Fi*=TZQ;8{fhuJ(^ITzG(>ZYqX>SlFoZC;La?1OY? zC5}BL%B}qx-EFjg&%t(pd$cvcI&(>$+oPb#N>eyfbti=XD{EOxZ{MR!@%rMnxaHtR z1}!M(Pf=Wk;4SXM)`c~vxi$Hbn<5#+TN=7p!;d?~4L{y-*2pnY8_7(6O8IZ^E=gNe z^%jEcQbwdAzP(8=D@wLQ=#}KT>y$A)+z_gzxe}<%Zg61jfG+x-MwTkaTR&i<#ypE! zW|@eA7VKLk7es>?nOlcFx*uE1;u1Mm6{dgP$&HKUc*>Y+^>sp~g%vW5P3klPYig-~5ZO%FWcyS}RXm^T z@=JDw6Q>qScaglL!DM-D`YWFBK6VkRs{{7v*KMfH8G9o>si4Nx`IyD8cu(eo5>s^# zbB!ElkJa}nbRCgp#0@lt7ewj^{?u@&S%i5;1vZ)QDvn*+bgtXXS7T(@3Jzwjl z1IdijP79qxtjQ7<=506m!*6(vSUZrUB)Y9YkJWU+y)HKpEm=OyFIP)F22r=bo7cxl z=6`kFEWfv(4})$rY=@u-Ixcp3e}$~9zSO!!u1bk{ng??+R()#gj3NY3)mK>2_X?)o zvp@Sojo=cd8<(2)$*7fy=l-E1CBgLH6K(kPuf4$s1vTrajT<&FbBZOm`82x63YAR=bXuQ_*E;90J1&^L2|W%||DEuy-i zB|bHL$x@9}jVa6veA=`ax}?(56xgZ5Z?gZbGQKQ!FN}fymj8lTa$xYLkL)A93TO_d zPQ_Ayn!6^JYrb`U#}ar~F_*`(b{<1OG|xx75$QZzu1d9z6`&T}Hb^GzwUg88XCatk zW2n1z_GjH>I1yfyHVPeBN}k#K=VY$eelVh_(LtmEhuP})I+(-fHxuK<5F{srnG|99 zAQ=Ifu|>h!P(Bx(n9mr}QjlfSf?}&Z$*_Uzn;Spkw<3523@cO6#+Z?p#!=niFGm?| zAxix}VT3pg27JO;uo{WPAs6^PiJsPE^W_&)qVU!OotGr#zw&4tWv_3jNeESeTleYE zFAsgmxVPyo06kk@N;W30=gs23=V|qYisni&>3Fc+Mbk>3=X%C(wwDK49kTkwC83G1 zV_q}>io{?|TpNq$_joH5_tyaPb;R@E9lX$z`JLwo(?t;M$TR9CX#g7^vmBPhB7AlngSiH)?+GzO+yv3`j zpZVN4y3$;#d04GVAfV2sWG5Wn<^q}Btv4)N0&Eju#y&lz#M&vRun1osmOj={{nf?1hxXXij3?%-ga3 zxkez8h_o1)20x`9=z;$`2h9)K9tFRZ3hqY5JBtpMEvkDc>7D@Vv1R$Grsw#=BG^dKQa+JS3NsMK6kmrJ)-gX*28#K$RtPAr zbMYSKr9^@*ijZDQO_ z|HxJRdEZ2C$I3B5BEKb|`dh#%= z5h!QFcyLbFU;S&u>6ASm$IzB z*Ccwdn_5ME@8m2~{o}zt&oCx0^Ae-ss`-vyH5($dY92R)mE9N|y5~H=DD6=>^z40` zDSBF~F*VDCFTnmcM5xt5hrb~btu$39I;V6Z+r3ePfsSLJZAqJqimm6Z`b^W{P%#F1 zhJ04fS>u6h?_JA8XK*%C@nO8Oq5RV(i}sHf>gn$cZmmh)Vji+8hq=GXV$%AN3%pd> zldl;mU1oY#mrGk-bn@3TDAZWcfm><%YtUrp$;UI!OIbfE`yPj!_`VvD`bK;m$Xe`? zY6DPI+gf`?yOH;2E@nhr1{FbtLdQO;pJ-y#Nevo*sI*qD8}`1`H$m;LKkf9Z7TIoh z8F|--CrgK-oqBV>cz=v~cXZ`1&2gd&ou0U?glDVW&lfK?Lnpk>c*}MX z!oY5KZQIG0s=o{!4fU?7A~CzdA4aD0&w1Tx%lteWWJbh0eP>l^Yz1nq;~%kMd|b0& z{7@IV+(rOyjC&@3-e4N8o2{fTH6E18W2F!_Y#TOMIOfZy9k;7CO7-)PQzwUhA+NT! z#et$fNBYv_j$wLA_XR_-t3hX`+2H$D3n$=2#ADUBp-bc=RlPC~BVvNxy*N-0go#^sc*;Re}7P$D4wpzMFHqH9&VY(Oj^LU+C2|vRdIPE82W0Cu{sa85=axA1%|j!RlE+OGit4{wm)XE3u0cM#K$1#*8fiQd>DGD( zKnBBB)uMuf@!fvG*fT#@S-7S9LNrQ~qur=!t@{AXf0_c9$b)q|rC=+)%g)7%bdz7I zQ?3gY2$I)Obe_a0foV!a^#BfYd9sv@sQ|Y-G@;qmzPfMNgH3Zuhb_r~#f<>;+q{sP zwNB)bZgPA(p%Uq2N%)FM=R$BXHnb=Ax2~hnJn#j%&5tnXPBh9#3Yybjp}$Ygi5Jyv zJJmtavAMLGQrWPXy6G(t7S1aaDj^rn)T-txC=#&0w;n7uq-52`NBP zc*DV-B)U^qQXrs9XVa~KNkB@vopO;Vr~~EQ)rI_fiSk&cm zUv1pli*n}-h{bm)DEO7@e{_BAK)*cKk`(ssaW*_fM^Rk zwWzQlto{KaYE=&ah$7XaSeeH0H6#FPbL=zNL5bPI#{e#ZAjeo(VGy~T5c%E995b1g zJQ}c7DL%BOEsd%=Sy*-2H*Uu|A&TcoUZc{+ZLb5UKHHwClh**qEGXd=1yn!PLGx8` z=AMP3*G>t}@e*qVu(K|V@{+6Dqg-X|Fj|*%e8SY9tedI`!kVFs+mc?XBz{E;hlNlqu)ye(JJrvHkN*O92TKsKK`zL8R6 zD7j22^WiZX?c`Z3)T;d<*$&sY&&%UFlt9%Iz<%kwv)#5ARCt$hBdxoKVAX$7VAER= z7QBpif|+`|`SEsoK1;`s6yW(zOH=pFTs}qclPFfoAcY6^y6X3NX);Iu(6Cvpf{Nof zYDa`>Z^+%gGn&Y3WHA*t)I*lH{xlR)dr0HQWYcwLFe8#_dS1fIza z$S&Bbd0_06L$J;4B5~5mP1HUYg9#OCS>N20*WvV62i!J)HUR0L5{5fZ1Zdt_p@)V zwbc~fI;KO|9ksKQW>?nsU6KxgDpeA1;)WE?mOjXQtbgvZ#%%SW!@B^W;wm5Up@DiR zZJYMXhQi)jdS(qa9eWzo8v+*k08SZ#kD4?{M`T{%zVBY=1mEt|BOB0z8r8yk`!}8_ z;k;)(vqit8&(i207BYI10%GRx?VBhxeDE`5Vdbetr;9lrecAPsJ7B%M1%_LAT;Z~T zvYjNL1m->Cyr8rSr@}3=p4YLa!JiBzas8lY&>-_U48s=Zf-YW!zjKynjnfOYYGUB= zEsNu2%)F}@Jw@Qu+{dmpviVQYQmkhVrS7|vzta3XoQwPYMDMp-Gf%CZGvx%MW}71z z=A>Kd-2pE%zEuc_u6~}{^-sW_wq6+?`x|$@Jh@p9(x{)Is~Wty-C5%wR4-Qqd?r|N z(m3;7Twc%6)Zrh)6m_OouCQXv*Xn8oE6oaeTlb5&Rhtlz-AlUDaRTa#+0zYItWEg` z_dJ+-_Oc5tsotzJ(z$7#_1nkd`IUMihsxwPLWUhg+X7BLvP;s|{!(>5q6t4y06S(= z(j;l}H-56v%ykd-*C*jc6J2zt!=uukfZe&V>0Vh@ruwHJhhJJwZ;f9vVxDC7CzvQau};=+;RKA#BkxNJq67VG13 zK1I`tUTFbu+>B+LvWf8!twrOx>UCv3_GyJ^DXS7H_zjh6w@rrN10Rh15qBg~4OK~6 z2}SL#e$lnl%ft7%1DF&aZCbVG{)>p*M71*9L3<}F zihuq0rrF}lHtpkfsn}OE!}m6Ip<)uQzgC2twW98+FCBbS-XQdzZD_6g6*2=J&flr* zO1+{CS!4Tp(6fTw=Z0=c zW1nvG<$CA^K%jl07hOKu9Nc70-kVfeE^rHY)wDbY+p1PRCw}U$R?5Y-UY^lC=?5)? zZphINPhU=9J3Pv~%0hE0gfKYna7{}f0#UUZ^F6UgmX|OJ*y3}|o9DldV5#~j-m0nz zD|!1F*5Wk;(4K|;APx$0>ux8Ez8%`u+|J@@WfPZ=8M=-I3Cet_)HsmBitXljPy>#~ zcZ)jznql^>`qpo11-fe7k$uViJ?|jfE9_M{>y?f3UfeH!W536_qc&&1fFu%ASKTMxDfkM zn_KKV?*|B@Gl7S5pGecUT1G;^=US>GN8Y2iC*EJG;PTCd#hu$#(|&u(bkB8ebIyMK zzT{-BMqcV#OGoQ11kLAa+ig-2-D*Ktb%8%Ideowpvl#z29a`^J)SFlvw3S#zsf>fyfWV}Kx zhI_dIMXT*%o33c^^Y{iiLQh36IzqOs`s_$}c}&RT<1%eWW0Pt|DIar!jL$RPy^M!S zjso*1&(;c5b3HB>cz(BdEIGIKT0+RR%nMd*$`C>DYN2S7@ zHN4f68m(ZQZ?#>d=(=a0qPANToPk@PdgEkq)Lai(7mcBlO%ZQ0{vK+fG}~AeWRx(e zc78F`zZM;rHGm3u3mJN8#_uiEs`6L6nH@~OL2Ib{16(nuw^b?tz~zMErp*OTLh5OW z(Q>%uRFNBEO311U*}O)N*amq!pKD;=4G%#Y{Sof#u+(3kUi=YBnzM9o_<6qmjd!ueZYT`Yl-^D*an>`t8TYqQnl01yTTQ2iEv#}m^=M8&DzYfy_0bVQz z?gw&1$mRR&kV z>2|1t3IBD>v(|dN8RJiNvUC<}7D(l|r^+laFOtZjVv;J)kd(DeKP_!oI`uTJiZAA-YHj) z4Zp{Ce(nxiYt@P&WNoW>3hp` zjb=Wr9ckGg`BCM{WaH>WQi03il?#V9?f2G(o`2ZJJtCErjpn6w9xnJCoa7_|29jBOUAdeCu_v>WgWB11dg0Z&VFKsu?BKinBlk zQh9Ezb##hSKFExjvjcQr)Zs&XVeOlhK(5F9kOf+0*eIoK&|ph?(kOs4IQ#*sBGC05 z^(#mq8DD6P&{`|yoqo_AX-uQ-rzXbKM0W#)c&w|!61&6b>IE-0dSZDt1~zOi*^u^D z9T;NNM&MO8&ERM4)AZQu5F#&J4Jad{5^x)OeP1<)Nnk71%tG-L1>l~{X&8Nz; zMmvuPH`_Lti+wXET==2D)_Ol>>7ha<2bYVY_W4@a~}Q1?`?;u>d80DDW!h_bn?`gZlcSr|&RFf>*&y2mdJ*0w9 z9g)OgvKNbhj-vJ6`iQgS5;sN6V-c*u_zQg4zm_dBXKqR36)rGzFINT?`JS2Wd#Z-{ z-oxL_6LF54*X>l+v(6VTMEgJ<6x(w?emGaRtbNh{~dD$sj^AJ)PnZ?jfReLQjECpYT;@I0Y0 z|D(85$iz0u+^lJybp*%n1gEFrl@=A2E*pIY&aYA1)|G-fHX^;>RQ>hhw<&!XodLdN zqK-38qT&g~Eu8d85=6htp$M36H;LSJ~B@$e-lFCjT29jKt=Sp znej%{54cAY;%3{DgK%SB&vmY-4Ym#T`qYNYGoufJHb)UAaCMsc0oR&3re8VSTkVHua4yPP zj6>+xD(~z#sPU)W6}cg+=4YSThB6h%U-K?!YKGRsAMJ(Y>9-gOI+(0jm1dNeXKT%! zSo6w_a7FMO@sA%Rtnq(T*bve%5+lQt1%)6MRj9!cUsap7R#yX>N6NGfCDAmDJKUT~ z-q!d@5%osZ^L<58t{WtO$c{MJQi@cqn0ES;_;a;c@$P9e$^t1*!nz>C@#24poh~;I zfNJcjIW{{pl<9w0P;Xqb0rqqRsdPOUy~ueZr{1&~^y)!E|U9pZw5Jt<5i*n1Z<5 z)IKM6<)32=UjD4Q=>P^*eaDd#Bqs2B>p|ur#(27$-B24UPgFMnxN?uzx8V5y-VX= zNA}k2i16Mp9-AvT@Z5(1pf|iZl)t>=shPpA*cVk*?*)Yb##A4OGyIq2fF142HvU%t zzY2~fuGBCGdNwZ`XLmj7QosFX{gP!6_MtI>7tW)=FU;wdKvbB&%YB>s&aGeicImk; z@p!8VEM%MD^yKeY_i$q^%-b$}Bv_WffTOz7L#>=1MH@bfq?f1+UYlgGIe)8vuFtQ+ z8rF7IOdP^clETEh$e`9sE7lj|_F~2@^ljk3FC=u|TrE0j=ljyZe+GH^Lw?o=Fm3Sk4rE2+)8Q?=QV*pR%6+$_%ULKk|rZ+#|>T@ zK;=4?8M-)8Bayix; z9<6>Fg?;Z+IX(L<(pg|<0F>_f8@qCCx6!TYhQed32i+L}?u`2z49j^q%kd&q`VFii zxd`wE74_$B>7cH$ezz#ZDwRFCr&@pM)sbMK^9Vx~U(EsICrj8Hd7aj<4BIG!O5Y9D ziJ*5m!6Tlo?hEU(qazCv!MsWi_(7jICV>*CoOh2FoKIz+8Xqx9Nx=@q{UqVb^(RNb zG%j_L3bJ6)aqxi=Hsn(J-fB!d+UL=UgI>a^bAgZP-j^OVwC(5@EY zWSYJVA;oS8MuxUbL`efFAir8dl}ZTDEn82S*KWs%*{YCXeT^B`zN3|)cTtY&IVV#e z0Gi`E9xk!;Cfd_%`Wr7`Gv+ZLXBA(5ECV>?3gYKFbK(T#3nm}t&c(3#a`#6}3F$$8 zA5#TW!T|`Dk?;81#cEFZ$n5aGxPs8`%Flh=TBu? zDs+?b-+kOXB@p|{g+xvzZis2c^M_mn;$zLA%lF07O*S`GN36(6rAH)Xt&>`S=SeP? z%(mPD!o3>g17ITUk)*<>q6-N34I(Hhb{+TKABDe^T--Z0dj&}c+|y!TV$Uyk%CI@iZC|Qt|D^~`FveaM9#{1( zX1*=6yVG4s(Oc$j>5*Xh zIU4!8T+_=Zc|%iZYZ%rb_k!s03HLYhl8LT@2Fd)es2>0gRrA(=Gx1Q{rFM=KOPPQs zW?GJG7vZRU#x$=A%c<481Mx1$I-ad|n@r}o!N$~gI*(RKTvfnZ)2+E;G9~HNYK>^~ zD*U&~w;Qbn84Ra0zSJ1^SJqX>KHJ_!(SV_MkAQ^eA_ajFMjP)@MEq5Zi!gkBmr#%Espc_(U4DD&NlXoSBz~haDh)bz;3dl z31+-J-2=!gI=io}sy^O6?CnC&5bU#_&hdL$a1;uKjPQ+UZQ0>>ra-mx8+YB3a&dJ4 z_=UI1RG<^kc$$7DSY}cP6!p4or|6(b*QQFLGp$o(MP!>n#VJ=oPH-^&WlRXMeW3|t`1!GWDzz(Z%=UA zFKWwdk?S5nOn)eVsRNe)5au^Jf2EXOqRnNa=pRGsX};{m%*LhaM!Q=)oYG$xtK#Pl zR(C5)$Rr6i>vqzZ=doh#!2>?mI#=~ZX402xA+hBe*XwL~R2)n+PP{lTm=~Vdg|!de zSp2vPGvcpKuVP7*OxW}RROrl&RLv>6`lPeYCe-hOUm z%q91^j23`~s@m(Y#I_K*vTM8V#!f;z2&jE|zta_kk2?_yOw~X!H>6dA(W_*UMOq&V z>Zd!)&cqqEp}}n)?r(Wkw3TBJ-Op2P*H2UScqr@1-1y6@=mHVX&r|{?Bn7ssCeXiC zTvXP2!$0?uX55}VdFXT8NCfaCl{n6}z*|Y1^XtDI$m9!ou7r&a}B4?6en3Ue<*z2v{m*zbc>o-Px%G6 zd&HE3z*P}9uF0RU+Pte=27raZfPZ=h!J<*k;u)VOJai-R4X`6F$jY9_BUCaS_lMd2BS4t&!L;SyuZAjU z)x=O)+(P~zhQbhTX2W{;{pd9x%r&>|Ol{IF+e0d$TIP+wP}`1nM{c!`pp~L=24LgQzoSeiv4C2p6hXU^B_-f- z3EM z!M0yWUqKw4SiP8^+~VOyRB{mmcW6EU6;7nXqdeZhPxKL3FJ*3?oM5fYfRv zoD9d_pKim+5SQ?(VRNVVb}pL_1{#{wzup=Bt=?FF|K6evj~(~N9Sy{*e$}{WR{ouJ zecT!|d+CnwrJ>%Aw?>UMoMUXo@3&=zV zbZ@1<4}Ni~9pMoewwYb*)hgNg{uRZP4Ajdx!m@+hH%L~*_@}=lUkSX_m zc(|W7)Dlu(_0;V!si5==ie9K&CnK?t$k914Vmn+Y!L+RBZoV2yeLbsHJ&Zi0>8!XO zz@g}4zq2c$LQ@i1K4*BQ)key2{e68gs#5h>Q$-H@`Illnk4p&hotjK-a9dTgcEbNh z)miv89rx{?l7@jOHDH8-5|Yv|5EX+IrMr>t?rsnzq(SNKZWu8JNHe+yjGp9(Gw=I( z&g-0iV6W}B?HkwizOD~283;XDHHaaJ_Z>uK73IH z_ChnN2&iu^4(DF#id-J3KzQ3fBZ$0>%sjbBAHKC;#McIs{wAv$IwGz+)L}Blhfkc*BBi$a-lq5X4yiN>rNbw0crr$bPgm}!htQ?}d{4;7d7wL~bjOPARtu4jGJ=YFYnBk(^bZ=2VQBqx#KYVVJ z(gqP$Xy!3Qu#^TN--ay1=8g9yo!LsOc%s#2f=rW!#s4ZG#&_jh4!BLc&T*%6Nay-= z)0==|spE|^;t{Q$;cHST>=5%o+Vq+`uQQ8qE0HetDU@^3>BNBXCnj>+*p}v5WFnVr ztdZtYKhIqx17>{ga+Oj}(#OW1+GY!YHnLXoC6CtX?Ia5|D_$TdW?SC`XHpRISD$q8k`FQkipwwi7`{(Xo4Mgt^n8$KakL&6bS$B6Tu0o3X#7b;A? z4bRt$7R>=EKG~doEdstq#-DsVHa_S{%GCuu*WTP@xxUd6tiwE}oCf>20}j8TTxzX2 zYwj*vr>$5`TaO3WXRBcQcU8O|p@DbCWV15mtN3)R@kBDn_<Ly~if_FpGIpyZa`j{fyPjP4-4wm)7Gg3?EW|Spma_je!l<1F7nghCFD0ZrP5#y+c#NqA zPC(hVT;hC`eHPIY^M|9z_EN(2^s`uh$?Md&s{?@R@ z3q+QC*1AtEIw|||*UIbt)8Wd*>taXXt%a4>c>c?v=P>cEblkh?n@_U68(3Xee)G?D z0GEN}XF3``a07ot-WA`vyaTwpR6O-XuO<_}sF#H8gk*7?*1s}ccl|xnP_&4PMSjqo_@jG$zS1j6rN1g}WPAa3o@?agK%(il>|g}G^f0;=b=C6YdzTr5 zknA(ZJ?B7r?awtgxVor z!f-FwM6V?Ewc10Tkc3;6F5GA4{Q1y1=!K7q%J&>ht(i~SDye<_m z&_}@WmxtF97lEdCKgn^srXb(A2^g{}r%Y#Bw3ExIOvKfVjx$nZ4_~DbjB{8yVYHmfxNcKqy$g=S#jO)Qk& zd4-qUk?CYkol3Z858~IK4I}vVD?bujBCer^PQjjYj+H~A)CXo%nG{H*3J^3cn&}qX zn{0C&X@nbG>|;2hPC04M4UPdhztGYY0>68zVbr1Lfw2V;6UVqo3{P&o4Pq7Cyk$KC z=~}4VvQXWeQ}{)E19hz{UTSK{qvt6U8n)g4iFb)0B*FDA-uB+_?7z+xwQC*n=OTZ> zN^{qkhLQR7;cv3&RQa_R9u}kwn>(EMI%LB6=JGiWBc8mU!=nzOCj6?u>Ps{nfYEs~ zxVKK{pnW@;m%RmXfY%!)SIy-7k=B2H0x*BS)X7Eud(0Wk5dMt&`{BJ}SCBJMI2$p> z=Nc`DGhzQ}4d7T3^H^npHdF4550M_*$ne@5*($$NoA<5U=SxjAHSLeIW8g1e3&)?=MPbw^ z^c%3_3PPky#u0z&0Mayo+0hD>JIU-Zbq^ zi^bo#7{glAa*R+&4Q+lN6TcT+bytjQZ)=k6Px7`uN}dQwu~B%!aIgwoEZ4K7X4G9C z?2o35aI=-kob0ZTomO2BVK_7OZ2?4EFY0Enp{sA7o8p&TuM!^`q%Y<&nnr&is&^CflK}-R^B#F*8WIEjs|Xy; z9!)F~QLWW2+R_ytiRZvwlEe|yObpLl1T|)#D7eT=6~%34@dAplpUFT)e{sdz#s=RA z5%lsU2$-7s!>+(A97z1pd3kajb z(iGuQ9x8(@>l|#Z{%=r*#jNBl)!U+MDiD937J^1BuuUFNTC%X_&3jiHzYXEx%s`}I zL&wSh*}g}q2FDdi#96DwOtfI6H%*$jwlyNk5_I3br-J3~KnL*`vQNF&zd(Hb%>H)wjICC|V|ZeUkH+_Sq;j+_wm@ReK$0a z5aFcM(jtFpBPfbyfLVt%5F#x=iceF4GvP)s`E%)E-*Kvu@Xn2atr7({pPO6%FMdce z|4)8fqxM{tclq%pnKXWDw!=$y7ol6=rCX8_TQGd3PRj57RXIYsd=dG^ztZcEUCB|m z!w%m{QG7V}XT#oezQx+!f&Pp5#BTbS8+W@hCAa0FvvB7hB9^?jQ-%8()@176Cyh(H zvGPUiYO{wxh=x40@ur(oC$@w+ZCbQE5qfq1atIQ=syK+;-3s)%uSeW=`2^n$?ZqyM z2t2We9W^VH&aODT+i463ez2^4~j@1?bV;BcER(h>Yk zf=)~CGko417^iOhTpIf|CFo0I#Q&&tZ)-OUsjo+A>i_6zN2lcSKVj=!(ByrVndgOh zb?2}VI(=!hyz1Y#2fPC;5?=sUM(Ha}ON39t8Se|6Xf;c)HeUat6q7RAWN(gcoFElW zk<*?{OhggzcRE<^r!kpF8=B7rYcR9|ix}Lc^$k2Jg_fSEWqzXLr&gae(-a;99t^cn z{?kA2B}`ZFMxP%ZQ3rQb6Q=KjzSh%NBAC}WNTrwOe)-i)KIV>pMIfp0cZ+a}AJk-i z(X_h8u!Ohp#tk!PPAcz3qHw@eo8z;5?4oV5_u9f+G9hKO^rWhYLN>c7h)2J4v!q6G zysPN>3N_T)-h5so@HDr){VKR`dV1+A-@xEKwTQ0TPZ7Jb)$^p1`zZhygP6zZaJc=R z+R+$M2I$x0ySAMlgDnkS5Vvcxyd0lXfluN zTwCb5(>4TR6*aOCrgZ|Qzks49+ZroBkdJ2$a4jT_><-tqh*3caG#6cUs&fPMavTlq zU?R_dRSX`gf~P4Y0z(CC$}JY=?_zb-6%bgYM=^_7Av@%%HB1>M2D7oq2T<$U8uI43 z;>+@JuMPB_k7U8m&yal}g+1TAi$z}&Hk^jL>_)9`&5umu)@W^D=>EdZyr%OMz5c)wt#Vo&7U&z8}@ByiiAyU93S{OBF4x<0v z(fbVk-Iv1w=1`ICeaP>t5^2!wchgtwv|IQBB4XzqvoP`9BCy?mBl$c=M4|m@w(Ge4 z<&oCh*D5;9>HBr-c@NZReQDwd1h2Ba7kg%Y#&R}Fx*YKzvp_7KYWL5UynjH z@T(i1(AYyjm90K>x#=MHw5oV(eEf{ebgtUyUc^oZj1EM6U}zM*-&8<|G0`5ZHzM)k zWppy6Uba#0fu=nBUTI|G2I;%%r?hf;;EM8kRJ?6&!<@sI8Ueo?V(0O+`@HG^nlIy$ z>N&(&=lHxg+|0ZeMC{fa9J?1uN+MDJj&Zet7_Yv~#3do0j~_z!gZ%sznJAP+S!E{* z=+qY3{UF?508V@@>@SgPF4qMYyy||&X=l4OAf3Bv+gqUD^iYBIv%%Yf>!PQUxvN4n zYR}7~&J=J>!AYI}^vik>1Y(`Zpb%Rco@3`4wMSRczw3R8FAiDMrC4~ZfMR_ zKc&ByDY37Mr(vpQ8hF*=VDlJ5qn%a@_Mcu`usM?MSlY;X z@p%Wi+>jK={&1n_se?YmaWJXGzxv186m!A&cd&q67u4Ul`_bvakEkn{_?!p74JuQl zv3DSWku~;wv<(KmrBIjLbu>uImVxngjaQ{;=Nvd-k;owGvS7_Dfe!MkLZ_ zzZ_)JQBBHFYML(aq>t>k%-lJ$e#YCz)A{L)!Ph)8n=wK+vR=u3YWUdTIaYW4P~GYp zkyTZdC#mXE%k>1j3|E*X-9r7!w}(jvenwp~n|2c11lP{akSvpi;OfM*Gx-!{e%1)a z4elR>m=QGxDZU}g9gs9u^wj^|ERm|5Or`Tc989*#S0Zm*J zRsDJN?TQ6+6X@bxm!=3J+3Tb8YQJ!EI-uCAc&O*yYyx9$Wwu6UBKYTw$!7(%jCfF& z`tOkTEFJCg#<#V(l=<-Y)7`j2lnS5C*H*7n@-_ZAJb1))#lNsei~26iX&hlgBajF>E3 z$}qWz%|v&ui~Aa2ijLpRkKr$soA%TAaoOA{H!FaY#`|6P2$$a$+14BTTLNXisyK1C zzF{nL>` zd_52tta>`&)Ie|Pr_LYBpY!seWBM2)0mUXKm37JK=g-P8JXf&}l2qQ)i#8%V!I1{x z&cI|Fe<^YmybC#u1EfITET8Jzhth*3NfL;;dxk$3_={13Mk4*B33ifZ+0!n%9i%S~ zv_dl+c?sfhuj$Od?_3+i7Uu8c{+VTgss62xB}10EZ4Z%M7RI*<6mg@~eo)G-qK?k8}mCW{7+XK5E>LMPSlo#W+;VJ@WHys-6&D=BrMp7%%oU z{oUg0FbsYzJZCBTb~sG^%A;C}qJgG|fd9kArMaPSzErmhBTe!o2lFw=b}8y}w?DuT z6hID=(vCZRMNJd&r>sKXE?)3%9>Nbfn+|Ltl)r}h(9-~;ZK}xTVZCDBy+#%)o`&p{ zYF9FX$>YzZw=@P1JemLa={M+psvU`YWw$n zm_@}11$1&oUdAZ-rDpd}Nk~xk(-^3RsSd#Tk%<<>1!!*mS+oDAi1@JvVj$v!+( z2O(J}P%@7^-C37!={t+|b}x1|e}b}PQ@5&*TwlNOUZ>4l8qF1#{Vcyd4dzw_G0A-a z&pVs^Sd~*bq&Z9dx+nIZ(=e15r>yY0^nE}~_w}ju@N@@V%MDv2aOo%&vy$`1MW0m~ z?;X{WRLUP#l1*#l3+!aO#u0oj?)cR)4;;zmfbrV5&PF@O-3!yyr*IouW9t~Xx`R2v zH^tOR=&W!;T$?pW$4~c*@E40B2ZPep6kFPqTnSvH=XVFwrdc#dT(Ym=rzQzT_>n-)P#LB{1#uC8IUmH!tXn|JXWXlYy(>vOrIc&LJ&Q+iVc&cR}o=T3xA zC)j6Ymy#|MInKLUUf3$4<40{!*-C4#{@)Va=Qn{gJ;!RtY=!u7c@d11eX|m zFbK}@2Vjy$Z$F~M*C}v}&XZf7{}Ex8a4;9vJIWz_*Rj%v{*aH+7MU&vFG>eFlQzCU z)(r))h~l|=T75m0at9^t2xv2+sqsni-x7$=2JF=mdh0*_NXVYjnk{BU8NKF z?Ho01ol~+nqj_@lx?6*=<=Uh3C|2@rLb1ElkWQ4> z#Wv5m;jgXQe72wlVH{kxyFSc1Kht-zdAIJ4)B|M6RGQs-Gr<&aq4alvC)QmCJ-{P= zyq`%(DiHV0{j`(qPoFWRTR!wffT)&`k&`6npQ*x1T@9nxj&ynH#QQ$_2@#&M1tfwC z1pir*|7pJCVB{FMp&M>YgIJ`qDNHE0h%Mi3@$&H3`hHf(xiHYA=fa=WpKx0)BWz#8 z!_FMScjwA7;wG+>?#sP2un>4tFO@Kp87OY!Vg!pGwxn6G2COGyg4`R+-H$`G{Tm1Z zp(Lvrh>I&EGW8Oxv$~v|ii7*fB!=29R^xC@ikjv#1q;7mp;}}|A9y~6Hokg+zw4m# zny1|+!i760R47;Z&gRB3aV!`a6~)7t^n|NZ&)+9OPbDQ9ZTtFMniOhRI#*c94Nrtbs>zWIBzv@%`UV7J8mWB$Maf)z? z!`|nS?9L2F`kIp`_o8$+Im4TndiELiE6admzFOddYK>r`xTG27ACUI&(CW5gyAzey z4bXhC3aA@{j3$O3CRmWgkyPL5=0W4w(EY$M5=CJQ)&ZY_IY5~p5`VioJDWapuZ6_P z7ypd@DFEt(Q)-TA7lzo_P$%3*QXaeUJgR#r2%#uUq~F^0PzM|C5=nGzXJ4%mu*ES+ z_h_6p2k#);n_-rAj%9hPncY6c*v*}~qZ^8CVhRpmzUte6HKId{VrenDt0v{+S0aYq z%sv2*$6vv<#yPUyoJSGo-3J{JLHVo_ujZ>x+)i-WC11}4tFRvui@CV%p`SnHHSrDe zuq?eEW;igUJusd<4b;`Gd{A(^oO(sOeNU?(<9EbiqK2f;^5^cI^=pn4V8)QtU^080 z+aSxgD>1c_*KfoWs@8g?^+r++UFkFA#VnQe%$sHznj{S&BI>E6Lr~^DLxk_9X85;m z;eV+FVfWitbK)KzUJk8ez{c9shnSVzFo3Mn5qKcSkZ)Z92>MSX60^x`nPBpWk^ML@ zPN5%betmRvg5ikhR@N2&%%$)pA}GcGqzbBy$^sN)Kq!sQ+cnU zj=|-=+v7dC5`@s~6Jk?mehgfoi1RD-dKkwr6zhm#z?iGy(IN|9sp_*aH_M9kj5Z?S4`Q6+3KFUGD>~=q@8k52T z40Ky2EEEI%m%<#suD*&rwp4vEb30&r3B)X4|BH0N?*|UHaF==3KIF8rx8~1)8!^g0 z9|+xpLRcCzfkdfKc%C~e&}shojTVPfSToNXS~GQ9N1PpB3*BzSJ&I=@Sy-j<9R+aS zfbaf`Z+(vqwlz-5Z!J~}rDA9J)-?{mr~vuJb_&ONB$Tb9CnS&jk82&VXc9?akKY9l z*EbGT0@X=TI7{$nQn9HbSCK>wt22f~)d?lG^_e!=dZIe?qt!(I|B;$xnRsK_UO-*) zzi$+~G-zSZlelz-RA@G^tQgh^Yp0(XX2Isp%cpr5ap9{G5N z_agW#CDb?)Un9H(Wz(O){)*EIQe8=sNqQ&>2^KUrAOHI-uZra}nxY zH9xQaIIW2*j5YCHw^^N9{pkXug|!i(rv*S(DN&K;EuixZxbX6v_QKKpwdDR^fXS!{ zd8Cp4GI1hdaxDIUCv3L1+ zHnuptYu2|=(GdI?H=+DiKz-PL~5b zalge85pCREvd(Yi|Lv8um|dspM%JG%&B`lvn+86TDi$Vsw)b5UqKV%kpe6!rahfSl%Jro}^IFx5|5bS@{=)?rLV4|6?P zu+#OFi%52E7Mht%YK?I+#~6e8k0^v0F`OrwEl2qI3b)@KI~kj+ab7Pf1A_5@oOhl zr<}gr6uZ*Y-(1MY1#lAPKVA8568N&yal}r=+>u!VPvrLHt2y%+7m{P+uz!zMeDj>4 zOHn5tS8RdE^S*k6Omj5t?;LP{!49x_J95*jyaLVq+4=(aV+^uElGm2;iSvs|k~@kj zlocJ$NXHen;8mzvITE_QF$PAv7byAR3dMQ6;6ehTmTuoDPO;-R-3^f$w~@st$upoLUuS59@!N)Z`8XeRK7yCtlb`;fCtVcw%EM`@T zOe%D+b?L!ev$|i8hRN8D4FstN*;=%=0Zw6)sK-GS(h_VJB%&7@pX`ysm;j`rF-Uy* zd$*0V7|c7!nndG0Q#ksieZ!s2t0|Ukik$knJDP6fdhG?UvD?AnT>9!I#+A9^?#BNq z@^GA5iJXDi^ObV@8G!in9D8M^(6gLN(i+CkqJ&p2Ed9Vq+JvU!r@5*d!svP2!LS97 z)^R2M)x6B`u{Aky2}|Jioo(V*PTab)+)681{xcUf{ssB%*)4Pb|KYH@yh_I2H#pB` zW^hC>%pM;-QUUIAsNCXvD>Vo*d&hoXpvkt3OUf6tDTPCc+wu~xEsTZ2If8aTe&1#{ zpRKzIj_xtK9wEm(evu`7vt`mPsQkH#J-basc{LjARn%|08+(+$_~OGOc9M(&QF zvv+5^c~YAAfJYb<8tTyFRI-dW`k&+k=5Pbt$2)iLok9&9Q)al#12=z80!Pf(o!+3D z`h3hgEjulmhvhV-(;>tmZ{gE9S8en<{G%2l6)nYnnfaI+7(w2ly|OZevMUR^29xiK zHrS<1X&+!#@cZVw*Afvs7PV|`6#*`)7S9)@US7ugXs6#^3SJStwliCdV;ptIMz5}7 z_TuBH9>AEjN86b5FDv;m3#w^e9BKU@1csowS&2pzvmC(9fk)MTF$XIPKCYkQbX4ZIolLrs*4W1IMy? zlZ{CvxWaYDbs?gh*J{fo*h{c=i`3tGHO){TL5`qW7~7yn=bvaG&C!oRKF1z4A#-3& zi>6tAflC`XH1lmwr&ruTK;NA`IusajAu}3>b^CNXqneQ1#T4TyXW#l%K+nG5IVSh^N=>YBI=viu^BLE@qZ^QT9G=;-qH~EO?jc zRj0OdAff!t>L3|FKTt~;Pjl@vZyhlwvbN<&fIRO@#>MW_N9Sp$Exr4^0(gS&z&jij z7S}UC_Py-(81Q92Pv<;@LXu_7H90e$BxCmK`bqq(^dQPp7z5P{GWE&AI>WP7&tvU+ z42jqXo@XU_|9`YqgcbMzwqfifh7_^$1c&%@yHj!@1^KM~HmDKFZA|OI@Qw%B3|jX6u;l z3CXG%#mg%`;;ahD|FYa9s*2E?re;!Q+nE|dFHXYOJ#YXkCq?iF(`O7gdc4D zn&tRDExmnG^S+Ghi@5)KkL4oky6IU^=!yM7zCrpSC;a<6j>*AylCOn#Jn6V03ziaY z5q4PVf%|y_I6q!=Qkxl825r2}%%$h+%z z$0rHqdM|6_`&P@@Dd}@PADQl{ITv$owc8@@M2Z9__a@*-=IxoG_OD>uKZOjcpel{u zhcrp5nq@Ml8ja5EUYSZg-Hte;-a>7u@xEgItj_Ix03UU8tMO8q2ajuo;@K!po@dOz z@h35S<w~kx_%j3M(Ay7Vld6zg7Mj=#aj`|K^zUq(t%AnrRnf`&S0bOwq|Y(7qtG?48AhQA+eYY7(itw zL=%xvY-DsBp&t;mmdPnBV3270QWFGwFddE5((nD{RQKR5{qr8j+g>W0Vu}Lm!@auA zQKBNhQ@C-UsZe^ledk1 zHC-V#y=mr89Fi5x z(4(9T3FqFjj!+FmcIgHB+FDc2+L$Q0Z%8t&(dkT^6~C&h@hY-@BNn+Kglo!-3?$pev>TTB+FR19Y-8#0*41)N0fp;*`yclh zDND7M?Z5d&x&E1;8DDbLFUnIPxIDMeyhWVzjA;Bu#^z$}nXyDoCHG>9%jEXdR8 zZ5y#z?|IBu`F2>I6dmVN;}Nl#76)mRpIXKdhdKm6PTcZ1(hGg}+7|kJG?Y2d%i{0s% z&S3LiI^D1^GhbQYw1C&17KOE&-37s$h?J#P4{@!AhDB(&JU%aC%IdM$&(57K9AMU^ zWwqI2kphNw+P>SiG4RP#%x=&C9=tAoQ#X;%WWN^o^052;0nONUI#KcN(eFk1QO;}ymdsRC=!eALUUw>q1%N(ra%e*R>QXXXbo zG6(5tuQLwFE9)C+6_@v1;#W%hWZszcL0-sBVC<9&{G%LE=39;46AEaN!H{ix)>`25$ z^tZs@K*Xg3zyHq(OIOS8!7K2X3JVSy-Jt-Ulhas_aStp)dYquKONDf)|2e-|9M2gY zMjT^Tz^~r6Y*$?%c1W0t!#;Yj{qZqOwPmX#0PKtPz|6s~4BOVTy&Hfyq1rU9;JUfB zDSvR>Yag~ICe}&0bs4#_rIvmDXy%>Y2)@0_K0HfC2y6c~U)<9liJL60pD*PD&)ltQ z1je{68_klsNh^+zKGY=j?GqDK(ib|yxe^7n(P&cabyuovOIu2CoF%v6UpG8mv2Tvw z-_OBDy}2_3PiYhDD1WqjY+D2O>6IQreTW-{?Jz`9z1<7cvKAFOZhkcTq9Vggt_!j9 zEqiJFYDiT;xB&(%vulP*V{q<@W zAkCye6gj5$B}cFt$=E=C3%&+6(t|Fm$$#aw#8odb4yK@s5wUapy@R^{?W<6Z7PXt> z6qkoukW-D3;9ilMxO6m8U)@=cp=BRq$}TY+)hvCDf76N+@mHo->x;@r;tR2rqsu^n zW&f?=d`}*c!7&tO`p}k%1dA?kUpg<7W=C|-j4!;;)|QMd-44uWP-p+3#U{4x23H*`l@ZLEo(2{t!C*TaaA3d_K&#Q*NwI5BK^3-5Ia1txg1CL?-@ztxt1Z* zC5r`dkr*rxHHdF0kR%|nU;6D<#Lki22a_4p1+CHV{!!+^bdO~~plo3-2hHo<&R$s> z2hMhYscVFr80ObwVqog_;VTnp{c3R=`B3NR;0|`U+G1sqPt{oUQVSyVt0BNvt)lSa zR?d~CenaC35b$+H#O|K)cHn?G=7zimh1D0FtiXPo8v)4KD|zpGwlRV z)u{qhiXG&J(^41ArTm(?O|_c}l-xexs0OmQb^eBqeO{+X^IUSS)Q1p`YhC@|t5tob zDW>nYiY(cb=yhGJEK>{rLKH?!>6sCvF@cq=kTuP>U?!mLbsF2~1f zHMT??px4NyNsTmd?jLcO^Qq?F)c90AT3xGn+fVw@r+;m(*$2I@3nlV> z_1$#)P^QaFZVsIzt~yBYEM#tAbi2|{;H%;*`nxOPTlOk{mIj04proX+!@p$(2p5oyhTNxADf2y_MDYUH~q*;W6bD%BtCiCp|VUd&wQ1U>-_!p zVyozdsWN%v1n;M3{b?n9PMe#}Vweso!gP~5!M^G}LZzQW)$H7`^e!Z9r-AH^~{TQOgf0PBzBiAG(v0;+|5i`LF4#?i)JMn|5F>MyP# z$wm#$$s(M518k#DDdba1bMpov4jq&-_em>;c&xC1JJ01;kEIrfT5pEJiUP%Uq66NS zWr}xfONu?~)U~R)r%Zik5x#%Xv8schHBH_ans<-JKwAHDUO7&PD=kn(N*QP@mRk-` zp}L)LtH(HU^vKqOO&xeG-F+u~KK)QL#hXU>)$?0>shIn@+4k2crbvfyG&4LkkI-zFl%J;nonx4S_M>8ApIs)`fBVv zhf!PuQJ-?1ZT*Nhf*+vCG;0F`GC4QvBPBybL_AHBU{H&<<$|a1v#|=Jz!pF686?G>tX? z%vE|e7H7T4>&EFINWREqo-ME^D(sYSYxlPkQ}@Lx5sAjbU4(prU`Q$&Np(jn&E6nR77r7>;hM>nOx+rVcxy zaktf6nn2Bd$Rvie!CYYciGnvZCQUqm$(+01Ty$e#t=eF}3X7eGl<%dSGn#4oJoh_x zE;LkyDiN`oDS>AQSXpP-kEjjFiqVONUGXJ^5O%VATwz{;#^R)lE`mPLq=;#eRnZ#% zz-Yjkka_^c93-vq=mD#tnSx_b3&RQlv@;!aM!C@KXDrdA6b{VHKh+%qr!rlL%`r1+ z38bbBdY#7~whjdAh<~xr^7!Pr3J2CWq2?Vw;FecsdU%HIe@Pen9mPX0J|jGnc3~O6M8H z)~Qc0v5F;k#bZ1arRT_+T2m|E1jB*r;tSQJ^%HQ8z!xdLp?Oxy4$mPliN=g@+@ws> z>!XRST=Tbd%iCL({5qW2@h!g0h_TtPZI z&v;;tn+t`Pte?Uj@5J|)5uhVuD2nBgqot8`=rOK`Qo8kP^-EdzcshqtJ@w9iYHflI$Z-u^Pt`hyw zU`_|rrU#jAdQu`i{5CL?3gr>0!q2}dNU`Dj=HT}zTko+ZTT?;+R_dXHqB5tY1S%y> z$WYU&p)umBc8!kVA0y2Wa?EiQb$u)j_G6NTm>s+ptQ{es2R-657L-YFeUk4-I$KAX zn#{Sc8pl2xi2qK|z^;{R6~@#c5Me^^leuPzMsT#JZB4bui;n>L8wEPF|785Jv$gf(+^1{|9Lo1x^YNLt zwtdO`!x}I@&O}8!pEDtUk+e?}kvZcJVG-*bXTMFcDCbsGRoro4h~Ee`f~brQ60#!W zK-{xI>kmKwJEXR?Y2~LV079mkAgR(#Y_bza>%XXcnJ-*0QlLC@Gp8%#veg7H4{o(J zI^*v@P94km(_rrGR~sihJ37I@N$xMHH0!Jsg1ZvGr z(h(?o^}@s7-?2A+Hd;Hn`NiZc?9fT-lkeNT*y&85Q|EX!^a386Y9`M-V9o17zGYuQ zUD*>yXTHU(0$t1k!9G-4EJot=`*5?e8sqhNIV>?AWT zLMj1WXrkkP2fB@g4+;;0>1US`ZpJ2liFS&ZvX|WL;7d z^59*_^T8c0o=y$k#qt0P+EZeec_AfVzskJ@a2ziyO=+FVXB^_gDY7yX;6WQ+l#%0(R#PO&IMbbWp-@ za~@cSr5Q1#JsMe1*mbN9xN=rEi)C8Qb=|9GO;aC1cbi0jiK`}v*l9_hM+__a-|FO* zrg#ucIlezQxq}0swB+B|;!oQOD}r^as7I>LvKk0vrND{|(x?*~Hd8?Hxeeh4VZolG zk|W-!xDNIgUx$y5XY~7j2W;(%WTK+Z|6498oR+`gk{>|8$w+z-W*$?^LrAQt38QUP zKlsGt9dv(M*ksSY>&f=g;87_z1Lf8G{rO(F!+5}Q3-J!f|L3NqiO&ZTBZ)}<5aq~6 z)j7-=`(ahalG(PJ?a$L6lx1ttfJ017M2sC+1Ct0d6)dsM^MvD$vpmVI0m@hh>!opQ zyf%`+5tD>6QTY1@u5S-5s8SEfhis_w_2bOs{RLr!^p7~cO~Bk3mf|m0$ge+BzEGcb z*Cm{HFG}{ZDcsvSr>zAx#lK0vQkVC=OdwBaIG&tAM2V{r!MvF*?B{O8uvM9;Micy< zQ^{rpfneeWRub=XF_F2id?77_+ooCk5FC4&6X}a9SGj#~+NI{j zkbq+=@c@Az)ZtL?#8417+RM{1{7ws-X^ zdOHTUQ5(5&YT@P>93!qMKG<1y5(`;vM`{czF=-@f)*J9j&5@peFh53}(|&X9)xjcP zXTSJqa>jzkMrpymaSHg<8iiOl?>|zHXAzybtWAG-9O~KJ3DKoga# z7_DhAhsfaSKJ)RwZQ6v%ZoPU#IjvCO4^`|)^au+@U%_Z`!Ri0`g$jIw;|=1?44uEs zxF63Fc%9_bHd6~250*dIIJ zUe{*+FIpd{f4z#7B;ulqQjPVCTZR)pt#vD3W8O3~u&wg%5^+YbAd+ibge^V(U3 zY6W^8ky7fnS2=9bxhFsJkuOYAWA-Hx$%H2P-na3;Tz5?bJ2xw1p=m1%ZzQt7D2A+a z(L$s2NthwPNcCu}#i$vrSgBp%IDz;9*GKGaIaj)mI^x7-;1gM(HG{+04U8ZE^OnF!M9lagV-yC{NkE<;|l}-V6K$XrB&*!XnwnFcig`a z|2A#0d#a;n@hwY}BhF@ZJ<4Gm);B`JDqGDKnaKUU$95c>q+AR_=Cr`k$8r3jXnaU? z?KgZ9Y2jQeWr%m+)l5U-1}5+~fJrGZHma_zCp0sf6VA9;}fRb(3Uuer>|z24SHFD$mEJ0dEq zxNuavY_MyS4`ZkQKM>j-b+x~ZTnG6m^knO6*pE>j_g))tXlJk#A)G%ry%ygsMlKaC z^iVTfv(}U655~7@BWmf)bq%uC)aFfiiP*lb-W>Z|1dwPOst2TkZ)`3gen#1!UkeA> z$}I``=P6%?SH(dj!KZg7;^d=bHv$^cws$%4t4RppSvSvpPlB8HKt5^IsS0~v(^*bd zL^Jj3b>#-J=(clAzwEXv^PaQYHcFpdoPp2Z6tI8r!eVZf8GY2;tsXpzxx}xAaM(W> zP&enVMTxcUV*VL3PWUm+JmX3qSb;GUn0P6sy5wzM5@h6ews>Ghk=iIz;OL!ju&b#= z=Cnb=ME4r8tOn@lqCF7;Zh4Lo<>d5mU18K0RRQ~BXADOA`yB_db#%lELhP zp~$R2M634 zobOAjKmWa}9FK0GR=B9k1W?+bowS{qCF^qtVmW*V0d9P>dm)kQ5}9^}`pZRU7E%<08C{-~ z_Kj9qe2eq6|Jvt*O`SK;RHm3tB-U-h{&h0igBy`~4Ym|n&BYAWru?^U!3fo}cCw#e zNUb}eo?o%${$l7zJOH_FmTSUJ*Qqe3TgirR#go5R?!~N?O|h%+Ypst69EJGPW|;GB z^%e=r$Eo(QxVpoNh0?UWZnolTU8FCr)})bvaGMucj>iw zvqZ5MZM5Y8yV9fQ;Da)9!%0htU^M8Isc5SOmqZZDvC}bdr0L6qExzI8oV4`@`D5q% zBu{k(q9l9VS(Xo&E|P|Mz~GTyJ180DH~X@)zJh8nh0}>K-X}CWbKHIJII>r7mm&9oYpk5f)xlH>?&)<#nrp19 zmsPuduxNH1{-)DRK!fgvD0r`z`AP@t_N}87iC{m>&~6&{Z0$if&j9**?)AT%Bc9TW!~^+u}un6fXe^g%)>rXrVZzIK>I2xR&59MFOR`LyNn+y9J87 z6I>EpPx?IXd%knNzl;$^vUjrXwb#7XoOMtM!;j0 zK5XBR{&vHYn^a7oFFV1+Cv94t@eDGmFovF%vI^nLQ<+`e>b}Ej|MJ2dmp+4nNd&>aUT0RhxZX>_V#XyWW@vx1Z&Bi;r$p9rxcoUa6$d zB`nJJBb<(^LLLOlu1yWHv7vpIO(`M~*YyHu(Hr;&a4HT_6R zh)xr^@yNT)-IK1(V#I#p*0J#(;w{$a-R*|1S%Q+rh`#R0iSQmV4en2T88JzD55=AG zemHd}TJyvO&irY7L?uUliMP20rgLzvbL~r>IF0lhX)bAN#b~k}j+7DXf4MZ6@zp%5 z8g1kxrE9+_G%9Oi;=fkM+>N7Cq-ob)oO!J zN{aW}>uQ~1Ul0pIPm+{u=Zo(n^)B;-OdMhSw(9Wun~=fr99f!Oe%tHS3)E5UC~6h+ z+Wpa2@GHQ)Q%@JQT-c>ViH~gp!oW!EA_xW@?@lFkjr;=j*iPgsXF9xJI}hCuX^_2o zxuSlwb{&JERl!@Tlk@QL6C%tfT;h)o*uIIR0VO$#W_%$uMB8T8Bsvm? z=c-rA$mFygxiV{{I{HbeRLV&-9Qg|TqO`pevnfn#6C&iy18 zOC~0Xu(&uw6^W;} zgJ!7$4lluo{JGP_n2KSom+LYdYzEg@IrSA#BF2423Mtpp^sO0b89796N$TrzsFb!G zD?91SW{e-=!lyymH;iPo!(+jG&gey2vqT^ZL`LnL*g~YyR&_HT6LjeN=>`T#J)qk& zN~pk~LHFs4yo)FBo`7ydgW){ic+inTy=y?u)5$)4=2gQjOyQe>ZKNT+P?_Ig z-`ylow<|rvyVKBcl<9A`a`2^_ z%9D&8W2!KGi02!>@iy7|WRW`jr5-MY{n4Brh8XE3FyZyT7##166}kq-^a^&)Ys?6tp21)Riw(K=G|=r+m|DZI&ph5!x367qa(ZX}aFNjQ97@Ors}0r0 z%dGTa2<)9c>Elh@zq>x$eN=5dTU*gIxGRUg)zUztI`;6ojwrh)hg9F2@;j826t2WK z^qY!(72dq(m`C zKQ40CAP{nEoIEd?KB>3JXg$y_Nc&9M`7S#bBuz88QnJcfi7a~w3#kqP0VN=$`-Evc z6(ahUIcJ{H%&W{I(U4=T&eT z3nIElB|(x|qTV{i4(Sk%`|Cc8j-lkmWy(yN$t^?Ju!?wZT6q_6M z@WsrcifCEqHjd(&+Yb9EM*R~vKA`&g)o2E<5bT7YhqsKV6A&|DUBcyM??czp8n$2C z{7o{1X9x!NO0vLM9xL^k1QZ5n$p|e}0-F;GOj&QbE9t}!KFMf~jcfIMw*+98~9| zE}?1pOHe?n2#=wnc1Styeh%G(2{T z*;386NbqEXQMo-%9JLhb>wjo@e}GXdde{So?Or1ry^OS&TeQ?$=7KtxlxfjY2)>7X zQ|dp29fnLXr-LG}RGdzRaAB?^N+m@YS#l!@_Z^%+d-NiEUL1_`_qX+ntpAxtAtu>4o+;+NCo*`enYfE9w6ov)oG$jA;u}3# zQChC2(|k~ju}EbGny<{%U%65!8qf^v(pOKU7?xjX2vZe9Y;nv3t;$etb*0cAa;%pU zWfQG(wv2lc@zpZeNr=8sF#h_=IMHq~#wJ!Dp@OwLvcPL2k|L4zX)QPlhL!Szb32i_ zc`h$p`iQ7n@JaFg?AMoL-peeLWU>nbEYiek4ik5?A6?BTPoG&wj4Lzu*Z3W@UvL-Y zEpUdD>E*|zNeMr6OdtGyA^;#)EiKU&VsO&0f9}ACR+V~3S?6L1%hSx-%-HLK>jV)@ z`nJ#ZD_^KFZL_QlSEQWC`}u5Jv>q_hG72;AY!yabRn2{SLjSnfcXmSIqf1)-aQYsD z$G|qia>7$$PuIA}5Y3+ggMI=0hokh)wJ~MHRch0u=V?a{lo-{~ zsh&5sO_LgflX0+BSH8UBFlns9ZpzB4mAJT#T#&F$;Jn1Wu zJpvn;!#)-~rr=kt)Qo<+%(vl4G9nDeeh-RMW|ZCG(~*2Q-40cb_*`u zAdjeLKr;lcIw%>QLc~jHpId&m58yqV3;gRIsN7o-buWHRSx2ny-4wHA8oNT=Kc%O! zG!+~i1CF)Hoh1m5x|BMgR@i|8ZV~+H)Q<5GH)@>YHuN&7f6%)IjM(~Id(sJBY?(gM z9UT>*mfHjLp3O(Yu?0Q%{g>CDz(AXL;wWaMJ^qbW@mm3Q#^DLW5jE?*re-B1T5R+W=b>2hT`Eu@D}L z{gKmk7R1xj$djk-QgQ)kI`vKb+mrticsj1A0_ehxNgPgzvzF3-&s1F`NRW9kOi0u8 z%ycYvS*n@UnOpQ_<{4_9a*JZ;R6v zPQJ(PiLixp{YQEU4#vc6^ z5*Ss5LK8P_d0|xT^wBE__eJ!MA=DPrmgDt2^*6j5`_CJsO?Y_ajc!tj*b&G<*{r|m z7MBxyAeEdnPe;QOf6MGwo77wH$kXE(BJ_a0Eh4O$I1Qt(U&2+^)+&LIt8MpJ`+$D((fhim|EM_&H;Yb=*q$hv7lfl^f#n~pMVrPCp zFCxgZtw(&PD-z{lQ%G8*1eM~5>7sH+4C`PzMEH%s1Sw2aqol6@X(O)<85aZhsl1$& zPd-iEd1SlM%Wyclm0QGj*@NP2!d}IdT=V!jlu%km@n@gm_X<w;}()-ZG9#41({m1O~i$64ZS8?HHH`4XSVR>Qvp`K(2A~*HL!Q#Hx)#M`|n+|#n zNiM>6l{`f;jo(MSMQ%nuh@o0yvJS_V`TnU~qj1Py#)r$9nbN)$fcS`trRue;)Xn0y^Hz@UX5YwtH%4n0lWwY>d;%o*7-_`>~o*k~!63%q&zU-tHK)35DWN< z@^wt(M$D6!(o_qljP>5cowb!1Up@RkCxAocD7XCH?1>O&8(aHR(z^c*C8uFd)bR_W zi@i`MyzIH?_%Q5s6pn-8WI6eelqkh=N+C04jTkl|ev*#N8Yenk}kl z|0a-(GH&0+e}{dqGH?$C?3qTG$iCa}+SVC$xOrt6q&=h^FE&h*G0gnCGm9J5PRdRJ zxGVIFep;3~IeepV)FQ&t=&%y;ruH>9G)*^g!!=?K8bQv#0hB_;21=qI*P?3{VdgdS+Y6g$HCZ9YW~dY!QM@Xof1K# z_ai8{0?RgVhdl8$I5X-4=x^jMf#QrtP8U>|8ReCAf9YNlqKxbE5mit0WAF=Wa5Xna z4EUc2U;_vPV4=q`)han*38C}uOkq2Q4e`W_I+S)(Cs}Qawvs?bt#ZG}Cnw3C4m5_+ z;UUrY2UQO-OI^zrREpLc9$rBIr=8+`FKq)=2OVwyiN@y=nZ**~Gb}O-4N>li6KZSX z!?}szFhy+F&)dAn54)&wXavOQ*=}bG{#DO6l?UtbQ|G^+6Mx+5>m-UU6>m~AB7IL1 z1-D9P!O~1miNTr6zwz74~7@1EOSawhPG@)-!kMTTl_d4#?f7#Pq?z!-$4ZnSoxn7=O{0W zyFUABJydgFFk^!3$34elZGJjp--3-sqlHzU!!`34P!@6~N;nlID^X z2m>~DiD^G*knHgiPFwUAZ;*6=dI{r+Meyg)rBfTk99A@zR5I8YuQ?Lwg zhn$HLhsAIzu-`tv?VYtA5WzB=a}hwpi&qQk%sLh$|ahREk)$|yBr1*ogZw7sp z3jKF_T7TJoz7l)6UGWPa;nLe?Mg_7c0UPT!!mjYcjfRNfc9sE@0#OkpOcy^v@lTz> z-x^SS4#ceJMzQxHtJo&)OsX>44(oCyj{y}sSp+iXPA4|TC)Kv6p26p^3M$cGBW7Qx1rCCl{fVr#zgv9v9W`lLEm#ndu?^xJfDf*yV-ACG+hUtXMYa z#qsb(;S8T4A5hMql%`a+a-68r_$s{&s1{|TcVh{wnEwS8h9DamW66GDu^-!^q_x06 zxm~!LckQ@R{U{vt$|oZVVBez~kau0yDkG|#rC7>87-EV^ebUQ|i*0eOq{md;rjk)> zDg;Z^@B(25;-&iI%C>))DMksa#;FaW8@3Z(n~T1{hU9=^4NNTKmg0vUICJ~n&>`fI zwH7Z95(n|>r1RVO6afd^jr?E;x(W1(!bOwLbl?E#;cLD$?tNYAq^7>L_!?b*Q-4E8 zUpAEd+q)gvFYstOK%%6>k6ybzX&DOgKUXxd{urGjg#1#z#5lD^=E%eO^BhOOD3^16 z)P|`?9xZiMi46mwtTF`Shh41GoQ=~AJ{ zbKniC0Gi%Kb#Sce+l%U9T&V>ZU%uUomHw#`%tSXlmRI-FJo$wAwO) zIR~PbS@$dCidAFRP#PBWi-Fv#Pw_n)Di@1vP3v9SUg-8uO2l7(E5)7Cm8Ec!hju1w zk4IGOF}yLHvd!(16m~-CG9p30KTolR}hh^CC4I29b*h?*i#;8q(@d@9jvUf z;3QB-mVH%s&u1QE?lOGIJ6YoB5K3i)hl)DE2w+i zdgXC)tDXp7=jdQ^XJA&v?t-*&3L#M|bfo_2LXZ{P2}KzEfRULWYoCMj^7A%l@EGx9 zwjmJ!%?GpnJ%|;%`w-pw6yy7$3`5 z?|asrOnF)p`Xi{GTw0Tei_y5nBOdvFpI;tW0+*O%x=1Rp0)6NTkkL4#01+!K-hp)6 z>_oVpAvgbmVr_{zX778~1N$K&7Ck53fnVV$l@?+V^MVwg@0eLB8#yIB=60a%@w1G% zb9}MM(1FSx>htuz!`BgpBz6_L6nwE|OzPKD)LEPT;X^WkbG7sAYHQy&)!F=8T6wAY z;8xi}=TZVNljPcw*)GB&_N>bNl^1n;#yJf+n7+6_veOo?42tohx7)!gu2tG6E+IOIDbGUYZz@f z1%4OGeVK>ZclFT`G(*+tDS^&0!&@7qww+^mkYHQt6>CBXYv>kRq>deUG5yw!Ue`*r z4LF@GbwhzRsqPS!6KGd7o2Wcor$yK_t5?`R#3>A(Un#FCqYtBOEfgOlwZQspu6ja2 z8}Ei1M}$)_?5=CLGa^4KD~4~nz{8j)W|RonSkFCsTfNljIST@ePqMFJdy=ovFnajd zv!GTMt~y9bzD0D~8!dm@ehGI=3@x}k;iLUHSBU3X=uJyZpknzQU3!uab--m&ay?X7 zOD54WiTq50H9&;)7#GFGw*;Xrd>u_gziwivmzK0LJ^!|p_0D1C%QQmpeT&?b2rIi0~-y3K>@q9+eOPhAPsxyodYpL6PUm4rzCxP54 zrsjpjS4bK_*X>VJV99KMeVBl>SxV9*LL&6F^4O8EQArP`1@OZxXxdhTfWY(|x08;K zlX9aWbJDVn3d=I=b$kZQ!~IJzC$#h2F05*j_lH!d=yGV@xnih(f?&8ccYuEgvO80s z*Pc6-z6~uyTy&%lzb!G{o&bNoD)})Kh~LrqYcs<-L~#$y27guyC@}gAuVDs8bsGkk zR8YTtJSi)+_q?Ni{PsCv_Pvt6z)WKy@AS0U?HsyZk@T0DGYIqp!)|i0D@*qz+nJp) zD|bJURcs_+C|42y{S^Tu)r+Q#WZoa;@^uGJefVY0V8Uj_dgi*D+^=)^^82OalB_oA z&2MpVy4xEWXo|x?-y_z-0Ub60&Kc7&HD~u|K{jrK=mECFD_jd>P^l zMMcFtuL)Sxnal}hOXQ#vNVQqAQ`34fJ|PZ&&XvWu8uns47ZwxEq*q?qJ<*L~oIPtp zsK>M|y3VJpnCwRX^1Bhx4uAYgaRca-=448f%)L3FxzFY~R;DHI4J(%D!x0)9Q`4A3 ze-?F5F{G*+GK*KHFk@GC4EUTc?sG#o;VZKI4mMWU$j1pTN?Zaz*@{-0`i!DI7-L#69iI!x$DVKK)o71GRP_#P#&u@Y?(gVMY*ZT8LV=sOlg^YafV z=|+=~VrO#7&1zz)LTky54|(oj`p)J$9xIg*5!o}#?HEiDR|8QV=0k~CR!VyVg(Bqz zt&Y=qgpc_fZTG+d9rzssQAhXY%CjWdPA0yCTL1n(o*T^{LRSeYN901ELVnOI=9qmZ zJS*iKtBQ`pukq^sm5w1~%fuaB|AFrRxwu@|1V=XY8@*y{ic~qzV=+2${|IjAuZ5OV zGR-^CEoy7eP-)1%1EHtIRY;po)LGD5n{wPfA>%5|da-tsr9&6y1`2|%>f-uLIu11} zt_hAISNeRucQZ8DJ)BtQ<4!PS+GCYob9N;HgFI?(hQQYPCKp7xBn$xLC|(7fO&V#E!T zdysJ<-)!2?tXBX03Z_E|@^aot^J2bLmK&{ER=RId4ApvW$7?3I|+$d7RyojR%}ej@lE&9OEAKFHI3q6C<^8kbyK zdW+eMI{dkz0rvCR2^JcX)s@8z-LbHLTc>c0GHe4y%J|5z?D7YIj zihR>{&Yag=sDQERkYR`P+?+F=UjV+ZOBSzXYLosptbWK>KTVn5kCD*@0p+(jevig6 zn-&wMXeXcQ7n=%xjED%7D>f?MnpAR&;_qFGitJF-+h(~V`t+EtV-ULU&XB4*8sqn$ zisauQNv2fZFnSX{j`39ibfGY0-Q*`Wti`POJbta)|J_axkb;Ax7k`_$NetPgzCQ9L z|L#=dbe2*t3t4~JcTW6;j{1qy9hx0cQNKpD$!f-ZHdyjP?DbU%w=4}ytU3ST(EW=} zrS5O^28^!GQbNa>a6799Nj-6DI$D106Z%QQc;uYDB1`{+%(t(hvCp|u?UBG33{5(_sjEZ~b-)RKP>Cu=V z8UC$O_u&Hu&!jZza8Bt3qkSqVmvT1&*xsx(zmNMy9bCd;W$!Xkp2s^#Kg^7NE`op5 zSUiO^6oJ^QB})60Im1nCfn+Y*kexA`F*4@Tn3MhwV{QskUB3C6=T_bJBQgB#aQ^Yu*Z7_V}B=QJ*xcv;Y_EIR08vNO&`;gbv32}v8s_Lg z`&ymLiH^(sy!a4;ASYHyPZF7H&K-Cl z6eTXs>vR>(T7EY#e5zXCjv;L(4Ab7>Y@Ghcu8CiD7aEA_ST9W<>6VM|oflH6#qSGa zsLlBDI3^OTxe+CCYOiEfD=}@CgE%SII^`xiRR$k{1C3bKL9uhG;hKWVu{SKjD zm3cA5e7V#uOIeQ1`m~*ep9r7*{gE>NZHIW}ys{&{2M46fYFECNmYK#VlDYlUz1EkD z(WUpd3O^3C?QZi8h01Wrfcr~_L{76au07CP#v@Z7-*I(cL<>ij(%NAG+~5-ts}_siDTA3E~R=H$BmL8-Hm21 zyc^$|NkuAQ(Twja=Uk%r1y%P;H^;y4&pC9?8rbi;Nq8d>Xo?jjcM2G?rja zOKs6ct-}(0Z&~U7%wMk=A7XbzH$x|R_7sP+VrXA&vdBQ2j8w#HqSD3pN*}^6oDby> zQ|PCC-%NCUXFHLrU-LPyqkE-*oH04MbxX_W)&_lw|AUkfx@J-NrOt4Me~3tEMh{CM zhYe5XlI?$Yd`Skb&Z0Sqw~uM&vQ-hs^y(wpVZG5FR5IX*l2zqTa^=iDGEkJj!%$jX z#0yu=#V_nK%LM#F*6y|KzC@rxGhr)P=zC#WxY?)_PlVEm>figU@!oeWnEa$1O$cag zmJ)<1Ca|8$lIzrB7$gwnlolbHIsdUwAj!y$6@Hx^rFWIUHamfuH|oTW_4~>E0Nn*drDPwYuF_(wF->S5XWu!S~YWBzWh(()m?cVY-BLqrL zH})y@MlbSh1z?pJuMEoa*_i?T-d~m9d3b}+56Svc9pkCLe_{wM!Xf!X_WF>}#Gp?f zBtj3hs;pT!z}%~)tqXDanrL|iNZDhnm&}j@?s7pmDo3P{2Yrg!QI}T}j~)uaXp(=d z+~NN>IzOr4)NG$~VK!2D4V8QHZao!paF}3qbHOoQo@XiT;Dc#e%Os=XVjgoCDoR!E z^?YZ6cZf&o=kZJM6#DbQf#T}?lo`VPF5~ah*ka8!7=;&E5QFkwjUyRD@G$99g5LAx z?sD-66Z%%ZwPaOu8Ta_Eju`&g^AFaMPVXrXl8LyQ=Fe*RhrLhjkN7LF$2s^2#GhD; zT7!S32q?U#X3SIKTT71>Ud^SJ7hB2Kg4(2U34zN#hNI4{Znh&F-t{!ew+y7ctA6=;n95O60e^7 zo%f~J-U~YsLr{iy8RIkG!7gg9FMSfXSE{V8QRN#!wZi5ke!GIBu@U)ETZnl}0^?Az zj^RG%ipk2gJb^P%_K%V%201{Vf!2KDVU|foYZ|cpgh6dmFWRSa%H`$-mUv4?XZ->P zAQEQ87B>)ts=rTszw@BZ-BWCe5~o59)Lgt#YBiIQRm=-x|CDNFkUJlGQIIAwurW6} z7d&G~tZ_@o?&~7rdiF)oF)(9WFuRrtRZx7v1~Fs1*g!(ax12y2&Tqss?6LfPpw4e& zl@?7maPLhjhO3mNpg_jnQ*qieI)-vBd%kdw@|O>MFQo8=6N~Vo zeW&^^F>HT=F071f*1EVC09zL74+pKVArxyBn;Ei$*eeRz(lAq&Pi~pDE=f*)R=6|F z`;@=2V`#V00zhq{n?Ak5PsvZjOL*@t9n{6i!JX5N+CEchHu1DA;~^t1-)bY09*YwR zt!-;si;o$M-OpTVf`9}Ty|l3lU3DcLQrgEe4&uVc!Pn>_S)HduBK9VgR*|ZdOF(7f(NIeHKT&+v-dPov(?x z?u>~J+TE>n4IY*;OyT(4&)+62i1g6mvN5gPECJpEZY#qF(K5hWjzFJ6%=#Br{TR#F zvRf8D2YEw?$3M=+;+Gv=vXGxn5UQ?ZCkPxqvsAZu!IX}7hsbDd*1sw@>}hDXh`;rM z)%|2#MC5J-!>DVzCm4tN9(Nz(+dTJ=6OM1!R+#O?!Idxj+2i>=(o4XUYLfjLskaMw(DYd6$T0^oq>aDH##-M^d+2VvET2(!7AoE%UhSrt_}?w7II5#L|eEkk1ktL>}OvJcivsz1;dB! z>ZKbtMoM)?#kInAR*1HK_*^x?Zw%dCz;}?gf@bKHC|=g^<3p{T+Hp%lP)$dUTVS;td>@{ zx5C-$LD$XuhE@8QVvi_odU#9s4T&Z*EGs9QvT?@^(8$4{46%_E1@VW=E!MV6y{#~n z+e5hP1l}0lW=ZQB!4~;tlSadq3vzS9U9s?^vJu|HaogLn`<{e2*`D?->(!K%hwvfX zGRH{Ag#|CyhLd^HpOgk}=Z+&P;yMpIeL#bw>*qXc-jFwKXQAw!&B6C!mp`emvyb1d zgs;9l;y8XRcv-gn9LXDUMg6sSjFY%;s9iXocvW`nfwNzauF;C4`>f17Zv%H;Y1t2=_~}P0UiS>v*ggTJI+(>IuM%64~&?xP-r9=qTl-A?H~;yEivYVBulFynVbAp)2c)C)Vlgc*k8ws35X4s9ekVUD81 zc}w|Rnw(Z+2->Mg$#j3aU^Ckf6kZlGoz^}39XONVL)6?v!Qs*%A5eJH2-#u7&W>eCr znJUu3*yOeOE-*Amtez0VZr`Sx{*B5T30SD;F;$#D z3j0c6)4|WB7i-2JWtE>W6a$X^;J=oEpRNM*?gqq%9GoPkg2w}8%r>GI#VS6X z$-77L-o$1-RWLYUQVq%W6It^9xX;<+990~b{iv(j??C>23Umf&vvqa9ibgywmc>K_ zGsoNcbvJeOF5MM*){j4Ym;C5L_{o2eSEl8e=41ONw+voa>f$xOjMTP^s^A^U0!0VL z+uF7e;ZbX0#`1s;J|mJDBD*1v_ZVSr6Ymqm)))&ZMUbAHBy*l|kB4L4A%Zq`gj9YE zf{UM)GxhN-i>-K!Qtei!d4D{AN`4I$?0Nzqa%mgLG*KOEwf}bW>m^+(cD}kNTFBQv z0WhXhrVw{-!wXJd#(FU{o<6LPyqJj@@d;{|NvP*kGYWexRM%NWd$km`d=qgMae0I} z|CplLN2pz(@u!+$l9xCxs{(I2I3A2MwDWtP(}?%} ziGtuPaDF^-;0L{|jD1Ws4hle;=%Fo;JJrGNIr3?;&kDTIoLZKh-+MNQ3L0}I{#^@> zDeOVUnA|_nwiozl$6{9`86IPZT$sZ93P?i;Zmnm4zk(k=mst+B%RZEQP6T+DH?N}% z0Pg+MufA&~@W#;K=#;gL z?Kp7?MzQsv;wA&$n^~&XkEU)v7x4N3o=_2KSVXjWy=VaJ>K`xW^bK+r^Y=w9l{9bG zT-s7EKAb8Hp^^IJ-<`0FHG1wxmLALtA{S1ChXA7RzCo4N%fQjKx6cau9VbbEkn89` zYMeeHd>39UGEfXcOT@K7V?nX*PPLVY3Wm6 z?zs=}_P9Rsxa)Il6-NcGU#-NEif%6q(Ji+(mPc*w$JyOv^~GCw9s01;GGT~mdT(H@ zd_Fo=I6imlM5}uPy&lMmlU*K8=kVT)WM_li&GE-+wO!}foZH?^ZT%L9ufoqWnilK2 ze;+@jIj)qsyIw~oJA7S%2Q19E758O1UNU+cf=8uo4cO*+w4UXOYcAh)S|qT0_h!_0 zo;bB3iniAGJ%06h_|&~@+_(G5*tXg<^ljg?&k2bhapYAK?{! zsf7TDdvSmJdUS!q5=mmQE=CDCOlKAA|BZNRPz7i9Cs?`l)IO|$SD!lS=QyoDIkq{Y z=EGX!4L#BtjP`n6N3f-7eBIOL{5j2rN<+Da91odSyLum5Z#Pj*x>o<}J4XD)D($Vp zh3`!D_K;B-B13G}J1zDcVA~QU!f*Q7jS6&bGqek{rCte6gn|w9eCoCiz6)g#Vbg2c z)!e3Wv(VfMVn57^PfvkbiEA41r%hMvJhaXyW8_`j8Qj4zUNM|@v#qf zkONe)5_jqE!TX`q!{iK`>;bbt>!R60*{DSsM1mg4xB zFenz^-ANl!&>`%MG5KEVod@A#;oB`Z=jf6X8se$mdw{4oV%^}w0h1M`=jwemZA@K_ z$^;frNts5x3NyMX3nBtTq)A<^ z6U?~QVm{q+_wcx*v@Xdb;^+lEL8&9RvuQt-|*=c5d|lYAYsT{2feFoPp;(9clcg0%c00CB`i} zcxvLb-bZRG(ms}kMs24Pu9I}0FYX-zYY&K8x5~uU^eaqyXrJwmInc?RJef0##5YrP zF8S~?9|%1mGs(ytU1u-GZCqpQ{Pz-Q`Sn{FZnGq%1X6;ab_f(7!MsrK`PO{<3d!aGrQ4pl&56zxlW)! zZln@Wq39CxzCygyLu+@o9-@g^?%#ov+f4V5a9!d{L@s69JwXwSkDL(kq0nmlLx`X` zsVDgvWy4UlELldI^X}>_np>KOJ`v$jGj9c~>N7a3bq%%H#sOuPuBNvv4NWW;+s;<0 zJh$0bG{qQL?Qguc;#53bz#+q()DP@ef8fK0H*0YJkSpm0pKE*Y6vRuVVQ%Ee(AM=d ze5lO(gr1uWFT>FGvHwvw-3bE%pBTDv7KAt~QM}bx^*;SZU3Z$r>Ton=r~A-m;pueE zWz~sV>lgTb4#VE<<(iWEn{iShbceLw8%4HnZgSuypT}0XqGzv`( z#CQ+7&YACMZ+NWmoB)Wl+$HQMQ#bW`8G_e{yla}*sDH@|Xo?+jFNZreD{=#& z2@M|Z5etu*P%HEV*B=(1&cTI*7ioeruq1r!N((qvNFjz$lFV|?c;>D zn|elqkTT8I9b*-i$9)W2zk`!C_*j!S(rzNaj`f@S=}Nr9l5?leo3=X-@lUPaCZzS& zx$Sh*FE${|-%OWsnHu$TL{19CKP|)QF3&=0Gu|A#FDVRa`HTb%S$G}-;*UFhHyz8s zO}BA|?i71F0_xtSi`xil{nDG&4Cb<%XlCxxWzp)9G3_6bOxS6a^FL_gKF^#WNB=Je zS!C9e22rXi`=2{okFkY%ISQ3=cY9F*bI3*&*K8>wp2%$X3Jxnl>HhO|`wx(Gpc*Tr z$A!wQf@_-N6R!7Z2TT+XkEZMh9#%3(C)ATNp+Unfl>jz$C+|HaRVY$K1&sfG`&}uY z8xoj8&OL_xRP*m36)C>~G1cbs-@QTpeFyxlTTlmdD4B1{F7H%&OI$nKnJP(ub+t^sQKQ%r5>}m4=FCA z(>6}-UX_AfSa+`7l(TuG#jZkJ)Ep9SNO!NC^p>zkYYBJGB(%v{67mYh6%@0eM$f;MZpmJlh-17DGX+PL25ypxTs;A=d8tB)pOYw0?8Ek@E#wkoKtF9vR)Qs3^ zanMN(sDfFVBzxk@3vRslAaK-sIuXm&@g65~uS)=aoo@a<=6C z>{BxCXOS}L?uO)6KQ*TN@d+wnCBsJDk=sbl?hE_?gYxM{Og_gMBu*jb8kIF-G;mK! z*g^tevtQpNL{GOq*hID5gsxdF4& zDQm(o%-v2YnT>PAqHuM#MU1!)-bZjt77^V%5BSYu5@@EtZF>UcMycBpx4|MdCa=gM zd)4yl1=Gx|Jde+LVCO3nFRoDyO>~*e$QZlS0thOR7v_5*3?+Swy)fJ)HCf`9Uu=E` zu9~esr>%ns_2PD@r@$n>V{l2oaLFCD6T_0XN^+@!7qe7pfQam5SWMLFhH#ZU{I7}M zhMZwZh#d$&Pgk~$OO<%n&*0Wb@G4C&G|t_(CL-4i6G z_f#DKJ7`;8X_2!6oDE3#wfJN-_(rA9nz5VN{dHa}Sdf0z^sxf0$Zs=xCiU`hiJl?v zfpM40lh}fdV^KLq4=ccJxQ{=2dk51bA5CUCvl&U4C?Hzty%di2fSHY=O^p(wfxs&E zAvKHF(6Qq_*lCnqrmH{z`!4{89J3o2Sx@Ou6&t)HO$nIL)4ec8y%o9~A>=c9u!PJN87pPYw!rX2GZCTVvOo>pLRX$c#C~tvjFG!`J8?)nXB{3 zbDLu8*86PXPr#JQPyYKe)4?A0JM0$lm0w+Jsb?3Rf!4!SY&=t{$06J|M7+DR0@yi+ zoB{O?1QsoCD-0!2KOoOMl{=&BKPgLX`sbiWLvXvw0~CJb;}8&tH1=qM{|eF7zE}Ia zu(&Chxcp^fq29>Lr2?u^d){g1>3E$&{kZ3NYc-E@2x;AYy~U?;Qv=ThR6-tGn|Bio z)qu_!jPb|r`#WnkM=wGKTTHLFU?Sy<=eiHkcV{bcS|YmzTNPywdL`jL4|}i#cAr0b zgSV_x_BAPSecmu6iFwkr)pxa8(-AjRa^y@MM;AJk__6hjd8p(er+UlF4y**0tl?z3 z^wPaP?^|xvX9lLXUMg)#0&aHUPCi+3;EoAuL*N;u4H&j^w7ivcdC|}0=7kCq7OfD0 zdCyn^a}D6}2|xEm*GY%$@(^cedvuXLfb*ni=BunJZVnuhEH<5p9zK&JJ;~1q_WSx;mPvI_yFGY4{Ef zL=M0m^uodCrs{KXCfTs3g<%+6{KjZ6(i(98_nN|*O*yZ|(^xqo$`LPXi3~;r2X2ay zU+TYmB3MXrOVBC-fgckuh)v*WKPxzwYML?7$&=2AKEYr;;}4_mSX2qP&Oi!RgHmO~ zIBL}v*myzsra6u!$}+{QlmrYlqhYc_vMseJ#gD3N&O*c;!3pR2zA$6Ml(bR@o%|Pa zuSA4;J`>3AdNuz_c4nf>tp2cGEqDGDK{rktOG_Yv0Ua068Y^&|jpDpb=G*`+N@M1N z%b8eBQAYBT2in03fnd;J?sc&{BQVPb;*d5oxh7uUxZ5D9tUrh^(%H|4O&}s+_XA1w zngc>XVJN|GD6BgM>8SWSBJo90s^|feoCCwYA>8ck+aL9VW)aMJ)L*lHvJ)>T2&`Z%#-p^C`HA8B}IHM{CV zEWrO4VBq2x60qoasF{+V42oICGJf3Q<7QYX!(IMUvQ)~4`~5-22KcZyu_H95nC=Nev-o|JyQ#Lk zqDY}z_A`H|9bF|cxdtHeFIdQI#3V9Fe2oc7c?in&tWXQeg1-Nnuv>XlcKIEmTEpNh zffh0_57lAPq`c=8D_>pe{~A({@wHX%aHYwI40%i9)scI#HVKYH4q?uM!a~&)F~++| zGm!sG$%k#_Fw`%6L3Hc%l17>BKr&YKOYOh-E(Pq=3w~ux38w+9nN_+EdxJAV!IwHl zaQw^h*9#0D^g%pU?2Hq(mAcn7htakt>8P-`UKWEJssg>$1oasDUd{>KVqCAlQ|b7! zzP851GKiprUi#QiVBRF-oN>LYT_*g3I!fsn}OwNoFeMh)@$`EcINl$KsvmQY#y(o0e*z{Rz&@+~f`oE|GVv;-_kK#yI zbpbvcdLw*tP;IRp}OHiF-xybxpet!t_e)n8zzsB5974+Ac9 zA6D%l-g>vUuD&i-627kQw}&>xuKyIDnhHb>osZl6E5Za>@Wuov{0o+0ALw!fX1xXT1I%f8LEHRW|!bLRom=utA?hT5nOU_Sx731F`w4)Q&KyhLs+Qx^r~0)YGKmWR#W-# zi|R{WJJIt;2<7QzsZ%%L`3!;wC^~r@i^{nkcZ$Mz68ALr>sxXh<7mlD)`uuTwA{Oy zg$=rjIv^jri!XjHuBYK_T&CbRm;&1KeD1e}6h!|@KyF3nC;k6+^Z_{ReFtzxQ~i1* zM%4gMLC~jWIAUo|b-%GugMGvy7-8s>>p|Hvi=?Fajg9_a6YGDxX92!L#+7z{JXPaF zd&cS{**9*-T8zv}!4bG2AB=ID{*f)CxTr+JOmp=3A3U?2GlB?tGcGXYn|2Z$5P_*D zr6w?tB5P&tI`bES6(skVB*8QU(I1e-Ud#zmDMl8Ym{G>T2Mv z8zB~=;!Ej~n}o+54&z$jA_OGYI59CwKPrKa*1n-GZXT_^FA%kuw$*niQEPpKPFQ&y zm{F1>D?bjy9;w-u+;8!J%Sy>TvXsvZbW`tr4uuqgU}Zw9b}21{|E(_M zg%pJd3ii8y={jZcPcESEX3e!ctWS(&0Ia3*?n$XWIZE6bj`^dB)NByK$0DF4^? zC8JM=EtaV+aS}WDCfxZd?8GH5>7pgKRcXIuF9sQIvR;1V$v$0gsbJn%h=l~Icc5=G zG>Ko{{sKXi#DqNift$qpQ{ldinQ}#r)`SjJ1k4JF21MhZ%p#Vjx}2^RBzM~<`;vcO zr4ukcnS7*iew8v`ACk$S-eL~A+*hZe7-am*gYpRyA48#J#5=&w6BeWcXi&v;jQwQN zPf1*L`;>y}-$GCsH&=g-tVUWk9>wRr`(qJ^-LU^vT^~({^)q;N*b9W4X+Sf>E%Ez7 zRl6hGQ1wz-98^5BZ1?<~Klny5>UDx`Fq_5xOs_w7`Pu7G`)8!*osyGiHn`@h^f)e2 zCIw||iTGEC$uv#y46cH^h_-B1jBwtlVz1qF-$&LP+!e)-@QH$1nBZHZ{h%@;CjPbh zB@4ZJ3v5EeWPnaGV-W>YB752UYQkPEiGZ5g31Ldg_e)F*92vBu#$GX$d++yJRz8=~ z;n3woy-5nTZGKrit$!|Si0mZ|8l@JMc#7s%88rOM20=dnklOE!pj%N^ z6lZI~wA!x3$DJ*SX1d`L4D;y=JX!qk5cc}69I%$aVEqSR{5W=@PM2*|s3bxiHjJ6uKsVb1}x+=TR&9k}1 zAo&IIql9$)BegxBD8A!M=u;qhy82R3*8$lKI8ja*AK_IC=@2nD6CD(IBa~P(G0q5z zh^U=RCZw*7Tq;%I6F4zCN?gid!M_#%_E%b300Gs}l`8cR+)wuX*WI`7KmA?23$=y8HkL12pN;MG?YtS}tsU;XAa-$&$hT1! zJ7>#6Tg4C(pEOTIuMgi3JPBZW2U$7u?3;P|bvnfUu9|jM>aY8=>TSy5mh}&9KjB@P zvCTdNH8yqu%0AvTeFuL^KokOWOzc(|JHg%RU8ibiwc$Egdww@)kS^I~PbC_fNzqA_ zxlB_i@1jzUkZE^e+~vTd-%x5w=H7<(Gk9oJ@NTq5r)Jz>+&ju8Z&C{4%yvHxz2mR~ zsOmwvU`^E!rp%7Q4pIM)oEPbf%um1rorQe-j;5zAeQ)}6a$fdZ-?^_B~5A0KAr*>Anh z>p$&%5;bbfSnsskgQz}J0WF1bB2WRwJN~HL@Z8HDe>V6rNgz(Ozd6oyDjzbN$a(t| zn>%caH^u$!^SFLjtq@F`TCEC}JjFU?ZnRS-k`-DJGTda0RVZA-$txTe^7X$KbZShZ z0kgvRTL8luz9dy4Z6~SVIGJ|}*7w=Bv?yYF#>!JMh_~aPCz(}3M$ME`)(q3DAWRX^ zL}Kd^vd(y^T!ZlNGNd5*P&_xwkJT!~(G@=v$T9xoP`7{mzuspu7BEjRwH;ri4G+)$ z>RXp|8ALvG8gbdzvfgmnDEIIzS8OoZH;(AJVF&`KE@k&=TiUD<>V{me5MGiO^?pm) zc)(()4HlcY+7b%1Sx!K^R)sxm2nWB+XPs!%m1=5 zzMA!6A%WoJ&1JW_`2{6gbn&aKO?FrIP?wm>OIcK&^wmgJRCvRisb;QvJV(|%_P_Z! z6U#0~L=t@dj~VO_u%1RK`Y6s?OAyAMzjv6HI1=TtKU&^myHeKdR{>L1f4-!?pDCsoca5DF>`SJT{ZVAmFus`72Y1!6l zXo9wuUOT1q3gCRmAVpk`FdqES+INsJ9G8IRnbP3NT8L|%{85^c} zNIKe4%0YV{De>(k<{D#>KtSdWtl0cyPQ^%WhL5gR1lS-G5mwF&l;N*OY%P@vmewl9 zyFCDIt(?--NOCD^;|Yy{H@F(zCipUbHEx*FSpE0BVMoclWQkhh+_9|b^BCVV#jbEN znMvYFfb%y_L5CYWA^2ifZ~I*Y2qmAd97u>ihMA;zWPnNbQ(7@=TScn$D!^kIE$zOrGUYCbm{VaBD(JJV ztnwDKw_snYXSTG|wDee6`H%PUlX=o9<;AlM; zSj4khQ(HqKTZ7!@R~QcufjIsD_N;So_PklXUecypCm$TsRQXB-`2LDJ7FeQ*zK8=o zFE!&(aa}ZfLQsI?s-E<99~WTiV=J_ZYXW+&&q#Y|ADR_0359}wS^_{+_pNa(to5<~ z5Ic0C4iev-QO0HA7dcI;d>qMx-;8a!&4dUDxg}xT-Wdfw|5PKCg03E_=FNW$i9#@v zg5@@mP)us&#OvY=ydGioq19y&_-keYK_oG*S-h{3n=WDwL0sO$EpCGU_x~S3qT(rx zfO=4py>LBWK9A-$cjIGcxt|;*V|ZzWzZA|BdX9xDp8-UG-T|&#C*4&-DzRLX4i9V1 zS7$5Fncd8wF9AwMK2<7qo|QMv=J0!CfAhf7%sUFmndnldFqV#6%RbU!q$+IlrvIJw z5bj9&a?f49(-ID>=;@&Q+h?@cPM@R?la;tNGVy=-KtjF`+`gvVW1_yh(vX~7XSHTm z9q29OUOn3O)zOnV`k{j6`|p9PO*$T~#fo>sGJdmDXyb7s*P}m~2D`IYQm+3%_c#1B zc+G}JE4#)wCa(S7-FAcSjqp~6Mk)2Kqx9Hp5atO;2Bbbs=K=)rY!datpDL#4zg zM~XSwA+3K(;6H8g|1d5R4$>NZ;C=r(E{axN$y_F9y8mSdWpRu0dWiY$Q!-MPEXXbG zLTq;xdl4fx(6z_^%(EJP?B zYhr?}=2F7=&D5~m|3m@`(^tF1!Cur@yvd4XZSib|JU`3>DGz4)l_s#6P(x&tynZcXi>9FUOYY;hVS^F4@~tjPFtC!v_BIH*|Uly$K}0 zMrXNdPD$qfo&46jxb`4hjZvQ0KeU$)2_TEl-vyVD8MSdtaPQr{>q9`H+G0u>6U)z4vN6uhy~M(A{QABgPEtF1qwQs~j08;lQa3WL7jgq-vz zv%aX^)-#$Dt+oz<4!;57@dT<2F6ooxB4-i`zt_Al5WQe3$2K`U2OJmwUrog&@&r9d z{JVMSL6?eXv=4n*x7^svifH9Y7O=zI6*}h++ZwcBSFQoRko!tlRTOFzpA#R_;c!W< z0gB~!@-oV+&(4nC8Ira?7Z@9BdoLqs8v2k6`QOeCY6@6pt5q!a85nI(hWJoc|LlUx#G) zyaH3%Bj0;{Vshy9Q;YrZ$cw2cL^>iTz1g%piOaQvLA0`Ret6`NOv(YUIiXTccZ)H6 zV9n_To!Qw|D z0tiEUOns-^h$}i1R%!G4le*wEdV}f1W{-fONa(e;&oRga?M6fQL)m2vYN!N~-CxPi zM}L@1|B;4xc{|MsCdS)o^zVl-|k@$`n;60fq}LEh9`Msc?P8~iViy{AdZano0qy^vXbV04NMLw z+O?Eb-1H@;v-Wi`nLt@E0xJ9;^vp(@w+XM^L4Wok?0I6QVlc_X1IDZm`@h&q5B2;$ zw|&@BDd2s*J{eE3(hzFRf@RfZ!#0JCAU1E0#6Oiqt@f}^ip_vhu2MG`&0Icw{Il5{`n7%i)LHVZ+ef}-OB5Hj|UT! z$=<>c3e0I3<*0^F)idT^F8oiFf)rQ{_`Th>b#PvRxaE*kq{!!qLvMb>dF<#^DOcF1 z>o1w-;Z>Q_;p@LSGX*59-b8wBF!lRQ_;nGsyge7BWXIl&pRG&ozT%!&hVln-roks` zFm67N_KBc*m2TDbL6zI;zDV`Ep^fW9XqkIwu?{xy{tvWYy8-_<=|z?(yZu-fw#|%}I@fO&8tvXy zr}HqWAJS3hbI75m2fIGuU_0}Hk&?nfT%!1L-EoiZBB2TTDD!Tt=LkW-mL~b<2Wl(? zYVp6F^mt-=9)j__lNEuIJx97L6iJHoM+$tlo;lN$S=<2${=a${tm&cuT0eR+AX%YL z;Mf){mc0GpwS5JXh+)CM{~4Y{=FqDE!EQwRvO+v=Fr=OEjY5mt{9l&=fxL50m%pd` z?a+to0Y-lFUn~VcB>)QU2K)aN`ZKwq{0g!0oe5o4#v+&YOgY!5tJIhdc5=5^jHOih zs3)gH>-ry*D$@W*v-6d`WaUwSxjThg(E5G^Wb(lWMZ@<66 zZw>#YUit0g@p7Z}+4J$9;kebRQ)k{|wWE@9!L4uX5wPnqsHF5n1*FC}0h=vul|SWV z?B&sgkefBBeS)GE%0akvwzat^Ob6rH4jJ=|SLof5rGYl|Qg3f!>XCc$1<9_dKdn~3 zdQAH^7Qwln)}Ww(G{OaBXnK=GDdQRDrdhPHkdt6Od~MOhVl$84KU!At!T)(VyldQyjV+se+SaWZpxsFum}u|!vo-7zlJTU9Ik zJlR=2vpt%Box}0WML|9!=2R}s>ZD}uHzONG;2=$&@#P9hi8;Z2IASbdN0@C>{oAaQ zbJ3ZV4QW5)h0Ty)6)XqhcpvGSTuP5GSrzXZxh-#Uv$iYuWRHGG4YL3#JQ)oraa{6j zt;1g|ITYpwM1q4ejVO;ouVd2hP{mHtcUNBB;R{lpm|S@j{fr66VP)qXke)Z&o$eV2 zgqlg4FNHJ|g}gr;_xm2P^3JN&BzW>kW*Xx)<^1wh`rx3Jz(a_rh#Fz;9GNKLUo8cD z1#14QnB?tM6zx>b%Nwnq{aWTTCVL$Zcq+&}291`V%#%EW7!YW11pZ0VByS9x4328m zVmtV*+xCmQn1z&No)h6=625I~U~#yBAq$aaB3qdbY}_NbPfU0(g81gc-q&LK&wRl= zIauI9)e7m1q4=h5@j2?uUtIHALTJ&U!xpr^eOS_>&yoor*vT(2LSbcqv+7xv=6W9I&*8HOBrda}Lb}h42z+)4&$ir5yW~%4c+FV@ z&G_(AcZdjS#Utpng+piWz@*>oo#XP?9I-tTq`}2eb~{ya3q2#sp^&@}EA&&SR>wVq z*s!M=^x!g8Uap9wj)N;S0*jhnOIPK#eFYK~BmGn8&zg>vq zO1R6}b9d_HS-zfMID`YHZ*L3HMx%a~8w>Ad(U{yn!Tk=d-0Ssb{5^O^7Q+RV=Bs|SroY$ zY|k|2@4e=)<#+v)17TeV%60U87-@@D)=FrK5gfNscrQ<@C`1UPR4{mLP+?Gqku9-U zi!40k7(dkSVKY9dMrF*|D^wq&W*7RmOd(h-Z;;xCHL}437=uM0oPb9uM;PB7e}%AI z$)I zi7mVC@P(^B9ZPn-|H-GGcF~xps+UWZe=*XvGi}esWo7fIFUNHXS=t=_COn2zA)M?K|~ ze;2)VNKZFu*#P+dlp2m}ru}Z5kjK@sm@#nGLYU%C*Ldyrg)98gLwhME>V+dIVcfRT zGqK1yFZW+tF8O-vZC<`h#;HNq1;;_2o=`H>YrAqM#DS(UZexa=h*$Uvs_>h&i&%p3 zTFP`rh>!UHb1fYSA%S$ZEZi~AIHuHQ1g9Sf!r9nqCV)mn(~d=0s8&YBx(D+kuU6)uU2{oF!94FE`%pKX zkcVhi!}=anaqd+xbL+zr({Ih}Va3S(&6H^Z!(G6P{B z6MkzIfAV?@ZT3l)uu^*R;HUp{i~41&0w!N*i+o>vj+WON{Ru+*P+2=W3%S~93gP7_ zs}nKo`dEJIue7lvkvYtVY?rhE!t7^4LX`%KNtRpp| zSDghIr;YY=G>9ld{Ba^w^av@mQG`zCnYU_-oan925Xv#VNsHq$+1aZVQJ;umx8gIN zgJefjnlzW6#FIkWp0oy(l!s3`=?@U0Y@wuvY_9X`w*kIz`l-+-ksN;NWk*&l(HN}P zr!LZT?%cEK0k%5%PU!3JELFA0nH1jA_r=5{3d-r4qBU{8)k!x%HFz}74an-&dq(MQ zJg+Y%j`JFd)1|&%05{d@okroK%W%Y@4%1#UovMV5EAQ{iVA{)14F+^b`V zKFn-q2@8Aa_3nmX$yrNBYd68_d3*Iead`&2Ixbi|S@FI6kLB$N>Q*0Jt;TV4k!?uR znODbAyYD{qM*YSczUHpIo;OX;q`mABFr>+~)`akuhgbSVa zrG`HpFtMFI(ZD_K)2idb6P;yH>V8+EarjigPIw{(+>RTN8qp%pl|r)9__IA(hK9Z` zK0i#cb<_CMP~NRU5bKZ&QyyUF`Eid&V}0w-_K2%C0zFkg)3b!GlT|d|LP$b2WCIN&7OCnl_8#FHt>8(*;ipG>+ksj+5`Jf${pGkCG?xjc$Vc5bX9Vpe zHmtQmY(hk!y}sS6pl(YXgVeceOCG)3eCHd>s|!g~-h%<&$*0W98(pMFR##UYobgDm zSZAN9kXmgmtza=kKxq#Vh+{QO@`(@F`Od|5(u~Ea&bbsE6GzBd$H{CdxTW;wVu53X z=uPIXu|a4IFwG!DFed^!=K%(KqrTt9O^*(@`LGBhOLvBdD02Z>CjZMGH@t4!S-q0_*!1PCbA?{^QJ*fFlxGa zRlCh6J-kV%sIx%_;SKj^_MWKHu3GBwnBVGwlRn-;q){C-8R8rlxl5KEek{6u6E{JjH~ZvQ{q6^#bAX|& zkMZ~$Sklw{80NLkFt7kMe+GL{h*PPdyGabG_PR+;U7SmRt`t*2w{q0{b+}ZP%L=H= z2KcA1-`;pFNjrQF#%k-}L?WWRf+2?9gT8vt=l{8XYE&ACh2LeV?AD7_Q~sSevl1j; zY1rs-4OKDUv_Y?XH&7itgB+rUA4PeuBeoi%hIi7Z12bgeV&CyrJLEVlz%aZS@;6iN z_I5IvZ)%;o%P?nryQCZ>US7`CQ#z%rR*mQSLzl7Qd^xq@JgH;%xG^xoX$ELRYSm7Q^(Y5cG(z{oII|MS|$pJGpTzn>_f(sW$tqU1)-Ms=ncc+E_8py2ol8CdJ+zu0IJ@j zi2_g!xJp>>(*!tH?PunP*bg3z>sR|I4^j!V20MsincYt>mTwLm+zBq`3dAh5aV&Yq zT{%X%iq&?!=bGDEnM6mIVECH3^xuO%*k*3$ajS7j)>Bk0kL$7nUSAjgu$AxEJti8h-A^} zNE_%^rg}ynR7D#*obIr99;vU{$GY$2<1R32tMAGnXMWXlO`vY;`{LB-4N7lc&p3S8 zC`4jCotHNiffqhXxC!+;8WJVIxtgdo?bZ@UzBl`gL4wyOTjp&ydGZAuReVpo#-MI% zyqxfL=-<7kM@$Xe`*xAAjha;||I4d{IGr4VksvZ{Y47*m7N-p`OJ4SrMfL&< zgVB9K_4B_EB?Y&Pm?Uj@_C}soG+hdW#+3mk0Dx{=$qlMcXIU*A78OG`yWEoMUNq$PLM}Z2}uv2ZZ;tEJMu^ zX`O+wTv4RN5?7A_`AZAA`2|$qpI>Q>HM|OPEG)sWX1r>=qKRn1T0BIB8Q7bn46eyP zB>t8|7DFegO5P-y!QTYGH3w1t=qZY!vLsx4Z$k^JRE^`ZlT}+* z&yg#R%=T(7|FYQL2CK~S+6~xwV`TbKM4WX@z#RK~3-j7iZ48S}s_$WzFO_c&OlMv` zSf+FvXt6;o*xL}Q{AO=u(AhLzNMeI}PasECp|R&xJnL78!Y3$hq2ewjTC@!~1@-I| zXI%{sS3y(yg#!4)OVc{0tB(BdpH?uEi8cGa%Pgxq;4=eo27Sv032bOTvm^I6k!#gB zmj03DFO0#+UPM!kb>!fX^rWR}HOT?7eO2f z_ws;O$Jpjwqd=e!>gOMKopO}QV|v^_))$z|X~+)!Re>B$ ztZ-wnogT0g*3nXL+a8q9L#N60u)i$x8t0zF+U&%%HX#tmJqVwm`c!Xbblk`Q3m@O|}a04VMlFVp+dW)Krphf&D8^|^P z)*5O1D{ii*>B1t%C*VW*WS!}O2sLYQ2R?G!4ZUirH$}O-(pgiuQ%Q;YRa1d~C^x7k2HTQhSkb%i$PwZIIF`cO9_ykpf z+Ohbaa`qS)gST$b=}TeXki+V(K*n(nOt2L(fGDmi+3|0LDZU5Lv7IT_j;gjs_o!Z{ z-y}Eg{UV`SmtM~)%7w;!zM^wC@|n$oeoE^a?0W$0^w1mw~Vy*KFDH>WLO6#5h!R{y8l z{>vvQdvwzR{=;PrMxrpd1sjnCj$eXll=b+KlbHl=-T;{E-V}$c6<;-kMVl|bRYsKJ zK#>=otn@rxiAO@VbT#sVRCY&4R=4R28y3E0wXs1T7)X_T)zpzj!c^2eHJ0-&Z1H2= zBJ1&DxWGN)h~E!lGkVw5($6v;2lfhbrdf1buXb5@{;BR3X$X`Nar5MOCfh?9i}Smj zP1Q*4n0iRe{iY`%(&962oXXU{NZ-AasUPm_`xxq9+H+;q2V(EOTi!xiOm5bP9h!ID zO0T`_>4ew<{fHJ4CcoB*NB1<}kBim{O|t(b;`KjZO69n_h2cpGhdr$aDEC$C>G6uR zcR}|dQ}DiKTuO;$iiJkdfbayl`(MgSMW{qcUv%ySA(zw`ybf{@3!IZCa^=j2wPzgOu&|&pH04p38-G3Z|^ciE%yg z@JGGI4lkef$B7NAd)4i@ereq^-(h$Iu4sP8(`5B?^kQd|IgY0K-M6ASB+vG(=5YPz z%dthD+ygrD`&bRw>7c|eQwN-h9RLzQf1hjIvnMeTxiTp?$`h#5lG`YZ0!px~7h?R5 zK85P?FQY&-B4dg$e`5=1pWS&DT*uumitK=gavZo9Q9@Y4557l7wacDM@~V7P2Lody z-l5ZhrqjWBHjX$&0An_H?bXP33sh~#@H|MiLrML_Fg3U*3{MTUBJnsCELJX=QLpN{ z7#u>QqOwxd22~hh)CwpMFzGA(#afH#PT4iEczjnV*FmGt1@Nz_nYq+zL%|n~S@mzy zV_X%;8vytr)kN9kl_O7!A81NzIp4EnG7HpUm=|mhH~DEDjH=_4pNM5N2$1F+^eZ`= z(ApFTIqbimLbcgO1onUZEVSl>+uFFFJ9gbA0VXuGDPoT{FAC+hM?+5dq&tPoi(>a0 zd`jF3e{ z1Eypw$rh;64h4fI2*z5`QDxm+F|+oAC-H4gTiwe;=xRoiGdrmWqko=8dU?HQK$_NH#};x_b6wf=)7!9O}i z+4NanCx}fwyXA z({=A}4o0<*5MN9)sqU#l3nspJf5O6D?E2sNv%N3KQol4uK}x3Bc|dZYiNjz!>W3!k z=9)NNDKEV;^c2a%VQwsp0}xSVofXe{@oF$d=0-23F}o*YU2-)yfTpQnfih&S z5z8{!dyAfhE6&Ic+V9t%`WVMcxE;pq36yjN_a?IWn>F-=M?5jfkT>PSVADf`0OK#l zaW|SrHL7jR2_vn-n>f0o*|LQoSyd{^zcy^EZY94bgEDAmK6ix50Bz)h%#qEqjQiO%uMqnljkN{Ea#wrTm?ajqm6WiO9R!J4av{ zYvhO8y)C}^t_Cj0QL183c0f}x0Z4c2=Iw$e;AI3p;5;9xx3EZYyC(QgWcggfiik)d zzRv4+$cg5qK%zk4zcK;cY*w>Stb;gxjt?2io1jo`v+1!gfH9OA3q|}~Ae5ZH6B%GD zB$l1a!UJ^9QK~8^9Otubrkl-bbZa^vy$Zbz_tSXY!`>vm*9#os38eTJ3}zC0fFh_% zHx_Y^m9H#~aAjf}l(a%Rj0zJQ)AKto?49fg5(H)%QOk z)*dTOZT=J8nmM;P+mvB}@T>0->#O9!yK5(x*hSC%Qz#nzW|4Q)v;6j<1+wv+B-$Q5 zwLKZs?2+lN1Dk3#t}Gu6C0joYPO0|(TPTd{2iHj9cskx=t&ZH<$6TrER-gz!odL0L zz(=>-jq%Q)V*cLu4Kl>qQ#BoDq#d_V>OPcRN?z)!)*yM*$=S^r=-Ak-z5p!jyb*%s zzde?6_P8^Ymi$JW2x&xBbEaGrZk`I~6higAg2ULyv?({9?sLD1T=P!I&f|&3OxzyF ztWloT_>4CDuS4SiB?`d-JI0*5@C8V?o=9wc^SAZuq-VCR`8kw0&#C4w-s&B8o?FdN zg7_&nHZsoOkwW;CyAE{}#j4i{w4&PU0ZKdbed%X4{2oF&6h7|1qnpa{xX#4ppM6mZ zRjmNoZtOk8c-B__`Q#KH&Sw7{D1A`UXukQ58xMHk^II7z3AWi*3aAYl`6o(zsEz!X zO&7p^{;?K-KS_2&Hsm90u2#!1hi>1ZN);UapBBQ+zZ+(ZJYujDl=3=|-M$8KbH$X~ zQwuy)(J`c5A?Y=iRHG&!L@Xhpni&tTK4Yu83Hfg@Dcp5*k_K$41b~5bAT+X6gQ2v1Z$vmK%&hoDblZKsX5Ji7Zr1af#lW0bI@!0*J~ zc~FJnjMY^aAysvR))r>PLlm#W$@ueL1ZhQcpO%EdZe~f^hta0V5z)@?F~J8SDg_Tj z+5NIA%5;<-AFFm3Cwt*NYG2Ww>})aP93PAp3`SPWOWE936w{0h#X_H&UfNl1YzV(m z12))es%3ouxwRjZGC6hsfzP_EyarzHg{?y=^L6!w}`|V`w#jDI+jVgU@_Dq5ShE$Z z65g)x{Vtf`(pAcBZVW1^dsT1!E9(A(u<6Cho|j<+?E15-LGw;lId^P8qlJ`jfxSfA z9_?XLAcIX)Z7-e7H_2P7{`I^5HHJ{Dn8pdNMvc z(lrRiI&;Y2D;uU3ncVXY|LHT0H-7lPXK*L|Qx7zkbbo>OBiq;)PrKs+i#j4@!IKCF zZwRh7(qw;j1{qMo&&+^az4-2 zL+^x&cts#RHs@tW9>x!`ezOZ3I%)#WImyP9!Vitkwt%UMbs47UDxu~0ixfX^1UyH`O6kx`>~{nA$+;etTq?e_#o zgVB;PGWZs-ix{Q{pPj#%F2A|N1UjUIBz{9pHsn7Uq9tKT=Uo$ZNFe_hV}jiM$Rd$r zZE4v5UIQ+IlH}h|bw{I2n08=|Q5EwVIafhFGP z|Gv0r^_~`e}k^dei+k0ms8liyghTeu6ZizdXN<^01lYel60LJZ>l3#Qeo5W0}`i0Z#&Rf#;>X1HN2nfF-9%I?&)N}OqJb2!y>xeLD zaah&vI`;N+BnNN>X>>h3rfewlZ)I+a?a`!qZ`}1l1}>6vSg4yi#`GVrAWYqG__r?D z$XV?ZT9?2QROE1N!}xxD3U-VbzX;!jxOc;6Q{COS*Y5P!jXjs0ySzMilQvvEJKmq~ zL!NVAsQPyClT zh&m_;BPI8)YVSuAO|f0{1fmjhhL;1WTQ+VN{JjtZ8+~q|m+&X!RM5SA92eeToE8i^ z^b8nl_Fds+hu?CDn%|d!5)T5Jbz$I48P4+v_<^l$CR!DAVBnh@iH?sA<*v6sib!yflQ-Q9r`Q>bow>Q}+DV!`T7Q(}G)VCqX`KV)%dam42EG zCZEbffTT$e1uz+pe=zBiYJRs-?85|_ObYRL|I^(a`~}zo4zZ4hpGVVNlntEOYUNo!#PX zL{!1_6hOQyM?z#sC^9j+lPU=jd3eL)6~0E6p5HvmLll?4XJ@s`)Vt1=#w$ zHd8V~macNhz9|c3nUdUP^dq+SU${N=TOn=RQ0Q-o9YWm;nd>26Yz^vQ^rJq1A_s}3 zZj-0j-hJkz&k|PlWPH8m2*#!bMJb-M|L1j155SsAd`ajQ0p_ezPG+=vjLuJB5LY;z@=ttIP0ip0M9@Sg4VFS~wYM=I%h$9(-L^eM#kM^P99^;x`QZDfIEQX3Xa zOPDKlBk&;5Vz|+IvZEuvIcmG7lzNbsWC2HGN#?F$vr`^?@hK&|a(Bq4y62AGpKzeH zy0nX4P^mQfao$&^-cdBQ4<9B}?V>?YzeU6SY;k{QYcSZH!>>6+)8sxEF20R>Jor;y zgL;kC@h4W+XI0FPOdoGI|GeFPiSf~MCwMc=rBoDa&x}1A^2VNx(|`H9HqxJ}xte?k zxfT<7cz8ymjpJ743#~gkz#-=%){kI`QDQG=Qpyz%$I+AVScWylO5YCM{s}vOuPJn{Z{;BV9TET2_^utw%)r37RlKlcc^IloUSCV);mlqL!BNk`uIIx&<>|9Sb>Dpl^V zuJcrX*KvADWIQ+?6wJ(j^ONQ|U_pecR42T7(Y7A5$;hQhA|vZ~s-<@eCs-qm!OqTkvD6W8P@wI0uPUIR7bGClk{$S%3sDM%jQ^4Ena1{yPGZ`I|}yO42w% zZqOjnd@AnZOVUS&%DAKZTRbAhQ=vCJH$+2(u6=RiT*<;i3!F+n&EXm5?)5|m z{%k{!IA&iRelQg7RkCnI7_W_P^6jKy3g#X!1_}BX7vpSxpG%k;Dij@F3^pLATd&Gt zN=rZC6s4HRMca=W4a@?h;iR9vNw1~7JTA>E`}ld^dPVNo-1kk(vuz7c1E^-%ENY0F ztjq()FKbwT%8rHQp#A+ga|2kkXIZ{W`)qi@`Oy&0nPL;PY-|8z0O`0 zAFtpH{b7ryt9lxpTjd<`6JqL+QrZh#UUW-DPU!*vs%1)QAPr|XC1BZTV``a|^ceypCh zEr`m#)o0>X)Yx-Wuyyc4d#rwaPc^0FeDFltmH(y9n9%)tZr#(9M)wpn7HCTKeevm> zlr`?LLO)jXZ&FI`J>*tzoy*AEaqoJp8g}lS5_cyvwc)eBoL}w%V0-e@zjhtF?a;q1 zY|U)BZXdh#hs3ejUmO71pF(+Y-rQZ2vfe&J>_2Gm9bc3(`Sw5)r+ikS5fNuYBTxW* z3E?bz;;rgxV4P8Wx!`4Ca~Y{$Cv?t#HuKo%`?PcWgb--JlFoY`<&d(Co2itN&b>Zb zzZdK0qY!86+w?I~ng55Yx8Q243%77fX^~=WDXxVUcZ!DqMO(bMOK^90C=?A++@0d? z4#nLexVr?0KyLb-bH=#${(&SrduQccbIxb3FZSm50>i_)*X`0gPP*4y!}+(5&A+bh zhV`DYhHrg(ArEKFs5Z}Itjy!ELb%8M%-Q|*4mr)B=bBEUs`!Fi33`e*9_?xebd+A9-YRCQb zu#ne~8ms&s-U&Z8f9nzSisJ5ZxWA(fK6fc{H|pB~xTx@Yf*M}NTcXJkP~3B^H3BZj zXA2>=>bkI5c@5w`gv#TC#m_$-_MtYmlfe&o~5ADy|BnP_!;^Yiy5%T=%*gxx14$cj-V5Mo`-UshI2gcfy=Ay8)#o@!%P8R zD-d{un`863u9@0(!BRn3r%7X<=bqo_aYVxTqgxDbK}vU5a8$DI1=9voBb|_-*Q@o4 z{zhOaCX~Mo>TdV^SZOp6fs0zRy}tMm?K3I+VJl72!8&a*)Y6B0kYrsrqSw9{CykJi z%PI=>zIr<=A__*+C62f6bNHMY$#dfmcUt6^=RB=^XQgXIx<^{^L@;oX&Yzze&2vlC z_{%;mDQa&!SAjEQP-H#L$7FF_Dcw6N>c-b7*n*{An6yF?AAsa2zFa|q>R74UxX>7) zq<9pA$ssr3JQc*ByycH-Jzt^6*;MZSoniruGe17O{CcU!i*WgRp2ba&POqwRuW{hB zFgYV0zm4B@Vg~xf^7WE&83l_Dw{OBocmruob79tV0Wu)9U$%n(eV^Xl7iv7yoJ4Oq z*eWpv4GLr~)bGnl4W0DmTl-Pz?8J3SzJVO~@o)2snyBuX+s+Lg;+B0evN*X|z>tsF zWAufpyMIn!L*qPr$T!`IaNH_%TMXw``)8U|D9K2qhHV{N9W6jT4}MRb3$uZSCE@MY z1o`5RRdVl^As?38qN}jGwSuI}!vJ&J)S#e_okGwiH@;u_auz$zQ}a z$4eu0t^cLC=7V#c$PFw;gr8M_s*8&hpcqLDg~&tm%$d(H zwHsT5_M3);y>oqO_gKLqhot@(0-qkJ0sKxfK@Wy3zZwF+u@q|ZTH%Snv9@0JzS8Pb z+iLeg6ilu_XGi^0D<0!_j-Dq?na}EPvzhl9%9{m3SnlrSpSpJ_;31<8Oe8jKF88P7 zPXRlib|oSYSWJTs@GR8V!Tq%DA z!e-9IdCw0M0rM0~CM`3n;2T);P6=?Af;sbYbAGhrhi7luJToh-{%qOJtOam*F&y&z zgxJogi;+CgR_E23 z8=@AQ7{UVfneV7=T@z4@HptcKQZmx4<1%N;zmyT~um8{WAXG`iEwx%YbPTAlcS8Q< z_lM}iHCtD+U242{M5AN1O zB}dNIP?ED@byT6g@SVcl6T0c_;Pd6Pr7UiM$8GL=7AogzRB<+oRJ2B%n9cdv>Iv^J z^1g3!|AeAkj>FCs43cHxy1skv-2IC;MTXIocQ&E8dGY9Go1!WXb7ZsbcX;$qQtccpu@~E?Dd>%1gC3H^N zOZ;-6l<#8HH`ydM5IT>~bIc zWm!edkoPez)yV6cu2b05-|U_NqlJ7v+Q_Xtc_S1y zLec=Ue-XDf_2pgV8Hd(yX*@it(|34B=DoRIhamg;w>*sC0YiYIDc`}ow>!#|Lv|u1 zMK#Nd$Q5@+$sMi6HSj(!rYZ&b##)aC(D(U_$#)~ustypVLTJbH-PYKM59L7=)#1u@ z8=v>ZtX%bZp;g%a%hc2wj>P9QDWRFv00!H@{GGs~h)mQb_3@`NlCv`VePxlq>-DyI z#KYK-VpY_fA|D#G4)g#c>#ZJre246WDcf{TeO4C!>mMLc@7&QH}EY>)~y&HIa;-&wlYOqNkdmFU*%fk^nqN?0p?xIW( zd&+^_vE}W1R0viyL7b|WN-4T-{bRrZ=z*Edb~TRdlQ)q`MmW5yKGO9s@buN{2T(KF;h z$P}fEzZ_*4^r_%tfD@`J>-GX5pS*2q1&&C0VJ;FhpX9tiYhD;-@k%Ok&nVSL)t4kG z8PCyMYLkV)>PCqEQopidK<{3r2v3G3>9hO@Hd_)1@#>nMfRFt&Jf9VhitZvRw0+=8 zHxC;-YXF=T0ORwaFJpq9R8?8A)k z*+dqKE7s?JC;@PzC$VG3rFH1V3;5MHF%e~W_E}YHKP0(=(Z=!8f1X9i8xCfH-(6;Q zz+y{iiV%mHIarfo4&nlybA_z$4-uzc4{xmLz^nBK!-Cbv#KF6pDv~8kdF6($} zmtDgGzN%sjvkx7_A_->kE+1h z5qD`@8#5zWmCyTo23j}yL zig9Gb7si8-(unuGoJdos_ckkv|JuHvc{#4k?(?JH6;Vs?4R>CwG9ls7y75~ zk(=aO;r9>n5`ZJ^Inko!)6y;8$%ewc8h@|iEJIVtYsa7tje1TMT29rxxXsE3p`zA6 zEHX~Vf7`76%OelnA8K~Cy7HYE!^`t z=5c~M4Q5@hChsGY--9D{w%%{EGFyc~aoK{L3V0^{jB3e36~R+`(ox~sFZ~wnb3N}9 zWGSW^4KGS)nr#g|PC*V#H6~k4Js;V8zt;D__L&uQgLt`sq2B&hNRASzdQ_!*RIng2 zXAyKedAoJ##Iu8@gd38P@*0=QV9`5SjS3oP|IsKRCGIs8-}^qj-F5NLx2BgQN1f+8 zPs98ReG$f^KplhY{8QDlRG0K%)=okCcI@Ql^^lPz){(N9wI@nlTCcQ}^J=`U6fWm- z<`=oDPolmMUO|+VK!~V_|Ee(~hQ=O|ynUqs_#3xNH2!-gx;t{Kt!0Y#8tYu&M(5kZl5tCE|GL2gUxcIUWNZ=OuUeobIy zC5>D_Hn=q^VYt^TDU(=L*&e073TyeQ+~NFZQZ}|G$|qn?s+t+KjpN!`R?!Y!!fBdOI%PT3YLanu+{u`wUXD z`|4Fzx(xR-SCTiJ6eo)P2FyBVUcA~ns~%57s7?f{!HNDgEVg62^ky>gQ4s<%ydPKu zo=?2DN_GC_(1zA9&1)gR1L8icEFN$q`-n(aB_@j~xSpH&!+8 zrCh`XwZckdE7DmafW|@lF~sycN*xkMy-Q;x1fmL0ecrKOKRK@kMG!TBScifgt2XyS zL0we`7-T|;ZpqUYG>E&hL0WUHwaiusfEnOu*(~qr86Du*tYtO)Y&+{higL-)Z0YZL zGJ~@gtt^m394_hlssUI}_WL25N#2^#f7>(AR$a)n_JY z>rO^XXb|?8tqh;&rD;-62K6|}(+Lvw$X-C>Y{Q#q3Ft4N*7#mGehBCF81#ntD(N0? z{Qa)Jp6cXZA_I9YdLJp0l~WfX{n+f^B_!F+#dUBKiB~>sep|W3Y+1V$PuutYzGKMv z4WO@<-?(gWubRQTHM9MW1*qTa%F>0d{CUaZY@B(6U1s+Olt|MJaK=)FHhfrg9%>^| z8xWp_ttR<>)%fMFNXcERj=6e3grYn;sYa&7>V-+b5Uv(iHSCw|>(FB(cKf)03dX5j z<-8ReCE-Ms{!4H`-7QbBSS+*tL5qNaz`50DwVtwc7<9AMCWuoEE!%-inG6)S1!V|I)$PRtS%NJ zE*9M??}!q4SdO!$E8oKQ#KIP}9_L%Wy5>#Hb?iF3v}d{Ht;`L_bM1}laRW|cZC52r za`8m@K9{W}`@&Fot3Y?_T7iRE&L)Fa7 z5BvAdpCeLVJSylZSy&Q#JI3!iNTei+vz$mmgqDo^A_hq%L)kNgaenvT$dk>>lsS84 zzSgiY7TI}45tPemC35YE^t{wqZ|9g86PAoU6EWIFV`7qiKNr*!z4-pxjV$ZPje?$pRBNq#mYf;iCc#C8KyK-cGeuZVG^D z=2^;raALWWkzcuTv;~-PHQXNiWe2;Tf!=WDk$K5U;Fu-5TzmCG)dgmNgjFD&uiTHh z%FOO8lLUB^EJMm#p_+UH>7K&}^oINp)&rc#p45-gh$SAaB6D;LV|+{oipNoQA-t71p=HBBa#!cX`ovzEF+A~=f7 zwk-uV>Uz=5##@`cuos6;@u;1u1byjXURR# zwEpk=cRRAHftn!3G0rbzLqxf_h}c^U^>AlQ!Khdk*3G&c67sYzamC+Ye&mZfDvFA9!{R^~IwqN&-Vky=WMOb3aG|FEM0+&qVQkP6Gy7KDK%bjDQ zSB490y%g~SCHPs_o+JU+yMsT4ZsU#j4Jx0cyQ#dJKR$d>5IbPhrWK2BEk-uD=TIlc z`CKj7zHf&zs|tu?8iH!fSeMX|!R1~m#uL5M2yU~6seeN<)~g5Lyf2zZNiAwGu?tv# zd6SY}TE5npy{3^i?ERD0VGZljf8j41L8=RM(np`5$ZUvlc}aIO58W=Tt7SHt8yP3Z z`z0EW)}|bz0~~T7VeF<$A@niD$zU2+)$^SG(t+0k7l2#o5Y-SvpJ`|Ob5MHYqngas zN34=WpARc6vAi0&)FU`U6;_6{@qO>%K?=sq_|Q+eL%k-5pa4Srazkh(XJ1RSjB&S? zB{gfc>wMOg6bx}6^0%av9^=A$X;-Q)8XiHElJ+dzX4T}$b0k?w=l>BM5OwwVrOabB zr?L)!Y}!lBq#KkE4YIo@uRdfHrBTb0eg|PAc;y;8X!zh=G03KM_OTI$fOquw4*i+7Yr~Cwdhkk<{m|{eu>#d3@+UK-|jGVJs#kl^IQK zu$Bn(>IUFBIu#{ zF7y)-01<-$H zChu=D1ZcP6#}eAy+zm00J)l&s{+57s+|?$PO62-K;i#X2*_GL^$VwvDV4uvIX^3!8 z2DRS#2&XWBzlGcWzff@m#En455uZ+yfpPp*gcqRi+F(bU!Uja9r|Kfm_j13!YyM&^ z;vni<4LnLDx~33oNPkLVca2+l%E`ex;LTvQ;Z_8huf2TN*&klpEaPzDon)gF#Kj_f z*y=J;^DvsTx6xiS%CwwFkj8H3Ci!$wCTfdY%7fOe_*bgadN;dX^WJsy&b=Yw5q4(z z&^_K@d*)jdCueQi@%8Jorl`FS#b2sleZo-TL)^I@v$%T+ga%Uox$8Y-=Ap0>w>Q}6 zBnivduMxeyH@gIYi*UM=kI@Bfi>M}+6g2#~O5O6X5RmO*TC`=-(7rWtE-nEAV4v|s zs-NVIg@2Lr9Yoow5@$>^dB2H2&Dc(Cr zN;P7P3A> z0i|mpiYxZ1Q~=4xg7+Es*sXqa*R!)H)@RdcGDr~oxa4KXbtUN^2uAZDbBq?q?dcru zv*Yxgs|zC+8_p(DUs0`hn&nz5n8h?2Zt?w!;QXu44fQ!vIAVvV*yPfg(}6WDB9-GVtYI`DEqJW z{l(trKRjC#LibKOPxd;1I7AqI`|$dPo}sT1cn}Yw4Z}AT%)!q7R2fKHM1%MNAauiC zbqAO0PWn(8Ey;jv;-M_NuB4fN$b~9}w&@!E>DJieLQ~?*>%z!|pbn!)N3o*WkLpE3 z4El)XkI{b`yu!m*BD~1T(4|GU7O_5mZ}J({LqzPa906(lN=N3BKU_X)F12K}eWF9OoF_sr8Tq&0uKCKuLlpQGA*{PMz) z>y@a(tN+sdMo8r^W0{RaW&^8F4Et|s(LW-j{D8R|{lBuU`f5CV`luKx8vj^4M72k( zOll?Sn=@g~NI&}{$+*5hiIGgGx4G5Tp*hr^l^B7%ESFl^KWc5_y@|;KCYwmz>;hd4 z2F~!%uR9mj=CIW>dkbWn(ZKCjn484qtr#cGvu-rWGUqdzKlL4zmFA*5H%WhAt0Yyra+ggd zt~;heLR6qWHc}gzupdXHO8o)%a=7VGs7;PVX{9xBh=cAr>1dE&Sp-!@!}O==c>FGF zFEp3?eW!Y&MPz{mg@7o936_9Os$?3Mr7QLTylp11wMDD6biHi#3$_1Za2o$X(PnDr zACgs@-bew35bLk8Sih1%)N1X<#LGOgu#4xTKJNu7+yG*X|GrN_Mk(V_*76G>?w|h?d)S;Obhu^LDBdCNFh_`kNJth#Ite*}L=8D-W({6pQHfw8M8m?tT64c*>|>YNP> zQ`hn*tugPT=KA@Lta72(y=wMn>%zM=RMx^pZi+ih8}o|+EHa*&H!j}$T@*{Y8rJ%k zgRNBH#Kn|Yhw4(ZPhhP!R>0~0B3M97aTwIjl4^U3r<7n#hk;1{y|+wvDnh^!*2`eY zbS{#v_O2@R>o=U-$HU7NUq7kkW$rS@bWI@2ldBiIzH{h~OICjWRNjl1F?(6=J;^MBFLMWz0dKdRQ8%6u@p1QB-Jrf(Hp`kT60U{b5K z`0ye2@GMYU=V!+UHoFpzdv}GMC1saot1k;%ABB^)Q|lk{eqO~;7VM5iA?_M8$-Vho zUw%9717ME!cyZ*CoCEfI)5k#3eMW*7h2Hi>6J5xx^{N-+sF6(F*SaF z6%i~YM?$Tlb5MR4ey&mU@%|DDC;kr{>7mRkSpI6{%$Lx*c%g?mb(eY~<1*C#u$bT9 z8+l8`UrFkhm15w)WZVezE5fFHMoVLgl!pSp=-l~ni7P-DSs2?I4 zv2BTh{EPwv>WSjk|B*D9L#q8T)MZ=ILEX8AAEK=YRTx;4vKoKULuji4ulsl(C+^$^ zz4&|u#nWS?)#uus1fbfPk#KDn+?%G zbl$T}xHlF}xNo4v_p(ed&`7f%L7k#&X~49amSyH-w~eGHTGI=1|DgxX#K{+8jShHY zsCG-L6M-}HLiq>Ra^?!;q>P*YW7Qy7SQORrYhp`|>(44^(cH?ma-IM^#d}yggh;Or2)vB{ag9dS>{en6=}EbA+dRgbGuII-ynup z4$AT5MX9f+{fx-SgJ}0y-v66`|IJZ9I=TOql?huXNgTwguxC28C8zhU5n zy2!9K-s?<8x{D%0`;+;8{ttJj+jm#|*?2~vRKy+!@f_${AtSodqf zNLhtcxj`}g!VFFheG8KR8{q^NCIUn?uT}E%yW~p1=qaP0z+NW2uYOr`LX{ECDL16% zWCSAgQME&4KM?C2r91A{1(K;-aI;(*I*3)HKmLBo?aMZM!Ud6&tuuyNb{Ll|+F^-a zy!dZa?(f(gyOYo7NBlEoBb8ibQvgF}!*WXSF2#5! zjDr~ocvl$-_TRafD`hf56x?4dmeT`9Z~wS69B-OCs;aVYjp?|j1PaF#;r1>Vty#c` z3p+^rr?g;q7iq`-L!63r0iUzBlB*HGHX?nDfMNsK=|@#u^A5xOuvQbyV$CC|nR7_G zO-Nk-hnxM!P}3rMFV^{e7bGaHxelqwt)@;paL&{&Q|+qrzLZ`tdmFh;4PIuCA~|#uVP#y3*`*U;kS*79F47J#pS}o#6#4EANIfCSf8n_pmk;K@*>rWBkf=xw3tZ~W~74Kys>S;52MfSpszgG@oC(hPbNGTYYQELevcaWn9;*`!vQ1deaHqp z2cNGc$X^l#v|(B3E_X_;02Oeo(mgA<0HVy2*F1AQf9`})B7T@JCDI^DRC=Kt6o`;d z#_>w-Ha1C0e9KLsO!=HC~$+VVqy=NQzqoZQ96?N*XN2B&_K|Es%+qwirZQXwv!o zl_Oe_@50(asotZa^Im2cg{3$qIPoPZTW*({Er2Xl(`$(g!-_6aPPpfg0j6%pDaG3t ztz=Gn+r7=95!h>-j_JHBt5Qtsth2KEQ^3oP060Hl;1;j{b+6WOW+@~m)B87 z@1bcsI7mfcp#lB$CW2Y`fGI*~MLo@wCAHd5x+fTakAT*McBeU;N{C!}2aLG8oS!>| zLD(va4Y|(Y5ZM`zPiG`|N6A>EJI}(xAcn6`#$C7N; za#MqfE}DfuA6KekHu`q+$3!I!D^+M|q7gMzpwlMB93cX)8{N2{=9_2h5P zLuSGrQdwYA@W<7uHv>Hq+6s?_>>l!~kxtyiXLf%4agz8q#K(OS+!(b_zW7$WOlgn| zPQ(Jw^F|6qv!dkTc{bd`oO%mi-Rv9yeuZZg4B(rQ_u7_AOR^UUF&$sl93YsKd&(KixQLqVT$q67?BYVy&GpY&3Kv{o zsUG{NNdC|dzTuG}uj>Xd)iN-Afj+-#1}#4wPVPDkDeF{nrP>L@i^0s@&b5UM-@c}4 zmeZGDe=OqV7G7bc{vu}yctgqe=Cz>1jA7N?72qRM_(xFRjK~ARWSlK8lgsHKGNIBqB5I2 z47Y0Mp*HO5^}%XvgiTL6QN@+k0{y8uu6Imu^FCX#Tv~=Xx90NHHvC2skUvgw&S?0> zkdPmw!^pYS`Ly%248w9hy`Dt8k8xzEN`T$8+x?gYCYOy7JBt=x# z8ei5C@XtGTET19OsBRxcvu=VxA?|K!^-kR*d)!e z$QW+Vc9{L?o<^blYMR$;FjSh{t({_p%wX}d5Hm*6z$38L%RRn|gf4fJ_k1)ku*h_r z`+aiWoyE!#to(#a@Wqw_tM1kE~%lUV<-P8Lhwv!Su0W3O5uq_TdOQ>lW45vC)I>F*^_6`4pk!yc; zjLWGE!X-F}Ko{81-tlkm_|k;tjhnR8pl%uesa+!-=ThYyF1le^L~1`rsDC~Ei>yTIW`}$ zevW+E&f3OAYkC+H^IwCFTcV%!a&#Yexr60XR^`HTEX1vDrq5=rYSAO}J^A7*0sDQ1 z|F90C(#u@yE8$qK;Ho}+Jj&4l>xOd~4%y=wglh0XbmsF~=XL5z`*W2wu1BFxeXpU9 zaiPuvmtNsE43lo{!>Xhzt+x)Hb9f!mwQ`6!Uh4@>WWKWvqKT{W8+q?IneK0)PmUX9 z62+8swurftJ457za8b-!_$vWDRfuLXU_RS@HBDR*)BPmeM8o+D6v)rTk* zjKr;2KD+J3%v6E#=zf#(+_xsL=iLPtY=MRE!2DK}Lle*6{)aXGr_0tRqZ7IZC!Zi% zSY8$TR)5=>i|UpPSk04mw)$;P>;3By`=7Rqn0GU}rWY!Jv=xT%sSZ z>c8P5;$QzYO%Om3X*C3+Z@iBd-WBX~=|=vT{8@AJBB39lR;ZK{#xeeXMcM4=j?jOb zi$_Io-q0O^p1}X%RrfUz04IM)Ip`nF0}wAzDSugiaX~mA6929Y2Ln>9YmoKXJ5o|G z)^wt6RzK4GUgu}&;HYf>zZ%tOHLDM$oYvaD16<}GXZ%z47rqY&`}@iQ($ZILZX}5+Q%5Pc@?e1=?=|`=vuO zPUTL>uR&b zm;B}NjMwTX<^O-D!Br((n~Pf+`7=4z?$^W1e|R0D2t?*4s5@BkGvwblP4_oOwMlqO zm(nO#*U}eb*u_}rl(|uM!70rhuc|EMNos3@7$^(i8zqflp1#T^{&2v0b!QiWiK0_a zmht99l<=(YP0H%TVIy+u{ZbZkb+1TxVa*Uitbffs7-e-h^z;M6al8T7lKa>?TqZiN zSDL5^Otnd}*iEF?FEztTuH5-Z|C?x}^5dgpSnV}QJ9*+;ImAg|M_)||_dYVI206%% z$bx3Wvv_-PcUw`l)*5BYyXP25@f9Q_S3{9GM@F!rdK-Ow`mK7cWEqB}l33=|DHqsX zXwVZ)k@R{#_tY;VOQOxkRzIlC7}jo{`IEv_?=m6!e_vb(b(>McSzN2b0g;|a8HQF- z_JN!o!VL=biqE4z3Ko5)nnD9v5*azJ*0~3amxxH{Lvnr_AjKb{7gN9)I==5$T1A-W z9gN4nb9npZww4W|)*#qQQ3SR!I9R)yP&+>K?^DTCH$} zXk<>}oJKg*57d&w-Z$DU?S z01ukf?AOUbtymx!3sGtLG`t?C2C&=hDkJBI+^J?(>i(cjG2*mz%*FW?HAQ5B+UcS= zI6t$PHa9U+6psGxDOYSN>rQ~tfZTrv4m{FCa_qXhRD3tss!Cg>1f`7+A$XT2Emr(7jow>OxB3y7f$NNPlf$9C7; z9rSUeUB06r&NDegHx)o}tNl~f_+B2n=>v}mOhUk%{1#yL^7B4#^Q2{sDWLmsohM>* zw`H*_^_q^i51!1%n-*VF(@M>G%(bSF_U@p+es%Ia8FvAJhLJD*foZt0EV;X1AG!Gw zyrld94`;h^KS?;~ubgE8k!mggh<2$E=CNNAJ?y3o*LM*1d?6_H#CZ0#p!*;tfL;ry zKjM}gS0F|=@W_iBDu)=SFj$7O!wwPa9+%lPbH?4%HM7>;O^Y-?UQK(A| zB`@!007|=?+^i+SmzJfLzNgIR*_MIjAz!gY%lh+xHQS+!+2=R`_Ye&j@Lq8A&ylnL zp>@t9(Tya8PP#4FN4n{cZgMmj5&fzu9PZ;Lb`6>>v@gr?U^|NGw^F9SATeFh-=P+K zWjXH-?7O%#VQ$~qdXa|*z^&&iS796a7gIjtiv zEi!d3@aw}L2|p?Y@ETtFlY4RC5Sn|xN;OI#+QP8`rsu!+q}xh9wMFE{t)Ct3pZm%N z5B@*~gqn)iW=p7#FfBB9zwM(KSLQn|A8mJPcQyy14i`-rY?`Af&ZjbeQ&XRovNYdc zu^gl4x8bF8?Y_JPh%{!qz2@rp>t(1&c4?4xFCLshk02NK(m*knu^nkWe0}p0DIG=O zvw;nIlL9$bvvGV$JlapxEmz<($Bx8w$9O#)C`r4I?T@!wM7!8}g|2efH1)9~a<(r* zD!iggE|a^?R9bjj)6~bV#F9})9C$d{eQ*8-OY04#Z0f86@)EXTN6|1c^>IV??;hbf zWP+Py8l(jRfaN7%-I#u%GGUt3qa%x;rP&_&Y42W5WX)7~9%8p4mJ&fW>svj+2wng2 z`1KHYe2E`%!bhxXTfb!Ix9dYanyp{2*tIl=fnwcjJzu{5a#f;bJP19weaO2qbhpy3 z>l5Fjpm#=Enwg>IlbTRO{0FcrCI8)7HATd1#}HKC3ME7U7MJHzTYq=Kcg^WPHfWT| zrq5EHs{;sdxDTQ^S%1|Ns`CiO{k^p9{$+?QCyGofCl!K+YIgrKuoz8Em3>4>mYG_E+s+{X{0KvLzHgd~bsLDcZd6F}p5q;r8R>RE_6z7PZ2# zP&*K>y}YI*bzp7&v#B4FN$zwl`3K6z=AYT{QjsNZ$ZWj&(@IM5ijNad zNI^|^gC3jv_?<~gAXVyklgo#^5;6M&$yUyUVq7&i!8s-1tlLp0fw-!1pEf`8H7JtcZg zLkGa#8Imb*bPOMvy9KS+ZE6P8Juw5Y(8=+Uh67DOv~GOb?hAoq-$={P<-)Ijq}$IM zp_mG(u|X+uc&t)T$KOYxTIY@!t<2N+``a{E>2^2HSu)X2sX7Xx4KJP_ApMqZN?5eMi2I@2|1V?e*X*D)Y5S?L z{C*J0Ol&j{$QTB}`kw)W{}SsjQB|EE#@{RcRqo>gUJLGW!AWqlX!g-G;W){y0r({m z2gsgH$@b#RF|dL@nHYLE@MyQ3J28%z%+|5(wPZjSvQDq3QvL|?0n0cVQrd=X@to=S z&j!1X98udIW*U92fYJC942T9OwLIquHa}m9ZX13VvO1GTFt(G$rc~U39bAdXS;aWGGr#RD2@c zutg-bO9de{rZ4+K^zCMblFvV&lJJ}CZfbOEOzh3ymth|cp|m-Vi?T$0d~im-L-*wi zF4p;E=@qi*Fka!_$bjT!_x!*GujlT28XWus6!yKG8)Y^QxHv^>KMx1tsSi;DABZkl zA9jV?#Vd`jnz$gZyF1F6?{hkj#BH+#lGU76=sOS2Fb9tD_1pD*tAMqCteYGUFG>4t zPaHkIvQL|1hga^p+?eib)y3k1mOFh!%KLZ@b+$^%MuVF|asDdccwcVf9jQSvRB0~L zBQsNZY>$8}D?t?PZD4}Mb4k4)>wnTi?kXeO-KVTHKS#JFo%z_LP{8>(AMR0rGUcgk zRu_Novfp^n$+TU78B;Cq*Ew!)ZPuFG(iF&VACw2~FW@_9|1tAbNjrgM8qCVejJB2=I&EcId7?lM ziC~{fUP@g!g)E+DzPC^A6i~z}9)D+$==1R~*4|dTQo6o}^@aXUY-4EVI@xys;VNW= zHolFYT+==1wk$D`r)2@W>g!ew0zV+qfaJVa>0-qF9)12*hayDFu=Pq4ly6$v;^4J!s`Jp(L{umaIF3#^Z{$L2BtadKFZs(K2{>qyl0{FB>pi0T2xA$r z7SIn_a?$!>i^#9tx!;ckAKGjOR(=+}=|S|uz+MEBL&52R2Sk&pa}hg);~~wdT?pVp zuf8p4jg+FVK5I*Y5JMnRr}6utq0GVbO1;Y^j-ZBm|KF<3%z>>2>GQISFkq6rw8cfy z-{#R&?lCBjjg~xpG?}5*eeEYU{OU~NhO{5~rIZQJ*uq@n4vS!hwFS6$Zl&QHkpHpR zwd9;#ix4Qsgm7VC&yirr+`ccYYRs?ep@zsw$GL{BKdVebTekMzcu)p)Ktz>gWOs{d#>Whdv`qF#x0* z0cStKQ^LjK4dY8nfZ6Uc)&g$yF=cu`_6lR9I)h7|3`T&#^6UhG(<+A%Rx%vC>A%5jTaL+s3cut{em zl`UAl{dJ{1{>2f4?r~(CKY`Se-v-wFxq^hnl4XL#-ovi8+4|^i0DI?Vna+nt{oJqO zox68_*Y zK@urIE!Kty^n!T0331cdK28>A=7uYb9DhqgzJ)8 zk>&W(+ivAs{18kpfjyn>IcaSTzwb^$QDc>_XUAXP3DmSubB+uhRNKn(VkR?p`Iwge zeWuu08WF}cVBeuEshFkam~@;q>tCH18-Mz0|`o*gByk z!9fWP0k)Q77Qxk#Hfdzjk+zC>Zht&A{VZu)kRHZklYfUg9Q^KhgT}A`0oXZY-p5TbHw%Rna}j`kt;+xk1%}DmrK3WqV)DQ z`tFrnIX=M&ZkBiLoS#uz{Zn?)2o9%S@!ZnodVk51oK%Pag=!3;UG9TR=Af@Wn5X?m zFKck<;xE3ZA2umut!?-B6YQa;%UFWg3uHN01D_+cN&v{MReWZd(OniD9Y{tCF;z5R zFB>=7saUV~ru7~|N43FAq-tK_OvUpv{wKs5spR}swm3ycE zc2%0(1xRRtmNxC{T$g}gHxha_TuWZz51ieT*u{hXQ%gMlv<9L{B1bnZP&CEWp$}$= z_I@aGKTfnP(%>w3Nz-5Uo1P-mpNfI{AJv1HRUOpykhvwa)Mt^9C4Lz*0T!`e~QdsI*eG!q+(~4$qfk$dVmV7M5&t7tuxp5E=o<)s-Vn@ofyBWS*3U~@4 zP8$UJX+hX~4)@*;)Fp#u;EReCAf99g2uVZ4<$~*VBm}Tnnj7x%`vG&32=IrP&4hD{ zJc(!z#oM@l!ZzxvCdTfA8S9A*%Ca4_;!V|iCeovT%dX`=XOWAnzq5I4ax))+7xv%< z8qIx3pg$iAc%+^zu!s0RC&hE5I#f`2e#ZydL#kLDtkdXV6Lwi)+O29tNV*9YvzIkd z+UO6yAtA-Cs{nie_%99-b9cD=IM%+z)2ccEA$hYHaikWxudTc_ok1?u>b$SVi#Up$)5eaQY= z{29H)fW~^6q2rmUiwWZVlIyu>SS0!cxE#Q}n zIaUM(BxUJLUL%W*;-S^&sTdJ%Bxxx8f0#N8za}5B>w^f0#8kQw5R{UTZb4810YN$? zrN-z^C8R-dbSWVMqq`e6LYj>nox&I}V!ZR`^E{vTZ@9PnzOL(>^F6~)9LtR{ea`0) zXFuDGqqOf1q;F;ay7uqd0ue-2vbNnOb?{Motx|6-Pk@*Q6x!^>_?e?}>L@&{<;_Qt zWRPB0N4&r%RXNhaGxG!oTbLjS!qFJm5q?x8^zwltgWASQWEmPAy3^3U=8o~QAE|6_ zZo#+&Vekms(D)C^N%(_Xy7uSgIw`BFAGs_h} zXl|1pto%t$Js331XsLL)0*()Q$ePa-OFQrE=k$s;qwl!(sGeZEIvAPiyY%3wlU2@1 zsU1!+6{K-9sr~JNP}^=>Yw=M)+vZ&o;p~1zSTK=%_1cwj+IZU>`IfI^@Nq#~Np>X4_igh|jw@Kjqj2=r#s_D>s?W zNNjoMd%02exO%d}vM?hz-VR)GG<5oCbr~)0f{73mCl1(J`swiFh31PTN*vg3jY036 zLzStUsPI*AF^(*RQIHZdeE7Vvr9tPX2;r2T*sujJ>?j2}0KSyEX%YUct)qY$Kd@W4%|m$l^I*_@dK;zg3(Aw`P8; zw`YT2u#7i|RIXTMK*2AG%Tt~ZE30c=OxUx66bSjEFD~KF7gM=v$SLEU8jmDY zAzURg23`s@liJDY{Ak5EW2_MiMZo+vmm@aG+scX2w<>VH;!b5+sov@Bs(NzI+C+1< zCp&B*FfEPAq5GN60a^l(_}kZ^Tg_Md`GTygKNIYW-f&KWjAdV$JGXrM@JQ;}5s57& zmw;Sa{?T_z2wALi_YGw9b0`U0OR|*q%ih}s8AIgo+btmv$l&8#31O&w`ojoV0>sRiCJ9 zpsWUCjZ3$Ys`s=0XtfXL8E^NYJ z8*6yCp(OEFZ|jJ%4dRWZm_H(nGrg_x#GD%~TC|g7kF4JRx2i7-dhEYaIUMBG()+Hs z6K&VGYEdXK$N}yLlk)<@U2Zv&j~rRJSY9H{=O`Wn<%v|QgQSLT#_5SBuk3y*B)Hex z(RM{^vrv91Xm5z0DC7kyffQf1M|L=gf7X0){!)M2tB?7V0a}>^yVclUcfKMqCYjI7 zD8(aV-W_3;lB;c+EDnmY+~I2#NItGIoO{WpAaSK!)1{gazUI&sp2K+b&i|t)3c5C3 z2A}rejooEKcpY$mVhY#8ZTG0#J4M9xy2W!e;13zYJUduT??GZK)rg%#wi|zPuY!N~ zfwVCu9xuLQXv)^8a%m8w2h72CaL+uxy-rS!!$=l7+D8ESd-Xe^cOMyx9GoNWNPdz= z%o3}Ay}^o1t&OX4xp=jP=tfhB&ol~+=oh?=NVrs!(reW0jXMf>oN14NwJqL&&uq&2 zTjaW+PLUX~Kcag^G~4GgcLo=K9O>`%DE6rzlcp$mxdhaV^yRSN+|<|2sMld7k26NMFGI? zb|0Vl3q!Boz|I($h=>yQZ{oSZtOdTu=KZqf{QhSY=9arwo<^{>Ct~CnHNh$gB6zql z;~2Ns-f^NPz@;Rn%5cGeV<7IyDt0-@Afi@+z`6S&W+ErL7XzVbU-=v?SK~A2A=L(E zd`#(@NH2hjbJIUCWO>gN{6*=;*HXFSUJd44;OwgG0K4q<$#*Q=GJaI2(MGAz8elt) z*RJe)`GvUNTa(XhgJ=4v$NmXjj)js)7yJ?kk&tedl9L+Dxlb5Qtc#g8JwL8SmZd`BIfmtFwnA8Si zX$mE1@;R=)Bm)%qzMvf_#DvU>-w{o|hj*o7C!z;CW_Da3OwZiUD8AVn?N9SfOoK~_ zT|2AB>chP=b$9a@uW6QP7CNLd`BpEfpk$+XOm9hqK$KrMt)i@$SClhi{CBBAgdete zNmoW`nIvq@&#yXzR(eK>@1HE!c@i<%q%l9gt~$wzIxY;L>5h>( zkfKjTlFAyt;Zg4K(H9Fcj(KmP>;eg#f4ShB>O31$CD-F+tr8#9X+OLb-|QS&$sb1Y&h%jLm0d*W;i&{0LOAhMGH z9n(&t@+AH2Ow-u3)M~~PeAKs#RkAUDyn_e#Ts9vhNc)~!WLC@aI`oN1-pQO8Rq-OV zzGNYrJbsYkP|w(xig&5W+~ERlVZ}AGKYMkL74*{YNT;CS@`)|Imo>t%EpL{z-Q)}z zlIg4dtN#;f4pJnCWBn1aM@{KoN|NP9q<21uC|)h*Z?Et+&`jsq8$(g@B8r>6_M2Qr zva&M;>e0)msW5u1aYD$R#L42V!HCCpL;t1QM}Y{M;GZ1h)$cdFJlhFWZNX_Vb|iM4 zFEEl6vAkI>&$h%WcQ3H_CNC>Ea>$J@ihkC6 zN9+hNP|Nd^Ryy3Lbv&s^Lb%%ucP>r(bM@3Y8&H1 zEG+THh@;przZXhel?Z`<-W4R?A0Df1!^*J}ZL#dUe7y zbnz*&&Ong(t#dt~y$5=5{MCP$da>cF+V2K%?8&U)Q<1!JxD1(X5Q_6O^b>y;P)0?- z(A-??RSh-*swWBiw#2caSO|Mp593DZg1P?WOUB-|THJERy~4g7+YS{2>z8`Bj&`?C z!dbrTbn*l2k)8ZpLKWM-5&P}bK{vSBEQWQrXjk0F9@i9#q|rfn4u$JFerqFCyzCtA zOGxORkOd-E{f`;z&q?&t!;#_m!NouX*X(^?c1;?#7MRaJBPIY^o<~QJAIOSU>08y> zNHUuY`xKa{5S%mjqklJIRKU7>Ty&ci!A?@WE`Rzhq57qR!FAb7R>r=J;yG29fukx? zX=WdIVw#~{Tb=~nj^=tT0;;WN_r@R~nHzX@+95VPuV+@4aJlhus3`8ueoxQft0m-U zK#e=gYu#XC3qI_?9!XC1{dRiyg*RPTF5!OJVIqq++Xdt8t4_j}>L2&Q;J7C`>x*9) zm?y-Hd+)5(zh7Ew2RSm5hsJ>*q*>t_x$&5$zq^%?D42aSLfP!&jJV4yyQ63GED^OV z9+3$IwfWLFdp`wu)?=RS&*T9E4?ahQI{Yl(>UxTqucSXc#<_()(d2VoWO0y@#a0^w z1CVZAh(XD>Y;p7M1Ov~FX8pAHiabhB$pclKrW$be+Kvd!QBce1F@h-&dBd5`h~nUK zaRb8@V6M7-{1QbuaXSWV{ryyFAxC6WmX*ReCU})2%kRU#Se_9(U~z9A$!g&HnC>~O z=3?|;)Wgl+ySm`o5>g-`Mn>$rBb;DIL}V8#PG#4vchheHeFl2QYp3c9ErkYp*W!t9 zH7tXpc1wlc z-qIDg0z#HUTXDZ?zNe_1fRJhVuj57dv+I9eF2BZd|0lTM)T9BgED}ZvQggCn7W)Y4 z*`Topi<4jHMwx!p-L(&(v7Re4d7L4B{Km<4z~4Bs6*OF_ytq@Onw_)DSpT^Qs1&4? zg;bpR%yn$tCSJbFH6Z+;Hn=J1?v|V&ew@gxwb^x+h06*NwvVx%XugwJr2J_AL(TBe zF)^VTYy08vnM>Cb>XD-#&9r~VHVVoS5-x;yVXx$<>-FxYseyo$bujGWjZ~G9ucyfb z1uJQPxNsHU84xPhYcA&Qe1I<@)g6+K3*~Kr9v=KY4~eaIYr<{f$gwKpkR#*9j((-Z z(s0G#OuTEFt*mo$KQRs?-@z}mAVMauuj@Qk8J6l*d!|4{+xT0UDvI$eg0Fm&=OS(n z9nRUWAkuRYPL2E9n@bJkg*pw0BDr46TaFZA>_PW}X>fkUqyS?YozBb$Znam4xD(~ zaZaO80tSC;#vS%vjkF+HC!_pIbxOSB2)Y*AYiJuSFN^(M)ohAmV2+V3Akv2EX;gya z%Qnz(tLny%|50BVi>F$`_Z;!XrrOMO)+y+f$);k}6yXRUXU`8w(;6(;(f6%PHZ4W8 z@4@WvLi$6+n?8PmyECaEt1cPJfrf4z!3D!UhCz3}Ou2e4BqbRd#OD(g!C@!W&`a>B zQAB6**6C89u*r?nfa~q_o5u?KQ3OlN;t?%@Z#!S7(=YZfO7<`8^y9Vg@Z#fE)8|U`h z?OoAJ)MJ{oe}_YD4!(-B%d;I2YB=D)HG^d-&b>BjqK8rtuN$B0dAXvSyMu9rT;+=6 zY%&5bey6mqGOxJtU3L;nM3+wrkx z{fcb@fmRCOACh)bz;45FUb9^=)i?Z#C&%mu@JrmZvmX1UxMB6rTWBY;9;v;D-&N<8$M3&#eC(T68^z5ga8*ypm1>fn7S9e(2l0XLUpUvw{dw`4N zVMJnf)q7V28r~6lwM>Rgzy5alCa98Ggj0+9rmA?IXYh?W9{-P(2_e zoicAyle;6@jZYyZ0)Hl=!^1>0amiZJ9cmespG*JNSiwD_(&Ylw>bR@1*aRb1!*~|9 zyy#>YU%;rR2zZ*IS>8Djlw^YHbQQ6nxF0iMpxq|Hh6N#%#F-f!| zj=fhQhh&b1U*JFOplH^0EpMIoD(Rrq%@EA=DZ zgM)=^C(oAZrCW90sy5}ulLx*Z41tK`)Is6VhAiNn4fOX)2}jC3h0I5tFOAQdsAI?ZDj-jLOw!{LRYYRr!`O#> z*j7<>k@~thk8VN@HVK{(n>q8@_rGNAOXUal zW+KJX?T`tWT7Feycn#homZnJAJUugmLVx4+UJ?K-z0<0$R2 z7w^v-i-pQ9v0P;L3`r12qJ#?W zMp5m@NvtsmuN)TiOnoC*uzOtO%2mi7rZCP#ixWB*D^!sTGaGMR`l5$xDR=!^uU&WR z(A1xX)cEs2^=lFAxwLMQCzz#p+a6%BqGTEt7$*U~s zo4Jmov>Ei*gp6jf@saSsjl%#y*9QIA8m@fflkjbk2_eellh`gTJ-^*pM(Bu5%tw9Ln5w7E~Y zO;;sb_MO{59OynLp6X4sqF|i=<(FQ)=MNU%o-EHqmJ z=y_`M3#)nn!MPTV#7OP6_D4p~|1{J1I!y}x86OGEJcxtqjeH~oKwv@)9HJ+FEsu|m zxqyi5bH*g@`Zs)2o1DM|+8(2mp{ZTJOH^N=cs~CMrE%UndvU1xCc$NM;APJt+EpQm zia7VGXz6#wRo_0^aazs;8dn+dL5v^3`rydwtJ`<37!nj2wQ9XwPW08R;GtRbPjRKP z_rg8uKzO#%VWykvkpEkNH>~7mLX0$z1}ek@+9^qEtgB@@n3c98@h4CvvtqjK{r)oi z?FltXrbX0WX1nYiuQ9Npsx8I+X{c|!C<|a^H{5tJaov*lQtm9L9pta-_!J!@)zK5M z2}DebyFA%#n(A)H(HL-_kkP>`N@Mr*%v79Am>HkYa}@`-c5kQ@l(_p(YrV2yn^)X? z?c}lh6u^LmNYWXugyiFT-Zb!(x7+WT3WC#FPJ5t$9DM%fyB;cv@bhqu+B)y0l3GdK zUojMW&Q%Z#XCz*n*9AA91e;?YfflTnrg)#>YE0#($a%c)3k0N0wsS?hcq_StV2Ul1 zGTQ(;s&!qJYjQpjmoM^S|XGa5h{`%2i3 zOd+t*Z0fDpjtA?G`qv@hll@ZqQx4kS9M!DguI*myp`#eOj6nV@%5U*A;EcyK#>bQ^ zYX&INd)xQ-SFn2ZiXz*gk_o0A!tTZ zw`&iyeU{+7v_DQx5tg6m1;#@oB}2TKMf~jj^9eI(wDY_t@3Mq&K!rde=IVAP51biU z5pt_50CSd+nRcx^q^8nD@7{^)w=Q*rjmM7~_i>L?xMbTmO4q0z#z9AviYE>SnCrNh zB5?Z}l|f@i!R}E(#p9F*T>Oe_Oz02ALGgd;amRRvginkPw>c8&ABbk3x^3~bJ5o)@ zd8f2!6E(-kEY5u)i}SXy4N|BJPr6QtcWfT{_@^5752ffzhx@mT$(?s4SuM@gNdeZ6 zR_KNw1u6Ug#0+#5vyr8T=IscRIb`1{8jST0sS_FEC6H_6C+`n0duIU)t-G`O_O&hX zxjf5C!@&*TX7RB@L;>!wEqVQK)TSl6`mvOSwToaPQ2EHW{GQij0yaud%?Z7WFpS<$ zlpat~o(U>I%aHVY3USZZ*lTr`CIpeVg0DD{WrS=lbyz_pm7%i>2r$xuFuA~5B0i>060 z^)=YG{WgQ-$RV7#tWXuLwgpRoi#>yCU&_^>krPSRUB-L6;c%!$U6}94=O>n>aRUFU-Wh-{Ipk;YWM=6y=2W=jQFlvjIkuen>reW*;R~=iol2tg>t) zjJRn)>sN3@f;^sWdueUqj5w!3UyHb55)iT2;;REVEosLo5a^smiIX_v zK9TjUaQw`}trXI(uWH{|k9_Z+syJH$F7bcA#Z?ph7Yt?k(8er5^4gr=Dby(5V4{Oc z&Xf~(=eFuN2DStXr|0Rd-AVjZ#g{Sk9ozZ36wB8z+zhSVrf+wkfF6;d`swAliZrwy zd=Qbto7lTgXS&s~vy!gS8a|(5i>=C`5^ep|+PbGyuWLb&6zoV3bWjd-ct>rc^OXp= zMlZ0pAg&p>Q2mCEvG@38LqH>%nh} zBFh93TR6abK<;;(Ns1F7<}T12!a0usQD1a!+9-oEIUGUpOq!3c&6}q1tW8QN7sJy{ z)pOfBlv}5T;s}%(t#lgh-t#vvAG%-rT$OE?cJ7^bOm*(ZBZJE;*H@RbXLU=On&-Fc z%`+WV;!v$qW&2W(!wbM7z3T^~k`cF`H&z6++aBG znAE-y*_W#I$~2H(*JebqeJhn;mVJd7HThn?TfN3yZ2RBPcLmWL0NB-7#1c@;6OwEe zYkmt}I}a z7Q;fUx`6pUOKZMe$oy_dK})rztH;4L&US|{dXvU8hD7X3K9~x&x+P#pEtmt?Z;<%u zQk$y;QqFdea>Ff&%#eYgP^aBpy=R@-L3&OlnlVOfKq@^C5PM$Ywn2`Ny9J-vFzKgh zEv^g5HxltxpMlOpi{s{`fDBTA+%==m)k>^gy(E&N>td`tv_abedhvNpZNIPRy8D(* zHo*#Ts7oePYS)>36;_8gF+{RYtMmD<>6|!r$T{ML`Sm^;fD0_E47-F*moJOtN$T!t zIT=;kN$k`_8u_iKl`q`Y?&+GQ*bq9ur)&OhcIRAJej!lyK?>kGOiS1(k#1PKO#0SO zF{yZ^m^ETSQ|lEXIFH3EUjbSjZzUtU8$9`?4B1^vjE4oXzu_B+f7*d~1pxhLIsjwl zPFa6u1$%xFKIx&2!Bc)m&6c_E@G{tGl7iHdpwxxpLTG9F_>?Yo^+=^Oe#fD)Wg15| z>}Rwbin)~enX+ROM!p@vH)=Dbn&1g?v%;MOLU?uVMSh^JeVP5R_G>95E}4qbrlz>w zDs?3{*4TCNiokYCYUnzfOr%{0)k+lENvu3dDJa*%blW;Digk0#b=)lKb&4}$xxkrO zoY#M7sDpJ9qdBI{A8)w8A^U^HBq}2d>TE^iWxey_(KO?QE8#2K0)WGx<*%1-5aF43 zKY)ODZC$DaSxr{31-5w1>U!}*>@OP^iGn4z8hU_xMu^SZ6&VuqHbf&d=(AXo-$g3~ zf#;{l1$x%^pDIPVV~u6gRCR+r6ApQO#iaxBl+woxWj1R)M?kHY2@PPMonq-W%NR#~ zWtxp0FeCp+1cvOT9g1t+UPZLEP5bu__^i1#EA#2S9P?`>j*Un^hRb=i#dqOe3FD_T z(U=uRp3s0a)|;_0>S1K<=&tTpO9qpYZ|X}2?ILfWMe0+Fczus~S)*`HJRUoWXBK0t z+<#-{l*InYPnoLYx1|Q=ho@Kfz97bB$9~uV;-i^fQZqDNO?-Qj=e`{Ca-9Hz8$L|^ z#qv1eV*>K7A70H;u4}5Sa9_WWY$_?fQ*}#Z{)g^7xAtceoV}K+d9eE9^}zKvVo&D; zng%8hX++YRGY{nP{!HAvE{}mwbfc@5)3kX@9gwvJNaY{^rX!BzB7DaT^*O5O9|R!{ zF3T=J8Ae{j`QbMLmuX2hZ#63zr>w%xNSQ_E^vt4nzf^eb4?&)9`l)3LS-dZz_;Y8c zSls2ESuQxKoU)iT@f662Gdt5;=E&R%RPd!<`r4_Lq8cRV>gw+%^GJ+rqZk`j@n^fd zbnkx5ce7c(hB)6@(Rr5_7a2zn2afOb>AByRo760)6p`%gKbIF%5~Vd}JJUZx_A`Q1 z>mJf-Mvs@Hz8&b*GYdZ@wGMo&2>Jn@j5THoNt>fU-Bm~Y65n7lh7WV!k1oLEuwwtL z!z#?p%hTSNi;9GZwP4q*G2s(BLIBqv-wbBC9ytEkxw9DuSPi2NdyOJ*8v0+~1r^=C zELCaa8TIvd1L%xrEEDl@R*~!{Z+3D)B2lHCj^)|;^=9a)*{@Oq`T1Wgb2Z+~{94-A z8iG{yqgMzE`E{(kj%01v->ROh^}k9$xh#SFY?N?KZQRnpFtRfqU{Io3Q;{Ac0s&m^ zvA3QkTs0d7;MoH>ST=O#&yP`|BAue;WTiJrPj78Hjebr)lA)HtsUCYY1E;cd#p{m> zr^+LA!f%b-r$6Cfo4N0|J4C5|ilGk;e6QBFbINvBjYHudh>H-EQ+{c`clb1`7TIOr%&8Z%YUG~J)| zsTFv&!HhE`4w97J_eAo=4um^LS&@r=ACJXtx`Lg1aqyjfLr-~HKKZQqW>a78c&MPr zf53{EV|ThMG8^RUUQqBL+9-uqkkPrhP5w3-yE|YP&ckG)HI-t`J3jN{3xDVBvidBm zWMWqTr3QX18gD#oU)*IM+#}xqXdq(~zUk$dEi zJpnK7;>P(G{s$Z3nK~0J8_z~91D2J63w=z>mkR+pt;<#lEH`+;zDT{xan&j(T`@}* z6^M7>k{hEU1(_#Pj*UqLx=2}++qc_92~M_8`n>sP{f{rUIDIKq zZD(CX(u`$w-63$NEB!tYgVM?K~K{R>{GDWFX>L zZ|#>lOme3DLjTcH!$E%&^QJg(VOrd$At`!jMM~~2msyfkc3rycjCYIS&b$l_iLD%} z*RgJ66rf{u&}_W+d#Xlg%lBibqp~l`Uu|K}P7Xt)idlJE^;M{&T1V23lEr>g|Ivh( ztNx{C=YZ0vu=nh=6Ikh3i4V6otC-tw=)U+eb0+`5D}Bb<+_bR}gH4Cc?Gg7S|!GPr$>)JrgYO}&q`ZTyf z@Bbj#OSjWBlIbkSK1PW^T=(H5kmxIhChKP_2EV%=B8BBh9SBkqB1dDiNq0ECdFzpP zO|4S8=uNso7H(vP@nJn%M1KJ-E;R)5J|SoA&$%jTy{R6#@5@};DfZ<&Y0YBU3~mPC zMy@q^GK0p`Lvv?j4#V*a_MATD9V)xM|PW;e8RhZh5M#r%2%uDtIw#4h?03s+N zs_Yp_=ZP~31IIvAS^AUd5Nqz<;qaUwf~8` z1Tpa%tdjfh===vWfhu0VkFA>Wfi(!_Yu0|+>f~LC*WmGf-e%1iA6-z|JYzv2a(4ZG zWgz>K#B@Z`DFb|v=QZvcE;+k1M7VcHH(=%QUEeV2=21@ttdVvuyXuXM98-wN+}lKp zOxlT6Wc6Q1?ErV=sXJ!lNg40o7w?f6tXze-I}XdgF9-=MON&?Kw>1WJIV9Gei7EDZ zsh>6oUlaDLxIy8v_X~5u*&2(^4@<`g4U5zb4pN*)?r+IPm8o4YT1=$%sEXd0*?ni;?1N@Z0rY$`w+)oO0UrN;u}*Mr zYNjRA`TfY^-JREk78SIB?;pNx7XzGLK9z0}?Sba`iCha8&Vr28qWQDKG-hud-Wu{I za=O2o%JDpY^3~(m;N$s-pN=gbK^tkfLaU}Ti;E((KHa0gcyKb@Q`Ze;p;b*MnaDDfae`g>#|P$t?YRQf@+yQkE>m<2s7v>yNZw2%S`1B)*Sh# zs*-*l;A<5|nOy!ERTsoMbOkC-hUv=WL)4JrG8x%$6}_MQFBmzx9aJY@w;g>%Yam4 zg;RJ<>e8%o>-!JCXnhldHzz+{#-6*14~5#B&*yY;(*5a-SAOo2-e(T3tyeTiHvkLRL;lvkh0Bi}!l)bhB8qCHx` zor)BOZ9}KCPpaXpg>!8+YFYhi*r=bf;{w=mM?A{Z_sZxLna+QlpHEJ9LBgZ(;xEfA z4iDqr!dn8j^fD{tXes8E9!cZ;r6FRdCmg}{yE)Hf0KddVL4G%`4^ZNZlfdVCc=3c) zA8X!L(hI|56P~ATUuH>gtG|(3)GU-LSh5m!6IfMFQqS7r2KUxZl~-OQHBkQgf8GqG`YA4gvaX>VD`SNjsK67(% zZ9KaR{3KXVjHiYX_o|7(yR=3eZXRp?ds;gj^9VCu9F8?ucGvfwN= z82MRO3Y%)Hj(C!h+KV1(^-Bif*kG-Rx8D-GzuH}Y3Ajfw8bWOs;gyxONn*^6VSG)a z1Y#+c-LRf6FJluTqq1(b#Ap8X_$L9qa-y61OQNPbZ!JVg<##>POGped8Gm5DM(CGc zL`DR*8?`S_i($3kz}O?2STLiD3F`}?5FTq$hARrQ*(2iB%(7Wd{hxL??L@INuN_2c zE*M`@=!(0xZJ7TJz6lJCT8`bTd#_TCA}^IG-^2}*?Etk1s02t*jlzYM&Jxi(i)^sK zxe=uS3KA;58QT^H(({bz92y|B2( zJ#)2kI(_4(ITD*1!*Q~1ojrGtni~!gUH3{t ziH2up@jO1aSnZ@7)@H21>S)G#5H>sK&_R~xQYhS5K0ISujA7}BvA*ZYXK}s?l=P38 z3iy%NhsMAzcpX;yJEM(J5QVCog4gv$+~X`9yAuNFhbZd6zHs*&XT#PHj+cqp4g-L(vpnPme7J$^^O!YeHL1Uv@j;2nQ56f5 z%P=l`$1ho2zH>Y%$)T3%X%9lDS61i*?%USZwp?f!-rSQyrOg?PSv4A5@pSGquDjXK-7%)3hDb&5D?} z{-M(wkDVtT{cyQ-ku^9MY@VFLf31I^2BkCp!3oa97rh){HmOW?wzVxHNh4bW5x~`% znWA?#U4w04`Jf`5j45qy0TgJ8<^)5qHz}j}k*e~rN0?nRW3RfUF{!Oi|J%oBvmds= zX{?F+uIJd3ib2SWSR52cp24x#V6!-Ze`r>#-98iVNdZnah4E&3J3d{RqvE0Io(pWpWe!|TL0%(542#04ElalSc~$aYgivu-+M`0JQnny?6-~^WaNs3_*qt&K`c*?l_p<81>tHNT*9< zGbj_FAo@4fNwggK+8Zam)Q7gYP1p616pa|dUoHXmM#jrudAZP49?lUw(#Y(|Qz zOH*+;xp=q}dQmEo?%}O-pU$RaPBAwsoN1mYW)CrOgKX(Aib`b`W%jOdwl56ML(1P* z2lOg*)>Ph6q}+ene7?eqhvv!@5*PE8D9A`hEL)esuIZ}Z-GCu3lllvDQlC*z9leyV zKMB?s-;sYx`Cv0Xr{e}@}ibPt~fq{?r+3kH9@Spdh`1$2FRm6J`p$X?ov5vjWM-Q%yx<^NYr|0e8k zQZ$4Sre}_cD|Z3I>Y&@bd4%xjgnJ zc)wNjb?aHdBcYU;s^=Yx(fgDvi$9^C-)351C4i=Ot)5eTAws!9SKs?e;#%SLF1}(@ zGs2vJj!{ucmgNmUYI$gFYz#cs>LTKbamFT!1uVCV8<)2zQW9rGs9EKQIGPwUX$a_IJnpAt(X>=) z`1`0fdvR{|3a6L~fSIQfQ_wuTU4<9UCcj5WQs=0KyQmD}Jm2oTVUtcI9h4zCD5bJ( zbfKe%Ko;scY{Gy*gwc~4%4-v+J!k?BOBp2C zG4lBoNI)C2t6!vXp)&h+B|2Re8aD8hD^SKAUqzJ35i1sNIb+|9KdB_y3tNdg<~;4E zOG+#Z3aiZcgF_c}R$9uPP3*j4CN;XDcf)S&z2xBIa;a)sP+qfHl5~h*rnj?|hT3)1 zq*n)vu^`;Yj28lKFgSaoVH*g((-MZf37*YAMAzL3BoOkeW)ao|j?5~s5lxI$~n?u)*MLi*D}Qvz2aN*(^eFJkV~4QYQHws;##GJn2q ze%X!u&7626sEZ5L!=M8B=l4C^xpPQr!%{wvBy-ym)BTrDDw9<`_Z@?1E2iM<>Hi$2 z1NPtQk4jeYU!7~y_%#pn=<^(wM+(iyhoXJhcAAvYB7bd(op{&JuX}nlMs&?!KG}D3 zM1ubv$YT^x@+(;qQsMtf4E^M#XrfS>4Fg>4@*ldfGe5fc)bP3D|4bZlHCb^?AN{`1 z?xqc{DLT?iG$7l;Gwm@jpcNJ&zOTPT<39$S8@tI{hTUg@8nKjXn-0yeWkfd(BwqJ2 zS|R9=-CYP7n^xrjerVpc+1QVt0ZKVG6bK9Pzf-5Wpg*$iV*47?Ajx6t;(uoBY7z0z zdCgHr7Qc>4`8Z#p6Ms$?{Kz?$-zGd0Q#MD#cc=`?cJrs+kc zw5z$#F)V_U^DwWqGS>@;=MpTKmcE;w{9}$RWm8DrnHs&1wVe~lmm>ckC(i7c(7!vK zT>A(R`90A|0uDsj&YmRwvU=|`AqLt{Z8Q5N|t%RBwIH{-y(86ryr=n7aMR zFc29*(FJ(1-m=a3^vq1ArKKmMe(M*>?Za%a!3qLSY`IWJ{`nmHI&Y+@UiB`jfWh() z5B-E@O^?Fc9mP}nfx5KM#04^Zt(`{OJMYeb`NZXY4B|-|T0LT}jsot?fXb)4zIU)- zIJjE#*LbYFoP_J0`6f}bsP2Rc)o#GGO7O?)7r4~E3uVx)qPM)HW#L>hy`2%VBVcEF zqJAO!5wk^HMlZ8*S#pvECE_^qBKJai;0DLA+L{;nlcv!2HV2pX=8hk6%^NFvsBzAN z7d(*~S*J&w0r8-aL}ATE*22F{;66@aU)w4mZXOR_48W^q!V++azqE|iH$PM`Ukqsp zSj>>|or(%|89O8n*l^)zTi;b#E;q%guf(&jET!!n(dPJz!+nChr4;~}h52^p{$NR# z#nps!mxGx1qdn0rZ5ZIVophSO2r@gE5otax9*a^>vATZ=kFsBpoW6Y#T45k1+33u@ zgrLKUyHiK~-x&($<;hi=78&2bbL{sE z9cmXFAv)eNVD8F2>(3v3`UQn!ATIp|qh;(y4PZ7e%ux<9{;*%r- zB@g~?m%qdPA45hz+)iaG$$6m43}AsuAWN&d_cd}Ks}8<@{^((@_Q#(Jjwaj7a^pyl zOOo`Grd_vfAP!%$c_+BqiB>zynZj--YkgmIO9;iA{V0<#ob@W+WfX~J1H0cmwR{iF zkpo~Xmub?P`j}mQ?{>wdv$=?~-F@DB4&-2kdu8T|s`{FIXZU#Y7doK?T1I ze_dS?`TgPPJr9|WIW^i>ogE0EL#s+{z(!n@JCwtvCfzd=6E-Zfvdg;5T5ZY7hJdU& zr(F4sQMFe(p7vqK24-G*`#gRRjgy)Vz=rgEA`4uSu2KnnT?%<`T2uU#OytH?l4VR( z3gEKcpDGr*z7IEIW=P5LXi%EZq*MYi;|2^@ItTxemBNbtMkZ#$c%W_6M*;e&Oj5rw zMl9n@kd%)53>hwf7=WD4%h)=?>#EpPFLA2v*e7&k8E7HI;3FnC!{riY<=4|SVU(1v zPTv8E*TeGH-F|m+&Wobn^C(yD)1i<;JM2r7Tw~n1br6i(n zO@4Gfj0`)4^dQZWE|h~>VP^+_hzjHtmfMI>CDg0*1lc)l7Umz1@BD>!q+iUOW)nKg z(9*D_yFxDi?b-O)kv*4GP-J-PhA}0DlC2tKiN1Z}`mi4%@aNt^`N6AI71b}?oK-D- zGy^^*cM2lpJuF_3e7LTQC!mfNDLaFu37Ytksvj6(8Y0Zl_Vd8C| z#y~g5Zaf=q{)I z>5BbOQvO)J738M;%Oo1JbNcmD`-q{I<*>IO?1}{uM$iF7oDol;w)6c~W zburAUA*mmM^XRt==|5jva2o#PfGqElATvA zRKgeitn$CguXSA80^pYJO_KBTs=<#-wNu`WaFWQSv4KeW(lQ;rty;)aU6O>=44K_vQm2EKew z6T+8j<*U{%H!zA7WvKquG$ZT9?fX&&52Qc?Q^S5+zAu(whxr*?SFVBUCD!RPis*2O zn8)f(Giea+rY-BVBPbmRv*WQM2p0Z8D=tAdBQthdCp@hNhlr#GTEZWborMW}yk6X~ zzs)|ss$dDnm9`|~x`-m9Eby6KoK_o1jpEpqPOXqHW40n7a~8J>Lb@owx_^(>Kf1n$ zgq>zBrq&VGjA~>3IX+@It+CiB4+8Uc{EWED-Sc^>zVHOXitrSXbvtXWT-SH|_v4NC ziB|FVAI?KpOWCZv`SyE~fpZ4UHb>&~s|V;JZxg2Y4{!gNEv_W?uhc+l;c6rdA_$CrTab=&PV~GH`G0i%byU;;`^S$HqNIQ*DWcLP z2ntG#78D$)NSATiGl#uQTO2>d9UDBgtFxKDsdVkLE{JwvD_uqE5 z=h@>t;)?tAxNePeKc881(Vz9wg{!UKIRXWlt!BozpE|9DSodlIPPhPQWhP&y*3b6S z%a0V}oS-0V>k^hYhypFZ=dpWSS@ZCD@E%h}D`y9O7G`F1^vBr#*K;`jQbu4=;BqTq z;8pz?rAw@QtU@N}s@-?HnoE2L3TlbR+qNiaMWh*?t!>dOlDGP=+ctDZGUF0thiv*YkhFmH;`**4PV* z(;RbcBG?3CV0DCnDmCBclYuI0(ziIvh0)jUZ@$Q5mMlr#tU*)Wc&DX$!Z;W9+$8Hb z``+c8ANb3FD_z$e{H-oL@9@0*Rj@;fyd42|ZpIHBSnrdzF?TSKwdX^~u#jX z;2`wR0O=3q;n!NWWQ1cXyrnCz(>}6TWzWbcR@*TjY&Q+U9Fv1iZ2#b5>y_QqAjLyd zULCm(#9rR`(_153K%(ais`Mzz4=mZUA}Y!xFnPk~{-GP~MRxS30IKWf@d>b2l{6(< zhYHxlCyCq*sX@cVa1a0Gr~gq)@~TCzDx~HWG>)AX1Qk1~a0@Ap7FZ@0$>%a;vxvwt z%D$APG(;Cp63L}^*_{wfOLL}RFK%p;rDLlvR}Bg4_prBiU8U_xa~?fs@x<7s{J)TT z@pX|B(|1oBYYaL|-n`;--hd~?^bO2UpDz0uZcT-MuufQepZ}xs#1MVjlM2eoB9=xo z{9X`^1$LCif}~by+2_g0tovMv@Ya`g7U8z{FLR%~bv#W-i%9uH%bA+C{wIe0ES1#P2Nr)n-RD>At{K7B0y6f(C#Yd_53S(!ii@MY8;7Gucc zqHj4_p6f{9c%VrV?*4Gy+|-(VanwLpJ;0)Z`S{nYvd4Jktl0zMRgRaQ&H4hDt+}$F z&Sp7_WGbwxiWPJnYisd7`eujPwN;wPt;-27`~E+0%PNKKQhQU`-2GYeldznP^|+`* zgGN>dk};(<`LGbpn@8Sb?{|IJ#y|APQ?F21JV=xO7(9E%H+}jqgt2O5ToQ2$q>q|nJ?JNen6_x8$`ebbYzDoCUH0plQ8^SSsYxN9*GX}cMBcN0ZpZo2vnP+Y zetUOVHUHMCbsLOxo65j9dA+h%Ws74HCVmQT`Xt%9)mcJBy((kS$&-KjBj3_0hQ7-! zH{I6tR(i1QZLoNTRYvgu6_gMog>*~DwZ}c zi|i|PU;7k=FWx&whT*bQ`67bWnQ?@lI^{8mNhMD>WNW^by{2J&!tZr<8DG-bCB=rl zp0{gozU^>hdhs6Q*Fr1KVhzv)4#a{QJ*A;~TsMBl#6ng#nms@FijJJVY=FvN=!*OM ze1W^t-8=d0J`4)xP>enmAF%rD94O+qYr7+`SlOpy>}t=4kgcttNoFZ1JFcwL8pGW* z^Ws=_Cj4efH&v1L`O4Wq!DPmw63q6YGZ<+MxnhE4YuM0TaN(nB^>GUPmH)Eo3iV;+ zJ@9x&YaAhqa)Ydp!}P&SDW&a_h2AyUn$FN6esi6?)zBXvt2tHS7Blb=t=?ZBA6{E**d3h6tQJ6s^(xSze*#i*g8+|pG0CO*c+=`F(anm=(lvMye0sCjb2)orIn z@iu(*|ZT3HT-N%=q*l|<@c^CVxcBK6{0eD@$ z>h9dtIwiiT4?AKgP!ERyMVllRg`@eLv*e1-l z)6xvD^3Q~cdkc(PThjl2(zME;R}*Dl@$N5uf-8h8*xlpURWGd;&s_yoiHnQLt^v?f zwWhoK2hZt=Iz$je3=*y(ILlbP-uy%?Zxz4Q3-gITB1~`DKe{CM<^z+qn51}*F1xeO z%I%9i**9MgiE--vO1&|SdtkZR-&c7QTY1d9`Z>H^g{wwHQBlyhBx+7h=zj}Ol-p2( z;>$SLXCy`C_up_=LH^L+zd$*#^`h11MAI0wn~pEEL=+q4R@if_ml|Yw*o8NG#T5oW zSpJB1p0=wMbYEBMoY4QlwsL`?s_*kVaL{XB_mgRn*rdz(qvlx<m7Qjg>ty zi2lVQXRba4jfOj>FhlLucwRS9yu?q&COZ_+=gzciv;n0wuS>*V;y=oV&t>agMrH$9 zzfWUD8)+Xs9oZ({#SL8$0?>2ExV*n#*+q9ZC2{=S3MQLAPS}7{>nDq)_w~}J%jp*3A8W_R~3X&p79r|1pvY4zfV>)Nnbff;}}qCb8qXxXvbFf(giqE+8Bh3M3`Zq*v)eJV$K)3LxoHWm^x6N9t8wX;ha~9QY4m#?G}qsOD}Z={u2Om$3Kg3Ia!iq8(hh`> zi%D2-6qFcan2U9LCX+y1QbRVle$l%mZpVi(^7xNyLNVnOm}d*v?NtzJ{E;*UP9Ux8 zlLbu0rIW+s1uLExsl4}}0TK7s+n3skuDw8tG=$8gDm7oB?g0k&cptojRjX(Q)~h#k z{?UaP`V_~bt0{t&tN(_xbVASsUMAxP#(dB;e0x`~SiX`*SAp$C+SG>+tIg3Kvk_Ms z4w0mu2+DVezt@wXtId_RYGD7Fa+o__?2A#}w-LL5`qVsV898Z*zRcQ; zo#9-}Z;zYbp!Qd}zG?q}b=dCY;!|G)U1f@E}{OHrLRyW+YM6`Z78=-Fn=@a_v|x^~v|1)uA#vqKlS zCAUt36Z^05VZTYqWEnr<&rZ_+eV04WAtG*4dnUdv+z?TJ8@|3x_t{bTowZ)TbQUWU zor*R}iIdT_5vjRrZzIXQjIriZzck{X+{KmAg>(1JLt%jwI#h4qnsRZHK8 zOAqhs4(a~6`<9i_@1b$!@Z8TKADNhYFji)J8kOR2QM9N>SHOQ$zLEHpTCbkC6t-9$ zfjHJ}1Y|tl${>ISHj0fA5wbUL3@JW1R|MizoksL6YB{sxMVq)V?8r+ywx`Cp8Bx16 zTK0cHE(?EENgmI zLhG5*Fd~vxVJ-KZd!&iUw$n@csm&C~%5uLI0&YG~`v|-hKF^Kq=wWR>xHYIHfE!)6 z7hwfQ)_$yJa1}QsS4V_5&A=|?sX4S;;kElv9etEL1VKK+^F~6Cqu_%ccUA}O3i*M?~WSw?pyvo;*5Z_er$Z$q~DkQcV5pRH%gj@D7_^4 zLFMBk2kD36TI&VAb@zc~vRwGvX{%{oX%}55XGel-Wg*YjMjveExWht)S-%6ssY5if z00l|P`qoZ#FVlm&C{d&%3H;x5QBpLAPk*os>8=|zF-}Z}jeOnlyM0q^6-a8Hip*#v z*rpdZ{J!9|kqd{n5$a{E_P@2Ql*dRDj0cHTVknMm=eBbQlFPr_R2pbPX^JLLda2|w z-eWC0-8paRHjr3(kg-6!bec3MZ-?t`#>SM!`r_0I@Tkd9y70Z)>N+@NXw8bMDHAYeB(cTya>au4z|P21EcS&VE?6! zkmzJ*-MKDS5R$Z!fO3m_e#37h!eN=!5wN{?SSB zYx@0ZF0a49c|2?Fw6l~9^c3F+Mstz-St+U%+xzBTQ!Y!DbuRe5MT@gFk(%}LWNg-| zz;R6-t9wvHWxouhU$#Sa%c^5!x>g2p?zOUUGFSny-L~&fc-|{*G_$c|0&r;%>A~SP zw9k;L9Rt%yVfbOUv10ZKoB+$-zmy&bI72y(l52u2f=-X#rE@`UGYY-G1wYi`>z!fr zg`ha#F8<3VAHFDHF9JSk=Hfh-ZV_ph&Ri)2w?n}S-POB_%5mFd(&~^v7narV*uvt$eS1c{=CS^b~MMIvz4#Nj&$usB;OsVY~ zCpO)~lcRLV!Sjp^;wHvA0R?q*MUY=$|LCq?fOc_xuG%ywncO(%+}>;eg3lV8_h$s! zR93O+Bv=RH_qj6w&|^MOEG1)_H8==QB~Vu|*^5TRwF-2fHNWOlOJ}v&C-W#z8u}iX zYWWGiB=sj-bv5{JD?(#tW{>h!g03BlelsQqpWTJ_kHgvtn*xDn$8{J#v*MG+BrwuPT5QYbdP^8orUy3u~ z&=<86Z%g`)u)g6J{*8mQ(uX-J3S9TK%ssH#?^tO~SC%1fuk$oqUZwrq7V=j5Kx$@o zdppf-Fb#nXU5As_kcJ%r{`-#>$9~ObD*|3)Q838H@g=~C;UFJ`l%0`H-mgsuZnC^? zwOMc3G{bMpS28Py#3Ub80?bUI#%(QzOF=6tLcG&CCmTNj6 zpThi(_&Ii3ELZNP70>zU&o9oJlWQAAlvHgIy}#0@moJT0>}7s+x$f{ek6)E(`CXDM zogvr5F?N2DGwrFpvvt~f{Y;TV)Mn$`BUGpo4l``THr^+=s**Y*t4cHY4S+Bx9Dz2mo@Kh zXHT*o2k@h|*Ypccl_5}Xi+_C--n0L|4-FmYCLchA3cvmW{T2C;>cn#q>gcvg@!|V= z+)uKAIL4TzZbgIn_*c8gJD1>u->>?{-|zN8w+YkDS26zF2LbjHU9PLU6XUxAA_x4C zjP!__Mgz~*FJF#3n_360Zw&N=%_8USh&H;jyl!YTI4`wXZ1|HhceupgTgNe(zHQV{ z>;^$YcgpJM*<>Kc9iM>@$j~zqoqNW5%MNYe5+dnmQvb4@J5M$9d8B2qD8refW}+kQ zMdl-xuI>lvUv7oWOKH5)qPgrqALXQ{r};CTk~BZRc!7hiTBt`ptXaq|#ZF&nTBJie z%Abb!66#AkLd_Y0BTiZTDK9TyYQ%%#;0p$%CDZn@mlgGIOx{yorkJ_ux;&9z>fEkJ zye^9Q?gl-}n}#Rymt@9cju$rRo+<2B3*4)Wx}5NgX7;o%~WWaUR2oZ&gquIp8vUvDII&MW@a=e#DB3` z2S$@W@?;w{tu{hurt9;oX5VP`n^AZlNBwAh%3wfXsg%qJtxH>;iCxk~)%)&F8jq-% zOIabYA)y|%#Yk26AMKE{1w!G%RUV})p$6~VG5)CRYEEM2!iE~RyYLyUTh z@iF7NW4t?)@UY^odLw;*h}ubiV_Lz7S$e%&g3>$BV@1zBiJe;4pPfo{+eE0thsrK-y~;31qAI+Y%8s&1N;)fCHq&YtArkx zu%sP-PylVz-u}+a(Cv}p!>;~J3sL3+q|&EOGeu%Dzvgv3b6wN%zBc_`j9r+9N3`l$ zf7iT7B5u-|JsGTV`QhoZXP#_Y2Fe)9mQvza^mS zmwvd5-Yu890KRr)+CJbPeta`zP~G;vs>9WVLe^N!&E2EgVC+fog?4Gr(bPX>r7+_L zNbkp~uoEAt9@x~(ns#Yza)^OC&y!aKw$_4QcG zXiM~+aP?iWFTASphyj@mJ#-^xXGWrL9cBTE z@1M-2;#pvP47SYsgSwmjt>E6}ezah@mm!n8 z*xL85ZR0ug6z$m_?@uFID@|!aL@b4SS8@3Wz$+?YlpI`{^q9X9X|DDi>zqYVNe51F9;-N9X0T)fq^_H@s6U@E=cM_~)H)o-Lbn6FnXz*Y zJ_dDw0tDKoz%~4CA_($9z{olrKUb_6#Nt2|^NW^Git3R!0}^XZMxl>EB-8@Qe-FKJ zKq^4C!rz*srU+kvmJ`_ffK8@iIQ|jD{9NF?1g6&hweGGQutRzA(={8__P@5+y}j12 zAfh0-8+{E>e8xZfy4g?i^Fr167u;mY9Cqaynr3CLXbkEUaFB6!`Wuco318DuC5Nvg zSS)AY;dC}}v~c@?12Vd3y@Rlu?CG19^MI4#327X)KwjYTSxx`Tv9!k2A6YK7b-e=z z$2ycZXm0jH@lFj;_E}cW*K?ts%gqRzJBy)Hgy--Ew-}fLF&%(@ay!IQ&GZ%ITcAQ$ zFA!wY_SX%+{R9FG5)H_WP{ja=b<+X@S!#!XnJ)xiQUo#uD(N4UklnGY3?-vS5Ez(- zr;eF_0^q^(0pcu5xnp(nDQs6WUI6>Nn7k}Qp4(IT z?6+SF8Ag8+;9)q70)1Y@uMfo;Z0tZ>a8zw@q84(l)@VysJJ<0`>Z_50sZt+ycUmW; zSdyk{fss~}QW^7!a-@e`@U{2eygA=}q%X`cyYsTVeugl6rjrsd;d;pVA}Rg~i<0(+ zi3RO+elL4Qq}Jo*^RkJ`H`fltZ`z>f{l9Fq+0pP3_v=`qS+Zkaq z{AU9zeb*QdYfLr^v9P_n+4=SxSN&PQ`*r2UI_0T1A7z_qrrtrI;fWZVjcPN^L{PNL z6TmHj6M0P$N;Bm&3BMXT+OrGB+j*(Wc*LCE(PeR_3TkZb63mH?#|TLc59)BV58L!T-l4)=D%_LrvMKnaTLAB@hOR7vp15F**d{Js zB{C~Dz3&a}ey)4R%mO1Ju85wql6SoJ>IMCR75aCEg4&zIn&ah%k4A|Y8Z5~Bql!)4 zIj$zoT7jejQJFb+^_DT8?OM%{^7NNFmoR!tr5f}s@T2si)U{BVO5?b+=s=6H#Qu%P zB${XP*^RD%!3<*As@e;?=Qfc!9;x^r!9JgE>}CYVOrPILA8b@|Hk!Q1-&wj z=r0&>G3Lh4O13!u(ve_EBfmQ5QMQF5O{Yn!Scxo(4UG3o+wXj=cw6^Hl?#BM`=hcH zn_1H;pwX;U=E3LKb$n=8PGupYNXcY%bM*QS&6caiV6+}3TYZIEclgo##BC9c_mMbh z%?ayN1&v(VG=PCCpOc@D!J{E+(9bt7Iu+tBzSD@hcz-SLYgpS}xj*cUK;yl8XRb3D z6Gr%Z!y_9kX%881q9lVmSn@s0h62%BNx5$}=A2$UJ$>!?i??cZ(JvO+9M`VseVx?Z>F$f4qT^tk&~&3xt$&^1 z@~n+&`r{*|(t*2c+-)@8R-@A$!snPx8>!UB{G8+Air$7LNspz!a%G@-)GN9`UFkiQ z+z(Z^{55`X)mWV02R|%Q$iF<3KFW(zsXCxEv=L!LWo`F^h3&8~+fs@^ND-t?1{Ec^W=S zi#2OpJ8)f-{(L{U@KdfyX{ZOU@Rg&-5q&CRU(w~dnf|=Sv-+V$_6DzFH}@<%l*c$d zOsProPY-JIctME(ygR1Ix9!?fl@l8l08QIt>4ODY=?A_U5M=E@(E7m9~)K?ZB48ZRAN-0P*6SX z3+DW;eS3U6<(}WCsi1B6JymQcU`q4On+|eStW9Z<9Qa6)WM!*zo_+Ae6Fkqi0W&3) zK!XAXO>r8ebQlx#G6;Xh8b!`ZFuya>PTpB+N^CuScWON2iW@*2c7GBeji5XPB8K>W z^@tk4h;cB@HK8juG?ahu4C(LY41sO=`!c}*l3S=#wIK8~#ZF|O#ykrj^2gtYY zNZSJ1k4`BOVy?ia5GW|ivz=6doP)1$jgW%cj%@HnGq5Uzj(y@t8#sXIM&`4nD)3+y3AIjnU-RKUQPlQfJBi~qVry@TL^|C3gG_KrTlN6u zdV+spI^ROo{vwMv%?>V_6Xq7>5`PT&;c)i_PJN4fxeq22@YrnpYr5S-jsfYQNwjW7 ze$~<00bV)Z^Q5*I;YUm`;te`RkQCkV=AHOawCU2RV*p0xux1Iv0>9}_=BZzxnD9-! zCOBk}&FT{b^Sa%HFRd3LKxUF&3f10NAP-nX2#*t*NX z{VJCZ5e7MvT3^*=*!dHbCwqGqi={jRX+94#HM|3yX9#wHyq$!YXF_|JKnaDZPD>MRj;!67PK8)YgmXwLyn*tlUWuPL+ zc$7!cJNzISkNsTJJX(QLGyqL%3Ms*TT2A%hb^R(B6dYVXP3Qo5XId_yX-5)s$bL9+ z7`o!*Zd?wG9Qey)R(cB^SUg469(;c8#M#ln4;Ltp;FN&a1w=SPX3+5mUL$U5J+n~( zq!C~|*i{aIf~6QVbStd=j!nM@g%*=P9!tCP5VvekL{;Gz59w?bz#pXYIu5dv8V^&J zuJz6Wvlj`E;v-4sYkVHVmK@V+n7r*OR4v^i+ z`s+(rfL|+g7PK?Fu#HUt^g60Jd&US5y>9gP7u3hhOA(jDps1aqxp91p%Vt8h8h!_I zWF>G2C7hx>5a4|u{Hd)hcvb)>jBH)J`hh&zXh`k@V8fA*paWcnP&2^2qcRi>>tvhf zHvCE86q-ZYgzlvjLx1NVkU2n^kVWNOn2jGP9A!(SC4ZEeg&+cpED_+`aKw8!bPbrZ zIF#@HUVUBg1O`070=}I75Wr*_CkT8|V{3aUQ=-`u7J8HG*84|3owbHQRk=Jm$(OQ2 zz8f(LcVDRZKiPJSx`i})@1F8%l=o-otO!c>-?8?mL?=>4EGaUuus|@@(Tz&K>Je0x z_0Or&R1D|msf5a%6q=R5v89N0sF#4k@yDA_PEaI|_LT5p%HIQjz1qUVG|F#e&w>m`@9C=06p z+^CDeIk9|Y)1kW1Fne<2R(qzW=DuVBMxjq@(KbH$;QGzzx$AnHbWh&xr-PScQgd(1 z;DdE@cs|5#wC8E_Y0>N%nyp1*YIqN%>>b!vZ^YE8J;gpS?R+I0llSHllLh9kIpB^p z=YkZ+4XbA>c@B>6-1V;p$_2ND);dbhv0N>C&!7LyN6n#b){5!x-#Nw}1d--DznDYr zx8!(&bju}?GF9aoW36Ke)yNrNtx6lWODme+*2Z!*uKf(vT?{p+Y01|OP-3);*$)|b zGSIKWDRofup#S!SwQcN*VNM{%2WbkZFX@(~S$h2=FIt4enMk!^G)g~qlI5?U+{>717ucLnzl=M9(P8jEN4&*-+ZPTQPuHgK!? zbfT1LiO*H_@#5f@+S(Eooj-pP9&nc2i>jkG-DF*-S-UqOQGc-^`BVBuJ?Dy0JNE9c znMt>dS9tixjHxVrA|+D4YNs(TvSpg0#Hf1u9`i^#KelV;bA;cv7Po8TrvdXhqfaW) zb1FrDU|%`&&<>}2!X~mgbG|=7Y8K9Uw$(q$T}%l@o3?%rRLMbHHh%Uxwtj#83lKm` z@0Sx~gcPBj75tzpqKK7;XjE_??LVsK`S(|Ny1KuNO3(w&Aq_Qi->KNO9E3t?uSAAm`Mos=hL}MdqN=BA75n9D9!^Xg{@MmPZI>!OP-9D ziSRUDeMXQ*{}bM}#}Slh`9*rD$IH44qevMi?0Ae zjU1C-ca$};?a~OLWT%UsDa2jTXAF2_=A@&2cJbB;=S07Lp~1I6nt##!gnYWsPj5;* zQKmP#%yRSz~!+!0L;W$pF@{hz z+dHIf)^k47(7QqxiSwuhDABSw<21+0>0()qdQHQbw5w)^7k=R&XYq<0h#W$;_TjK4 zW)#B*Lh0WlV2>*S1u9*jpeh-3+x{ui6bO?Af9Gt6Q$pwu5OhN3A}$^3jWb^%0+Gsa zT(5t}-)6+BbF#SLk{|I=G4MO+lyqpDy?B%zTc!pV<>W3#IoRSKBGK_=&$ASmJ_#nh zW?5rtwq~C~B1!-|_L0S+(48Ed>v~Y&nFD}S`VC8nj;&+Kmbg^s^3$-C8Bh94`4Hi&V~3)OAR|I=nPlb=p?y46Jh{qc} zyM3QfLz$p(n0_UQ+V?yc^GFqBNU78{qo+%U?DT@`@&yPn2X83TM1afUYpK>XLK!*X zr=rEa9U0v(7PU`dMv!9w$sT&5xbQt>7>IKLWgPfVp>ZKkDpUNI_e>CwF0=zwXr9%8jIBEV1p(Vn36pWqQ^g{(%&q_? z3OVO*_cTzD%go3&zl0&4KtWv1-?QpY>H8)R}n8Q%V~wR0Fmh89sY-amzKBZzab2 z2?UpTP)_tjUDeqV&9$h@Ghj_IRfF%$!MOdmrN?Hl4I+qHt*{{f|)TZL3i zwcHDc8-JPpO=Yg{^%_cG4l*1;#D4WG_V<|Kyi7Yu^P0vZR@#2tf;P_xzP~m*QKkR2 z1ykfUoFTT5Hoke;TfX+HzAhyRYdLy_d4_ylpCesY-ME0=ge-lPUGvP@Wv{m$Aj*Hb z(~8as^b$ya6x26;SEAYVh|Ku;e7q=8yNqtVvXx8{Y;~ z>0UG3HZJa@Jh_lIuFcTV=8rwNuz2$FZ+(R~)KV1Vt*Z_Q_gRYX_&xUeU7RK7?<#w1 z&L{DU2@KOu-cC%_J&Amc{WvG0b#pOZhOgM@8sPXh2E6})r~&CbPAXygR?6{QyyCr( z&ybl?0>3RZ|N7wX$(&X(F_j-{sd_ZmC*;NhQ>ps@#gOw&Tc#LdJLg`bxv z)=RnxQ@7TJ)n#c83#`O-_=balx|*8N*mJidD=|=?oJ)IhagEe8ypfWKG|K1m37%D$ zB|jZ?NZx{44Y z>iq=io&fk(OgQ%m$H49My+_jSrSbdF0`?8!V{4+r)O|lV1AJOYl}8;2q8fJ8mXHn+ zb;zA|ObUNUR;vKsIOzu%CVKp)B6eeagWNm70#Dl>)BfM+rBcCYW(o`1}q$*E@=kQK>mJ0*(Y87H?%t&@fe6 zzKHqB)1unC z_k|Dw5OX@z3*H(drsIOcd#}s(ZJ>tn`k$9Zgx-yq%FSqR7$ji6W*E!4#wC>8<`?FD z(e`k=j>6>;m)tHKi&kT8k(@3Xv-33Wj=T524Wc0%bci5#L^Zw!5vQRFTQXUT=OzPk zO|fBqhMu4z z>!`~&6iNCbw&%m!CoDX^^ES%F4?yrO!hAEkX5w$F(r&s`PozU)NE5go>6>r~DnFh$ zJsH7P&Xu@1RuX85OGP+i%OBX`AFv8sm7WI3;@M-G=9Zd?3qMM549Mb+%~Oky#ARP1 z3N>eLhcAIWXvdo3fTGaDR?;#0>??;QJ*-xZr4ZgvSTmfjl7NtyrB^z*0OfwKI(Ixg zsgjt-LpVRjiNaCjN=0`Nv_NK=MtTLZd2mR|!QB^XL0^I_XHUu9M5e*GFe@`fRfrLs zDmIHe$<=9Ye4nBm!~Fyjxyr7D4!FOmEXL#aPZHrt;}$0i!hD#S^= zI$5P8H~tN_4iyMh0PSz^H8QMS$7Q}9#W(3i?4=nrR_T<*?z9n4p!JJ2IZKmH?DygC z-1KKY=>}0B->!Ai!F@XFgy%3#(axbvUz@OF1-^#3u{6Y!PoY>O65N{G0Y!9yv*lyl zOocw|bq<-sZ;YcoY<>|W4ipsH-r)RUc$r!5*^K*L&o*cQ=b|1=2qa4~HvMclWL#8h zK>gc~qHC6NqxRK?1)cNxj5kZa>a@0%wbCbLTov-L13Be#6gQMA4UdRTUmPehz8!wY zPdA_}(Q7N7iue6WpZ2$6nk|(7npKfauV@8zb8bA1-uBeFJY7r1?ARD_in-*D7@OB( zs01WbBGF*mE4iLoCW31Dk;T;s%5t0#jJ?Jyb5R5IvAf>RMoailecpQg(I+Zxt)=6M z9>%0zxcf+F)eeCRC1+>rUCO$9XfGx7-A=A9VjvZ~`}@?Uo^r#ml!JXqH^AOTg(>ZF zn6q;pJr0Jusxp_zdAlOGQvSvMZdQN9NG{3XVOmj~_E|r>>b18O#fYRsd(kzItO?2YeYW05jjH}#5(v>I-$-j~^bkA88> zk+bfCLYzqL$2A_4Dj{)vZDf_nO|36p^l}*6OGBT3-h+%2RY;!1CRa6KZ41N__4e*YRBFiw;0LQmHOb z%|PCf8#wJwi=<-$jy}!u7c|=y$M?bO9|yjBDTSBkv-rJQ1icg4$H@fs{Iyrjy&RK0 zjv2lvC&Oq#H;N2({F_a5{gMACsr!lTPjus+l*`>Pkl`fmf=OTa<8nc-HR-kN#tzwN z>Be6x5!;Vt|4%`z;|K8ibY9t)?FJkbHMa_r_mi!m!J$BK~M7DgBH zPdX;}rpjc_70_RC0Q?@2iVT+c4cho+S{|zCX-$&1>>V zzC)v@q<(FNW4c7mXnewd(Xx{{+5jjhlU)8k>5~!)Ka5iud)T+*si_G?yz^FWbdi!t zwbf#a3o`D(MJ~mhWX27n9eQdb5^ikUQ?(0^Sgysz(}0pWj)xE7Q*?_|OZl868=xR! zDex)R~!6FhCp~qi_P>!*0-2#?ayJ^(%rE3p^ z(3_B7K07fT-Z=O65Ig_~CB=ZDjg3Bmmnf#f@F0$J#W@_XE&3F8q(hNBq0lzE0mNc5 z0>~@6zL{!#pp`%^v)4h3W+f9|9_ZRbD*pjfFtn zim}d#f`oHK?xGP?5?eqzLJdoG4Pc;xix-?aM|K_gLBt=ZIKTo_LX5|8?qn1d)v zEaI&4tCEIZz4z%kae|mkK>%IKMJ*0TOAI=&O{+Jc~cqU`r%yWzRD;IhXMs}lQ z=&`l4z-vI*dH<2LnY)%CApxp*ymYS}aB zo)`jUib?f;YeOQ974%IeaM;4MXi4~_F54J7y*^h z`JKr7ojI>2KR)FC2;fxWuN)_ zc^x1ef?bd2A`X%53BdRx6L6sbCpoa{#Z$&fN@rRbm>Q0$qnm~HkMmVIR*C-m zs^QZ7TetuJcEy$V7qpZ#xF|A{#yH*bDVVOkOlvm96U0WTxkyr@Du@<2btz!{r#$8v zi#`#mrN~CAs_`Fk%v@{$SGG@sfVBY8Q#V3pd|qI=M*A1d{#r5}oyL~{n_lL}l#MKt z9G&i$evPk~i7&61uE)aaQc?VFz~`O6_vYMUhr%q>0VTzP2$J&>F>7Fz`uOh*JpGDx zw+e$NLlJx;<~?O>t(o26nmGVsE;NDO^u>a}{K(oj+PCIIK9{JP?2((TMo3U?!~ z;7A5b6;~ z!B0n#1?5YfrBKn=k{VbgOdR7S`Teu|{8=YL9VLYk3Pv+%M<(@qS7tP_sXoYiQjhQQ z^42$`>Gg4+LSi7(M!Ee-SNkySx3d&}AF7ZyD&PyVp#up)0@hOeFKdFjZC~0#u?>Se z!a058U^&WN^+}qYYvaNmPCvC|PW)3|nk3>=bwWcKop$a2-m_{ZuB~&9pZR3Bux$?8 zp}ChH=!#DfYg4gr9AHk*m0!}<-8R}W(`bIUZ+ubx;*I?C5%r?uxM)%FjIe0|^T&#K z-Me!Mr2!m@E6?N(73y@%1)p7MpgX1RPBU5*v9=q@MgVd>DJ3f)ZNyEB5se>Aym7Ks zLYG(@oIRd@m2>+q;QUwTB&5plp+X?mVyia3_x3ztnO>2T^>S7cAHXFfF2T7dzUMtRZi zW5?Zkf-f8CP%6aGLS@x-^<4M-(k7|2JyKo-Pf{gwqRrzhJ~oxy)|fhcSCudWiGTcf zIp{SimA#&A^_}v8?9FWdcqZJ(1Vhd(K}Md4$?75Gv`c{6$RDF#-GYE=;nMKO(rsp4 z1zaBUb%*&qz>L-N=jCSETQaj^3DD%+&Ea&PbcS3~`oud*9G4PMH^xgTIxvtKU1d^I z=ZMn#CYW225|h|6YD|^ifGU0T)aaLl zNCXos5)SYTc(=9=6c4nADYoOmSdM;@d>;^U$b}2N0La0ch@5mEpc^OrYEuXT^bZRT z@B^|b5P>6dg?&cj2&6oXOgzZSB}~FlF^`}pf|yE)_VFFWFuL*s4TSoj)WE&tk}FOVUc(B&(W3IB;q3vDNxa2dN64)z#q|unLRU zu_3Sgry^k==)%+3sv6Z62cj?ks&Fxpg!K z4qQCaQM!`W7$OQ6ht6W^k=gLx0pdR3&#byE-(GRb9OAn3IS!?2yCt{0cR}?6^S!`tuK_I&pM$tSS@5ANelq9l5` z$=pgr9dsU`N<6eBWubmSPj`xB&KYFC%ltoNy=7QiQP;Iwpg?h`1c$b`yE`pbik9N; z?xna(Deg{ir?_izx8Uv`JV8R>q|fty*Y}=t{^v@vS9a!}V~l&P=?g!%xy}rw+u-cD z6uUnWq{#LHIb^L{r#U<~_zmCUi6uR*S82H4cWkhCJa$%PtwU@I`}Vo#wo$dbHRZPg}joPuGH-s%?3;Zz*J3(c$ogIiJO$H-X%YH)CH| z=$F35n8)6~(sHxSG`~-33K_bBGPKf&E(|hY<=*4V8r%2UF1!LPq!!xFgfPAbI$_}? zD=(Ke@r>eIR972y-!alt(N9Odeaj*9Syg>DFkS-WhJ*Hy@&1cQB4&YMD2=MyXN=+p zE`(Qh2xG2?*tkQ1^=U^($UH9cAO2T(_*wp2%OivRWFVI2Q$BW4+f>AM2n!98SQsk@k(gqjKlne4*r7~xY3eC>P1 zdjV5E8^7F`3d*Vx{CJ=&6V`i!IICZ81uOMMv4R@g70nAx{0VQd$ti|8WPFSDm6VK= zAuhY!1N5f)g+eu&&EpfuNmxnoGFd^4{-{yyMzkJsK^jNdFXFTPb?c+LlC;(jTh1NK zj_oujE})bOm78J&Hst4fIR)TJKZ<#e^-lg=NpGW6=Q|HG!0XCP-HTB^!39yed_?;r zha(bkRmsYDt~h&X-!5U>>6oDN0|(V7bK|%mi1&m#d(Hp?5oDswJ`yjSh`JK$EIHap z*=eXVs5u;x%zb<>ruPXpI1Lk4rGG7$NbnX2(=Y4nglds9JG-6&0<)`t$*v39fIcBShh#9upgbWr42S zc(Id*yZ)4VN(!qk@g=1+-&2S0byXB%m?V!fr$Pp&W?jP$??%n>-!mOgCm`Lp;^pCF zYL}=5K+|R^WM1Nzf5)h~9{-@kb`7oRl=|eSj)B2ecaQp(1rY=O zk9?K5q(Lc314x6ZF^{Y;5ReZdLq#yN%t?faC6*ZMQS(n7(xoQ93v6q)KDa~Ka8{}} zCq!>e`k=r8pF|`~x&Pay*iMxMNcLD)+D3b1dHwptQt9#53hN$67t&FEaQy~L`as}I z;VUSRxG`(^3A186{<7{(k_(`jX6KvSO z>x3yOHFf@l-|qs)x2uMCe_Ei3?eB;UQrQ7G}2Z9|kd{$Cc;h?#Zfb{jNQW=e0#jc+8UM10Di!2^On6-taqnzH9-JYPya?2^tiN zNT2R*27s3l$uQ-+rz7&`yOe<@)_%=z;@)x5pZDyx=KZ)4sM8L39f1gy7MQJ=>Nh2- zz&jsPlpGA5)b|$mZG5k9##PXLgyxf|9@meG+s||~c-OD@x{N*Z0q$OlmlqCCqaZL_ zjKeaoW=8uN5Rd#Fv-bs??|2?u_C#U5b26UdlF?Z78EOD$8l6N%cQ?5^cpi+S@BSPb zJmY7q?VW$~e8q8zW42PFi)C;{TJ*E8r}#qTJl)=>?iu^SMXb(%I@$RUP@?}leDeUj z`GbIX_su+`tkFrIOPB6~%AF!m7n|Tc&$InDu@l@KdxXBwo5s5$yWZP&uU3eXx7JP2 z@A#*gE|o_w$W4t{IMDj(v4&-2BZ{6X!dmKS^QOTs&lm3&1w{EY%a-vJWkGRBsBk=< zn_{rv8sq`VKe}gwM}gM-p4(bG?}9)=*{~i2%QKZ10sosh(6iu^#%Ad^tCZz?z2H+c z?&rI4^Kh_UCyMse;b-Kzvv5y#z#Ize2;D_!GIiHr7OnpiyzRW?skcngu$!B@%26~Y zMZq?+L$S*(2>7Ro&B zFC(g)jOD^h6m670bHX2nX22uN5`xN9a=mAqn?Dng%uqJ?6wR2nu@I^IxQBfm)-bx< zUvCM*3t_+gOfQ;=QMUu%+?8N(q6mqx%SF^-MUd$mevIrLkb>V$ovvh{SJh&ldTkP} zrf@$8)w4K=LG8o8Zx!@FjZt{SW{fVIi0?5TCRsIs5Rve>Q7udz>u=sl>aF zO0&p_7lDdGG37^Dxy{)b1|S*RyDX)*Cc7BM+Ws%Wxf6B)-fG;qyAr2AU4&oILn8S! zabAPa9A`B|JUoSiXmcEr9|y%iYFBfL$Cj58_nrc*Xg z_@QlCMC*ZNixp&84`*sG_|X8IU)c4Po)ZWjZp9VD7ozH znfF#!a0}myL^opXAU-nqiue5AhUO4EY;vhZJ!SO0*N-?f0Ael8n||q^!@OHc`R@f? zf5=>+)g%Vky^gNP|K{Jx7JLlmVR@0z_$fWa@Ut4O+BPXaQx0cGwtkaTHN328*R*JE zDv#hz+I@KAv-s!!Z}5ue`sqPe1+5wN^-|8q$DlH? z*q+{3%$+OEnMIz0eOdt=($FA#?OIV7l|KCV=r7kK{jl-%HRVGrMV{rLQO|NQt%Tj= zHIYCw3ezPP*fs#JDDqiOrx~e^Nv(};bZKlcOv)#|=k|0*{E`IadsnfLW8nh{DVhvS z>`3ku;2L=v5zWaeQS4XQQttE#H}U}@Rq}-WNMeT9XP)^^)7bRZ|G~o*O=d5X*`aBZ zwH*@ksM7I$8DNcE-oRJyr@l#KUm^P4$0cfLew z`7VKY;r;2*S!Vn4DWD8)8%3-x<4X1?Q( zN=lbne(HM36cniU>voyK-*jT zO4;NsGYDGI3{~BQfY_!r~`hM%$zRoF=l^fb=+Qc6OWHvLXHvk&@rB02`4|Ch=h+K|WMbu;@ z_eS5a0NkRDXRE9hT9smQpcZ1jk=uOG+AF!ATh)?bWqydeb~Uvn3r*S>>+;Mwt1&-*T&(Z&2}jxFLAU1{8E0#LIVKGbmDwY{(|9PL2B6>407N z?ftZXv;gC%wJ+?;YY}s1#dEAzuS|ZQVnWhqahb;~SMvfj!1s&|QBIf?c^OBx^S% zwioLzGZ#RaeQ6H#UtJs+vzK%1jaWy@eGCqKJrX<>LSNJph@>*X&p20F~J)$s^CNkSH&WB(}Vu zPC1&`v!+w0KRfXvQ))YMEKliB<$0HIZjO`mgHb{`v1$}ftG_u~8;@EVR)XjsbrZ=0 z^ouyCX?Kr*a9ek6B-k4nbuyl^J1Rf2r;9|?d!mwWj|3`+u+0+5yN)$I;LEuSETvr1 z@h{s4p4Kmb^w|H-YTa|O^Bbp}^0;9MN^fKFSh(}i_QrvEfk3jlug8V~IL?m4AHm?Y z8G;3l-Vm!y6PvW?+4ND}9P`_o(7$9`GLOF~bB8}dJTABLk3LQM$>JfKWibwbI=OIx z!}>cF-By-#X-~h_U$Q5hL2jsVnfTSM0WEP471%n>FVP_~{rca$W2Sw(Mnr$pVb7js zV`dP;s#TkY6rcy?D&(sO5m+|)vA2ij@J7a5DP61tac$1QTg&={Nk27>Q068YJDQ&2 zp093tz;h6RAZv#d_*$Sz#Vm{S+~qPcS;My(y%Nmt80!>{2@H^*tFKAb6Nf&cx3887Zs8Ln4*?z#)s?v(zDi-_7HQPxR(ns@+bD#7zOD<0OWX^hVlbt`& zmqJgxTG8ocdWWWZ(O|{RB}6) z;<_3+`ExEN8`+XVFZ4S!;b>jNpt+;Gzp+i*7IaWWAyRL`yz6S(x(&XgnM0?2-c0jy z%UtG|1K3k${36zXnRa|-I~i1>3!>e5Uu0mpm&4^tF`0OHUcG$xX?6fN$B9T_#+oe^ zz}O+j-3G9N$UTh;hWebE>Hdak^oI>5??)L$g>d|-^vCUPJe_y$(L7$S<#ecVw1I8? zg&(D9iWkFyeowv2VVr^5$E>lUpEuakEPy`do&&Zjc#o!j$1XNMwxHPj8h1S`Slvza z{*PM+z+0C9)cbhIGU_fg$>(4myztogtEsW79<9;$3nqpvt(WI(p?A{8pPbGg1*e_z zs8=r&+Ux->C%Omf8JdTSE&uS1vG%w%82f<^r zTXb5qgxHL;4Xoy0#2GX1zW3{j7p@acp>5l728U15d`YTAZ8o1Ik-ldr;4HmnZu8q* z3q3CLA&zKdCemJmW4uc-nn{GsoRATt8E1ddFLYVGB{-_L$&i&CPAQfPVV1`XFg`d( zFVW}i{tVkw3f-u~x{X8}PS#wl)OjEwvT;4NVxcMK?rY|f_GsK1 zohgpj8@Y{?Sz9UsZ6g_|F2Z($?%(wnU9{wmD9zt3e!sB79xoghX_P_xZD3Kmz|X`U z`jCnG!0{Gvuv#!M8e!R`Jed(BjpawqImzmpOIv15c1I6!FKd_a_&C*lUu`fA)TcVROp zOXZSpOZtU&v!5ome>V3=={OtTn5p>*gl_sZV+QW_<|0A934uDp9hQa zcuB}yb!?7{Uu*ptKh;ia3Ed}aXHorge-j}$q&dBcYA6c1t9gEVW#W?$oK(CBO&=e= zfr{&&sQM=gno?w__{dt&zfar75*%rMnMDqMmKDWu?Pn=rANd9E=XrHRtK(0PU>1&z z!cjxcmj)dr3Ea$YU4PXf7pt7qRdsVUt8c_D7h4V>rL0{4fPWR>ZNa><8N8NdC>fl- zdH9tsVxPwb^_$V-&&9X>(&La+$n6~y^pJ0?g^#||0j6-XZ-k9t z{{2VkhYxDj-hVy}2As%KHf55q*=|=nVz;@!U#L$QYV@A7G99ea5eZ%!_=E@Jq%!0? zIli@p`=%|ww3diS?Ta#xHTalq?xcGJ7|c#A$iTaQHU-gc`#sj$S|Ri8l!}MQT^fcO1t@ zY4-lMiHsc*+;s#V#$ee*A+5+Q0o>pAACBis2ACo&NK7*?L0=59=X{%g4&DZ#0_2Hd z+T_z(N%H13HcQN#8(cb(0hunT*AM&@jn#3DWlE^0T=S~+yk<@!r+0T!OZ+;wqw6#!a)9K`de1M(SRQssJ<~Q;#r&Bs!H~#O`c(F<-U!t4s z)_5j?g_1$Fr%F|gAe|_N=!qhLh72?z-B(>UC}_iRf^>1&h(2^pkDWtMmesHkiyg~% zvyFUYd=uKiUzOWya-}*epg5P@2R5Kp6&&$r_fVdh(FgF&!3PA%2|WRaxBXZYRg-~xth*{umWs=g_UHTC6G^||^fgd1k{|};YQh8J&*v_FB4OQ=X3Yz0i#C+7U?uF&9x*S zkbTzuW&C4Hm;LKLDnqSbgY4c47NtMtLB~a$TF6ao_%O)JRVyqufb?%dxPfC8sgq zVE~`+t9qbNHR9dRs)_@?dxYRRsT=xFlQzvogWxWGZ!|O3j?NTA;ua;n`@X zAzp3KO;OR5Nhc)>5IHu9j_1}^Jg-;I_4yK>P&rtgKb!gQCH5EsTs_LcyI!A>M~0~u zcm;SATdjlrD+-U2y^@XsdsQaY*vCadOCZNvCUA{dnKteD*N?^#7iZl)Vp z*tsFoIQ5gaUEGU<&O*LEjTQF*y7YOc!hnSg23XJY>f^{Fr#~7sR zyWd%QUKSE6jDa66tx;e1aY+~Pb;~*~cn?8PJ9o-Z#X$%BMwzoU5g0!$iaz}ln??2n z$I4bQ^P1U%8BKTN8I8=rd2|>zZ>ZYRfL2LnmtVttvXt!C(y~1ql@OC@4Sz#>uPL)B zI);>Jip6dM^6(nm-m-wNPs_78gz&!ZMn9}#u?e#YMHaHUP&C=<`X${v1A)4YK6l$Y zga>@~JFAfTYR%@g2v14POrm`^Ezk!yEY|5#j`x;vG5y*Ap4{Y#;Q+jsZkXHQxCfRe zIk;RF9EPc#%)$Qkb~zYz(fF3mjkyVX?+X*kmu~t+4dyl|Qaugv1@d{DopQ>vwPfhc zhCjTcXzUo9g+@s@8#x3UF6b73H0D&F>sf>!FUUS?s(BvOu&LU-*pFfAkJ=VS5t0w6 zP||nhJW3-}A}^y;Lq`;T?%L{AJGzP|4q_ar`{$BYWef|R}Q zo=DQ>BcC_9tI%N6C)8GG`7z-Jg-|&1|$o)>gPae99An?tsGg(s25Rtz( z^(x;z`a8ayht$l&w|Kw@snW^Y2_zf3N8L+zbbEqUH$w|ghzJ=D6tv`Ts_KR zCedsBq2W4xF&3ks9~FPF=;cW3KN5}LD6i24DR9;<3`NF?FP4@-KeNQcPFy8~rk6^G zGuSswO#M`%W!!VLv6?zREwE>K_^GJ{NfUy9ytKND)Yn)I{I{r-);@pO>uz=!KQZl! zOorBIF9*EfQs=GN4eah3@2N1-)6e>MWqiCi92UU+;Ow3MKOd}`o{u&}Q3Rs)`0QN*Rbuxl z>EjgDbJXg38{#jVnOE0=XKP(m9^ZU-pwqpCvp)-a18CTbYp?5uugO6c6xEI=UHF4N z;QYZD-7)gUUl`xsq6d$FeLlWfQLYt0U*xy)Es42BKg8T+W7I!=XN5xs$Bt$C?XQWLwuwwS70XtQ$sq9#ZZ zKe47`qXBd5$N83n^1RwGB%yd zfdK>}LBB@0kRiyc_5rmO(XIGJN^+;kb8&QuaJeREBED7?^#!pX;p{6&ee?3v@>wU2 z^1Tn$XLD2J-?uzCn*{!s)cf2p4za4jkcUQKiW_~5+qH8-7gFuFj$*>C`oClwP?J(W zTx-TR=L~~b#RAdm1viu(PBv4ZOGGn8GO3nHnZ~I9e&#aP1&ZlLU-l>S)SYt(W_MOs z)@<}5vQP1s0XF06gNy2&==!db4~RGNO1^-r!z6ot5x@aO=fEYbZMn%6JGfh2v4k)3 zTJ7QIWx}m#Qw2MZrid$svk@xHF+484M8>j}OyT7T-d%_i>y0rOy9tTbcO^V)?dL^XuuOSbqLxxSwGOIq+H3Dv1atbrSwf?RHNY_7# zA~X3C6$8|`O>0eJwgOvZT>x`uf#$*dpzSEq3UZ1S2o_%PB&u-Hd>Au_Lk4FFzdgDG${&n=1dOOhB~NOs#8E#HTX}VAO*3=hjWN*fr<(B-BI^?y+5AY+BCYh78o6OCu!Hu|4X4) z3DpCxZzWIkk3?kqd+~IVYpos<5Wux$)BGY#Q@;s<)fA}^DRJ%7##vE%NzyW`PN}&{g;=2$jO@$BrsqS`cnNpFPi2XqFkJ zQ_zoR3%^ktsZh+bs$(NT(ov59Ne@$2K?b;j(b!< znO{H_Vv4|7CYL*{R}|tYQE{prEL!MWH&k6s>C%;d06N)ubtssIsBCcjr#xT`$5nAM zfvoyb-zs|7^X8fB`4b9x%KZSiH;kk~(r11nuNFjQ|CjxS_ zp<8ev@vy4uxsyHWex`&Dnf!a_QX@@g`phAglqK$iZWs6kr?&2cFIb4>4KSajpCPZe^NZ9{iLetfoWjtOhDzjeFP4P z&f8{#MboR|2<2ldBxO!0Bou%G#9(8!oWW+Vt1IT(rBfEQdfjLRsb%?U=E=F?7)x1d z51DyS0U4viU;FaPC%BuVTPOVIc^{vZ%XG52?OBb$wuKcwDH%^`(Ua4g$&K{7c3N}N zr%D!`XUm5vdHmM7uS$4ZkpZUX1EE>uIp^+5jo}=FEQ6lRiZibBfvognihG);_e;;O zr3M#wIfniE#x=58Yll1g%8yW2_v6pHL#z+B_yq1+mb@YZ0Nl;Y(HajVa$-6(53YGv z9@|PATp*cn&2bx8@@i}N(G;)IY!R9mDy}Tr%0PpHgimw#Uweh{?%w0c&5H^gk4%ee#uH+N9~)??3(U zm@xikuzX|JeHYL72>B-#eSt9t`+vRdXb#n`?y<;;sgf+*C9#UB++%~??$;U%2k-yo zM@$18h+24q_*-!YeW_HgBW)O$^rpeT5q=CXA9#-?TrdGaGLg`ya$GYcuy?MZ&v2MG z7v88I7a&yFA{E#EiS^OW@=VKgw`k@A+sxZj2lZFsJm#0t|LNF@=XYqwZi$xk7AY-s z9|tOrO~zC@Sfx3X!Qfg%GRBR_Wwbj2^@GioOEr*vdF0XnO~xl3UeKzE4Z?-NI5TX* zZrtxpjHk-j91q6&R41)iV$9h)crFE7Jz(NH6q@!|_$DcHm8{rwjR5;^Ziz~Or)?{9 z`Shs5LBLk1xFr)yvP~oeIeFN9+~;>&tAox)b5tQ3*{8Gm!WW#rz*iz_THTgdP5k?O zaly7;X9l$~(4?BEZ}7Bre|SMk4&-DuOj7{M^EFk7-fz-o^{(Eb%1`@~^pU5y{gard zLExX~T_N_}unjBbjpqJr4p2w-AHy+qU)^73;ScR71o{unT;4m-t^BaJ)<{BvJ*F`> zoo%-i6#)Bd9EGGbbW}5Qp`n!HFctTBuJ;zgh5Vv)olRfz{9CdJqAvTGD^0v}E4)7a8K2Gv`E}V)rKj$Fy zTOK5d5P;QGUzY@VNh0gQX_mo0?86UmI6}!BrC5IIn~+~FW~JJk4BfbiBK6yGqtg#? zSOuV1)W-Z(>TbyyF#W)0`NI5N1yU||B+&9>N4Ga89q9Vo?*utL?;JCX8&w0W;DioBioVmIY( z8P@g!S>Cxc;TSGcN)b@|DEMUx%n(S$T=kLh)c_HpXRZemmNFa5;)s43B;Gv|iOBGSq!XpyHZdpJG- z6VCD1eWvdhKK^#|RsgLKuO0Bx6(2T1$uF*+L8IC*@#Lqo`M?hbSiNK znq)t!b-Uc*AQx{|eJ}xUH1f2OWpm7FiW7#<^M2jF`b#pXYA{GJEATI`QaeBTkScks z{z*@W<&c$3O*6?PZq=Y)QA`?S?hzddwXB`fPtO=<^~Z%pbY|jBveQ<+a#{hQPGCmYATGu;C)eb`)Fnp z+eNwA(>ML=M8{8EC7B4LN4#1o;h~uo}d*J;%OOuOqTo}>_<`dday-h+=r#dLsH^a@Ub;Ib}ExTC@Q5z zxg3>XKxwCHpM+&t1?Wp#cPj+q;M@~O=M*Zb{g|~N#`Sx%=S&e{rYloUZ*EX)3!wa? z43M5aASNLjQ?vfFsrk$fh#pSvDKe9q{+!<;#;$^o%)}k0M3a1K@1+AHKVUQYMvZAE z40#0pxqfR~!ATCWDgDHvdK}~(c*1`c(Fn5wyl!~b$m&RK=m6jvJAW;$W9RtU`(rmW zZ*F2Hdt>m!-KV>W`kK{W)`Z}#{N@vwZ&NCb51HA{6b&o8NP}Pf0%9j@_0H`8%ZNb! zU1ABmr8ozAApZcdbvPU3TL32L2VsF%>q&7CGsFexMukco)x8nDTw!MnO0xO$ZPrAr z!zw7|1GP-a~4&%Xg;{N9i@{L?i(qzPj}6t?>_?kvQL8q zSL4KL(nSf$yy4GNp;^9lB3FyE@^vEPb}Ps8n3B!#Q~Rqy9cjT^n6%9lyS0!Z(l^qG zw=oljW-{r5Sl{7kCwW0g4{m8=*CvO(OICV%fqctWQSr3AFS7m~sS)m&Zi>&vSdc|= zN_I7+ex|T#6LiC?s_1cwp65eIa> zJJ@rUFr!;`r-D360WF%k*Rh*O47w21LGzRk)tGF z97flv@}Kg^Y`mUIQdr4Y4ns*Hx`M>?sC7I-WU^&cu=zkX?2N=?ffeOtDn`mO)bA17 zLC2J{&lY;IFcRX}D~drfH!1?&x$HYj6h?7rSe)l_z;Q$x*_~9)v<7abspk9Uanori z23(1ChxuRKA5;nTdLFN}lYiOt6KG*9Mkbkb-{DjNQ!AYeJ{>vX0 zmn-ks(s^rfn-t+rj{Xz=7gg+!_;TfsK#N?nxi_J=AWSeHIZ$|ML@D7eihTCL#1sdU zgW-+MlVsDZuJ_lURQ9%usgAd2B7UG`jHm(B;}i%_ex+F5hnFgTB_W>K2ER2k{mNes zI_fn4D3S}w9+MF>Po2Kp(c&_En`JXS_T7sex*aLT(^lN074Tt}?@RGeO?$@&WB5`W z^fh9#^H`9B*B4%RyL4s?K?2_ZB`xTF-;PV?2;TyAfM`j~B((G4W}{hw%(23l#y2;M zM$t@&who~Rsx5)hb*@zK4`5Y&Bd+`~7>G3h? zq(>~LfiOs-o!y6q4v5F-T4Yy_riMBX>34*k4V*5A$jTQM82-j9=VYh>+}}q;eCl(3 zdR4!Z?V`14PaiWq`Brntv?_@ zs?iRxWJ+DO`I_vR%%#0$pm}EjnOBj>z(YAh#wxN&&omZbmj=A##vJ}<_t33xOtv8cg%uY~ii#ju)|sztua zc;T)6UKWi)z)hs+ZXn-(y0!RU(O-E^F*K{5D#n8rM+-5r9-u1U!P^gCSM2|cjVNpT z_Mw)crqd~7+gE`CtEqM38kYQSeK2cK{m7q!d%A=eM+5j4&Lqs1eGBWM4jSGLdA0EisU1G5C zKrRKI%)3+6tC0!e$Z#dZWpXWfAQY(Xi%MIuGNf+AH{giQE!7G3)jE1{@X&u8wL($Z zo?Wz7;A9XB3(^i&FhXSRUXz5zkn2V^w~gjKyK$i*QhqmugJ``Jv1W&@H18c=fW3kD zTdC#!uWRk9L&RoTnAu6swP!{olgEl4nBnYc$v&BbO(aF`2#8Vb`55z4=zHWO}mar8!<%~c>}wdrIE zc6%3Y@?2`#;WXOAveBGGxyaQfrSzT&Y4mOqu}NkT;;@R4lJ=Kf#||neI}aNM8_hiZ za|kR)S=i_wN`g)FGL?SH&@SGPeAZz<<9v~z!N1+rmQG6sQtzY|ZHy(``~1l?`4AMr zXCAd1&ID!x&?%l;Z>cA|0X$wzKIZ1&D8Kb>O7LS=E&n>Ic8^AR7)e(ZkVH>F@6FaF zG2OX28-`X>AjXiusQK4{hWWF=V=4R+gM)Ijd3ql!edvpoGy^NdqgGPsxPLoIw@DZ* z!*)a6{s;9go&d8)F`2OO-XXS~DI86A_K}n3LA%V+|CmLZH5p?O4_=JRD4xN5Sm3bC z+3ew$JDH$I{xO@U#9!mey0$jR*tx}#=}!ngdpdmbM?Atif?buh=pBZz@p5-_2zg{H z9uJ1b;K4&kz3ne%6h({nK9P{2%=^|3C10Vu0-Z&A93{^%p!D*5Q_@*!f9z9Yz0rfm zzw)$*g-rc2xw0=8`yy+WhORP)1-bOUjN#oPiVP2kExa{j#knsSlqkOyrsb_4&JT;3 zWnHJR>fItN`u+0fgwBV$WcwT1pLrxG2-@#7zGJ{%Vo=sQcON_b546~0V=q;I5M_5p zwkW8vKq_*-nM5urKg^ujaqF0mnPH=MX8pxT^i#w-@uiLUMhjvX`P|=ZG=aDdL@@wO zMYF>RIxq}r*G`V)$kZJX9f~s*M2iIKL=CWGxi}#b7*LsS=5DsK2o6yH9doFV)2Nhx zAp)Z(iXl!qX~w2lA=}yN4fBm$xy(B?^5Nxz8Wq~d)jl_Loo-(e`<4MibcB=~>uU5) zf8AX+kX@g=$te=+;h0&esiG=I8 z7Q*UbDf#D_X*&E05^v=W$0!W}RkT=$E0cf?-pJfoy{J2~{}*&CSKpF0O_2@|@P+*I zpnMP-nx>gS2sULfseyTVsH?YN5Oi|hn-}{V1ttG9VXygxo{Gcrw$4#X`k>~Jmub1w z%BIA$-R-ob;=&q7Hn{b2O-MIE1og{T<=+A&5udYCnUIB( z{G1>bw0+Kzd`H;u3NDv*sQmZS>UOcqQBAE)F6n1T)XLvgGwDR2FUFC^e*Y@k#kKU8 zF;34N=+oNKpH6u}&z;6_lE?H+pumCPVH)}^Pggpj{k@i+{%kGhWocsyZXQ|hwk2Im zNkh;i5Zl~1W9sGw zFU!Q;I6vJpLrlGVGux5cUF_Z;dU48C&!yj;LThy%>>CMLhUd%(%f31}aQ8?-xYBYI)?$ljDNFsSm$>I-&{zWPpJKXr)A#I1(*FjLogm)ifjYiVq^pkuA! zMeD`XHSRW+z%0kfk@I0$_F1*~Ql;)wr0R!TC1h3uS6(AG?xX6G^3<+8`$=$ul@pVN zzM4lKN`$AU9!O>(oq?Sc0P*z9$?n8IhkY~4`_yOp-5zj?EdeI8w0r&15T&!}!(O-9 zj$3-n)Ay$_rP2y(!xd~q{>yK~3v{8<^Cken2xR17!WDbQ-_ktEAzcnH3ZK7O0qLt|&lTPHr)-pb3X_(dR^_Cz%VG1L(?#}T zqeEAW55mZ>jTz{<3HS{Q?O}V_HPb=Kx}wywaeK@)@xgY2V5k-gJ+5ZKoEhotPgs-= zKUOb0YqtcPu`?$>5=(idSmpnkQR9(5mezoylOHe0P$I#%XAe!P5ZVz*|1J2b~*{wwpDi-lLfM^uFtI=XR8401fuWF zg)kXLM#$6fVhFCm8Ux=AYGyJ7FWWFn+1T3vM}3&+!8T5ywS1nzaqt`7Z(!G?1#y z`lItos04r8z1!aT1{J-ZFR+l&UAbnxeEbq8r}Tt9fA&PRV!8A-uel`;K~y4A^L=oR zM^diA6omwrH?&d@I3E@Vd6Dyz9?PEYTG}3J=Z*8=8>KfAq7SNi(_ql#=?W2uDszkr zz|}Y|_T1J+6eR?6tG9_@P7w;WWCIM^I13{qT>aG4Npbs09WKB?x)g^WNeu3+H|U~Y z?{M;ZUe|-GU3I|lZVbt8VH6#AQ-5qILUa-5x1nn6o81C7n#}_25u}cU4FM_{^+O|* z+nKgMNld@Z08&O9MxOu&{+_1sBbSa+VAIR?ict*Z$S7jLWPCmyYo(p=0LsNCfv~=O z-8=2(e!iJ^SD>DKQD(QVXJ)&<>a#G{t2UbMz|p zzvMXt8@JXhn$Q#WpME|g%Ac^-5{(CEFTw^8A zI&GSRD!uL!wn)r(nEWq-THi=&%@)!eV5uY4FGCn6N82vU2J$#$u#l+%1vy-_iLl}QMB7^eI*CM~CPh)q=TXy&P&2HQd=1vs z@qbxMxtCMw7fc|5L`<`*Au8}o_{TR9yBAZE-ppvL{ONdrT>mdv%}Cuk!cRVku?JlZ z@-ET!*Z}S7xGXpEC$-XZ9cA!c=f&m`sx0fN&Syx?UB9eJ4!{wOA-+r!K@x@es?#+l zA=5VMywQcq!3S6d{RbK~n^Cn3IEm#-vm!T2F4MJ|c1p}zrrOzFVfE8kyUF+fA1(y| z!nn4oT@?;_QBHp++!m2{G@?!Hgi*#tRxA(hM016qSc4pVh-{CcHx6>?mf!%`y4DHso`15Ic|8}miAp-StKyJT5LXwJFvD^R$Al{|Hy?Vj*7>24<;WZZ3F zGgj+^0#CwSIZJpTqdU?UpTjUu&U4&^JKbiV-y6;3d6+k@=m0iAj6PvKN!NX7LkZwI$ojC4lJdzm9a6L1}obN90RGlcxk(R3X{OSBBI&I2vv5 zA>G-|^Epw?-R2Ucq`LHCvu|qHCLC5-9Y=s~G)uJ#AO{WP1J&L;$q|06H_e(mAG3Y< z@{b2YB(6N`PK+^`^Yt7u-|8aQyfrAPB*Hm%h)c5I8?drhAH!;5vqFN`fbn|rI%ZB6 zAJHc0XHO$eDf{Lia%%lHWSy#Ah{SG=3DMXsQBEcBS8V?KxVZ!Wtap-r(~4YPT}x%L zu9X#h)|HXovE#2Fq?7k$2Nrsy^`C2HZHgW{CEB&jL>cXKSr(0(m5sgw<9WMM6Z~UY zvnL*R1;W(!-2Q>}6PTF;2s*1$R0*m43iIE#qZiNkK09vzQBJIV=16>)dLPs82`c|z z+|qvo0bsotz}6)Mr@qsAyEPj3$3TO(e@YGOL2vjh=q{NTQypyEI%M_X?Ipbo;^(+U zpU7QCv^lnmjH)yP7v<~^Ka9o}Y=%{O0VL!GoAupeT(1pyVj0pd!0-YjJ(C?e?hi3iZ3+h~6Dg7z2Qz182e z2Nit^#s?D*(B6vST=e}JIgKBq;}_XoFh#*u+I|R@;U&$pjTr9a!bu$MIw`hM);nwo z##M{r=`%UOG~&9c^J$J%!+oy*rmQ7T{8VkD+tF{Hwdgl6!zQdFfUH_zMHy{E>w0b6 zPIX+eY2^{hNXj9%$U8C@Qnfek+3+Dod4dUpC0dho|2FPU!LOr|9L21B#EALi)7nZ;B_qq9E9%}Z9(5>Isa%H? zX2%OEF2W4?LZ-)-p14ylfA}s8F{f^AKDjd^*Kc0%k%L9sRR_YzPb`MY@{)2#2;w&_@=HVZ7_P-{hQ zFrZ5j;Xg6KLjD6Lfiq^@A|*&b7?BFoK#m zK|!xu|KfWbbU9_*kdW2aF|H&2ReYQOe>SNe#RMImO}S zZbs>}b?+VYP}EVnbvR}4?@ZFe3RWyo6;0G8-tDWSNxLa6i&Z$HEgaMJL_fI9r1>=5 zBW$66boC29bzqr$kAE#OP{d#%4hnPtIe+EobgGPab%3UPptveK6P1(mTc>kWT+bed z%>`OjBtf1_+@KeIU+-|ALGv=+>Q6C(?b9?iTRH(OQWPnOM`TGGiVT$ zM!KXsMQH))R=P{NySuw<5Yjp5h5`H4@B7U;*V=3E^*0^|$QZoid9M39&s!~0X5462 zWEaQUD-Z~qULF)4w&$%)Q#XYFf^A%z?(-t0)7T7*Uu^DeeF0vMfxMWtQM7-xn2}}U zk}~s11evB3Fi z+FsQ=jx!8o4t#K5nZM%Iqd#yZmKl)i_9ZbfOm5j-bTrz8byKu?DiDJy`vvyL!dvPp zjXP8ZlS}Z3bSUfT;m_DFhnjcx6OY@AmJNK|duUqDiSPum@|Ppd22@R#JyZq=eL218 z)Aivb1AdTk&N8HhUTN!3gD`d-;FR_muKKF#n3V~L@5s}iG^~Cl72LJmoC?yhTE%kojyjhVcX<=rVycW9X!!vR=)fFC*l?)BAmy*`U`E6Q*IY( z(rb0ecwDVQ!GsS8q;PZu^bnJ@PP%^5t8_?_m$sq!jwcN;-q$%9Vemk7DM>2vZYnUP z(DzR_H8SV{FTPE~Wct9;Qeu52LAh7Yv5tjFIEyTT{g!Dk)8dNL_E(!_QTtg9k^)8X zVBGA9i?BVxtrS11)pvI-A^TTs6%LMc84>N55dv2PXJ{45zX+^Zy-DvJ(OfS?apB;$ z7X|P&B4A*iFW*UuseOcYPSc9H7TsLFD(Z?LKqH>sotUSXQNH%QdZkxEtxi@YDp(m^ zVC-8t8tG9>ab1yRn1b~d#|6Hyd~@(Rt1aYLoBabOau8CskSVzD+13~wz!$@bfw1%R zjkO2WWIjGxh&)Kkf3B(m&Sf-;zQA1-F*%(nMTl96`pE&_azNGA9r0O{n_tNtyq zT3Z(+>#BT-BRt(txikkcN5(JjD>L$;pVCCVg@gD6{FhkYH6MM;jxP`U6ldR&*Y8Sx zQ=DxCqIy|>=pk%t-p1I}L%4Oz-_A~Er-{g6W*naH}d>4DxU}0E!U705HQYe-KgfN@)rQ*|X9c)YwIj|YI z`^)ota@6x0e8-o3p?pmijCgie#T2ejIeMCGGaGdztjfzjP;$ZpI{r{7u}>oebwJWF zNhN$GIPQ~9gE5yM%DP8qjDFDUxmjn>00BU@`cZshH9k6TAapu@4jcNvRG&Jp_ya{3 z_#2+BFVUcNg!fVIho?7J$TjbHa zyu!Rk5W+h1G2DNF>rt)aY!PS%6kMcDUhSMVInxH-7+|VbGoYcR{-OK6U8(lbT_ioA zhK3b7DzTbc5MMrcdV{7XNXmE1f(GV4e?3wBfLG)-5vQExxKtMxYQMb~UhxYYS552_ z-UT0@E^{Y*>J5LnfjW=CvvwW;W+U3(6XClFTUv;@WhwHUQQ-h)& zh0l~b?xuDE{i}bU#kC-^T8)mjI(;klF=IzAm$dglxa0l8Csq)_G-s3kE?;uVWrGzS z=X;~a4e9$YWXl=pmDX=|j68RCCc~ogWL!!5YwNcXe-<7S8whD~1E!$fF54MKaF|P- z&K!J<;0=?llPj@e{mK2E$hlWIMRXvNiUHTT!_eb|wTtVKweQU3FWhZ84z<$EiT8mN zNB4Yk9Oo0k2%ynD!p2Z=im*psb&q~Qnx}|j zL(9s>7ABfx>b@R3^E2M()uXp6jIQEiMP^OPiidPnlSW$E{aYLYu|}400pDz6Wpopb zO*RyY^R00bh4=48+2+Ye&Z}$^oIRE^zbqXvypkEnm%mL8<18DO#Xql2U4AvUr4R0y^Bq`!In({G4oJ+?n` zWO}u1(jTaOHf=Y{e4qC1gXH#C@QiCzc&0{X@_u2({8OGUYGuvOId>HI^rdM!VcIpM z`O3^QbdgxuBbiBOU*ngPLU~L^+YSDDvZ{Z2r zEQkgyhNudBE?+dZdo&@Z9o6o<86)8PDGbo91apxnS!GZOaPLBTCRw8w9D@QUGf{-L z5=X%XXU+I~7JEB0&@0l-g+ohQ63!xE{{?)KHC0>o4 zu4}u3d%>f>Hv@ba!H*}@0QAL+add6RIwZ(gfeBDhTIH}@+6%Yca0K=iug^Wk7c$#V zZOvNWSwTDdr80uTV+g5y#q`IEfIVUQN?)Q7e6_zZASmMaVym4Z7$fjjLp>};;=FWs zh=1M9HbQ5w6|=fR9bfQ+u7ZBsJ+O~DrtXFxju`lApW4_mTcPE9hjGKEO{*nk3Y&(MV`T4Z;;rgN6}nZXDbb|3T#Jd-($M>|&-85P7p4?9Q*n@w6r%?Z0Y9B>CGZqux6LECk#;9^pqUM^T(r?FG;j8`$hP8a!xn zO~B&ORl&9EBIpk?wnAB|FUBg)Suj&8%cuagIMdA7RjU^*`ATQUR=$2)Ixm{9WINmO z@y2Kr>;P=G$pSiN7 z(!xxC0GoD-#n-p%7fW&r1(#K=y(Ni^c&0D95$gJ&_bB^Fme}yUt9U? zI7`N+K^I#%laeB%m*uPtn=Q--vfRUQTM@c)Ic!yeI3VDqUWJW!f!`Wg zjC}{gIqJd0Omv4^i(W%0pA46$sIMoFwHAprJ&TIKb2C-@s}lN@Gg_~2);ZRrFRdY$ z{ifdTp_a~>kE9*XrTjHXRy-n81iE1UI9p(ZM`;?zR|*ymKgq|237x7Q<^c|OLR}@d zY>OV~qzwmiEQ8>_Ehs()#hWFMp)j%YYZZ|jW5>xg=v>{$S9Z5?o#{Qx?rbBO&4$hM zlck{WNCV=KilaQ)?R#7=v75fpIpZDhNaaNn&*AiJv7f+w_qI1^>Ey6=VducwF#og| zioG3viUNEL0)IWNWKWmz?Usl5vRuSH#JZL0W4%FC&nkSK(%^Qs^ETF`>!}1|uc*y+ay}#R z^X5W8O#HL6-m6QZEkGFJ=y&p@j5=jGLDyu`+t+KJ@;z175WMbrbgKw*(}_7Lk94#mFl$uEoKe!dU`4M*)PPHBjNO5csj zewBAt!IoB$RkW(!V76S^ob6|`^3}Ltfy8u`435Kjmc6J)0do$z%v!^h7m}{D&Kvay zvOrr&s+BGHzC3g1ihf#3_)$l8f-Wmb+J)S9Q4vhO;Z)dOP(d#sG+oEh`rpT1wb8w# z)~oum4h(e+Vw-Cuz_TK8#)|31)g*d-@XBdHQ=~_~7AdNj`Z7IlMR&I<+@?fR>uVL` z>Z1FVr;G0uRF|<{KAt8E&$^#wm*rD)?f7Oe{`;h zlP|Q|+xt`MZc3h=r_;lzhd0f$8Vt9({4*XaF^(=oUztR3K7}ufPFZ>K0IC3$`-_PGbEC?wOUNc<@6B3S{q4)G)b9RNWU?e| z2jTdM@|7NRQQ?|yU1F;MOALvX;QH6G;SrRy6D`SwOQ^5wn6mDIDEJM*PPM$EqsRNe zEl?o`NWnn*_JHgS_P^pPo`12llqzSmCa#JN7vW`!a-sR3t>a=Z8=&;&~(T~F?RH&#(s2KD_jO5NCE8$Mm$6Z=x&up0X%+xhp_nlv& zJ*EHpq5yig3@!T8l^TD{775Ttx&(Y7<(&bpc1sceW>X|;e2i_MhJFIz9w5z!g^+<>k&n%m}Ry}Jvn zF1X++yCW550bL%Azto(9^BUtWN8r{#jA+GZzo?QIu{60?pYi5;=pC23Pg^_kcJ?6Y0 z-RW+S7LcPLZ`ACUotRNhWyC@%LQX!ud9+cwID`F@ObH!Yg;(Aent0nz-e(M_%Xn|b z^L|^Lk0Jvli#)Ca;Z@|)rix9QqX$F9l^&le><@se0Kmu)%45_lZ;IS}TyUgJ2P`rs z(M|~*ky5yUX^KLTxaz#C6$aBIEPnBJ6EKvz_^ny8SSd7WvG-^Krn$w6DX9q`<89{u z+$1G4fHW{T@y(LBlDtig2`K=9TJa8%*_PwT{Eq4kvY(Bcx43|*fy2n59~Y+gU>=;4 zU4qv;5*2mYwEax~uoc?xr<36~{PmAlfn>#8Q2+5z2<0qQAcYD$#1q2xOI zhy+RemMomF;DXRozu$15jHkPbT6-d#eDMzFNN@aM+rvvR>6q&pI&-fRgxi6qj^Kf-UVsEv2|A5q&u|Pb%a1x^96#va zM!cG7u+q7W?~^{ba2^nljtgvPQ>ZbEe(4)ET7ZZcTj(@u{=_X7)`CQ^SHi&}!Ci03 zleBOBAwx~q3=`-Whp(d(y<9U`GKUDocQQ#4&s?UiA>S^<1YVPEzW&MQB`-|&`cuiL zH76zuvKtD#ugqn7_KujjFA2+qFd>@a31`y>?_-c5*n{+O)W^+Tc#`t}e2N3884Dn$`81G<)C62N}`uUwP885q5}2nz^qz zkZAX>%dIyPu2ALnOc*O>5@+cbqTrM>BiPiUNZEM z{(?ww=!0t>Ij}GhXTgcsT<+~pfY?Ywp{fk{$`SwVaQ+DIq~O{fpFBH;Y*0ER1gGeC zr~-3^cQ>DQ;qjFj+hS4`843x4joqX$?8XhFS+bkgfb%zlVim;=Wp(%<1m-9ohC_SKV^T6H}X^_$~%@VXjE2AD^Y(g zi3Xzt8y%i~wyloE{42umCi=loGUe1cVw>;xcXTJVJ@BO#M$<{U6qiM>hR_*d! zq%li?q6vx~;cdrkg!Yx5Bz2K3G6PxxfL&J2?W}#RaO@^XBzpGU7eMEKYI?K!hLj5+ ziCiE9HBCV`%8Q>FMur*M#m0t!)D`hPW{Ni@x|K~r^+#1-7LCH8{-}zS0U~7xjlCEE?~%|bX}^s4eTDgPoRuGlDSQ~V{PvTtJgUM$O5wzGsBFCrIQ8`!Vr)@1 zp_OYyxd7gqiBS{5{rd9uS$f$vTo@{Y_e+W> z=S<_}UU|1TM_($SXdVk4C+I_b1U0NR)B-*NK*IE9=4Ky2RWrN9&W5o9tv&SAR*eGC z)dV#bnwvz-{{SuR0FTH}r&KS?uYW^n?wqJe08o1>{-jpF^Lrrfv*nY}(szA6%xZgY z;)&iblbf{MSR1U+&75uSIE`_LU@B>zbjVqdHN;z(F=gM6I`(OG}Z0?&p?1$sdOGG{YduPfpDAXVugRWryg4g$dcBWEsl|X6zoa{aL1yP7T zN}U@@#>L+FSr_><9s-iAi3KP+o)YD&rmSons%|g07ipHpPfq%vpYVbb%>vtMGnY8K zYxf?Uv#$@W?{6wVw8GzuzQ*`=#JNfz%r`iXO&C2O;}!uQ*?iu!^%%G<9m~A@OQrC` zWdU}tW_j&2ZX6gYetP5h*!8BAYS(=59vF!1y;6e*#aPdCVBP~HKT-W_^b}uUENcy9 z>j22)D+u7E^AbgvpA9=%!GmRSTR#U;mM{Dq&^T#z({@R?x^0hNF6fG~1)0R~+Kloz z3OAGpXnQ4EYuAAEKP>n$sP0kI-HSc?{w%<+fKo3!YM{%eH7;U72I8eYP7&WEV*REl zmyY6cCwF1wGhiFvagRM2;t1MtcRA}TrCEwKJ@Z8$4rgi(toI5j)iJx+PDlr!J?Lxd zt9P{1_2>?y-3jK$%_Ns#pySzzY=h?2h!GY5b{ox)|DZ=$FGj)=1YTY z=)3am^)#|u8szYZ=XVrOIxwmtIu1-&$ZOga;JYD|LS;uA?Ek- z3pr7pR!F}{a0N~S3@~@Yh#`Ct;V{>speFbLiQ^B8REpfAg+edhMaq4j7iq>8xGkd?$&lZb$9B|1A+T}`S6E1 zOsH7A+j30iee>{mA~PRHgm4DVD_V`soF#S>3W~C-cWg+Z?__-`UvRuJ>m%5^+!2VG zF7Shg2Y?WudrjeK!!5itYY~b6Zqc5C?oeNPYCz|duKnKdf#Es^uk)*plzsW_g2$>J zf{H_epK-3Ms235h>1pOuf#x5GFBsaM3)D0Fd{Qf`2q4Pf}D=H+cj8!Fuj)5o?$ z6nr`msCVR6HK4YP8P7>&i0=c9dRb(gl?to>Ja4f6_#x4TE&{+0t}()_%TB%@n$IMQ zd5JvjHHuCOV0#Vz1Jsn9>nUsBzF!UhJSKCAOLQ+qFcXz6b!hbThpR|s{qLSs~p07KGbzc)_zffZ8XLMo~vsF z6$!2$f2f)1f~!T1-+*Vqhj1avHBqN0k~v3rSfZELr@^Wf!8>;f+b_BG5U&e^p`?eg z+wxjfMdYgu%o^3f!vg}x!}mt&IdA4a4Rgq=1(>S9I)hBSLKjTAhsm<^Sh1U)Bf31F z{1~WOG_>K`d}n?B`cM)wUrHKupo+`FF|jTORa4YG9OH)vc!Yn-Rc0|HP_5nCpN6De zsMI3~q{F#uAP(22dDTuzOP%i#Yf`qN=~Cct&uZtw%suCX>G))=z((FjSbV4+9ZSqDm}H9b>!G%x&GFtN_e6-8Y*1i&>iem7sC~iVc%@N+abq z)z7O6q04hI(I67rn3Wum!gji-WIT#6Qks1(k)iMFf|V{(u8k$L=C_JGhF~6eTlGtX zjV-`eu{zrY;hg3ychA#lKquqdAByZPPD2{5?jx5$Eqm-?N3GAhICZPWzA;1K+~#_G z^NkHih6%~6MKNW=uRUVO6K=6HB@iXFzQRKTn0 z6|vhqWwAsE>w&`5CuT`Y86PB<#lY(JE%%J?RCiIq#dW=J+;u1&vZ=eJYOX-?&`su( zJddGP%qe8^Yx%K{+0=wTG&l&8h3K3?LK&XpZR#ANf@jgJ+o?}b!+2H|C*z5ANZ6cEgMl&f%x#hv^#VAsc7 zoE{tBgLL*18J82K?`FWjtR!cWY#`JHd8R3nuj%Vy^^ zs@hr1{cOYB1bhEMh?C1kF0WIKd%3RP(+}W&E4G&WkQ6EWW_H6CBswKYhJ2enf%;1{ zDBd;(2m1qb*td`?VKaf|{cYZsZl4^_q4j{!*Rg9VZg%-40_za(_T|=X<6_3<8YVR= z@%?^agR%1B0!7*-gG->*xeb5POIP}mKdPm{Gu9YmQIK6O@j9L$LYpf_>{CQES_M7N zq@!1w48*gm!TNcKF_dktU{SD#wf_UYL*Llqr=ku-@6s8juE=1hoALi_J*5WT*GCvU zxl;NzhJ*NrM?KO}wqfB}crLN8f_4xEp@bo6ui6Pdw;R+x7yDP|)R?yIyN&Pojr?rv z7`vWMq`2!@7}NU8$5q#DqSlk`+bJ!F_AreIPIBn~gJjh8%j({GAX@mV2!>T8WJdNXPlrLKAYe1zg{F!lv3 zF#VQRF30xJRxUsMHzm?r2@*!YQK=*#s8n29W9F02SEyM5)iz*C?<$!dG+3xXe!7^Q zI9H<_t7tB*F=0x7%3ler6+3(>(5_ZMrk%zLF%NNuK3HDv&Xoh5(&6hywEx&=^0PSk z7{Lqc$MzP@x3Vl- z65U(Xq)U9s37Pg%g|Tts|Hf2$0@=gKOOlman?F7qZ;*OZ`%fc_v!X6z!{0kU&Y>qU$wT3L#DELsl(5C4*9o zIBUni$dK-bXg3rIcx0uks6}P6t*APi13cxW2mXFGsP+6i3R{;~jCZr6fVw;!X8{N& zG9@|p@!qK)EGIWdV>_1J&!yV9Opa1ANG88fT-nDbdR2z92@tXpGxc^8&*rth+vXhjbPH%6@f;OD zmvW4Cqam-_|cZF9cc(dlYjn@v_9FQty zxI6%%Ncd1=*YZ%u0N^SK!W{z!Ig$&?J_-WW^EAO9*&+ju&Bb<%$ z1^sC=g#V-WczZLCB?w<};<7pYzK3aMlzFJy;b*iSnCqcVD|R#HNJD&>FZbhd4Ax>68wqZyOf(+nr4;bMqHzWaVyhAlGo;RM1s^~4~Hlv_n!sIocxZv{@xmS z4Nt6`1=0UJ+JIAKwAIUNkLyE>@DGlG;GT1UAo03jDp#h&`xrR*Rx>cWx&vTdfwH!7 zt8j|()DdWRo7Q!7_Z&0bOZt$oo7ZkKhu}Cul_uJw&hk3b#67vqYj`K$W+=}bAj)B!^UkI3ojK=Ai_(b8^z2ZM7Ya(qcOJqUi5@dl@mRFc@nQm& zRKKq#+pl4=9-xejtI%OVs+%=`(k| zT@8rKJA)Py-*YqlM>o48N0Tx5kyDDO-&h( zT;MeDm(uhFzkXQ@C!1eX>mR;)$#)PwT>da(TFuE{TtvQ`ZX=@{+P#Tl+g15!JtVBleO08XpVfs{JgNC4D32e*fj5!1c#R zN$tgW9|ccjrFWnGsL&jj>z#gd(M|`ydAqcY&?1vh$sMV-R|!gdb!v!4K#GsZkl;h| zykXHy6rA9$8#QM50l*l5=YIH%q_8-4QB)DLUdPQM+WCQIBRT8YdI@;he+|7fzBK-T0ZiZ%Rth0lS>oDUHU!fSkbKt^QDP zcsi-5YIX3CqnAMg6dCyMzmp-fR$2qzFTBtQaF1Ak|3*Jn;31$RXen}#b%fVg(gJeo zf5D9OD#bf*F*6Ff?-NwEGcDOWI9_3*nBN*-`t0q)Y8=z{T-B}C)Si(Lu88uo+2<hMr?b((s*3{7{F`d&5Q^nLQO#RfXjH^iS$7}Xakh=fy z8J0dR!PdaafVCQRprI=x&}uhac=)^xe;?7z>(CTW*l3pt$$Mny?_>PGT}m3AC;3L` zDV!EhlUJU{@$SNF)ADRB&&e+MMO_^oNk`m3sr!3W2s?`t1UagP!`Aw0g#B7&pbomt z9yg~ZZKwxF{FXrvj-~CskrJ?2zPJhz;A-UTSSx7T&y;dNV)t3^dOFh1i34)>Tpt6! zrHpbN4cY%MPtse#oi;ed>{d5xVcEZmBBAa zH&H!Mea5;n6Z!<%?u42HU~RX^ypL;Y)hjx^;|HDPC_@=inU0m(v$sPtpJ;DznZJ6R zi1J8;<^+kfY3kgA2Zoef1AL0-Vq=h#^P5;PrU#`gj-)-9hBzzAVVK%XJ;FRlgOf_| zetn2)h`jOxYuUrOHQu7A>qIAhUckI5@p21J?43$*VePn)@Yv)LYpj7i&}-a(t{%T7 zst+$5Sp?o22|K)Y-R-J|B89wP?17({r89ifv+*||{BsPM}PKHQK4 zOa>OcM5^(yg8|~Z>#UZZitsd+%Al7yo1N}KRn&?gyQ)y*<%AkWArxJSAF!Olo?;SAwTeFuhd%o^5f;>jA@PabzI#Gx6r&O=T}Ue z_;{)sccd{eb<-Iw6Vjwuy!sYDR01F7!IfSkuY?W9;Bxg@WuS*%(`Jb zaKd2OhDdz1@uz{ubxez33yUtOR}TDPw2q?2DJ=Xw442oTQTPf!Csm0sh|lTDq@BbX z@_jtf$SI6}NWl>Nkjq-L>-cqPWn{n|A{nZot@P8nI0-D@NYR9~+1mFaA}IWV{ca)5 zYzd+cwIK_NOTsV%No!r8guhxY=Wc}w8d0Ya$2A8kap}M@{>6QqAMN{UUmA%E6ubQrc97#}lLfSX(CPD(mN68ZXl zR?*CSE4{{f-tT+VHNB#~f8 zrt9>Rw6EYgYP~ry%xt`4R6=d*@;&}~#cTIW@z4iBG&6Gvl-^vT08T3ZqpzdTY{k!i z^}5U@6Tmhut(7ai6cXlB2>Hg=4=*Gs{I&H@cA*OFHn0#{K>c*0N=pt25)eGlYRxLx$TFPX^PiSPGYr#N6H^> zCJHS=@(9v03HHI+q@A2HkY$ z&UY{^kZp!3SLYM0X^l$EmZAva$ZP;cUhWaqS%Vw$h&m7B(_qe3ZKp{E@D7hJ{ZLU@ z$Kdo?JDAk(7^Z1|fc|r?le}1y#`K6Lf{XyNxb~jyG*Y;pQoCX$o2ErH_ToI{!$pCC z^XE;E6Q>&QG*|MV19p{#Uk$$2SAyZo0wz!4T?5BTkHAYb5mgPsy#I_zGEVDoL{x8s zW7%Vg?GQa9`7>l2@Zke<@f8ouA>cTBWauN%1$>B=?*Cn;&*za+Mui zVLgXU+ax+2-Wn$>dS=bws}1h9r2nYhiq$(sRiVR@uAkT{$!aA!BqxQ@9!bD>C z>#Fut-xPVT`XFC{a_?VP^<9W4y912}=*YxOWXD7|b}VEqemBhAO!MmZ?}~yS#C&ZM zF%W-4r#-V*$)2gnOzC&UBx(o7ue0;$_1i*V6JW_%5$L5&=|2Q>HGPc7<1F>x_v5fJ z<$v!dNpVU=#{Vmg-c4@I$xO1%iJ3I8$5eu2X%0L9QL$$+{I$!#JdVr0y**p;brWwh zv7-)aHb#oDnAV>_i-tgrT3I~Vfc$RXJWppamht13&hjv|%9dLCG${*XkRCqO4@|F5 zvE3QUZKHJ!Sznmt&J7nE z_}OKBd5>z=bp6Z)ok^ljSPA;%*;mq$wt@vTRYzEe;iLd*wiHDKN_`wKFBz<4?)_Y% z(V_UoeX09)k<3jyr1yKmEon!dpV+m{^wHAJ_gm7;N{AsDfR;uI}z+bcuW4_nAM|&Zy3Oy3_iQ2Z=Clzp8_`k#Rvdl zy}bs)z9J!1+CT38KLhGSF_39`S7Y1-1I4av_~fN|dfV29cv#&*Msh%tZy5V^ewLYi zvyXGZ!*jM%k$*Mp(%AxV`;iw6ssspB^tN`;6ksfAf@iEXzMr`PE>mHy90A5V=)ef% zR%$z~^IsyYWok@rh4L3@jnB$0BnzCn26+)r1`n%A@>Z)?ih1gQvtnAT8s%Yk71kIH zQ`+f6dWQBnGMtwUa`OEUeo6{w8K+O(W(%Sn*Bix~_wOUII(8|@p@rVmi1c6h$8?If ziS%mbsSB=={s;VN;-!#Cky07%^+EhWpKyrBhF*JbMM!xJ!#9lpzrdMvPy%>fjl>_> z5~~sXeF%4cSR|yf59gFt-};*AXz@*T{>DS;r2YDmBa_!6V@PDtldAJ4ioA=Jg;?v5lmYLe$_88 z#4~@4bVz#S>a#2_U4a4dk<2tzbELHt!zbUytU-s-{$a)90G;N(1k9qS!9$U3L@XZZ za7CEa6DrW{h8F)ar~!Ms(QXKf8jeZKBhG5x8P_r2tbgIo5N)$)O`yy&%7cP@8isUV zPA1sni&@wSVm^V;&hR}|M&{$IZ@F5fQIe!0^qJVG>mBE(Zoo(g;@{7-9J$)ii-a4w zfv408&Hn)DYsKeB}} z6sE}#PRx0!#4DAwOCvQ{YfnYDggKB_-}g&j|4;0dzcJy5sxvu8exS<0u+Y|-qj(~- zyJ0yuW9719D@pCt_$6%9+WiXGo`6}WWGLI`3)rUEf=hR$?p01F`63=3Y(g&0yfL$+ z(FXLOWj|leJ}RsaQq5Xpl&&HK^VFiD$~CM1uB60NU%puSX_1w2T9tafE5OOR&X9z` z5BHcUP_NnCY+teC^lBGZP zw^WKV)B5zqyznk)Q*$r+Ksl(Wy&QzA{|`-#f1u5IVu4B^xPtJpC}|av|A?3eC|~Ja)bT z{u$K+exlZ99-7|Xg50CHppKFckD$iQA!mWBVtjQ{<;zH)E2%?&-AA$ggesHIo1K_6 zr@Cretjc@K4XFK4t?Yvv7vwTE1LN-B7SFT+nj-ka{0h5`LlQz*VUPTOw~CEP>?&OZ zLD9E$JFzz)owde0>2P)fun@B5$NaMJ`a0H@HlfRH{9nm}sZv+wzvltc>%kl`9A7|-TUQm5I*y&msFfgQWz?x_q6VG;T z__OyV2=@;)V)88bDc|1=;!2WfT`+al0@7+2IdW60_h2X?Fis3MFpv>Y{wo-0l^lO> zd}{rOpyDF=zd46&qXmD+>hIjZzD3lfR3TPtzok8xmtgun`TWCghGbIN@Q^AlUoui- zzCzXLFUTqo%?n?M))WPv!ct5xfY!R4;?0Qf3?fl%-T9B789cvDiG38eO?8mlGtF8; zLSM};844p`MJn|LO$LX#Yr-j5o&e=(m_gFX(w5Mr_N*GIYx{}Aj{?BH4NzDz3A4M= z_#)^3Ut?wuMxG@!Zl|@rftJ78yyo2f4N9&K1wG6g)tmbUvLT`IJpVIF)C-|9^Y=j> zKEd)U_Zb1;`(D-dXGv%S=r*zOx3TB8`^9Yr?&R$wA!5JT8TMI_Ch8Zq0HesBvywAeyhE}!HvK}%U z-$V($NP+!P?#j9FxNPM4wT6&~`%Asy!#72h%HP9}DNr_6apWz<9uLWM5!=tZWp_5- zDNpjOOHW)L2R`UD1hygvYcnZ_$nE8pyH3nB?R4!fpx?wrt-erI0-wz}9Pl*ER(gFk zERG@p@R1@6f1>2Qxq>Nq!UcoP_3bHCkNGPHA3=-=VU>Td6-%SEY4>ckkjdf}TzRg< z$DOy#b#cbbRsn^&3lzJqs^bt@&;^HW=5pQbr!?*LNJ0suoPl93|6qJS48-hR4E*mc z6?8JmL$nm7ndb%(W-s?QbArAnB>nz<@z~P&^L&%n?(W8QV?%DO$&_5p7j{s>REsHk zduX~sb-k*x9jBT+jZ%>Vf}}UYTt9V@lMDB5meVEI{>nsjQY^g3=6L5DD7G!~D+bCYaB&2cW< zR1YH$g{&;M(^B4>A)Z271TSV95J+A-r|ec<2E^c%sOg;Hbyggh>su~goP|G)s5*xS z)nJ2$D+89=a8E@yRa39l5^P@grRaIX$pOc8Z=98%FSK+v_;Q4t{j@5Sqe0CH1& zlrwO5M$_)-0rR&ebAo^JOb)zp0B$x64HZah@`3RCkKLM8hM)}cS=lWJmq!VrYjkpO zpDI?%TSbPG?N-^#B_i!J)9uhBw0|)6L+F&hs9(23JO?l2em~j2-3hXZ>CyX{3-kLT zUrt606$k?MOa_2(o6pd`28{6n&+WBa6oyNjB7a3pOX1c*6^#ma{rczPE)00{-m$$5 zKov*AOg`A{-9+}uv{rZc)LUGLm-cb+sQN|cPQPqrJeJ!4V{(O@|VZ*arexsyR&MPyYCgTY8(!@~#mN&+FRi#$L(fZQ#n=9^anqcOdist|A&GgVC zTJ&}d$U>wmxHQL2d3DBKd-*6VtNqaig#iQUa?5B&$Uo#(R`)d~gPNmqSk2}IAPuUq zUmp6m8`DVpjx1{#*BvynT6)~X==Gr;xON=oi@Dd`!p+y$8FGNN!*)&h*z~?`^Hm z9hT20qZf(q%k9vZxn4;%e9koM{82{M!$*o))^Gb0Qu1U2$t?m0<{r(w44@-2aoJ-? zcOi|AFsmWIp+*kaV3Uw>qz|y;qo#)nt{_xZC5cZ|Y$Jv6aagKdRr`1*xMHKi*7>`e z5}5+Q#&eAX%aWO(3NnKcT%`~3OqTk9(v22NRVI=0wpMEcy=`_=XQ$$Ep5EjuiBiNw z>dn_`SLyoSV|?Yq)dAgR4ObQ2J8;2Z?7-%r!s+C5?Frw`q7QRoIGhL9RNkiL?W7Et z?Cwkk#G^z?C2>f!pgDoIHQy3@;{qQE|J92#INp0^uMp@t;l*&@D(&HFCdqqvK+4c?-fT%; zzX5JVr-5AD_S9FVVbz#kKeS231#lh*c?#CPUwH=vHB}ZlF+0w!XqN+G{Fo)!E8FGR zPJiG&1_WDr|Pxp@dOvHoUaX8_+cOXz&ZhfU@ z&963d$25>NaSbQK6V3A9Ge2Q$e_|TyW;m3K8a0RXYnL0mIi#E*D6?|7FZH^wl>gdE z_h?@%V|Zj0#;TR2+`uQbsEj8_=&2792%>Tw)HnXm;#jHPz%YdbW2u)BQRWp1x zo%f9|Mnwi(5NPRP5MvtQ`Nw}poDtV^`_!~~4sSe;B$3|p@XHytjMZD;^&$wx!Z8>hNv8N(q zF(S`~GnGaf?^I4jg|V|fo%5VZdYMl6d|CNX)C;c|Psdc;Omrqu7(xi&2jCZ`m_zt7 znSg*i>F7_(9@yF9b&dNKAof|=btXxz_eI)T$};F5=Alumxm((k#OLn|4Vg-M?a%q1r7ckzo65HPT_6M zpcp9j46g#t`|=wJl370imQFJ1ZSB6oE1fdS5)5|_9(>=34A(|bFfm{vkI=z(8-#1G zk<6%n|2^Eu(M6WG<3&&@TC?`$TQ-tb&ri-Uk6L%f0V#)Zn5^0G7O5MGpGedPzWzFl z7SXnmvYzl`aimV&-}IL%QCJN32F-GuCo7|H%5Fbe=r?RXbh5Drqd`m`d>bEIo6W|{ z#mK;(Ufz}^qR^>=&}?0k9j6PxXFK@h6T|zZa*(oO(8`ArR6&widg-ToNq=MB4^;Q! zd;&;&7y$$oaC%Za;I0lXMd-f4d}c1?Q58-tY9_b}X*Nv*Ij7_Z>ZXzekk$lsNNwsX^p;B#e&2(Lbv z5F`@|X(L;`H*qjqP%zP=->TPaU08sHFRpzpE|%XQt)X=jBlZ=AvH5PPUIcqkng!|9W4`G z!_t+k;Q1hB9Nw~zgMs4Dt#2DoQhCuKGuDCrNL9zwM0gJ`QjUiEc^p{QT;&l(b<6?x z^;^LQ)T?4g->ge9zMaJTgpdfj-vw2x-F!ZvDK^cgmx7H9xB@Y5=xf)p=|hE>*tD)g#m zF?$?dy$(V_^RPlV{M%ZU>fq~f1!(Jkw`|e~doDY^U4gF|@#YftyPu@-cpsP@{MRh5 zy`JI&%f)J)yH;h7XhKhvZywYi+6DLo<-nvsmi*t%n(o`HApoy(n&`r?DI%$s@Jg^> zZsQX6y!G4h{4V8zJ}el-iNgIr`GD;B+3U6X*_)v98T)?{UTolyStD~Q$z{3uf|TwR z`n4_U)@y__TPmyNf~c}XZt6=nq)nMI{-xz^xEt;U{GQu&XZ;H?-$t?vq%bf$dXzO$ z9|@}`|B?+AG4H{J+*&%adx+PY{AhiX2PVrGy5DPB{SP z_xvxr(YR(3-TJU2uw&*<)kS><5ARD4AA|w%nZ}I~CTxJ%L-+zMIeof|lO}Fat^iCyoE^-e@iv zp-ZG$&+MZu_wxfSf2qdnBF`gfZTn?y9L?6_m3r$24@_VL1WDEdRIBcM35!G5jhjGV zl#re{Htb4r*`oI>%#qS^WerXCP%IH<&sVz3Q#f0kue9`iV#VYpt8@tRNEsDFrRg`B z+gQHA@zbOKXx94uS1B|8MHH%UhUksh_|ka7WS;ye_egCH_fQYPRdh;8 zY_#T9InSW^$-ailyP(Y4m$KY17h<1~{=(Hm)d&_ZmH;J2>!>)|z=$q2D=wrVO>< z9Qgc3R=Gd@eq6gVjg{#~Kjfck!j!_Oy@=U8#R9wf`>b7xaBqWDmef@ci zBnxHWNE>Bnw(Hdv`q7Op`~9GuD>i*?1mPr-K&X&M83iY7A|T`o!y?tYIBA)9V{T^0 z>9Y6-gjEkEY3fWp0E^-e+i>*|uY+i~oS^N#>9IZ~aLC%9*jic_30~IA5(r|Oflh0| z8%S+p(grpDKF~SV{62=5B&ywhu*_cvrtTf`d}tZgKO^YG;!_=GL_>=nNYE|$2F}7_ zH>LnWuc}^S=HlmaZ2$lAgA@g`cLI9`aB;f`{&1k;RB={0>K)SA`w|Rd*}g@{WnM}g zxNav3NGSX_xUUg0W=WhY>3)E2w*zXx_yC6h^iQ=nY1sE(3)0-90NeD3K+l#=Ty07@ zlozmV87Ikn8>43&v%J+2xzVS`LGa}gv?p~K$W{bOHBExD!b&n|#wrk_&a&$LG`0~d z=K;a^_lE^6FV#|&Hx(L)VM||iOx4?l9(g|WrG(Lbt)v|86q=zLLofSj`OaB$ulQ^yJS1wqDUTwh; z=Ye5qEMr!H=AZemJVXAuXB|Vc<3V4M4wa%@Hvg=coK^qETy7n=8Lyv#8_;(u2I+5_ zpfI89ldmAL;2CJG*eG-{Y>+O;y`x&TbzWP*_F*CU_Im2^3ptRhNlKj;;g^;M#6?af z&C8#Qp}lZmJL=KolH8BW43^xSCdK2@ZrACmAR6Y9L3U7SnX}R|pm#(!2697Kix;7m zX;8U3``7)KYUiYe^MiJKP34IC;b-;{e}e}1qKj*7d%;?_vWGYp5tjWpD6-J^)&GSV23BXhX|w{Re~w zMKN=bPrq?<@Q$zEgcL2ov$vBfaBbMYg1^7Kc?IoVbPW|ZAV1k{RwN?96IBoso&#ji zecwmpS)ltIz`YsdKEf)w{;mR`7i_Q8G+$=L;r3pM|Dp}+nRR1(HQ=8eM$GgQxhu)9 zD4YWLaQuAD9?~bq@U%8|Q;+K}LEv&5bKZ$rg11^sOQN~1@n_qA$~WH`WbH>$*hxh3 zOrI+pF6l5^w+SOMQuUc1w{Wc0{X)%vZ&45du}+l3l!f^{qZZTohC}rR!`FKB&TCq{ z!7d5N3pBjA0*i{qd}GA2cG(Rop4aB9NqMG-M5d&!VLzi7lE2Ri{8}{z)s@FA0gb?J ztCBHAC>Yim@sQYfU|~A>sA%o6SI307*(~PjvgZ8mJdDaa+W1ZgTmn><)c*>zr;+TT zR=f{#7NY`J_wNi`FId`J8=EABh$encAKj(`sQ3oHVr>58=8jTAw%52ipzz`H!vG~K z5-5C^$?R|v#7hX9Q?d-6P-xivhjz)Ngmxd!fsYvWTr=QQyb%-MBFNmA13O1jdwE7- z7SBttWbO&iumMfljDQd_tFhc=xuya(KheEG<)v}<7a;w=vCt?kc0sg5Q2?ewG5 zfvWvuN|*Ag>jLw4)|<}ZXCXhef2DO)QFlsQT(XuslQ9IY8g_nn+HCIV&Mh*FpUKAQ z(p%=R^TI0!VCYXN4*bhM#qOZ6o%84ryxsc2@U7|_p3)k~K7@HM^|zZuT#{*<@0?ac z_m*Lz(MI6@gOs!hTMPMdz+oIrz&?jm{gjrHUDSX${7JWXuYGxkOYP8|Pr%vgR(geO z$L6&&jNFQc9G_@eiGxul@tiJ19ZxYJ^L|-emDlh;q4EXi#W`R`t@gcZv(F>o6cPft zmq!#uQYckuU#e%<|8gz68Mm4uMI$9#fdD@Dig!41ATTdcdqi^@#1-Wh-$7`=*d<~| z62P!n)L{D67#zTre_lx30onIb6;`H+0S!IzSI@k~D!#8{cma(FN$+e?Xclkx+Jb0U zy`r6HybZqh*chVtVfVK7J>l)C)g=V-$09Z;|9%Oll#n?AK7s{$@*hQX#4p{*`uFys z>hE~xxJ?T|!IcTexJ|r}qlEi*;P@6x*6$cp$ET#@x-^IHe4X}QiUDJ&h-^85Vbjt5sQ`JIYiaowFXVVxzK2#SGnl3&vvd~U? zKp;E@SP=>R(|{B=1pbMc4S&kP^g|+6{UmgfrP|)|SHj$~Of#|*#v8Mwzx{fzmrd)A zao@@W#b#Q*cE7n-3Z>N(fEHjJa}UL0fSPszbe{a{IkX?HCDe0&e_BGh5NXtgcpZ~j z^JV6H+0yKw9%X}gNchNo0r3@M54#Du;$;8JoV$ZL9dF=^ib4K`^>aD-b0%CI6T9nI z69NdbviOih^U|gefh$q-QqTA!Bb!g{CYS`R6r?no0VT2KpDUEJ}b~c zF|$!L5t-Fn2h11jx|Aq-i$ga7^hw&fU~?|!?pl$Jj;)%DYP4r@j3*HI5w- zya)b^IN{ZVwV#Pmosx}vpKx~VT>Jt5$tUT$hjKsG_$OeE@aFrQG3VtZ6W$ylhL_wm z&A&`iyY2_#ZJ1^@xS5ljws>3L(%t#ARm@d3p~Vs^PDJ>1y8Z; zoSUzWCsbVL-`TT`P>t6~hE&F96PydIr18LBrCN02r@RZRGUa_ha2PGNx1JcTLR{fx zIgE%+6>&rg?ixxPhpG;!dL*?n@P$utPw`*icpMF7%Hwe83)#Yq3t(E@3_LVQ<|#Vr zt|6tdd6?T*V#s7Oah`Bqc}%i+A$-B4#1~Aw{)BnXPV;rjQXC&4=1*k%{*h^CGiAQD zJ;GC-To7XLuQC8@w6@PGXckRaEpP}zm}!5)9WNzcvOkC7ihS|OrP*v=k5C6`0{cNK z%h4@-0Y7?beeKXNOSbUgz4Tx!1-7_b4D$WnAAN3rq^S1HaheBqAK@^XPAy05V2u5} z{Z5ExM32s#ZH=1{BpC{Z;h6W?Z;Ol;ROK-~()g+9KWF-U!@;mKlbmf#pQ6}dad!fQ zSq&A@44JMU%^@ac8RpW!oNzqim|UJ1jN`sT&I3N2v@P{>tR=Iypdz2$C01O}D&z{V zT!qC=zpetwu1ng6xCMJ_TPS%0A>H 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

      c2pV>rY3Gw)^F!@ClVr59pW2XoRDtp$tj~Il z3?q1P@t46izu3t!{o>vH#zW1ZJjkdV$$IUo4(aG%!wYHt-gfOKJ0R67Y^uJqC1*2jMAAZaK*)`$0@gK`Do|EjpE!8z z)T@(P&SWH2op_Kh!sTmqb1H3hZd=+RXpCQhX>bo!Q!DWht8s;lQuO`ko6p6Y8{Cbt zq_tsZ&s}V&62{Y$HqC(@+}}6fR@G0pVa0s9cXJ=FZ~jbOsh~h*B41w^;RZ|Q)I2N&W>((2|IjG-_eB-BA6jn`$%!w zoP{+s7m&AjNz2W?d;FuKwi7a5VZ@&mNTV7RCEcR4Hp${cj6~jZmFo}Pr>ATQ!+r_9 zmr3@6c95v*QY4`Bds9zveI5H%)_M1yVgSWGN)dCXJh};%)yPmWvCRJs6f`MduetVd zMT=Lk$Msj$>H(Rx^s_k8bvUk|@ORfbU)+fL{(TM13AEBG2U$TlhOYk`wH%jtcP3Rr z4m&=>S0`-OUac*X6NmRrR*{9@2ajgwa*qSyiEG zgfW26)*<6J(=S4amld)VufoFGQrIktIbg#=s&vuZCx-U9O`}C$_C?kF3i7MULEm%C zym|?(1tkW)zsU?s4;Qi?^&i1`4G2s|!l1Jzn{*eh4!hyKbV zSdXq^@4O@855*PiTXQH*o&5GpbbeQC;IH;2{eHXqHF_L*dh-ik_S5|ML2^^41(C)5 zj@~{;j)Z!tq7g^`a#0d@?=PY{-A(JFF{w@A36B?y^@`5c*M7owb4O~I&S5Jb9i74o z>aYLkHp>#WSCTp@#2S}M?W;O`whc;{_Qatd9pXR?RLoQA9w;HP%B{v?`bhc5gdRPe zstZM>Vny{WMb8Z1yg+)#xp40@fwo?#H@-5z@CC*}xbfxb*S{(R;Dym!E6Zp>^5&xa z?GBN)UJCS8q?xqkxFAYC8*{qw^$750Tb$zNC8df9F*vn<4cD!K)ZYg|G(B)QFT=!{ zeF+U}j0PpQN*w;qSdekaiJ7P+Kd}-jaKXn2uKq!mP`~NuIM~R#x$QxMB-j~SO#Ob@ z)<6ZR6d0l~vnW~ujB%E^%{<}#9*D9rJ1UIL-Hko2G>K&pD&mWw@sl3iRSuYTi8aAv z9i=MGevurav`HPOgkN2)$6n zNd+M9>$P%hGT2|?+1FMzVA`DmWm`Nhsuj>So9gX%^9vax0)uBf_8nsu`@?WslliT{AtqcQ%(3-nZs3l@iP;pIN z{NyX#{F{wHBY>|@r0%k8KvML)MMzVUYjQ8215|eUsY+9VvcR<2D*&+<^%>{dmDUH0 zG4le*1!54d&YzuE--hs(81G}33<6q?+sbJ|52dH*ytk8*hdSA*C9625=F=U1B`9WeE;{Uc4lRx*yq2l*8tXW73KYh)~*Q%FMq+Dj1-`r!4;>xn; zDtq&uE6&`{4r3yybto;tX}!L_y3S!sPTxAR&s7N1mCcH_{*c+rRBVEKA)r1dszS+1 zX$>)yL$zQ(@m4w*C=pWK6Fcqz*@Zgx@Vx8GRFm7z0sL#eW|1}s z>n1|HCr0;zcAyfG^MG0>qHy-zGVwaA7;2Aacs~;n>dMlTNctkiCUbTXa}%cEm?=%$ z;ruY3k1W=v0=7CRSFltNJ&B`W02P#0q`fQ38YCz2%q9y}d#09F`N7Mf=ZbVL5N9n_x7=h-^bg z9AhQ0seIW=yN|>G?*Ys}nDl0?!X15bmCer+unkq|d$VqB2eWAubpyzR&0$4HK?Tlf z-z5h2KAt+z!x3MvxSv}}Q|})6d#t_&#Fsu$TFNdbFu{kgmVC1c6Qb?qp?z&JRzs7% zH8qIu^|e3c?m?w(*@0gDN;Te&_K=V&u#!K!375&|ULsOp{b?MN|KL^D(q#>AMOz$? zPDV~hk8^z5SiVbfxt{(@hZGKa}BCi+ldnlb2eGit~Z}Y5-6&6y!=muFr3g z5Ch3O6F1o2EI@F%qX&gLC@$+9N7HJ_9?Y|L5{7rw>Y z!L)2KnufAL712L>6A*if9(Sllf7mnndq)L5bzJ__sok6oD(vJX;sMr4up74=2tv7P zL%d`3@!-f2wgrLqN)S`pFkA*1$cz73R)lKaalcWvJf2}1Ah?6W!a42{S#KK3eKcIJ zZP${oW^~XyRJt%79TF0l#zO_JNABf{Wom&re#>|uKuE1>@%?E&$=L5dwAi>?;-CaX)hmasa8h3ZM;56De zjR&{cnHkBj;yV> zt~xi!IF1UFKrapW<>}e~JOZeRG(~=lbk*4ZAEV7L&j9*1c9bqde6nu~*E=(a0$TbK zDKQmZ`fGGa9MWI$8r}kV)0LeA4;_tPZ18{{gs|NgPNFVqK0vYS4e&!PaA>&e@Xwbb z%+_0=Hr<8r0s&Tn9HC1t>3Wg#UPM zh3P`1virfPn*Bjocm!53pjnuRumE;Ro?~8l@Dg^=EFL6g7NBUO! zvgLPsqT*Nk+x^YW)^+?Z-06B%qSMVzq8B39A2hl7$Y}Y!N(B_o4B7XbF@X@Aqv=g) zls58jm>W4F0Mj!f8BYOijK!%w_FmwK3yWO8)ei2^|3K+zkv)0Vnsz2IFuGdThgDK3 z2JGlrVR$oEsfX^CoFXh`RvcGo{Jo0{H3IXVeJ|Rt_a_+%Cx7DNV_)@y9MFv4l9JfAdhBTek5`_&cy*|_NC zDgK!XwfntUf?zIh;=IpwJD9JJF|k8)O9eP5<~!axozO-0wk?v>Meu^x$ zdX~bM9pZX+BOiWuI6t(AeBG+!i^DLsBx&!Yc^WB-et4wF@W!ddm})qCb(kDD{}$pp zLTKQ6Cch7P4*eOCPb^$;JRw)3c%Rbwo!g z4ZSu98G2##hg6HS%&R(5yH(FgtrJru$DWY5aXk-SMLv&AY$Oa#wyeGni^z1bt3e7A zfJxS0o1O&dy{B0EUa)&INFPU=)))YKzqp(#IiNJe-*EhUt+}O5ka!zK9k$0Z|9DRE z;RYLvuKVJt8YUUz+fis!^5_l%UXr;g01$s6{1VIAW7cTEPZ@TY8HokDsex(l{G9VX zzca>t?Ab`H+_D29&d$9TJP}6@W>$>v{LV)e#K{_v{Pwk>b_3UPWg9l5nNS47Bd+s% zf18#;R6-()66Q~=#n*(>3xybato!rDq2wtZ5mmm^vQSnX+|!m0Hbf^uPXj@_yl50P zN>(JNSRa@xyi15C@irU?W5J2>CZ4Ui4laQr_mq5;7S}`%W`Xm7j%GK2-|g0f*RD2; zDY5a9gjud2sDbyr_HCVCV|4Dd|Afy#LE3WN1w(s$C~^X2{db~usp^!09D#;;i5lj> z!JX)rCU89a@h}HH z=d-_4+%@0!9>I&c)7n2Y`!;Q7N*_Nt;k0VHSZrQJ#bY;JQ2@O*mgdYs+j+%nGQKh) z0jKoASo^boVN0M6x1kHw{;lde@4g!`=&2C}uJlRRws_%GbY+)eDP1aRm8l1h9X|KL z({@_gOSWQO%KEC?_3|39H-(=pWBQ@}CH%YRx`9tE`uHV*@Hq$>6Tb9`rMYGB{&^8z zy%XxMLw66<)6cEfsLq2HNeWr$VTGC6Vw6IYC2YqRo2q{NDN&*w6A!AZSc{_5DGWO#FPQ(&U8SjlJn}4#m3~QI9yN=t(-c z)!OI2s44Af3C~SpQP%SzeU|gE)JUIYS?_hetSiWTRO6NiHE$b`1jqB;C0&zVopatF zJNf(XFPAC-a-Ar&2a^kUL}0lX1;yLJi2g9y*ePO9Swl ziBfA1xL@&$_lV(-CMy%w9;`>>HE6mH-$#Cea|+`A^qq#nB+UaguWQQ!4DFamlj8{re@HI{cM*+Zr!h!|O_tD{ERLn*MxXhN%Loo8(OMAS+92 zPd=huy#7QC*q|6X5>Wp;vN84kUt|N9m&B9v(4~6>7#>WPD8J-C&^>hef7+UF&S3-? z%qi#j?3op;O;{~Fh?HsMeL>hhL5}AY73qp%w42T2vEfhH^|5;SqDKdi{c&K&IgU&` zCZ$1=z6Zn76gM3|5^Tm00lWqpw7hzcz(5V(^?mV~{Fwr?SuAIh6-pwQtHMwc5! z*A>uZ{rr(vCF1O+)!O`gn(+$p`t;;kAR*dMVGHCxzB$+LpEbmpQ_nil)Zh9N>RwXD zy*&$$6nfC*Ya)RV)`ovD}7D{j}CZ#Rx%(y-|kl4k&tY|f@PE>MP&lNj< z!AA%u&@KE<4b}X-w&?Gj429sAc3fpsvwGBrvvdjAMhqD$;KGZZBP67@b%LYxvPB`* z((RiaBhW3!#pfThYu0!6zbO2A@fxy|n zSALhYivz=V`Zrz)Yxk&Fu3R?bB8Ma<&m&Kzqj4+L_W*pu+gtR@vI7-uJ-=smsyHWU z+a}L}7P|(Rht4jwyfK?(v-fDco^*--XPGe!MvuANaMW@$6T-CNrrUBDu?HN@t1zei zLWM03F!r^rgQx(lTd>Ob+}lltNgzy(Jt+B{RH?$R{0&vA>1L^x$dkoV_=B3{X8p zzI@e+Qu4!Bj&Sl*Y$g9zVf8JBv`wu1SEK9cDgMOgRGQC0+D1d)8;t&6Bn!dXKITZ^ zt!mx|^QBQ5U%=}jhT=?`wit3W7ig=ro)Q;R^zeQukkV^=prgC-A*5p8VC|GTMV+j2 z){usyd#^!kWF*MY6bmFYXU*G|l%Tqd>=F>B)|jGPRgkvv!~G;_R0%o^-9yb4l_Xu8}*b z;+~LyJ{oE{Nx(jpa73TVS3fVLDfw48uN+y!=DsA0zsx<>scBeYftpK{bGoHv> zPi8v=7yJ5~$ndgVDyb<@Ct18hOKj5`Z)iF;x%uT`2TwZPMT2&+VoIdtms%z{OTwTW zE(FbfMW&B4xRiVw>SczyWP-|gw>NYaE293i@lDSPPn&4JnqIlR6SAU>zmZEw6&+~B zx}#4p?%+@4ZTqsdCCmkqml8SiHgh_)1^Nti`zAW&mQ@+prFg6z{pw-5KlW=!hV#*E zlTpyu+O%lnff-Dm!KWe3>@8P!2o*|j%Z4)15i zeP{i_>M&#iYr_F*9Gj5N5P!TRNa)qNlfHq5h z5Yt?M@oi05RBbEFzY1T(g0Yr(3DZ_{xX?D5N92ToHFNIdp_E(U(3^j_&@+#0a=+@w zG3ko^WXBiVA2t>piL%n;ZQV<1{yYE~q+IEj&612q`Cb=IA+m4n&>3*SdXSrK>VlGY zKYB7R_ciC*|M5w9Mx7P+tYpAlOEg*Jit&|j&5N$4Vm=60>sknh0&Tauke$fcw)gP& zAv@vKWNI>BRm`p;M{M8G4Z9uI%^mMr=ZgE3DjRIGZ!Q82KHDB8|1n>Q%VC2(!2 zIl$9Wp5eXLfH?}fS`|$A*F1~3l4_x5h32Z~cKR*ercETR+zZLnuRSC2UwTjMU(Giw zTim+WD#&5w>2E!~%Fd2|CS7cS>Q!Gn%@28=Ji)i0*DUI{DR=U;PYhql=1z+Ail|%y zpI>~)ueFTzCbep}VamV=A&GlI(xAD}EaJULtG*a+xa>QR8lcLq~ zm+?XyIh_+kTXj)gI84nKZd+n4o@eZ_Zk8^EtS63fZM$F=bPu~`sq2B><7l)_2cp4I8NJ(E>42Y#!miH1P^eH|-sV*rDX{b?xjfdfJynNVeXWn^ZP$XSJO}s`JxAt zm@@eq^%yT~FCkBMEb1f288T(oBQBGfYCE8}3>cT$Rw)ZUy6&}xJuUHtN#~0BCY+3& zoL84Spc^l8 z+X25Z-oss%&}BM~hX13)mw^d@(T&b`>4Cd$69WHw;v)uZm?ry0uy&E&_`mNl9%QT^ zM+>Dv7YbEaJY;AbWc?VZv&bF@4hrFJX55q5076y3^wSW4Yju*WENP+#(5wBW<&Cam zx2SD!==bd>j(GC;GDa?8@}GX`FGJ5mvJCpLq@NuPBT$#edF>*%-C$YenYJ>T8Z4d*`lyD;D&~uqE3FgddB+cmvTOe(qz98S8$5-1 zs)^=eNQJ}Opql1pVGvjB9I|V|{s#t~TgI*?ERHN~lyU?y`+Yd#gy(B@063Z4hFm-k z=X9IW^?Uw^jtAvUs$b5qQ+5lr?}$hV8yjGvw)wCrho98;&FCo^(59 zSc&aeaZe0e-Cic~S>~`~WwcKajju^~E{OL1t;~&4j5^n!K?2ir6O~*wD7vw#Aiu9E zT@Z)XLAFV`lrG!cpCl8+l$=N0d(JCwtB!!hjX5#h9-(olv_y{c7q${B&?ogSfA!2# z#?NAWEwAEmzXp73RDs*TAY?ZF>UjuyABSoxY0J9^HNnXlWwhm%!R7TTf}vG&=)vc;F6#b= zKR^9hpFjM%Gw6!>$hnbN6#oSw6#{O*>MCic7>tCs?ZKlMwY~Y9i*uV)Gy+Zbr@Wtd zLdPOSqBUZ33}16bs{!32EnVmRjlA3^5 zo(zV4wY@icTip^NG{08*B%Diqejv(oEvK-Gg|(Otmsp|-vpb%BVKZ%Ro8=rh>UY-W z6fgJ~3BI;fPAxq-bMw5%pkM@v?%r>gvw9>BD&M`m&FDl}afCv+l@gc@a0$%UOY}U^ zjF}+&4@c!FLQ+A_dItw1j%%`!KB6L!Jdd46=~ZrjI{xwen@7X%wZYLKT+f`2d%^(( zVV;;iOHse_h`J>QST=g$KZgk`1>|h7Knm;g9<0e!)UuG3Wt?PE(O1Xls=>G=zCm`F z{;h2M2JhxSPVJa+#Pv3P%>7eL#_Fdw{7R|@OgNo48BghUT!uIN$8NnhK4b=25kCBS z2x6n4F3Cx^brBR@u^u)m5x>6jS5v^~)(+WJa#c^JwvG2!efn-UpRvNetoE^u{g7uf zXkzv;eEyyL(vYLX^?mtLyxpARn#y0A*d58s;RjUNw&cp(Z{%3gHB1CGZ@vlR)_XA9 zSQ+#L{rz6rb3N}>jBe&lpXTFDxlBi+Kj9w*r=Xsj=tw-y+(IYkH6fOP_^Y&i|IPc<(v>Xf#3 z|Kf~eV&?ci-+629q%4HB1QB8!RL&++HJ0dd+HuX7IUZmNt_Zw?%^E?7PlP3RQFTFU z{XFewqn`-HUyYweBmU%J5P>mhB zSu!x`*dObH@^>%3^7VY;%N}FX@uvQRA--u!^qCf|sq=ERUrMmR#sC5WRD3>UU$PtX zh)zbUA#nu$5gSeN4Ss{^trg#&(75OU=IJU964?y?mt7s{g6(Tw{>>yH8TnPC&vR8B zK+OCsUEI7;d{bXg_)9Q4loijKX3I8F4jLRP4C>xtIZ}Un)v-JR*P>!}u+ZSxZHw#Y z?P|S4y+=1m|Je6+qyqERb!3 zEfun8URvmft0^R2eB2aJkB=gZDmwbmJA22{n73C2EHdRaUQl;PeQ|_~Yxwi~Nh>`x z6!n?c+|7!k6$jK63vOgf>>I)SUNQ4ENV$CR^OA<$(+iJDq)5J4MHPxpDL2$8Yc)e( z@qHu-a2Xv`kgr5@NBf?bm6ve%qWL*TAs*r+exJq|#KM^|&AD>4RrHxz5nKm|@su+l zY2Bzh*x>%Von zJ={&K&-FV}5IND8CU?&n)PIaYR`0Z$qwmUu%7bnO;PK43&7aj!eV! z??KGTRnBR8a_Nb2D_r3!-A%>b4;~%jr7({G0~()cRTKZ+Z>{^L8p9`|XGiBGxisg` z!rR&BbJzZ5qvSyKA~=&9jyz-Gp^QIVPhcpJ>{DYioIsL8p#=^rpSR@Vm-`@ z_r-g1?G#F&ea_zkc^oo!Y>wA2g&WAA2T3C>JHP{pE|mzsZXe-V&th} z#_=@VqW_LU0d_sS$c!4yLbMwYU4a`|l`1Ga{Ll=5h5JMhQ0xMl;lT-Zq&jH|+mDJd zi!N*fLw8AZPYW`qRwOjgq&ckW($&N_?w@Z%tg1iO)k_j2=N)`N9i9RxslBr?7HHB11R!Xl;; zlcvHf9#Z%&fa7WYzW)eZ%B?zw!T-R3mVht&?!VM5$gxqw3A+H-n)SoCAGcbV_Pj23 zt88;<9EaoO+aNl;+GNo4=QC5~#r^JKfpAy1EKmLrQUrC2{fylx0 z2D}4m%;)|0vM_XJIJ}}d1H$8R!^;RU;-Jc9cu?pt<Ob?6A5nVUL^kq~kL^X~J-fAF23phCze{lVtBrYk3 z*@5R_7567Y;YF(^r}kv*h#CBWzZS`egeSPCCc23CYmbFN&{fdP{&US^P-5NpyVx2D zrABfKs#)Wlct<4UhN$8Ss$m>3@^6xrA~Sf>k)s%y3Yby;vYQmyS1ez((6L!e>)i>7 za-7bc>^0oZ6e(IO(1F(fiflEZ=^?B@{(S5}=>x1%lu>oPkFh%PjDY6qN}XB*wl_@V z!7JCTRs(W_9vU$GkL-_Z(@p*`KHG}~>ag}_`;WG{qyrxf6j+vdJ!~Ze$fFnr7w20! zm~iUNko@71G;|&B)i|5>;;*+;!XrqPcvs?u^-X?+mRQ4sxcd*ais1C7B4-U$%j3Go zG+HxoLEKrd{!y_!OlkC*_-2R66*@QSiaZ`6UtR)}Mu)+wcscgCfizd_i8*%%_wO%ou!}cJweDZeg1d) z)bTgh)c)7r)N9XQ$t^7AZadmPZykG8N|UL~;|I*Qt_p34@Vf-&(Et5XHT7x{0Ud9m zEx0~^A{`XE+bX^_>>VletS$X?jWw}+Dyv5Yux}$DZW4j+RcT=h(&-xmD8wqx*Ygi3F5Qiw31^@Y;cR&~5B8cYx*Rn66G$7*mNh&tRSCJ`RC+ zcw9c@$&`Jj`CXp8S`R`&jvIOx)ey(Z*#a!R)`PmLJs{lt-sfGkj?nU&bt&~ z5{;bY8$s>5b~SymH$GUj5jwa9-E*$s4J;bXzafx3Zck}ghu{-6N{ZEjgoyDLh$!ErJs&KScuK_GX7)#&UGVZW`cvNMCxccXE&uAQQCdglr73q zxVSFah^nrI)NCM2k4r9xNaOU093xB7&<~PV&tVJCQDlvH;U?bA^rJ+*_Y~bzA~Dep z4!A2s-lPw&f7;7U1?uxdWAIlxKTd=_@i2|Pa~T9Ti*BZ(xY0NMB*Q)s4DSdj-BYeF z__OhMfa~Uh&$Sj{9hQm;a`A=hKc6ZS;_}msucBjv2`N2@Exx+m?tb8K4;dh@D|b{e zi{|VHRlLJ7x2X?OY<7!LOQQucNVmvtQ;N#rSx@Ul9$D($xL$kGat0HxX%of&@p{mL=bI}7hoJ?`XDiBKH(rY5l~q3-xfHR7py_rK?U!EKQ5nJS1bY_=zq4Kzde%jEVG*eD?otD97DB0;Zq;&1qf?+l!$m| zAFHd#ezbuEnZ7r!>m|85`~6YLuU4kIEIusQ5UoSEm}tgfC=D3wJ3L zd7Jl24t})f&G9#HF0Mwyrgh6M+h*Sky)d2JjCr_e%f+@BQv-u8vU<0?`cU^tIktdG z$zrXl0TYx@;haJH$Xqre4kdX4b8)X`4WEfWkx6Z>z{XS>{KXl8hIxg1!!lS?4lfu2 zJ$ceMgQupql^PoJOLI*IPjoB&tl^V7Sl#SgLAq^4`SU4@QRz4*DUt3A+l6$?Z!}Ij zXUrN^4#rV*LKrUwtJk*!!`ecg_8_-8X9b141F<)_crDQhBX}`Be{+w1<-58df+yFl zGxJc-J{)gW!H zSJZ8#{b5J==LPc;XW+$@1WGv(qI*7b_0E@S7V=q}&+_QBglcM%gMiRm)VzOplL?HjNMvuV^gUNO zrJvUM$*q8U%!f7B^QJY1^9tSwAys_!PSYiYdCO{itdn5AYp1M^5XR?1n6LuE71b@T zBu9+VoV=SK60R=_yXewL5UXzKwAkA9e3vk1JF%K43)k5$&t`Y?TOaqB{1{KM~+ zK{8K&ziJyhOsZk31@YRNZ|12?+FgUsP}^V43xXB=QXzy(s3>6*P)K<=n}~iG{UbCP z(7UjX7j;Dl{HRydrp4ju#Rwhy4p_3e8it z^XM?;dFP|;FaHzIU=U?UlvQG%NoqpV!#}a6xFoY(mm^D^6AzN7#B$ z*h1j^=X}=`gX$3+ip8Q zgYMUONml8hT5t=$d{@4yE%-UyICcaixKQZ}B@i;&Qo)>qw|i}UXb5c~9dD1Z>Qv4h zkGtT`?vZQ+vtVe;bsdaphqr7CHnLj#@D_6-&)t$<#j9JSXH;RizM19Up0X)$ zZOcg6H$0gTJL9v3w@0v6`>Xk$8_q3-b8w+arCoa92yE*UBzcND%p21+`b)PMx@~adwiG>`8nhtw4Yc>VgXI4 zO+t*g4{@|~(rwwN)Bg)}| zPZMdfRuK;i`kLH;yy9m!^g_ST;!7bU7WuUJ5|o`bzKM7wW%!-lL)VMU`S8*6>)?S* zid@Pg6`07d1#qjF1VjSctjqU5ZLlzxE=fnUP7dT!ljGjN*d?<=Ily(tomoR)KUJ=) za7rD_TOsK%RW(usOV!%>r7ILgWBy#m9SrU7qf=+>%CqyjMCD;Hl?$?@k06kF<`%p7 zQcw*Vjm{Q6+Ojft`zRzIuFJ{PqfHRx#L3(+iDtePrT?s$s4hp zA{ujd0Eaw~mx#o(SLKgUV_@vwOe4iRPRZI7&WmuAufY0!YQjJxlE*>#!7}sf+cIzR z2;)|ya4|ZU?8R`M+>JsDXu1}0Snr7B_@!?-m*y=7Nr zQGGD|K^d{`fS#I;vwm4wPTUg;FDha^V)ve`3>CR-wzN@m%G^T&%Xvg2FfTqv4S;0c zkMt#RJTsr5SVh~t%3L0{2G5pAU)EMpd8hq+!4Jn#?2ZK|GHgMH-yo5{o?Y%^_&O{U zvvIIGW?1{n^AmPqu*MkSJ$forT3O6IEd(hP>6Tmd^&1o=F)|#zQZ`MDN{qcJe<%fC z9mrzEHps2LnZSVG&CSCY$xdh^4t2)qc6w+c{TLCzFf%nvdw#jPY9%|f)vk@b(yqlI z*OSPE<_T#LfJqGktA|DlzTt)D`IcePm_w3dFgK3@4o!2W*?BBWX~&?mmyVymyFv)s ziBYKuFJk-19qJnWIX4LJ77O(Hc7|fMTBMVP7a)D-EUhBCpPvXQg=EuE6S|6eHnP8H z3ZAVJdI*~VBhdzI*?I=<%f02V{p99-Dh-|OS+=4NqX)KU5Hg;Od;orf=7&byijSyo zKp*YqZdWQA>dId|dF>@MqF)V1+Bs)=hk}T*Q9R;qrth20)eL?J>sdcu`&*O^+VXin z>Zd_6;<@$U->)%=p0rY(0$gVnpx7>8@C%Xz+&5zIyO950bG*?^An)k9zDliyz`ifb zv)?3Z$E9clfXZ2Okoh-_npmFNOH8V;fCG>=`~|xwOQnB>q`G5FN8;TDkLc{y82Pbe z0p-Ozga#DGbrEAo*z3b6By}k{d;0_2Fyg1sj_n8DBk^kOYjnAa$P%}H6~+RE?q@-O zfj*BCn`ZiJrO-%$N#Y@@cbdX~t;KL?4no-27T|}({!2qt(e0re?C162n9HIyu8>&) zpZ!Bi&)J)P+vUH`G2!<=(zZnNA&O+rIh$MMg`YQy<+E!gBqIe4KG@8gg=j?+_AyH{ zsxUJBQ+NJjkSjFU{p+R4fyJ`J%HRq;h=^Zd=pjn-bOOBEe*|uf83u(zZ~{Xd;Ih?6 zHmm6A&r_lRP!vQ_aKPJ*CslRzt7U3H36^T%#8~V=+*Nh=ZYwUHe_BgcptYx=%Wf%o+K=?WdcW}jW` zeuVYW#EArlj-_wde4lA=denNE;ljJIF7U~RnA*{7W_=|9XuDi?sFNGeAvhP$uBc_I zg}xN3cki6;GUmI&_NNj)EfD;-jx#lYuykiVJ`hy(S3`@S_)l}kAp=o#PW)Q_cimI1 z`r3WC7RbiMHJgawyXEC80pguk-Z67>tlDKtBe$s!gN4WrxQt-%4vmQ9NYu-A78Js5DY{$P(0HI~M*QW&;3{mLonIZC_qV$pzu@~C zuQ7aquHB=Eel>D zgkTNljeY%A>NI7q0kQ!6sYMEW_q?M>QH6-j5@&@uBUk$Pv-_(;ByTUWQhC?B()$3c zZ!-b9uj?uWf&_6SCqEaz8h31@tW~RU%OAYR8Lmi$J?gQa+RV?V%6uot7gJuesF%wq z<%8%V6Dz}%Gbxi|HV&F`}S zj=xb#m|u}K>25eKM{JdG-&=M+gyH?DoINvV=`yc&TD8WLDC@7^5c_<_E3J3>?syRf z804Pw2o>8l7TNN3{g8vf!%qX~Tz7@t$dV*K9%aT=SP+-6@#4`sZkwr`MBoeJE|((eqcWK z=+R-P0KENdmfBoWot6z)W$W7<<1DCqtNJM?C)&#|IlKe7JasG9zP#6e+O@VUMc>sF z@Qyqs?kID+ES+AoD{jf>FxOl^l|ub5f7d{fgtj`@h7O7bX-}i{XGnIFfzhpB4sh=9 z^qys;@)$b|+($n29*#aLQoK9g(a2a1!=ct^v+Tf(*nv#spT$Fj5WBi-<&ei!?sY!D%cVz%bET2YNvx6Na!2 zardzhXT6ssBzBh@GVqh^NzaeL<2X zsQfjjLID8yz5`CuHI0R5#)AKk#GPAOFfnXDBVW;yr^VcQ;{=ic+OrV)ws~G%M2V}| z3X;b}ebCC>Ol*I?Nnajr+yD-SD74;20kt-O>})P5bm=ig5FOrJVh1m63qyFCD!*gt05rfJkjU|=2Q&}Q)2jMQ}ba&*GQ z3SL6HHJ~3sqHzU@r8O^}P03_FtFK3b_eJ!=PRHcrlTucS+l+BMgSrv(M}Vt|kqAZX z;Pl7gXe7p+p={_Chd1eh>7*O8jWx43TTh#av<_hq$2OOXwcapzA|b~yNAHj3ElynJ zq#Wwe2bNR8jJ+GhhZj3rA$Nt?$QvyE%D4QhIDO!8}eS+p;1-m zNpbSTaXn5-$Ly!#i%Y4+^G(1~ou2`Swfnl2ST+ZZ zZX)Xl{-!X#sBN#pB<#VEP~w`W=bKsBUxRCN@l{E1GK#aA@E5JJpt}UM)DHQi$oqi< zB@%(gT2%R@uOmJ1{BdV)=;WIO9<3DXaeMf$$5|h8m}n`RHr0@8{c5ObnH*ISOr_E_ z%lL+{t>m6}0qBX?>oyB$mNP^Ca685ietr_u#aWA%7zu6Z`vt#-3zd2G8ywh%Xgemp zOWj*7B!w;%%xAJ40$%PbGALO3QyW|YpCP|#Ib@v11zdPO8X(souCaB zas=XT|8w(e5GdgrdGqN_Ko2PrVXzd|TRHxN<;Ay8*_2p*RD?w$y6$#ZLybYEJF6_Q z^ElE&pM)p`x{ni~jeQMm=I&9E58EjhXBOAVsYU!`t^)~Q_eYr$Y0CZ<<%jUjG8E?} z`XMg{v-tQGrrA}}-;57eTgph9OiFh*)JTBxZb-(&)+nZj&$1LET~=FnkDrz|=|QI5 zA3W%hIjtw;QfhhDriF5y{-(gw<_jAV^QQmcH~$%Sil@j?V}uuvNgNI(UqKw&pXlXgHGgHKpMFJ_vOX`5k<^%uif- zkyn-RS2cY(3H{Ct(iEO^RRI;E8H4>H&B-r?;0- ziJB!yJS%b#F!l(^RYFJV2h~L$| zB01bJ#L0bp@BfZY2<*|&Lkl3g6K}G^e65vhOY0(=gjoAqsgjLeAv!hJOrb|c((c*#yRaen$>oVa`8jEvriAvlixI-RqJ3I|z6K$#>c5e~&(pm3JkN#4_asUqe2V&nJnAU=Nbe#Q^4SByiNvCTk0>%;J(TrrfbJjd``kL|3W4 z%LMSQP?98Mkh58Otu0?knWa2?5TL5h^eCYZQwfvV$QNZg|GPW7ML$8n|2%QMz1;!9 z$y|??CciA*X?@_Q#(JP&7;e=sam4aDQy{++?r~iZ+=z>0>$B2cpVLM%8*1PCN-cWr zmN4-ogQZCZoQ_W3H$E2#wweKl1E?CPumC01C=~LAF$I=1Q8aDYfdVvyxOxHVr(r9^ zFz3A!glB2(_J9Q%x9a82t(&*HN2t490^xo+lWzit?(^#@atAW7ty9ms;<^1+a!CXQ zuAa8Hk3Z>LoE>Xo)bff3+M(C3Jpqr$f4?+y4}3UZe8qHF>M}fLjdlfL(-FLj`MOWF z!|b)-QC9@9`f*(E*R?PJU}S3B2nZ4`w9@pS+z^QjTE^qVxHxG4Oq$0=a)XlOWNp_rvE#t*?$~PKKK2sxSKBG#I*}uDTAl zKcN4XQN6#kaFAshMbYMqxvI;zou2ETM0OE!gE6)sqsy6gh*?zXeWZ$k%z$Wg9*wOU zj_i<(jQcmvT@7|r4A;&vjoJ0EDYMcEfl5DFZITuoLc=##Ex5Pi;$%~b@h|AGT>=4t zg#H(cx|m@>cl4)2GeB0vVchcoIFetql>hg_ZFuJ{@TH6Y?*Rym2YCR7C9DxO-h`z1 z?*at8jAs+pNCRYqyLOm>$Z$2X+Y6R#t`noO_eDsB@_8YSHn3?PT|H1oEJA?$FnP?d%t`PN{CwJ~y#OdyS7b^;{Quei{-D6P3oLNV{bl6+KVCE<1HUD}31y zTza2chlt>gUPj&$AxW$g?&&Q;hDm?4tw5$Qolkl?@TC8Cvb5>YOm~Kbc4Hs;ke#up z=I(c{X>JiG8HOaWeB-a^NAaP{;xyY~Hx*F;nUYOxzCmE#j2$rG{K!bi-TJMn>s`H@ zls;L)@4mhtW33eaVby>@j zsP%CMqPRf?5D9Yq>CS&YD{tM{67T@@!do{>NdgI}DwF@jP6w88Jfj zOOUx9<`~guJ+Ja)t(z)vnl^N){U1ezUHD((hbtSH=u3{T))idDMjFqpCr%zw5|kgY zcAn}^u$%Oj`=&}bF;}s?vj%^;CoRUF%(^|p#}i>C*}HeIq56+_y^)!sg}vJlux$iL zY$PdIwnX#XBd6@j*ueH|;o3@n3q+u7Ao>NpZUY_5Z9OYWL%8*HK*)t1IPQ)N?SJv; z1ObO1=D(D)xX0lz^0H*Uw)PU&)eePF*<#DnKv$vTZS{AW z?_lPfHZp>J2s}hUq~Dq6c6rItZ6#ia-+lLLhu0Nj-C^L7uUQwym_(R}bwKD*NEi83 z#$il8KWg$Fm-tWDJmF1RZ`6~;30Q6rY*u9g#nNQ4wGup^O5S}i)|HiicTcU(yTYKV z24Rb&ef>LK4u$Lwvs?MZqW^6p$BLb=8r6hs$0Q3=zU{zPc8S`-+v%DK@UNM zQA;x)-M;qJ#Hs{UOShCwi3mFi{>pA7)1_52dA6upJdRp1FJAP!V7_NWJIp6Yr-<6{ zb0`=52*zx}q1d)_l;wJ?e$;nX{Xx3U{{2r3_7>TF$4-ifEvrSY782ANc|BhY{uS>Z zPSB`sR|x$WVnH_l|Har_wYAkoZM(P>Nh#hSEwn&!C@u+31#2np4#lCkyIaxX6eupm zJ-E9Cx8Uv;0$=*P@A}rU_SO%`#>~dN?>WYGo#(IOGhY758%#Wk*km?i3X((RYctW+ z5_U3^1W?GcJ%~F~u>?o^+MDT*?KuK?hwD@ZR{I^2`kGWQT&DX84dV3*beZOkRDQ9% zQ7fAS6qADscd;g!d#aXk&(9OC0k%tjj4{h1`8tA~8CKR?&y8(IKDS3mJDy@ksYqWx zQ+i0i8XuCSwqa~j2_;o|Fc3@nZ5dmCZhxb2ROMM2_7SI$FUKNR{+CW2cKb-EARP{K z4xto9+|ds@RmqhT;IAQES&IG%4eH~+p;cxHhobBYphNVMO)mZvR|Vt42WEGQTv7s! zjMC_@9G5bcjYO?n4j?IG!WsuA+!qyo$glUMg28!`C7e->X`4<`M`6zu!G{}RCVB)B5%0Y($l^)? zRw#nm#9S}_#8kbqEtlx^rBeKQ(DQ{ zi7zpRdX8{}YOk~GooY^-`2_c;>6ttdAs5=pi^3Y3 zpwlmET@ZoS$ktyQb*OVX+AZHfV{*h&%^AQsy68ZpLGg59G3$}s(FcLPQz5P6PoIpd z_DFrgv6cp7K~|{Ww~aEWKu+vw=CE|(A-2aHjbg%wY}>lN$j7f0eNeD*t594~@ReL(b=5g9JNX}1SF(ig(-mJlU~}}Edk#_ChAt9(UxJT@+SBzaQ*zl18+~Z-J4JshHx!tt_={3ytDfq^ zbKD&)C7T4=O0ERtYz;l;n^z6?0_EzPx^*(rb&8mDuT6BLw-5s{`k&&ly{eJ({MIn} zfNM_Q{at}b+ZR*zl)clZjs){0t@N`r2x}^U++UjI##pyFt=6k=*(*?M zKG%$4Z7WUgIyRongg%ZNzM8Cm&Zl+u7M$M%PWEmkizU1(O9Qq0Q|7i>daRd~B+aA@ zPgR2mgjwhh1*+y1y!UN>CySY&YVL2Ub_?w;{6$o-U(JdT3bbv|*>+G3SYV8P7KrwT zmHNdi)FkeV$nkUjXgiVCg|1HWW7Ad2y`gwrK~BE&XjmYzlPqLFvpFXUk5qHwsqHAAn!tv1VHTpE5%Q1{eU^!xOwI(;Z$EF3 z;O?M~tWoWaUW>6wk!*43E~8_O{$p$Z*{A504m03UDTXYWhi&50-QPgj#G^i<&^jT^ zzr{g2G&y%l;bk;L)oTM_FDP;td(aRZ7)4_y+;#m!GCG9FeexeeB7QW%A7bit86(7W zF4ii+|DX}vspYKtQ`N1LOnB$#eZwy8xIj2jv7x(@=qZ2iQJaRi3}x3UlBLvN^Tz6Vn46)spqi0%c5h1NNx5*LbaRsMqsidn?$tl&d+zu|CUeS z^$U+|;;stEyF3>4^8(23fCS(>^*C8w2Ql5pp?sBRoJ4ky)KUsdbPkPw`l6OUALrE0 zbWP;o9sLp1_3_+mWjn5dFXkP(rJBO2jsT0!0VKr4Y9j46d|58F3p0O&T+0<7siuD1 zR0A`USJV)FM_NB`lURJycK@eO{if<-^CY%aSoE9CeYM(vM;07-4j8NFuCyX=QBgpw zUu?F!k@puhi%Q_Rwo%>YaU>$@TQu1rrvwh?s%f{~#&1=twe1+wJ_K7Y-9mP4l4Red zC1IL0u_eoQov{f|qu#SF%BoXyeDf%LzaPyf=DlO-W!tPe_~Q#- zo-{&fr4Tq249amkHecat{BelIviQX$fz-sbS&zM{1ZhHTR#_xC@;>lrwTc4SYcK9T z2y3RT_X_S$?o}WOayvcz1oL_>We@z2l2yI5f96!5886VZo}k+%lZj+=3H6-O{11ps zmi{~s;_XeoQ|aW})qI1@gi=l-0hD7RDg0Y>qI^z|e5Ge{ z3uM2a857$o3kq|t^FB)3Jcl1w*<}1PqbBIx5VT82$7}js^pmPM)sfwxk~qm1&r33+sYmn_K6FhI*n4c{SZO) zg3&~HF$Mw(-CT#THjT~boA~*I$8YTJLlr-w4bFtaK=$Y3Dh~TOS!K8U zaZdPhBtK?kO*R>tad0~*I!Nvh>ih_9dC{oi z{fH&BuFM^Fwhud>I=Py+Ki=ia*wS;%&{K|8ELi5zv75ki87aY;EVQzmr-LX^QEZK_ z6V)4f`8$FN0q3LFRW^A5@dZ2k7CxMSIjk3X`_rp+l#Y)?KSzYVy+l#K7o>O_f1wuW?@0^y<_Z`aK(QGB-bAu zy&48OU2$J-sQmD0r9-zyN=7EA**4cP1YfjfIq z>gck5t~vygxkl;(clJhnFAW&yEipNUZOSY4dyXpe?=aOqEl3F?Tx$mZ`n8S{hUl5F zISLwZk3XZSjNy|a8SGLR8igup2bzM=DWg$R83u#c*h5d7R3FDJRFA38g= z`Y3#-*ura(`V61`ZRB%p6=B_^&hoEO;w$Li>+dt3~YMo)=E z?XAcD1PUWJtT6;qn7wkF3%ifR**6zaN*=g`iqI0enGZIl28b)v_UIQa( z&%?0NJ;75eXt%KJQiOlkl6G5Ol*&A=W}>%yoZ&0#90+>tIhkyaDbnWD{FIogkIHH9 z9~N=5xWkhSI|dNnRa9`^K=)D0&%%*YQ}8Yq-6}%%U*gwY>E5?786{pG+NMAa1DxRb zg)zw8{=>KvS}jT~IKft&Mf*5f6x|pii4oK1RoJ z?cFm@w&M)b?uw|TKl*}R(j2FtrI>f+Ex{|Z7(1sSCUWMw6@8X+pQ6P}<&v|!g8QFt z-qQ$SGsppUPfn6tJjC!I-X;AVj#Aza19Ti$fE|u@3t{gvT)F*~OVu=`EVLA=e{8Y@ z+w%W%yX51-0JkbCK~E`XLh8-Dg)`#+e6m3MR;%`g?B)$;#b{b#ke)pdI@6#YGjtGs zB;(w=aUF>C$EL%mSUxM5iwSLpac`2=^P=-b2m55wh&3#uWFBA`Zt&&q(kW8I?1Je0 zv&lq|K(l1)!#oLF3VcYEt-|p>Y9fG+{&~Oitk}nL!nt7)jP9Z}kH|T4Y$v&X`<$jY z65?7{UhaFeK7A^F%ZTq(y{%MTdnr-zY(jrT3atRo)idWR><*Ze6%x_PBR<&HK|>bB z=RXOL1ZZuSktZ-vv$X$sNsEz4EAIG~4 zj3TVzwsSFi3?4+k|#m3m`$iR`49MD5~-20diBNWj&bFS>;{*GvLvzJWhpLmp#sE&ruW0-`&Lm~Cu z78z#la(!+Q4C6HDyN5nzD8w~($=d5OR11!Nq9hc6k6b4L6}w=))zWOQKsQi5|6ynt zsM5y!L&&{Q^#fwniH@&8Kg;)F*vO&$Gva3?Hol;Idjjc2eKa^X^^_5OGyp>-gy^lEc zy8|d52KC!WgAZ%RZluibD&lRClo}?WGX-@EP5V?9pWS{d;WI`6gVCW0G@*K`Zl=l0a(g3k1)@%66$c4_Mk0t;O|iFI4$ zgi>e5f)x%7Sl&w!f{ve-SWQ%Q-qaPs(kCO{zILLCD}{+lO6Xwch%-B+08 zYU4S15cA!D%nHw!Fk5mBK|9n!g#2O%-1n~GmsML>UO##acOfbXZ>HzAF?SYnsy*mT zuz=2wfBMNH0dSRe6Q&Y3nD`fo{<=1s|CIQ$FO#F{Y-iGN1^5u2@ddcRZDM@Bgexw{d*(#Z8W=VgYz1Ddl1*f z0tK|CGwqkdD`tuO*5fSY4 z^?dMWJDDScD$@A!cBH(j4O_?H8}M;=HDc+ggBzapBz^6JXcn=fF!KWL3;JI85NDu+ zDDKz4?qc%jCVFnB(^om3X48}_A|=)6#PxUQ{9HDNb&NLlBdvwpj*<<*eOK@t$&ea? zA5TPrh(rFawh&%@h|DA$**iu zfjr`r*z>!XM}E#SA?*Ax;GH^miHe#5LH2U2n&FadXks0gYII^96Fp68?a9J%RXT-a zwVY=3hlszWqA4PZmMR;)=M&&rRB=l(A3;8=EQNb^M`0>a-~4Afmxsml*W~CwvX~Zk zDXL!oJEC8CGqPo($1A9+q9B4Mh)C`V=V~mb&8QTPT%6*PHE=%nqMC-Bf7?SD25{DN z`{nu)Z0@EK8~Xns=Bz#Op*i^kJ{6EnbQ0IXX76_WaLt@d5p$gTiL+GQ*9dC}fMiI} z&m5GZN93n{YuUZ{;nB$TIy~qVBO;Ts3CL*3t00+ea7E?U05B%OjEE!QwiR$9S73K6&j`}ix#%B#z0$#E4GExx(r(}3x&{NMjatd9qw2enKU34*hd>RHem=ib zW7T)UGnn5TKUX3v^&Mn!>T$nIIoz}>4v{PQm?$#3ADT-qkjt}oVs>~M1#iVh*j%*> z2)=PEi$s^Ay@`%L($0AyAJGBGRF6`LeZYFhP^oQY@&@bM^#ZN1h2{cb4ADvvjw-VM z)v$)t1#~+PpI63y3hC%z>j*yX_7uYRZUN!pgOO$d%(J<@$as(qnVtVEcCR_V9HC5e zmFU$*;R6XU^pp%~%@FVCjIlk~fQzN%1)a)Z4F!6&NQQBblpGRrrf_GGsQnOiPBYj`~T+|q^YuB=3H zAO`edGX<+v{7&#jsj*np0&k5sP#LWxw^GR7TIAvV$M)a2YN4{>u{6s8Sf2jD2gjq(j!IJs3KXyW8Z@!&`~NcfNwGrJ9*9 z3Q7pf)Ru>+PNKyU zwI}3VhS$=j!I8{}uFD$*eWw_PoJu~sn{@t|!S5zMteMJiqIhwL^vIMD3^Moa-IWp5Tsk!}xGyPWQ4KV?IPVyH zSW>3AxwrH2MJ1axkmeYqu7Speejc`6aL^Xfvxx9`K^4E}I?P~wCdR?=wr2QN_A7OS zL4m&0QAYqp?tBW7iQmcq#hCqu+L69t0RB_4;nuFh=PCug+h_JBkzDJeR)+R$(b%b! zy*#A#dAYg&NbRqYmR)@)YV(NlC{l?Q6Q{e7u6C+zc*RR`6v@-K3{H-(tI(m4p(bxV zrngjIVYCiw5Oley;%s|Yx)CeNNgJ6Jl6dc{xX_9nY%!1LvKfdw`L&?qDQf;c6xNj7tHkfB>iXUnRd-eV;!28H&#cK6Lfy6jxH*e#!Ry z#s9xXtVH6a(Za!;qb|h2b@6XeaZrUbl}jN6>Vfk+&c*jhF|-ab1fRiWqZx{HqF#wk4$w4 z`3f9T1Stpa)wo6KcPYnKQ`d9VTK&pNCAiY?ly+iB~viR*T*>7^}b zv0R(92?e^ew;AXV*%A`z#MZy5`>iFDlUNo;`>EIysO@ei_Kmh*dv@tr>2YB;bvEEm~6 z!u+LUuNKz~?zS-oKU7OSUi(B)S+-QW?F%Vd0U&QZee9R{tPCuG<>8Atqsk}5Ev7$; zp|!<=G`6RR@gh5q=|+naJjkMMJUkil?tIMW$d7)_T7c6`sBgzJo=dmF9ky{ZzhN%a zL;!vaqq}i$7+!f`jsxGl1(a46A}6OqQlqUO0Cg2i0B2Ur!@YH5=0d^p!nE%y)Q6}n zS81|7LH%Bj8U1Nbx|@JZn4cpLd|i~*)H(*eFT#5iT~-2V9WGHu^RlZ-3|k2;*s8B* zP?Bofa2b9()JpsM+#Z=z)_Wwge(;v;potE`(`$`XGX}2_vm$6kq3GoL8$yaUihm;< zSBjIpB*)L$th-d~g{R$KU-q>*g<#{+K1|!wDtvD!isqlb>;)Y1c=hr=xvwJ0vYos_ zD^x*$S$iE?K9)q`342=SvJL#&Ir#6pYK}lpd%erLSVJI5*{%=+g6Dfi`g_C{7W5Lw zi00mw&n{kFV-eRrQjE%IH&4AZiCAl-U`bu3NS!m0MkHD(hysUsqNz$gu&F`wZ^7_= zU{?RLG_lXw45yr>qD*Z@@n}sam06Xmg0FM^!=4>NzRCnGE4K%<348K#(|}|=BrxHN zlbTQKX~GRpWgP2McH4SyQvcXBB!Aq@oirqE6Mt4}VCT~CZkDXK?AGMxRD}VyN!MoV z1kAe7o=ht>{qGXBLKe1EI0(U7$?(0FVLqqDAw; zmiqYyO1C6{Y0vg8`gYT?(VR+T4G8*jKNXkwCCTuJZd|IHn{f&&^trLLzadTA6%4i* zQS5C~1q>BSs1?sCcp$aiGSz4B>x0q)o|3!62~ zjq1$xYJ9_#VY<&c>{2cG7OI7l7jZf098fz)uiqIUywt6Yx^o}+A+GU7#dv!B|4)cl zZ$muangK7}hbevj^LHqfGTFAVIw%pu`+A5mz2%GpDKA3$rhU!S kd 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�G6^cwGYh(ttIwX#Itfeh1+@#?a%pIQtxlW=G2I!tcK6CEGj zh~>mUD@}Z8M9}qp=`SGBk+gYiFUEt6icm|8aO^m07ypQBs>TM>RrV03!FCtiqI|Jl>d+;So-N)_7%(JfoGcxX-9gJ0}*t=B6OyeS=medm6@-19Zy zMTTcj9NdxUwKjHJ^5p9E*K967Ct!^&%(bl~$qct)HTnAcUX%WSNNdqfea8t@VhbAh zYW`+`kUc{ZArP>1*ljK;1k#O<#N~H&FT?d z|MeWb0WVb8oqYZs1>;r%f-MyF`w||^9(sV@(-h$e#g6VXo$-fe8!nIr54yqQL9mRWy)Q_G*t#|SW?)-%)p)2)ew>Ls;NHcM8+y4%Tr^P4@ zn{BiLhPH?6@2&zS(`da>hw&`&Qw$kc*-Lw(IIsQEwW%(#b9qnXIg{-&2Cq?*f!sF(Ya?_@VvipOP*`75deNuiEtXN>|1qCaO*xZ*U9DgzM zgNt(KFX~!m;`*KdGh6BN5mRKGWQvG}gtmS18AK!C!yX~x`RVLO#O$_CSJt9dI1nU~ zA9H*BYue@S^2%dYGXt0;_1eOSFMnwU0n;w;a8BefZ3O!9XIA&?GVQT%uCb?`p51H z`DzHfi|5H*Lk++QBZG$s+f@0!_VhiRYuhX^K_8TPsCnGm39t@@W*RYw`r7)mIdjEB z0K+Fv8|q#+D;TD1up)R-TSORTeM*#@hsU`U`RZM=!*kcH1n)B~<$DXkTb}X7;4G%= ztm_enmUx2ehcjh#4v2W&88ClEGGvz2S7S(EOyK>5vO@pCdB~!3CXVt`5*IziDoE$v zefRd$!P7%&g6^5mj1DUD$>3V|#Sc3O{ZF*lEeX1h2k#KcW?K3{B%xvd;Z(SzKB>U{ z!`|Fm2Py%Ef@j3uEZ+Z&wBg4^6M-O}?Az|Lj=&pT&7*Oi8-30;8D*8O-z#9ByeWlJ!X@0%@A z@C}ZuGvJ!Yur7&0t3hZU>o-%CE_h>Bz=~Dkz0R{)jebkU zM$^tK;w7O^ZfPJC*U;lq>5SP$P5E+Gx!;lr}8p_L@!<%SS$Jd+E*!Yz}c;yUgbgzIHA6K)>t|YNDqL4h&Fzi2;Qjl+>Wrfl{UE_VmOS+MybL zeMW!HT2Zz+wp6lK;7NJzZLbK&Wc`VD`W$r_H~!9Wtu2>PE@TVrh^c;<4csFC5oNn% z7_^;dEhV>e$2w$-6CyVjoOH>igZF`akQj-F6$haj83jLJ2;_|LXH;iAT(Evzs_fz; zpHUDn3^MYy5^2_yHR!=8yHe63vdnHo5S34qpyL7(JJz48DUyajE!lo>lVH{S2Ablr z@-j^fs8Kb7qyz2HYO1J*y|*wv+s$1P4l&k2HG6;xzAys9BUd^yY|G-(A;nj|J$~vO zv1_t%s^|)G#slcu8niTv3q4xY{e2}`EYj4vq9R;TX64VLTPyp_QVa+ye(%*kAkg@2 zD^U0?>3A5@y_d%EoW|-)U~85%$ta9GElQ*4f3zBz1&Cmlru!X>D$f`DB2-8L)+4|- zhcV6*?0I_k01$e11+)WG&=i%nn}L<+;zVOrz57>vOV}%uNn)*pt#m>wn6b)2NYA=6 z3AyO!%I)?e`bUO*#WsT^=fjoR3SAM!Ywp3T)6N9YQ#}75o&mILiy800;dR+-!4M!oW|Lg)9|7p{n-(2iHFc!aDmtm_ z@_L5`o&ZMXLrVf^bMcb2$@aEP!+j5Ldrux>8y6yG(^c^hl(2FFn>vi~0gasL^z-_q zbu}13F8?52h#a`AfJL_g9;ZFSwG>xlb#H|$RL5c-niIS)LZ(~kkb98$o35~haX-n| z=iU0J-x|~wP9d$L`9tOMdm&j_leUOT%xH97KokryX)6Re!29ZceDmir8k&EJiKtN5 zDIx%`TYkO2w4G4P^qDYXtBlCEzBLS60>w?@tAsF=LI~)9{ne_2>QaajhLjuyB6G9jTK~?_1o8N$P-H#}UT!(Kz4d%i z7~`~k(ywNHQkk!1@)o|ykLEcMb?))k%L5aCVMAf5%9egC6OnK6IKTR9Qh4gD5e>%!C!mu{R`v zRNoS<(ZR01PB6_dXo9<_#?q#2@OjM1ykXMuA1`KX^au5r(VD~`&SgOdm97~$n+G!p z(b0yjD`umbLirEZsRoirKptf@tNu_a=Sft*7^KG*!xpxIc-_b_)<4kw<>mnO*0#ro z5pNSeAUZH*TUbC)Yq)<(Po8o`Mwg!K@|CiEB}kBO)n{VWGAyTo(6FwSFNbL7FMq82 z9*Y+Ci<)z`VPRC3&YMrgj`QFRU~cixYGdIakikWBBA>bQno4i)IopelU%?7~o>{yl zY!4`J)&(|)z8JN}OR*lu_rBzh|~@{m&bE}CGzZ)B7vk6>Ny+Rgn`4C{AZUcfVT z091*V3U)hC_r-|>_-JX7QoV`21w3Dqq130plb^96r1hPFm;b1G%8_?{O4#z3mCkW8 z(hymioaC@c()u7aL3190-Kk%58}*rLSR@ODPc%25M{eARf@rwLloH43$iP{K-<%}~ z7@?Vlp{*6lCyDW$w7a*g_G3)IWYy#@QDv4BapTh_sZX(v7s# z4Ba6hokI*QDcuA7#_RpLzyHAfa30NrIkV3?Yrpo|*bel7qF9J9dt4Qn5hpf17f1H4 z)x8N7T788LprAPhTFh1WA(=EGpOUyS!a+bGe;x~W)F%q3=qs6_13j6sq`T~qrMql+ zI2WefjvSU|*RC6Hs5{lqyv?gxd*n+;@qLHVNB^F;H2 ztc8XMq}u(1jN<`C;VL=KkX%}~+)vOfp(gutp{!sHuN@8L$rqQJn;73%!-~q-TU0A z;!D_bfXeejzziM~r3F9ak21S|hePZ2hIcLMtY5Y87swMr2eNi?t$Gq-O!LLo1P^G^ zstP>MGg}nJ_3Unu{|G@xv`tFkwA`V{as&oyXu%C6;q1B}4#fPLe|ca-#yZ6xe1l;D zLUs5zSB+1z)+C(|JRxRNfXl_+c8chcFX;#s26ZixW- z=T7d^n-J>+p1?zRy5To@zRj$%grcu`bUI~7P(pz1 zw02C|NedB;krUD&$CpE@xMQ-FJV-}>)}KRF){4jCC=YjtYu4Hn!&;Dsqa~V)6mt7_ za4w{uaci`EB6>gOtRVpzjj{oB6FHW|k8j-LE|h*H1SOb$1@H2*>VKuZ+xku%-rR1G zBKU5!t5Aycze9o-CdG`{e~eN??32B0_}N=8M+KKtFsUo1rSVXWt}xx%tUVsrEr$`D zznKA;o#HNU%b`UCk*9MgWODYF%i}eh4o#Dtle$t7NAcm;&U~^U`1zBMV}=p`T*Q{P zRSGE6KmBGrI{39~*3P+vn(5e~BU=C$M7B!#faOr}vDuT7Q(3D&;MEew?t}_0K9qij zHtp(%x*qdE>*U9(wnKvgZYOabxb64fatkHbZCB^(%`5Z1T3x$EgxF1c9))#rmvux@ zp8MC>`vVieTq0Z8c5~>e9h9i___rV|odk0Oo>_jjzL?w?;v$f<+)t~0?Nv{h^U;cg zkZ1TL6V{$avC?@36G^nk5&+Yd!EcL9h|cQsde63VT^QFa6Hzl2i+= z=$(>}-cK$Xs=3GTCmk-HkJX8hfD+(qD-_hb175fz%F>y)P?!l~b*@+43U?rNYI>S5 zs(Qpb)uy^~A#A_sNYA>Ij}PulVxEN&DTe|P4U-sQRUG`w1WsAy+$eg+vrxv@m0}HF z$;c0huxFtPqXradjiMDqY_ppX2jaaMTm-3Sz;K9UlF6B*U&3X9_i|deV&EHC)mUMm za9o~=l4DQdTlk&Oo`+sqra7;Z=^n+0CiU5O`STdD!bD2U+%=OjTu#jS z$&2J0{??e5Z_Cd%RaX38q+{AqtB1ZZ?rKf~j1m7=={*ZR57>ssCM8rf6m#Vp*+ejv zE1@0Bsk+qt>8j%Q31GaL;Pk_TN;S-uSf~&vd$_&r>(F zkJo=eq~M21Yp-HztxW8AwfXY}YH_sE+wIrt8t*(9u;+YCQF9E=Zi z2YcRSQk`ZX`|^8ED%W?G=k)LWh6-IynW)46H2mpeTMa&1+Na?ae|H1VgKbxqKCfr# z1U|;W(wZ&LANNM0|;{a+HD=2p#oc)4nW z=I~z(+ohlN1z$2Gj7C}1`>qGn$~l==9i9CynW`2rlNVVhU8jW|isFjt>NKPA=cyhz zp%mnn{%On)m6wE#A{Mx@3(fT|_0^NC2T!q59>3&^5g#xgDrb)&@N})eE3B^{6H=?^ zSdE0=Ctejv>{TwywF@si95!iAzuA4_xRTG4fnC;Ho9~g_RxcYYLun1fdGU&YlYIyoxb6_VG`z-UU(N(B4!npGK9;PxlTsV$hkZDz)$zTI zfe^OcpS1!`AH*-E)Szq2>Bo`v5mJb#h98OkcF>@0<+zRG{o9jZRkx4<5GD}ij%-Ni zq_&w*+|xUkAomWP>v;zZH-iRTRChe^&C&t-x1eYbe6-{?R950l=Kqe*t9$1?65vDK zBCESuWMN{1Cf-qB64_9KmuHPvSB2)S6y7pEaQ(8a%0>0sx}53Y`>4T5Uoo|)T|V84 zb5ag8**Pz%`7{=)zQ66c7U!%aamzmN5jKoQ8GB(rR-q7>J+o!UM)z`8U26%+^$Sfo z3!g3hBSd)WkmTV@47`AvqH)H{CzYj`|J(!xRd;$%3>C*!7*G(s$w_SeLi+)ImA*s6 z^FSyLrD+DOUdF#PLK!7uq&F>8jJy}V{tE;kTq_6DTR7WNu~An*a2liY@uRs924B@t zsO`vn2Kh!UDAr2>y94rS9e3qN7e&=7dkuXUtBZT+i7^1cQUUve5BcOkxvu~#8S(}X zTggm(9IGHYD=nk>F!)amc5N_79i`@z*zoWBf666YJ1*22cdAs8-T{w;EiQrM5o!=( zDkfTUQ+oyeh6#{)KY~oFjTc%M5)&TcDjz9`9|*mupSoQgKXN1Kt_r*xXi#epQ7p__ zx5g@tLhL6XQwY?z*)rRXdmNJ6|1_;JGjE#_vg+p3i^@!wQ)jh*HYEDFr|f3A+zj)c ze?l9SsG7#7x1L_^XGBNos7K6J-JVeN^H(NDFByLdWAMYXwJ!T zDYx*gC7d5+^QP`6XwAEL&lNKlKv3Ob}1hM86u7W(>)Mim#9OeA3qA3;BrD(QgHd z`yLhtyF;FuR5nvJw9!8KIhUd@ zJ$ckSe^8S!KeR4h!_&jRV_q)J+9eO+5AC3llT{yg`T~_~>So(X>L@)uJ!T*8<>+f` z3((Ukzk~zI?q#;trO20f6*U7)dKg;crXpk0@1kwCv~69Eo9^$GSpK=^9mLMaWyFhv zfnxlU?r(Toi%6FBpU3L`)PiB9dbE_~7&6a#PvAqhL3pfgmSP?W~*lFQ(`Q_KeOx3TbLKbUo{?c@L`Zp*$ZU#6xVJ z;SJT3M2Q=`E_J-!^ikDacG(@J4!?wu2l)Hs-8v;vfG_lv2(k{i4a-ZOCVxy6TyA0g zEltCOS&0n9$PlMMEcJY(LwGdHY8@ed@+v2RMXj85__oiXvgNj!h&G}l=y#va{jXY$ z{R~U10&~Pxfe;#Ybp-8n56)g#=GxYvo6&@idcb(}d zZN2hq;=5dNGCt&g2-x}x96Rq@0-f})rFRgI+FBJU&Oe=V?@dqcE+Y{8n>&G9WIG4F zc0MCw{0^08UsqaU|y*aBeC#kM?Wl>6h zBi})>eFK4vd)suVPRA(6;Z)D}zAQPi7(VWkzOc33)Y|yhy$vasQZnm#hdn;ImX?L> zAlS=gBg+E3hu<#YubLPCLZlQc3CP8j1o0#P&udPb`hGY2iw}#bcPV3$Ryb)KY-t@d z-0ZN+Ytc273`VwomAE$nO60mxXJpYD0Lz{|M0N3@x9;NRpj0UjFFqPvOZl%Fk#&Fl zNVxNW@|Ov1(a$zBXQ+os8Xcc-l0htnRQwAsB!nxttLQjZM^@F{g~>|T5Ul?D?q2vXCo6wQP6l8BYCtJGf=+8hHVNv`LF1SD{L-J()&Ctv{Cw7ijdblN!Y z-os2u{0wYMn*JKABt}0YiA-4B=Hne&)&^)R(!3fv@}{&IOIADBwveof12KFFWz_ob zzUXcWThWrus&Xmku)XHjdbeCoX1_)dCKrxLllMeqP@Yd>OW+VkYgn#ALc1_c7A9xA z0ewx>NL<_qk=rkSsWC%_L#6pq#Uz{4O2>(_PO=@f{ybTsdR%=fT-Gc}!PB5<$@}21 z?WeC~2Ic>I3K30f`v_xS?o-s!mZ}G4v;X@xtzkhe+&CyBnKAdIJ`*K0!VO$rEuBb( zOZz6UQ8BU4#0fy+PWqWX8+Cn~Kt%Hz{$aW1g}e1{!`4M`)MCiRHO}1}o6BeI_i;ry z=tfK$Aopa5eXaW-IL`f3w9kFYlE3*23{8Hj%%wN5@&oGElV!+kgs$||?~JdneeVK2 zQZYFPXQGtB-~bYw1Jw{I*mG0ob}Uy>-1Hcj`OzoZY@d)m#!$~5ooiPd+1e8`m7>X;@8V3_!~8z~O{ zw1^>h=4629UxhqN9{$;RtEemK&BH^6S1C1y6yMB`aOua0)Xw9rSzw>;^wA+mewFFJ z>SiUprB}O%!FL+=%360*4!m)MoR~ijy9dwehkc7FvLFOLh>tN)_?y4MkmL&j;E6im zt^}tz5vDh9v>oaHGL%yA!Onzvw*`-P_S0|ZbsM4E$tL#plS>eLR}NzPG-;!SrT1nGstyuAIW{Wq4oR>ty9EE`4chg!AHZCrq37{aRc|@>yzum&`ZtAh;-HR=xdr)t*#DMza4>UGe5)m{P{ zNH+*`I{lCD%y9!FWjn}{fD+i_7rrgC+|5A}#YL>eNrd`UpQN3oX)pDB=-lWLudqnf<&Dg^J0IG@yJQN5|k z(~=3jzd32!GE6;P<9C#?HwMFhQ)}VNn-uFh1pTr!h?Ai;W(v#quBZ{+GN7Mt?NxeX z^JP69p_$xY6J%-X(=JE*oZcQikhpK1VH4tFb-$17jD1N(Zf?Ir3hudoCsiG&9+n9! zhi6dY6_sn2I3w@N1r&n+VN2^MeIwe9GmQShX9j9Szi|PIRbl_rWxv9L4?mC}9>!B3 zFQ1J@;9<5V2{)2llLuF)9Fq`L#4&KOYjU<)H+Lfdj_P2;cb(Mwk=0jtHEsiFs=vjN zoqKq~a5{*(V@zQ3QOrc^R~&~!h#dRe0L~G&6&0mh4L%HQLeb2?d{#M%ZZzmpyaHI_ z_D4Q71;qfmxaDsa^3&5I{6|OU)NmMKdc9SKNBJl3IBlE0=45G57MjS5Vj$cO)smc* zoEwtVw+`<5P{tKy3)%g$Y~TJd-M3S^#1NJ;jTr(|scm=4jf`S`dPZ&d6Ri6^WO|`w zsoG8b;!ix4Rg31<(Au|YX2X&t-Y)vz{2x!(`saTNKAdIEz!!g{g0^8Lms!#_#Hjv* zWhIvb(j|Xk&vfj-XZy;BywgOgO!au^srf194Bco3n#4uHFXFajz6H9CZD&w=8M78@2gad>7XA_AtDVo z>3(X{cU?^}#~fYU?1JDTqAuNAk5ybr!N9{QOpzm1Eq$I{y3|La_z%dfbViuz4AV?) zO<~8MrKo+v@K^fz*RLi{7sRlu#0cEVu9oc~79Ap$frm3G6K}lF$!k(3tQig$nq0Mz zHP(}X8!hn{f$c=kX4esa5{E&T+f$7pQ;6)iPe-U{$MZ~n)`Q12v#PzHGXb~*QiiY& zyu_c#D_Mh&l2vUDIU9=g>6Gxf$wkcYw6O@dVn2vlM015zI%$3pO82d zn>g{8mm*3o#x|Q*e?53lSTD_> z`4z(LBtx#?azePWq_eU=$J_%Yv;RpJ94c!)L`9a%*NWprF-3FgK(e}XCaot(rX~N+ zP<0{ts-I*0KF(`^k(0Vcruvgc>f21qaD?O;VS@l>8UAOd78Y>p34g^T;DH-NXTv>{ zlzDXcRZsV{gHK@?14p0Go4>!=W%^>vxKS-cls{59PxjBB|93k?bqCIJ*w8R?C*bs% zaMxhr*|;Y*M=K&y80Vt%&AFPPa;71)|hf(K_wH2Y3y4KEhkq@gYAbL)%XQWB-K7A>5Al zLH~d{T*(;;hQDI*_`5mw=8=u25&dbKoGp{R-|g;dBheyzdLksHReH~|WJ&oc$cNDC zT)2ITngkg}F;KPqBlOkeZ4F{|Wb1ei;9Mq)`Hn107R-1WKRMN~dQxW$&Ujx)YqcxV z>Dclzv-)p0=MZLHBi-O7s;$@hat6uKfdJpbOBi(yPNrjKKi;F zF`FJ)je=fcc*FILHklTe=l61%YMdN)=UU~#tNg{HRbaR81jfDl@o=T^C}C_E3Lf;{ zr&tOeyWsjkhHN3*Uvv=@djR8*NPNYiEZ!`{nnug4vfcsR7I~nz>3z4p7N#Nq(LF$c zqFyd1L3oP^FA`bofwET@iV-uY3M880>i7=cMnE$~;( zM zYh}=KeFBLx^HF)K@#XDQwYLt0`{CX5E8kGq4{b6}tz>!v8=U@-*CAU5eGZs7aEMZx z!e({;e=kp#`CpTYM$R!VPXb{v z$@a4PuBX#T@NUacYi$=(qDp`^baH18kufpns}Ne#_~(cTm9>0;LbJ;|UQX{&HQmZ2 zata{y!>BM(h;fUV!||Y{S_8&TR}p$i0xqc%jqL9Gw3Ip(+@Hn zFHIAiJwFVR2nK5!V5*lWv`6ovi{IDmXq!>k>2(!sitrRKr2cK*e2v2zO`%{R5q}Jm zJg;BB3HN*#~i>)(%OBjDdN_8m<7hj9pXaFEv+eM9dW)bW<3*WAr=OFaL&VmshtD009m=~}-S zdTEVU4h&BEtW0BQo;NKdQXYi9@;H9g)g}56s;NE18KOz~mrU$Ty|Zmi$zB??OLb|Q z`RVQt$Wnzcgku$$*^YlqGNika>sQh!z5zy^I4-^X3;u4;sAm3WTsUC8NFVm(G)L-T z(mF8?(WEW&j`B9?IhuaDx!p8v@kNX@C)Ak_0 zIR==H^vkqI8MfwJoqGE09uoz1{(6#*vLYr?F0x3t<=osM&D}#2!mDls+&1be1?C9 zDXz7sUdMQvef#(9dU@dNoh{I3PO>+{!ci2QvpyoD--?+U9cGUDHlBP;eYF;6Q-W@R zR_t|*z)i%wHRXpt*NhSu%CuiZOsV?&xr9xId=b6f z5|34}u4ZcHmF$_r1S;-90_57p$(ou8)Z=~6^>qRsq)9@N#`Cq!LS zbh+XCGx<<^#d5&Ug@1-Dkai(-SPap}Ei~{E6wIGM6MG4MdEaV3rZuE?F|eM9f8=kJ zAnzZ?pguoL;b%7Q!$q?!#d7SBcQ#d>Z)?|Lo1B&qf$$yBc`pKz0Rh`eu6 z7H2(-y_Rix7q{hWFo4RqIV+mJyd@~P`c9RKt#@qjN$^EKMp{x**R?q(QV4G$=AW6V zjsPfBx;E7Z@XOUrwHNG5I6b%&E+~FVVyj*&;Hpjc8_z=K!jNzzOTQK4#Pk=4`r+dd zYrd(n3*8CyH4DoI01JW{4T>4Nt*t}AiI@jp=szbNs$6nMUjKV|vcyr*HD3D*0Jh~XhFI^YOudJh2U zGx)016!-fG5;+cNS44<73U`D|DY4BVSY~d55z&VtX`L^gK`nv#J`Vq>HxS?UwZr5V zj=p2>mWf!T5kwdptzpnYJU z?(kF1B;mnCrZ~3en*du@Bd&O#J#7hg3F}~%noz3YI zdfnHX(0(AOOiYiGcCIQGih6h*<PI(!YTf*R(z(~q>}f3sQzT<_vd z)%0_TbQfAuU@&;X+hVZ98Pk{$Z6isGLM65sw&hwca`*i}+cq-jH z8V!*uNqN*Y;Pt1XeQ`^+F>l>TVusuRO8|G01Y?;^3I}UtD&3_Eb$JB+9G|BRU!r-I z$+4V&o>F?7Msbs4MQ1f|7?5G*NcCae@1&}AOKpwTD)K0`n+jD4$m;*vJ(Ei4;j%ze z4>)7_gTSf|-z~`WdrlK8{f9hCq^=35m qQ{epjE)uS&Q(cnrb@b9F?u&=2QRrzs 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%0DM&Z(DGpnZ4*EW*E1xoElgjq5O7Wb}j;@!Zwj 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

      g|fB=1Zh@4So}Z_Sv; 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

      td>%$ZwZJwh5QC|1cMTt zvjkxNaBK&e+aGZ12NXb(CF}10WgN;xh#{7iaBI+nV(VW+u>b3BNcdUwqbm55@YK8J zJo(esipgd}MVpASva#3xr_BldCyj5+g)ZTuE*IaY1M)rDk6b(FP{+YiSOEp1PN<*s zI`_$%vxV7N+M>$ssO@~_1N1Zrj{GOqq6(#n!r>;iM^qxrs*#(A_Wyvo|3rc+F%hN{ zn<&E`r!Fp8^0e`C4ILlyl0-L3ba$L9VHLA*=D5m>dRqHY*NV+A`zgxxW@_rhe&L0f ztpQyM(L`XuvUVtbDs(rv6q(~Cwb9Xt_sLxsoM)HwOj{-J?|^({d3!pbuVNI8d4c0- zPD%)&A)2-NW2BYF&=HKIOgVXcemVKRMenz+#;_jnl^r875?d(XF2(b{>wbr(V#ZQ) zYtl*6;l=@U?KgCAc~2b{ZiJ9s&C;iOpFlsu1FLLD&TVZXy!VJjYv z!+1$HQ#qBu)r^gN_c|@7{6^(o|9+Niu3(k`W_o@c@@4vg9@IMT` zcl3PE&`;fADl|ydhRByx8LYsQX$webKjW4vQa}6Luya%y2DcwP zK$u&Y3-_&y`kB;SET&Q}Uzz%?1o3>imO0yoO~|>9Tb_XU#Ul5`b@UEQ1F`A*`^o=` z={dB}?|cYY+JhP4D#nkw|LjQH5Ak4qaXDq3;%%m)9T)+Lm_9OiwK{j<>zQ3!s_4(V z4z8J1_YClDja!MfpVv}$XbQQU+A3Z>&gB?qmgE_N{^@rOI+JK1hVn(;|2;&W1A(BrAs|OcmZ~;r;G^OIsA4raj&7pH);IyG{Mf`QBxETQY@DNOd+kk zop!6dbS_5Y$Q-=t{GNGEuo18g?NFksANStWE|9-4&|39bhcU}&=KAfcKmiX~2tQdm_S@gc zGYbYd2(fo?KIdDLdl|kG5JoR~z8{l6MkkNkcFYwmsMwP2pU5-GaN|fXr%wR6m^twgfv6< zhYTbi2&vrqAE(BD+@8Jqh%DqEbCX>XBBe0G_J5vAAoP_>GLEGA(3HvJs-#{p_JIE2 z3m4WoA&?H5ol?1b1N;9%NUL|utv{+*1(YV!L#$;w7}mSv5)g8!=L5e7Qt3t@fr5lCPs&+c6qN>jCm!{f*v!nuUAV9P2msWFxY%40q$byB4Epu}bDd;hmsN@CobQP{-CrSa@BEv*4lHc2a33;EWtgUTb zo`C}})^+wGc!!RA8+okX3x_~G%~!-YQ0nuubS`u~ z1@KzFB(ihZS#pV&w z-xn`k< z;C~52HAvOjXD`ryUL)lrnp&Lf*SPQ6uwyKYZUF!$DH!(~3wfkB0eJrH1(wFR=~vfKi+C z_LEXiIY$}4o6>{u8&bRITweLdcSepU>C}F5&wSNO=|xQX9q!4!*7GZ7D}BWw`!Bzz zysQZ~-&Y-)C7|k1onnYE3*NFi2nbKK_XJVI$r5Iw9@mYV__HV~;VT zg6lxLUw46Gh!d)+rMw>t%qP%;HqgrSd+FX>8ETcI%-=;9Di%E{a}MAtUwyNAe6hQ+}?Wgykmi}Cx zf0UO$8_wABdU#DN6KWHHydaFYK3(9*1V4*=$skid96`zknAMhVOxP3}x&`GQ*u2s^ zU9s&+dwkm$X!+u@fiq}}ld<5_iaXiC?PvX|0_n@*syfFjlj@lE`y|+ex1mxR_cucC zWmR3dwgQ*q@!eTZbs1W`oZ z;8t7#5;3}7J2Iy1ddpeXM+du-&=TV}^tZ{ryZarvH@3*~iQR4c?Qh^}*4z~{vCImr zr45uIvOHhl56S!LA0(ve(^=(eaNzUl-JwjUtJ%$ps-0PDI^t$n^5wLbwD50@8`dik%$8aWI}Mu&;fbtKJ)<` z(y7Cc-{Q_efD&Kub4P@R>Po~o)Dq~f5bG%NgV>=GcWsusY_;0y^up&>A}@aG=B((6 z^LFdoZjl)nOi~v1?t|1`>ku^U6xwiaWa;^dQ05ljxqZK{&j-WhjgxDepR&(E9P?U=E31Oxc1Z|0!$L*GsKqYT9iERaBy)9?V{7F zc%y^%39a4GqV2}dGnfcvPS+bZSonqO@&6(;B{)kp_b0{7T?i;i*%+g)`smWCYG?JK zA1i}a7^tGAab;e{i^xR?ommcNfaNm`3?ixxDwQN1y{PCV`7U(qi7#jbDV0mx`?^F7 z(UhgJB`uZy26p{Q4l{hTfihfH{y{x71{Gj5fDtjU)Ztgmt^K%;)4H)K+!Zj!{kcaT z8!+TA!9feaiNo*rX)as6YtR9~S<_gyQoKy#WnRp}NA4YpfI5R5xBDL>SDd4rl_woF zj}j_TvLNg8mm^<1R4YMVC)DVmg%GOLNo*(VrL>5C)*1qyCQK==*%Fj{Z>=v14JQVd zn0_C`@|bE^H@R7b>eYAS7pN|Q8FeT#2g#V`c{3upZG?DDkT7&|pn46ji^(f%Zuw4e zEvqIS0C*#&MCm$=Ebl2BLp&d4vJ}r1zKtQ82z}b`4t8!*SfW>(?OO%dgZdQ}pPDEF z4U4l`&MMwkw%H~6A)q0>hc^_1k*oA)%?<; z6#{LE9fL^0U*fTf&ZxtQMMw$U*~G|n?6|6gQRXHL6!604KJioxam06f@G?h&4O+P; zaUWHqAX;&s%I5!-q_)pll2IPzgEbz!(>^FO(CTXQUo-XAO7mwrgeI#~MGR9sjpX(V z${UL-6oxj-DzROudIQDSd{DvAmEJTm9kTp-5~2B@vx+rK@IU4prNQcbV3A!!Y@(dH zlX!>Z9&#u=Z~dYb@1F*SGXF*mvv1U=r(jS$!xqNtvHASZbMWB57VJ*CQ?oa=y>^|r z7rlEE8}obpYB$67SKGnOYd{?CnT3UeHG03%fGgxHzyB(1$9J_k3*|=Zc9`!47Fk`_ zEe;c~hQi*Z!G7yDuD9-hJkOLz5fjQ&DAgkWD5u;UW?lamC1{Lyoi2ph_Q17N^zt zdSGq1o(Tc+MXpOzYyiC^0H8C71qjfeKWDtgImWJ7)b_o_xmhbw+UaDW)YD!Hhi_BC zTP6f=ZU@$JzU|!Ta{drkyjQWCs7Ywy~dyM<8 zMVX4oX<+03$J$#)wb^y=zDR-M9vq58u~OWj6qisa6!#)UgS)%aQrs!f;x5G@SaGK~ z3GVKY6Q1|k|MTu~&e)&!XT}I4x!1kcoY%ar-;(xwG;p5;J{@}e-u`1WIsSlBH)D7| zj#znbDST7TJYl9oJ+fPVwV-F~UONU{@e++K@0r@Z^g!@~0x<8;IE2ErDDNzeQWh%p znv(&Ky{qG7qV1%Wd2>0^tKy;CJgAAVPfJfIVl;;xNr1r+hrfbi^ux?l%+vXK7I#Q$JojFsO@W7ct2>XyVLbG<_(eS-Qp^Pvbr7lgF&nX>!Fm z?=3`%H9Iu*Z-*?_8_sySo`7OjxE7@IJy)C7^5;3nO2jA^g49=@qs2RyW!Vtl+ZZ{{ zHPHB~?sqTq#opWbQASu#|H~)C>zGIDi8HnxZB->Iv^MFB-CNG|Pi~?(eh-vspBy#) zV~b&z585f1jf8CeN;X^%?8TF3AVd63*r|pK+>9W{)_!7pgcc7Jbek66>>ni)HB#-M zpFf%FcZSte&QH~rZ(d;gJ^BvGMDOnGOUP6bQVllQ_HO4-O*mv8AL=t)Vs>hJe>B=; z18*dG1pT^FN*pI1} z`rY^Jc*7M0_Vldg|3;braLIe)Uct0bt%7q;lN9 zN0%A3qBn!4`yQ?3mu3zRvv(C$L`e*=w6*-XFs3J%!S zRGZ>pb}~^LLC&zoWwayeb$se;wuRcBaiHV8}DPfJ1k~WZ+t8A$MnS3`2Mrf z?#Z@TwCe4+_s-;bhl)D~?E3(t#9gvz8s;L-K`n~j$^AQjkMv}G9!^5SxECbhLebA6 zo3bcX>Yz{@A=st*Emy|N&SCK<5iXT+pwAxjH-npwcLQrbVhMvdng*2!7E|%E=*NFN zTpj-4(E9TD`qgJ*rD$49xJ87n;ukyO*ZDO0v?xZDuz@z|oix{i+mPzcF6@0xmBh23 z-+$&;fUkwc)OBl=#r+%e-+sPtqfx-sbg7V}G;?}uWm0M?$Ddq;r{&u1PCD6>p{g^a z)(GtV)N7lV`DPa4M{KqfmWYA`r?F)4qzYVi?VeO)vQ1!c`D*4tx8(-!Sm_(8!FDVd z!=s=DQi>l+?AAr(HtM}D-6)A~x#_Jbdo&r3WS&jQ+h1`u*deEh^>X!cJLFpIu!?gtiI2D*$E#ZSA+^= zqo!-CsnfwVTOPF1;socxobM8-t! zuYLJbNe{{C2809Qv#B&UhngC?pT6oRbg`_-wzrhFa=h97=IDT~3g-7JhDHjmX0g{2QO89M`o zgmnRxG^)+zIZwy2$QQx)cRQ?lDwAC`KcnBMJZ`som>+T*92`ds6{Jm)TtWT6V8>}2 z6v@FDIW6z5a#JeDPd}`KVj2Xr zd8@ATOp$+->v)b_Pq4~S{uF4LV6s{DZoKCgLoLOslt|&!c6vW!(a_=Eay*&I+?ury zV;9@kW7{1(=A{_=O$;nQCsqSbrauz=EAp#mZ4umqSZ*gbG32Atw z`rDN{2z0lciH@5ppFS?S&f(XMVQ-I{t>m7U45taus;);w+l}k+o#kU zaWpwVlD5rQmtAk*#-kgvoi>Q17-+nlv2#TOdl~$yr;4|{?#{Mvp~!t6%FQ*n>uw}y-yEH?$WB*fRnT%`8#ytr%=QtXvF?n7d6 zKWS&>)aR(f`p1gd9!T4^ExceR*OO^L54}l42Z^mFBnUT za{S_O@l2Hcr1y_JS?&BMtS`!d$`ddVNQ>xPz5o7^7w-f%OMzJe&9{i}nf{oEd2{~F z!o`0de2(2#^Cp-xU%8b7<69Oxyj)WK+dFXbHmw@KHd#++UyN#Q+LP|qdi;MH#f5)w zHEI@(+mthUq!z}5s@WLbpL6dmuAlR(jvxE;wQZs^JN;!9-aLt)Kv}#M6w69p7fAT* zCwu+}Vq&;Fd|qPhzj=Ep0Tb?Mw@qm0GdUmmG})HpYq0Hc(6UqIKkMe`?P%WwS#`_n zZ&mQ8Xqyqv6Lx!J=ycE;q}t_Ic+vFkZ%g~VPFytLVsQWX7imZ771V5p`9cErrq>Kc zDn=r6Szl4!j^49vq~Xmb&)CQA#LoBMd(=*?IKMRd4< z+*Pf8>GJ9ZRaG53_qyzBisp%9p}u(Jzuq6y`A2MT4zHehbbq`sj{nSWfcl2QWpuom z<`2WBKIAPscdfC{33fJeH#;RtnK+(zYYjWm0mCU`31$8UntHLmR);GVmM_b{b=UktJF#-&sXTtk%*J6T$p8LJZ< zIium^kLA9-eb3IU?ZJJCN@S%0&mv(#zP%I|4LnYfBLoNd3$fB#$4SaZA=8W;^lZYd zKV?Qw48QQMNsOcez9k^(Qe*#0aP=`6-bVj0B)Hy9MKbcu%;$92A(i>ymom7QroTr4 z(^~4)lbL`|Y=x0WOSw(1wSFJ)?rxCD{#%Yup|q6%OwW59K>DB|?5piVB!PgAu3dQg zF6ON=;JxylCVFVKOtqi5iId32GCH76C$ds2n=~h1A^BJ2%}A&gEfl<7rsYY91fc(8 zmMMt3lG^F6E7>8G?3a$_j42crLnd4HVhZwYw49arlJqL|5dcnYCU?)e}Z=+*AN%j=uO`7>^Wyd2~zv{ahTYVy_p=O3YuJC9~Uf@3Pd;EAYKP zpnJvy5!z(8Z_QiR+gU_Ba+YWancITSOq_tFJkX>&hvAT>~7{ z3Hd9x<5ITeRtH#O+cyj{e~mXDA+FCpl!sDLj0t^cS8OJNBN9ZoO^nz^b|_M9;3QJ& zZ~GfONpbB`4Yy6ov8R+1m8_^I94wDLS9*b=Ui>i!o$Rv#%^62OZU6xw5#$mpf7Qb)Kr0%Xzf?cL?=b~1DoWSdXYc@OgdWjS7 z(Hpwt_NL`|7@D83DN!|JEm)l=1t9 zd;VC;vr1h~`;OsC?3;W;@wl6LS^BmtgA=!S@rZ^6Z<^ohnPXGqK`0kZjcpm&?^D{h zU%T45Z zWi0Gi*#LTQdY*5>}H5b}=mInI=M$E;TsBlMh`5#HmH?7b+so&lQ&1H*O;1!%K|L>^>qt zEG&0)Zdp#XepPOJLb{G0Ek^ObRZOpiBLSh4YIvy|D=h}O%DvA@3 zNpUte=FzcrE+kZO&^ih6uDw$0BQP6~o|1?V#rhzk*`+B>vRlXtxjfH!YjE??2-PPsL* zP5SK@po29nKXPQrXjYR;Jfc`;LOdkMV`UL*Krl^Sht+;`C5&^;$Tcr|dBKkg?!!iA zI5pdPO5j|&QbJCg^JKNKMm3Z-4-w?b`gl>`a54n2kG?#S-~re$M{a*yO$|*X>-j++ zuERk>ojDhcb%}H$0{-oY>F!CUDXk9#MqoCeckVfozP&ydJ*k8w2+bAwEIqw7^`jt6~VLCIEVB@nepCz>vaCWh_P1E_~E50pV?l6jaAQW4o5P~_q^}JJ=OTj0*Yh!=Ij4gcSY-_F+OIpk?Wv1 z6f;6q#F|jd=~zJr+_sa_gvxMN4BwQuA2wfz9p`LK0=4Hp!e|IPPWL4Wt~nm5M||np zXY22smd`YR_gLkv4{sMNj(vCcfd20;?prV9pWS_R%YkT9@o~PIpFq?Ytsq)}y&3jc zDW8BVyFimG4TtX^yybfhAIVUwUFRDy^z%a_s)9(gi#DlWOEgi%JH!{uo3MBOk(FHr zj~ZS>)Rj!PsC&bekplLip?W`F$5i~T-ai{P^S{OAZFaBo5NQZRt#}g0emt`=_`ce$ zcM~5fV0X>3;uh?d7_*SNzq2z=UFcfhQ&(w{j@ek!)&+Wx6Qv&BVdG|+|JqAb zA;!JF>e6|@_>ussd7N9KKuIsVcBJw;)*q^MET}fmSZ$0?Oy)v_2H(#ZhxKy2l_s%o z-b@A#u{r28EeA=+`~WUNUUddCqcN~KW(v87Hc39OT^ya4P&2ihrb|*mHCmS0kK_Eo z4@CfGC82ZoFz}`X?8)^Zu6&w~>-Caa!w?eZ{(Vty4-#2BlV?yRLEqm{puWfFYKuXI z7}$@)GFjax9ftm;DZ<7G%$&}Mq0{P@gTBfD`%|=r1_VQ*wy)p#!z>UmZRBf-W%rrg zzotzY4!mMkEX7^z;=-&$09da_k96klHphR{;1vo3W~xqZ2ySzW1GGxV*E~##dSWRT zwAv(1f>9Lp>Uy#`Fsrv(2$v_Fl7_NX2miWFdbcgKNP<*S+rfSmU068D&=B_jMbEF@GA6DMv zI^U}34dQ}d5BrXmQ1Gs5K7RLosOI`HC?_rrutlqU!nurHuiiWwnyc<@?|mAtbyzq; zP-h(JmC8n~tSQDt98y!To{5xhUqR9vMaF5s^oJ;6xJR8nl z8vb*iqidXe5UE#TW||LQ+19slESihbr=zLm0S5e48_7)q7zd;35ClX_WaP;nz)u66yD-ASY$rN1m$kphl zbEuDW1;kp`_}x!=L$yqvzebXMw!neesCUAQCSH3Kro-vnrnfVRrAkGNDH)*wp<56c z82mnF-pg!%N)puzib+hW+=T=ikP5S8tTU_L;@gYUuAwjDsREKOe$azXR9(J&WvVug zK5pvLXdLevS)f(G4M=LmOYPMLtTgFwGuvnFpMVqr_Ov(A(ef>x4%`K-J7t`mH94Zh z7&N5mYnR5{akcZ3>=iFnm$b(>K`B6Wm9_oE(|XC_Z&fx7<-O$0GIjt3`X^KA0t9MEbb#E`7PVxF}s8)sUwPykdNwSm^T2PO#(UX#{cNxJ zx7pzb4uyqwYd3qn4bk4YKT!Hb(4Wq8Gmis9{s;77+;+FWq5|F!z~f@w8L+?~ zmyx>j6W+e}&x!|FD%ts$4_9Cgqix*EmMpFnnCK{l0e1&*v6UFmM332LJyI^JYBsXj zaFT-!#Kz%q{$lDp@nqRA?QCUx+Mbz?1Cd7|V&et;%PcF9?!?&=78d@&(o4)qRur6; ze2iac!8|iZG!@btx%!ECUuohga`9c4pdra=i=$P%x){$(fpY{NTlsQ9W?TRD74t^m z(p@*lQ8Cj#Mnuo)2DKgT2)IojY!%kPx@UjLYmF-A-HGR|B54~rYr_S$Tnk4vm=B(Z2s1RaLPht&-O z((c^muw2?dsU#kbC11j&7m-)az=wbb*8B&GMxQs+s;N^*7!Bxn8P2FC6XEe)7XtRp zc60-2^lJ)9Xo6fub}=suMIGM^eJLP+d=WYJ+8Ma17Ot9ulSDa8rY6glP${?dZJMYf zFsUwc-o#jHIT_6?kIZWt%4}G_{z5c%wdv9#7Zb(YMmS4~i$KUHZgOq?~ZY{Ac z;ef}Xw*i&o7JxvVzTrtbMBJ-yt1X+S-3|up?)J^>mrxW;1!~OMMy5o3hYSsteM#MW zO>V<49-J4k+)#zZ9XZ$ZPVUQ~@B(9HH8e|$LjijzyrBINcSq4!$ZXGMb^nUdrK}2h z@+w3Sdv6rJC6-gG=61XVLc{o1sjFq{x-MRN!mHw+L-PV~FcB z$kmD=G=Yu1sPAN#Z5DnzH&I`ZzhTI}6=t|5wSanrPXz&QnbyaK?b5EmYDxKD#m%{i zi$IXXjL%9N9^OcJq&Ok?2tpg zEUW(bkgnG+-SJp!my_PYp~AlO*9qr3`tQ$Nds+Akul_(CJBrG^<-7c1Pq68i1nDWpG|hr5sPU;9kRJR#iEX+k;LAXF;q$wQTP+dT#pnbWPbMGXd|Pnm$ksTw(!bPQTUR6z#6EvE z9-5h8>1-c;gkemnMsJ7!`If!oSq@yK;xUTc3tl%c#dH)zdX#$3h~#F%ad!TngY2_HRw=Z>!~aj!#$#zOr4^yr`L3! zl>3ceM11@AZcoEMw5UEZgaO*56b7%hP7~qTgKt6speiT|3g!giZ^uQ`*~%_gIfSmn zF$z=1Yjb6n7@t-!=i~Z|CM9_Zb8%~3rPuV8ARVW;JmfMjGPVuRR?k&aDH7C>uf-sl z)@-b@q-cPsPIRSQUpL3@w}w<3U8!G)WM4t=0A}{gL}bNd?OX!vFJ zahol&S`&3pR~Dm^qMenAycl@7aUqx^LjMI=-X0OXv+&`A6UpCEBW@E-(K3ip`zPBYzEv-QRZl^;;CTA{OK;&=aRF!Jbg$2)9gR& z6#vS*WyiGfMb`D5d3vnPg4KRLrePvqiMrdel@2~nse%h~u?{u+pBhMpgkXt(Jvmjd z;YC=pk^w$GEbQYUGB2Mc{t&;Y#Kq&s7?;cgm<7SUsM|vF(i>rr73XmXXBxs zpD-*;A|&0GZjTwna`4xhBKcep0|WmS;1wL(N5vfZSwB9sn;duZ$Dv(rBDOl#eIVf^ z4S2Foe({T>$g8GI=|$d3%vxcA8!KYj)$jP!r#cBH$*$;@fnHyz^Fc|7pKp?K?MxF{ zHLHCd-}b-%O;c?Wfzb9~X(EQHg+KO+Wo`dWHJV zvuNJ%S}Y!2UP6$5lsz~iIQXpy-rpi1N(oUQs7nD6`1VXS6(WFsL%vwGMy~qi=h#Q} zJ__V2sRxi(w~Cnf$i*4B92~C$UGGdJq`N~fAeR z3F0mg_LQA_hQ$6TR70=Q4(KGc%wnq{vn#ZDiAx<>_mQuekthOJtjRBNs{nA zzE-GFW(UNb%B|fV#sdH0O9LC@&srXH$89;PP9>P(JzR>g^1YOQ0$!@;b)|E?)N{KBbMSHuY;#hNW z3Lqv3855hY-l%jvGAeN$|JIFEe=f$3y5RH_OY26m^?nD43!>)zflW!3 zrF6b!l1Di=t5N6I<3&zEG1cBPk_gZM{4_N;kMk*CTN}@v@9(pt?02Qis3a>5@W|i| zhhkx4PmG`7jUBVbarfQ7$YG}zFk1d|im(2g%Qc3U+#z8VnkQyOV*YhiQdwDfyeQVJ z#=qL=g!!d)QvW5_qz5qf)DcsXZ016NLQYQZau?U{xW)u3yU=R=jWXrTVgdiyANP2P z5E3+nVVr7m3x7O$Mt!w`cpaT~6V8Y-<)qB-{JkPHg1-a%eyO|D@Ny?pf>eihJVuaoMU6GejzykkGAT{q29aJ1p^ivp}WW+O88 z!@4`fr0>ERfh;d00qA$-qESM?(};B`nx$)OyQ!uKu5Pmm&_~=(lE(>too2jG_Zpiz zZ#@o(CT&#S;_1mavF}yxzxK;?O2b2Y3}C)8Ylm?UTl@Ylc5HKi_MFHV2Oc=6ZVz{A zG|CtFLb&d!?4%4OcHozNBHfJP3y))<$3Jz3@lTf~HS{`*q5at-Y#cB_HnJy)PXX86 z689kvKau`&fl;W*64r1?ZOLe4NN?4IB6hEG06q*kt2XIs8bP8*Ew)Wh-X9q5gk|nw_ z854HQJ+z5|7FDZyCHvSBJo&fbEifIkh=yCl9>R|g&Sg{i^L4-Qg4u$CQF2bITFE_` zorS9DZ7{#qAcRqci}Kia(vEC`y77$yi6+hAUE;!Px!S&D>38}864W#eKblf8=DUiZSFAW78< zz~W(dfCkxML=s+e1sT@fgi8EC2UspVg1{g+`0_PB#fUYAwtC7QRJ4y&U~{9#*u!kd z@7r0qfKNH=obVP!0k_}a8!B^|*03?z8z%56A-rA-)Y%8>SE&TV*;7&Z zjqQwQe{Hs_6%qdNvv)J(xY7{9OBYROX-V%Br~dFG8?G57A&qIZA}P)gEk845bugw# zf5Iu=K)LX%m%UIyo`{sB9ED8k5C5psi1|>X3W^(}Y=(_FXU~X`%O^F2v*0E-ya_ZO zM!Cm@(4;_HUkrK?E{S;)B=$(Eu54iPe9g(U#pX@^6WCV zoyY^H9>kH#6O)HJMya%+%=U@z5wg$*Bm+|MDUL}5ne+Ln*l2i`{m%>sY^?~sd`D5` zq!$J!xafYg%Gz?GFv%HfyUxWGFBXK&6_>tohp(gtZe4 zcGf;1t(lJui6t@3bK|WPUJYtys-=AwF~t6eh==USQy<(f^*U_3(}@d(%vL*)Al2x% z6(&k;9ky!8lv}k&M#=jVHl!~VK!6V@9Qoj{~o` zycj-enj=Uvkcf!#dYA$Xrun|;_1jNuya0j~woX~oDSNPKEJ$Y8*}i_za`*`U(c`ff z%K^Liz2v4LH{)l=w^|QN__E@<%73~VLr2&{} z;8XbZCx2F-BrMym?#}0cC{TQe|M;;Q*?C^*e+>8Vkl(+#b=%Q^H)p1AP))B~;+B|6 z;LH>iaX2jD|G-_%gTq7UpLuBiiR^2`^VLPlqzY!B7$MogVupZo-h}XoW`^fbe=Rv3 z=PPPtRwT~<1*-WsJX+He~2nzhRgPUM1rFF5}4naoA-&M1~~jLwW8`Y*w=c{s!Nb)p1Ue}>~< z4w54Ft{I;ou7Lg58@MJ8{12CGU_i7}G;*j)aLA*}p8wPKzc}Cr zV#U9Fe{od1L9~KB1ovzoDHh90nE{IqVrzKq#; z=p*wvdEYOMVjWZ7$XFF|;2XQ%UBI(ht!Yx$E%W+?1nMLwj*?B5VaJ@^B}J*qxwdUZ zN!;Xjbs0!MRt6K?zRc8K1jXL#%@+7o5&pF}xX|q|w@CN@{p60YpdJAoB(27=US<)+-J+tL z+=>U%44_M{45tYTqyIPw5?0(}*9r8|?S#l@!!{xV0pjKM4l#ruPZzrS2XS4Q_k^1fEWs>f^ZWTM8r) zM&~4bsDxhzzD4vFVIbqXGtR^*s+)V&)d}_bdbf6O=gmhTRPox}uQ%rGYlJqfSvNcR zzQ3rd;KMC#DR(uTv@)j+W4MWOQ1OCTLX$ml}S< z+Yys{o@H2V#Q)cefRk`yh*qFw@UQPob{!HFia<3?EG%3n_bZzrlkImPNxGCb5+v*b zuM)1-)_S$-X6h`$sPOvX-CViE=#(TSSI!(<6CY)e)ED2THa>C^3psmhIMT@%{WPm} zhpLXOGSQu(xJ&tJTpN_&8H zNza(T`&Xw+LT}{urESRAho}tj@y-Wtu?0t@& zou$7D7UbsV3_IGnY|!j!j#8YBMNcBWyxs~4TjvM)uv0dyIbg!WA0rZ~=g9^=v$W^o z_aT)|v)4WmLr?PgbX6n`juBhYz5$#MU`fwMtAeIGut8e1FbpmBh438(y+vE*B9A&z+Klso_Jnn86-p?g<7pZ_$l~cyS zJ+$z3H|egsNjM?=rY+7`_Iq*}0ybrm?`o1LO4;ls4X0V}#kNC!GwWJ|6aVyxB-!H^ zR|9D$D3Q`FxfEtHU)VnM*|i{I=&(1<;@3IxzOsW;=KDmW(ou((nd|oxeH{Iu zvwd=Rks$zU)H2F9)Hy$>0SRC>X=ZaR* z`xN`i3D+iy{PShsTm@377M#5f;0^H0JABg+IrYLV#pJ5SN>G(${HK%}$I^n2&5ON8 z?ZT_1VU$LUU%@`*dH&?;eZtZk)P^ixrB%o^XN6UEJ=fZ~1>P#$JV|@ItUlpLg-tTo zaX1F1MVlh8LbgLPaYe_}-`l3jwm@za+Qj4O5v2le zI&(gM%mfAGG3z`SG30V<>-lm5GI*(<`uz#+Zc#=POXkvK(|=3U`K1}v?v1zSZ4rTw zH)g!%r7&8Z)zi4(2*ujmm(gDWMq{U|$v)S&u^K&fZcYqV0Vv2B*7mTbdCQh|j$7VU zavkt_dgXQB9MK_e{R4RXoh}bwqi)kC)JY14ny!=){p8Pi8w*c>8g#NE_Z2!&jo8_- z-@$%u3t$fyUn1)@2Xf1tGtG_fZ2ZoLB|lu8WuTHw-sSaX?i1)Hq!Ic(t|LYp7d-6S zfaYFa5;a9!;p{Z7nDffe&r2Oq>b2f*+VB1;3Y6F|nMrD#H7Xk8ci3k1olStJv$tTL+ zISh=u!gp3LaWSxr*WJ`i*S7JhtV9A=m*gJ#Lc$a{!(xORiLWPJK%w|8+oEj$+t~m9 zB~Tc;^7!fsjRZJLLU+?${?4C(apju$&tX^h;S0dF3e}d}9zbeattC{TRe7gTmQL#K zBvLeTGf>YJq=0uyBv8qWIQor}(b~P$-(|IT+qLeqm9c#PA77~EL?+pe#*Lzm zY`cGzS_Z7ouJwjIp|}5d@k>W@$^qxT!tmMmIjS`%AML&Rc5r-fYqGQ9wySy}!r|Dq z7gkd5txR90zOkoP~=W2 z#D(%_#jrxIcpHcMf9W<6m&f5c7?V&DnFK{DwN#;iQ7}-H;5V~mP?@Jbgle4eYcU1= zkm#ezH7kr>@&mnsA`dPGmI-ie(>ck3xrhTQ0$M%7pX7;-+*3b=eOU)s#C%72FG|DQ z6z-+{`<(;IS7!SUOhnO87Mpw8wpVdHgwu-}?*}DC%^xCz=m@PgVT5iI}v$&{VZwv?7we-`+#6n{+hu?WykoR9Twt}pjGa+7u4`93K zWGn~ejOtKt%RVtek1s==bD~ONv#v&dm}3###h}Nfau`h}87>ybw`+Ybjo59>2kRee=Tpd(6Y{D2jll zwEoJ>{C&W>g$07RXy__MPq-&TMgz1*XhhTppB z6&#BW*QJ@PlrjJOJo1%Xco8uoM1iLVn?d;2${&GEaS*ORPBWG*j;ILADh|Cu1o?!SCyzkG?co4Uk1H@ubHXL#Jf|rmpx?8heJ#2YL{j~vpiYOh@ zQPa4q(Jy)ebM#>&dLb+B~O`_o{ZWWgD{eH$Nc2JRx*;OgKS15=YdBk;%pXlh+>%*`oyKEG# zETx2LQqq0Tk`5WqG;^Otu8?)c4IjHs`7}@ak=!NK0ExW_!e>{By}ylD8!qZJ$7U7C z_qu-f{D^;O!2%L>xXw1FVoS#g3fgH=QPRq zK0bIcMEg?x5gZ4s#-DiwUAeLU5l{7xdx!WpTo8|R2f5-CWOd>2McO&PRyzWg%j?(M zzNglX=JnLT1^!n1`}U8yl(vjo#(wM47dX2b=D<$=m|np?QlzX{I9DdSiHe4z06lGy zKqgR-nrjBfT!)G zz`xzF(=3U!EGHf|PKVv13cGM-CsK{0SCd?-`=RHaZszR>jS zz+5PFT5U-k<)>M$*{f;o?_@*=3X=lwZ`*%$STf3~= zXR0g5RTc#1-PVCdIC%Xt!r|Cc++sd9E~vo7xz&04>cpdaW=>L${e8nm=>r-KzYI`s zI-foTcf9_rIrMMrs>)Mf-r**>j(rJtgWYn*ywWCY?^pQ5RE`tNVJr0QD1Nz4Z5(Iw zf#ThsK)YP&97OP_{VDv*Q#RsZhS}m^3xW3mEUM7VW$RC#tjL)h*Rrx@C8c$p#PoRv z$uTqfPC%Y_W#WZx@9NjNhxtjlQzec%4Bx@;Dm;+6?M(b;4Ccxf!UytJ&+~cSBN|d( z+cd%?suMqt(E-X9A-30uvXXes*TL|u;5v-XXsIJ&h#zSa+espx*kl7VC*+iH?_uhRk`Y!w3?%~RNbdY!IXShJDGSZ8*dU8^=lrxTdY7^L`Gw2(w zzQo{HK#P)5B|tgPCi5wV!mz-j-E>8D?N|5T_rIF$(w9S}y$7Dw&luet$pxT~*&l36 zkYyc!aR1acXe1W*Txt|npNfZH|mGIDWgdF*=qvNwQK`~BBBDH{i?lzJXZ7Y+mY%erHM5Xf~i zdqlk3`tAoGO(*Q#J*&0kvQXndB2|t0#{#9Ird0!wgrP=ycIIW%L8(E#8+H|r8B>Q| zY2~kWQthAvC2B6CrpsH#4&no3aOSW>*inBSF85j~aOunPeE1+?qYxfudmjs5Ag(0s zXRmT>J#9GZ@oWApQ@oAjpJRJWu>;vPdF{k&|;Rm>>@rQw?H`2jZ$$c2i$~sM(b(sP1tnl8t z@GH)7nSkN)#nmR1y2k|j1kH~Tb5z1fT$&m#$2)4W@cH6%ZlE^wr&#?R9cMl~R5oY; z_mksTu&Ii8D90IS?{-J+}(#c^Vv1oBs)MJ6QS*cJ8UXxB-fP$zA>JQ2h8_hmj55d?lK^%c3~GV zjYtV74WqQuNVg&&Qi@2!5K@vucS(0hNT(>$-3>!`cMsh?44j3&dw=`Hch33kj~R8= zdg^}e%YE{#hm)O9Vwtt7M%ghe8gqkfF0689>uxAz@-{b{ghj+xWx*+2y-N3o(=spX z^%Bs0mA`y3=;>(C#IkVPSmNRY{k-hJnaX0(tRTde6;XdtaOx{TZISrcY@#sBvGLB} zbiK$E%I#TSZKdm)Je0R;vZBEA_%H;)J0#mFOH;yo%hd5nm;{a4C4Z z&ffdrb+}3sa}02;ZftKR3mj(?iRu=5eKknL?cV;yuTM}$;Z3x#>KxDy8$pQFgXQ~-VnH}2ZRm~b|5 zwZ-ebAWc!Ro=i0nbAr+bK^@M_LmtmC%^vRhotG>*2p`*bB8&#Q&Yr=0T3Lx7LfAjj zR-pQ$PsXucsgMk$Yil)<7YTmu%N)=zK>0cGyj=T1hNJf|mxZQUwO?&Jr&@qj>QEZ4 z?yIyf3eP{|X7J{}*L5573K+6$!N0X2wxsZy#JCF6#Pb$-wnH-9YT0@SbFp8Zm`$x@ zl&aqh#`o`PWrbdxV2i$2{^afSQ-W+&Tc`SyZbSZzN=s+TXE@)S*}(y8Zr z4fCm%xEG;D(Pw(Bf?{(!ZzX&U;?PfgOsAOa^?J*^+%ZJQR)SMwy5a*UTU%M+aQfN<3q#KB|LfuU>VloE&vNVfdB3YI|q?kM+3 zr9_L;&HsG4Y}EWduXiIn*4T>I)dQVQp1p^Dspnmxa?JmGZbKb&r7{d8v^Ix+A354M zvwM$CdSo|baHUkypfczl|JzTW4ELwv+&0aJGr`;`BWnvK?xKYgc>Naw)+zbLu`m%1 zNmchXWEs9Ip^?Y ze2?4#J~1bP*2?4v40onevxfEAo`t{Ex{_$sQzkER2=4km|Z_7BR>(T zTpSj-bEsX5%N^=*6!XKovopSf`#ThW(@#1Q3b~EY=8#EKuMDyz-^`*dOkxJYp%=*= ztEUSVotrBYNK{pB;hTcv;6Yosm8h3T<4(v{SoA@K+cO>fRnD5zsQj-goW;kJJf6bd z4WoG1**3XOso**XDs9{O<3a@0Xm{F8R_~^>W7=!i`rW1(xaX!;?S=ZqNDy4rwm9js zEGliP@g^e>&H5CjHQA*4_I>O^b_asMjrDrt2r^R+$*L!I^wV%BAQ@gj#wN_Ng^d)m z${p3&S(4oBxdZoo)m~W@3k?_4i)5q*B4>w~yof~M^Mg2}Dl|Jcz(xiUW4Y2H*j3tX zKp^FAp#QhtXEhQ_xRd7+gXp=R@bK3Jampf#n{d2&Z}{+_y}<|M$#0}DYlek+x=)C) zs|+^y<-a9PSJr3?#eHBN2=ZU$@v_(=s+yme267>F&MTFnYeBP9A~5w9bM)O(@4pFk z^3ns0Ytv%S^nk_caYUGN1OhBwBQg%`M!;}F@>@+yQNmfKX4vbOg&Fo*>z6&%t2+>K zw=w8)|K5T)P`x;AX9Xc__S=23%c(q=NRW@#1~*<_2bZ)abYBKntWef6!9u=>ZpbxS zMmf-mpXc%my4@+mtjnJ}uQ-qc@fOaQ3c2v4gS1N-P0RyADfs1_!Pd*#kaIfV&t8;Y z)40`Be`$hXr;8k))deCK>#)`W$&dJ05+}j%i2S~n9Z&JObYg};-!Xq&2qd7ol$#QA z_DSbOUFyaqzcOd1iaB!Y#609?*l0*)CKvk|HI{{yJa{x#;B_{VP#pT0ryBQc>+% zf8>zW>ZPS3rad!{ZF!+kjR#`9dK1~O^eHue(*H=zydNU?8fAU&`>Xo*sa1NBFWLo@ z-<}e&yV#JViyS_Opsq=VvomlQRS3`vGL*{_QQ}{J(|gV9U&l0pLRf?>lU$xq839NA zv_cXQVovxwG^SoaQoY2_YkP-^!#-)laI--Ch|e;|iBej97HbRrjQ^!X0DsOl;RSHb z?B^30kQpG$0`8*R|00KU%fR%l7CVay#!7GeqnZ6KKfT&qodXS z6PM1DwSFc`wyrbm?cc>`&E&E?2FsRh;L6}5{)2#B@UeVm1McVq?Z0RNhhQ*2Jf(4mXl_8ob$VPZ*rc)`n z0KQ+P?3d%(7^%W`m$x1mw};?LBnL}VOw7sc?87TIG5j}%GYunRav`d7hx9X+Rj}dt zCissj{jr(&iYC`&ak09yU*(zdi$*>gLX$dDjKV8vo7}zB0Ijw)ub59vZ^eHh?s6lx za}$fOYbCtiU}Mjo3^BUCJS=>}u9c5nF<7Ir>S>xryvLtk+f?JdIfI*N`6eVh`@{pm z;G%SD+nFI&07;~TA^3!|-8HV8EH0okQ7NYlBnz_Eww0-BdU1~z?>ddQmf`y{P|6G5 zZqUgw$tX`#O_WNJx^%>p6}yb*^{(yKOxn(9CA;YLnO*l_Qfg0oqX+Vyg@E^9(oe)0 zguOq?64pPv6|I>j#ax#R#>d&~(%c1!L|BM8)NR_jxefN)sfk6*KON30q~fs%w%V-< za)2HLT;Pum zkntT^k18iTaUz*!wYDW(KRl({2LWpY1EO-%RSXZ-b2z4TpA&CX2WYLbk1B;3Th_@c zBB^kd$Zg2hb_M?0Vs=^7Cm$tTz4msK8d8q}BMJ6pu- z;zvYP!kSK=hXPJ0pbc+)I%p^bP2fS2Af~mA7Zm$K;SlY)rH88G+y-_P#MNk_u<%bD zW)s(iohZb>h5aK%3Ua3tt*mID=Dsu{Pali?Gp}wP5UT}2 z4jQX~S=$d#6Mcv)+}X7>9|a5#fy2gISqI?VoU!6(*B0M?;VZjUmn8BnC$nfeuS5#b ziiTlJ5?J@YXVsD6c>Gwi-jYBq5FTEs*@zaz+}~RBaX+ueX?e#}!~>}mB7&1_a}`Rn zgIoJM69cUfHDeUME{vfUt2DS8m<=b`79}rVt$s1dZK*+Rk+fpVG2>@ak!#-|3eH-t zE(K@f)2EA`ek`Kpa4-q+n(<%#P-L%}C8R~`1{5+JDL+nW7#r{i+gb6Vfgu3o1^Pn3zajSInSiwUMIsio@Z zw$gs#_CfJ?b)+ugEe9wt#4G1Zr z0968@U8}>0@@IubiOmU)+jN=-NdP^AV*XR{Hj<>EG$#X}N2cvtg?ty8M0{;vmy9gh zm+1!q9`v3n5p6M@8l9yN_E(tBwMR23?J~pNo8Nh(mz4ekpYj@ulR9&f{;PLVKq>}5 zf!>sebWQ6Kp!5L((sL5!9wS+``z{1Q zy-G;w3)FpmLD)!OWxRjnEMRO3l}%Fvld2yl2=Fv9=rkm5%6PiI?n=9pOk=9tByX@Uh;70w%EaWu3v&A@_T${{hU%BnY{wffhW%u9#GBwFQIbvP=9At$ zh(0px1nJ5~mQ|8Y=MMcD#?mI&JMif2T;qKFue0c039-*&5RORt+>S;QY!=F=E|(@D zma}u2piPP4O!&&en?W^YHvH5tDdO=9*9?M7lLxZbw&%fLw|?Rq-~^cHnlN3;qTIy| z)(GmvzVl!gxKS@P0jiiA;u_&!L8I6aZd56!3m-RWb8i_Nwkxcj=#;snTp~g1Z|E!d zTcODcO?7AJW7nCLb%}h6IaZXY@p-_jx@aTtdxC2MpSTQo>5>#B@rGK=2h9LQabm^a zciUiLexVFEylOKY{qm{l7m|H$wgTksw3jrEOlWz~ts`NKZ>Q+gAW%GdOi4dWAH5j3 z95Fpuls$WpPprRsGgGlckMFQs-ge&MROZo$v9|H%$KZ6-jwimbs3-$pmHvWoWsUxX zw`^&*Ij2FByxfxGdhRZ1#6|^&9lB+}53Z#*PN9EA0Ep;6F&`5UQu(u)rpBnh)R z{d}pe1DVF1ZaA&A3CpWZEqi6q1*`P5hbEo?b z_$zGUgYM5^I}cqJA7e}NgTe_u1V&eiYv8ao$$FWuL8;_f~G89fhNp zs48xfHLm0#3K*}`HSFYJ=qO#|`eUE^@h8|MW85=?0`4zV;Hv&J<@vT1COZ%VtYW%W zgZjhIMWIPJzGu?}v2E4cqy5R=Gm=X|2}A+mk=GwUM4jERmt%sK>uMwV4k&GWmbRb7 z5+u#<<&&Bebj#6w>q8M{YlJB(Y=cd|Sr7mC%m< zaO4&wg!EF_>-W29K`dgbyAZrDJUnGjRXYDwziS<>*V-J!YV%04ul6H3x@i4Zde+dX z&R267MnTh(w|xP?&^Q zl+I*lK`-^&MbTT*IN)92KKhi>a>c}L3l)9zTlFcD{(z#(K(0$W-1fFKjM&VsRj?l) zDd@%zqErzKs}XsI{|cNhrsvj24Ml;{AZ(-rj7P~%q!PiXr)<#$J$i+<<3^YvvK^A` z3jefXF12su%goaSvk}Axp#w@a1DGS^^UHAbw+Va$l7E7D9E_0)0FGwXT8-H*DU0&B zCYxpRVO}#$JpmPf@O%lZrm|U7x&nv>hi4~tU8{aPz%4P{75C6=YdWAO{|kuMK|iWg zceH~N`)S{OXCra5z-!B30if42#6*?pUx+HLO3)#L5zu&?sn1g`t>jN{L{RlhaJjN8 z`M8u53Z&jXx*&kh@>W^@-=r#F_h1ruIqJSLS*$rl{GJ@i+;jNoD$zuQupk-Y3pX8p4g)E`hfrKb zWQIKb6iP0gj@hUu)7+~^7W?3?pbwztY|dZxg4^50}oRe z7PzR~WM)Akwi=v@*^~^qdRP1CpxQQ7%5~9+ZSS5_N@ZdP>6@wjODWRZ&p+A)cRLMiKlDhGLB_Gdxax zgZRSFW+O^hmswv>=H$Z0vODY>x0Qo#K>-O#|DwUp@mwNhCiS#lDdhs(YfrasaVJ*+tb_`$=(Ugaa9$qp ziIO08Z?J30jahVi__0@aWNa;o-RQpz&^RgiEP{8mDoc3sAbch-uodj;yVZ%77s!u~ ziPW85JVHcXbwn4lxjd9zY%Xc9H0|Qwwgfl|$}4e3N?CIQJ@C~Jf;j8N_jNk=&staV zd(07U$zLp6DAJJv5k;LTYn)G(8{0!0(WS&_*<|)<;WO2*Zj#j3G%vG3BOK;5$TmQw z>1%Jy0TGGyWznBZlK2i(ZyLQngg-eU_ygUuXeIXM zy)d?nr2i(-z;7H-{(U~yB5%^c8HA?$eIix$AT-?qL9zp&|=}4$DKZ-f-u$r z<+S2TvL;Xn@3Mp)b#AQ(R)#D~E0x!Syq$+&DI3Rt2qHB&+TvTe+&v82xGdex-^*3k zG@VN34;WX!Mpa&t^AsC)pICo`mDzM9%FeU<##-30qhY-}+e zju^{KkJjU~w`i$>0;EE(^-+F~KCqbJJaW(3i{TXti3pEhRPYA^bjQP{iG0k{82iX5Ksb_Zwq1;Q|R*$v2p18urTS%2h($8-RCao;m)7g!8cv zD7v>LZTYwFj7?*Il19mWtZLgVc0tCQT_(m;8xwu={RLr|sdEv#5dmi~*vt6)_#_v~ zYW?&hhi}-9ln<1cYzgmQ-S0X_6C_t`R63tm(&vB6TK*`laKi5_{N}5|cx>_4n+^{eqma^VW?xnkXxf0*_#x=}sb`$y zhHthRFpbH1(}}T#N*+$+JCo-j5K^Q6s?biFC=$(Ig9>5jJ3BcuQAVKIl-Cw}iPV*!bMxqC8`76CwY1b+(aO;*^3 zNKv5Jq^(KWph5|1(?z=AzV7sf`qV=8Wl-z%3Hv<&Q|A*cDfu)zin&w9vFvlDC zO9K!VJ++iod+x_<0E{tzQrl1UWdwoBY9VA4*G%6&bvFaOt`L5mwIt{L^KnB#kHra2 zjvmg3x16g=UYo?%x8t&#S1@WBXbPM=(+bo^j;aL)r03%ii>+3o^K9pki}Wg;3Qz;g zC#J8flyNvGKdq{Owa_M6zb0g|lyGm=B|<>L!fH{w$Fz?qM++V8!#+suE#F*0NSadW zSqPp;s>-|vdhhyasszbU@T@4wjTwtX4+Yu8adm#(0l7x;WmJ?-jMK5o3F}Ptwj+0~ z2_N~aHJ?SrE+o3>hIs-KOSj5&{To3tv>n@IvFixlp{wN{8FYv9jLlR@LaANYv=zPS6#Z>Wr$e7&e-PmEw9seBff457$?6K6Eg+Zas|6KCn?19 zLvJVP-vl(OcUp~C7!N_T8m*AP0wIVpR93Tji7Gd8FmuOaUq#>%!ZBg6 zaC%|e#KDo^YFr;J8tCk_TEj&xLYbo`GRa8HVhemY zJOI;D%;$XgQN7q+LRq!D2hMTY0*BgL=EfZ8!CcizveOFZ=_0f_{T2%b+nO7=V|QCa zV|8kM%&L}I8oJIocMG*{7>Jm&+uLM(iu2Z3?hbO#DRY@VQPdx7utA>IO1c1|lWMdcU zmA=E{CuW{AX+=Q_*&zA1jLqOn?mJl$ zmR#AzY`)7t;-S)5P*LX0`55s&hhs~nxWPhk&QJ_l8s)8wgmPNU^Pu;d$;qW=Jm zUzSo|>|9Y=heype|H<{c9rFgw@Q23#gG>Ae%bWumVBrk#;4ecGc-bndH&K3{{|^IN zXq)fvrL58@r5*AlQPVz%w8dxgV|r+%f4?I8ucsBKriqfam$!{7Y}F}@bA^jOsKr?| z_P>#tN&hV~cPTeowa^oY5jR-2ARu5SA1N?}JF?XN_Y=?R#qX*Z?Rh>+-5L%1%_VUq z{Kx}8DeR{+V_6?}qa>Dxj4oK37H}7#T*ntHJ=W=c>r8i;iZ4a{994=CtRBMnC8N~k zz0}OTtD2$B#e1pond8mw3zYVuu+|ttA(DkI_tI=t98ar67J96uytA#35qY*7?s&@s zD_g3j>{8)7EwTn@$0lbo;2J!G2Lln;&+x~nDkOUNUnZ<}=zM#nEhr@@N;47{Z1`%( zoU`77%NTW*lGk6C%~`|ZtUk2Ba;oc$D?@Zqk%ogzw$2B4Az$+7sSHC5^|Hn1u1!eF z2yfCIO)6hu7en>(PgcatlvQo3 zYf63i@s^9y}8So8>OQz*b0@P;bMNx=|2jZQ%SK~C zk`x|s8u5}T<{Wc1(v~F;)mkZbabA*&%Y&LWT4uEO(pKa66J>FE%Y_&$rwCYGb3POu zQQe7w#&AXnWCftkeP{|Lz3avH4aMuRb$w6G=vLkfmFBk;+Wj)R{UKoTYl|e6$^?Bl z{h3;Q;aN?pZMqB5MbMiP#+Xm z&+7e3fW+?J#awB}_}AbkrFRlkgT@zIO##q$%(OByXht>)?e?7ibkR$j??@rR*dj@S z1Rhwu5vJng9q}-xV=cl17}if(KmNZc>A#Ze|BaGnV$RR*0|r2VCL??jf9Cvt} z((djT`zj=_+fqj-fqbbm9@s%%=?(FAz^!}<9H8X<#V!vT4 za9TM!O_jb$9B_#dYcV^znEp#a?&rcro4ecu_gtHPjJr~b=UO`lS+B0!vFu>_lMJ0P zm+)({!K@Ur7u@^LzoRSdmmh$$IEUG=de*ZXd?drBw#9$5Uppq&^;@#kjn2`-9yRQ~ zt34GXzYd}y1+UKGEtKC{l9Ou_9w$u}J>CZ;CtViQz`o2F!E%SL$NA{56Oh%_8d0%L zp`*yEcS3t!9g+SXX>%G1%qr~Zj7>0x+M9B8?#u70BesjpkTpkZQq)7x#t+5e1=)>J z`$dl@DV^(>(*EP&6dWoCe`Ld+Thg3H&#Bb7s7`Iq11r-uS87F|DL$h?0MGrHbY{3y zkvOts(-Asp*VLnhR(ktgp)jf=r!lQ|U5L+>%KoV+u{EeFUGjIQW_e-}f-1*pL8~7m z2}5A4hTm$viuXYC_+mwX8SBi?w7NJsSovBwh3Scnkkhiyc9o~>c>)PbvRSH$=lr7C z=uME_uRe$c!SP?1`YI znMsGe%MG5#hJI}{YfMacOKU{CR zA!37NNzL!NoVX}glx+qlyx&3eeMkKDk@9|I^4;UJ>W_$n+}0dg^{uert$k5;z(E-aiRo~Wr!8&6O4{wGUEQ_uMR>|M z)WoqdHE}z45^+(q<|KU=zJSe832_d3lu{(qC`HiIwh2=!cb_#_cVmTiaJucQAwCN3 zIEBL8$V-X%J57(ri?v&MDRNiYb9adMr4>ET9?LfZil!xUn!zQ%+x0E;R^K21aZ|g} z$gi|L?JdeSsCl9RBdmJ_)fte+zO%fb-Pfe8Zl*|0TiDjH>=&vicyU+ijEPLhjV_rC*=~Oa! z+2VJFxKtV?KDdK+O>si@}!HI6UxQIta`m2S%%WSS1yEl&JsEHG1};~iE^oz1Kg+DeeTV^OeQ zz)r#h07Yc82af|9bDs51tX0@_c6?cCW@0Y&Y8w}Rc#5B&=Oh{nH(e4$seR_iqLqKKA^hR+>c39Gzr@r-^=d`o+R9p^o#Kyz3lrg3B&tGVZcj88V zdW55DLOWy7YHuL-`8JEnB&LL#$i!2l(uY(oz68)Z?6IIcOEN}g4}QTiL2(}XvK07$AxB`C_boeW;JF`ESdiN z@z1N2_Z6ShoO-c=b!LY`kD9{U-2sah{EXFpHe$vPGm0uE45wdNP%lgDR7})G`CCe3 zYVd}=?P=CRrMB>Ce!r!tv2?SlFE4v9#ZPh@V`I}UMWuk&^_@UD7B_|@>YKaP3j*f5 z3*6HkQVxS>AKZqm&s$pQJB_>+pYF7>U1vEwv9u4{p@Hi?5PK)~*n?j%%)kfoNGf$S znva+hWF>Y@@t2JbC9--%5+Dvbr@x>O!y6Eq+;xfUjaUz%5|b-3@F99tz^-PuL6mR~ zO@RAwn7A&Ar?n5&m>N)=0sqIZr#kIbUD}xgXKC;lpOewz5xxY(Zh*A==Zr-gAi*P{ zKXJ(ZEYYliXQRZ%Imy?C?E$a1{8qkyAh7y$3yYFdBkcSU@~Xz7 z3jpIafpgv18z^h{OSFH6IL+4RuKSD3=He^8gk``Hk~(n9HADM5zvZJ%8t)Nxv@QXk zOWyxD)v;mASkol@yImpbG=pZct?JXqi02c6Yd&*$ZBpWZpfZS~(QqH#$n>1p3L(M_#k-`}Q6l-0U?N8SMJw)=Z6AO0nNn{; zRSDR$TLiE#HIC=)w!+@@ItXg)eGr)LvOew4Z^@ebvViKvAk7u)l4#?PiX)-Dz^^6?ymtyD`3qsx z7aw?2AwmV4ny>59U8w{3+~KSll4koEJM;%XcN-3+4-zuj7ioh9gJVbjdMKrO4yR*{i!sq5aqX)Qtx^~BtrLRZih5IrAm~Dh4heE--l?oVasPUfwW`N-fJ}SF zzJXwE+MK6`xZ!+%QF3y(ccC7dqE7t9W?yCHX+qiCMXOPy9S38*)G4%(xT5M12!TkO z`VuVa?UwU$)@ITql|t|CW%5O3+Q=8q>UnRu`w{6SDM{R%C0j5tt5&gBz^po+x(%oY@X(+v`SbsQ`levLhoQY3cG<8nZBfCs(#u7-Jj+&X-vK?>rUj)*JJ z5s&aV7qj7$W9JoBeb#vOTsQ)sOfz**pjz|k^=-`N$a;urd<3;rL?is6%Y0H%_RhHz zxBJN!KBI=S?KR$-?{>R!IU5<|P?+5MMA7K(WoU9J)`!xoF4Y3weiz1bB(=z?=6#A1781Lz#e zo5u7&=t1|cf1#Z9k+^#?@iTm#@tK^+4&ASzDM2vrFR9OmDE*+yaW!W7Cu%h^Xi|+$ zegdKsNN%BoQ3lP0o(1{Evi(bxl#kWZ^wTXavEd`6^uQrtOD&mVL31XFqLhltvMEQ% zls<2gp=}F<>OAX%E=H%J50sI(Pl&82&k!eqpyLJBBR4L#7V{aY+4u*(ch&VFFxfd| z(Oz_5P&xPFv|A=ZxjCTh%m_j+;Ue}@j~+@%EdCIGIUx1;d8zX?aC+81MaQR5);Y_UEH<MvPk&Ecw9|IQ zFPPccI_+0AyR{#5LSxnNKyQdcjFkm5URBSfMr1^&yQ?|*vEMLw8gSmdI)SS9O{%G5 z8LT(w>YOqQy40nOz$5r&kGJ1X=V}~eLiZ~C3ojSG%Lo{osV&XzyIru}$;vuVt?LAaEkl!u2@u^+3Z)o)$WCuN8*0< z8tsbb9Fap#l~%bFF%5y@qmCxab&VNVdJIbw1*@hnwd7f;qRHTvn%8^`-rWXd1g~8T zkz_o&qai)Y=V=QufhylU;By4ecnp(kKyYDOZv;&PX?Gdc%edKlvFVBr6|zjtPRmctG@CSY6L!X?Y;ubpsG*oFJ>$=%JkqYU zETY}4ETZgpwj6yLadlX%RRDMDV)CXp*ARtK(l=Ro9=tAL)!{>{87~H!0 zNi_4THu3T&b}0Koypc!r-RAP?nqTi$G@mj=-#_h|dEMbKBaJe%%(LqNpV9gBLZ58; zqMaq&S#$PwA;rQLZnCcJe!7Vt`gnWCK?|Uz<71MyavIdBSq|neJv;Wmk*gV=cR8aV z{F7L(o3vR8;m%1>NAiZ#K;vFF+0eo4UBtGb#Z&9eR=eIUz!{OCU zlWF$kyUi@qwDHLyM@8wzw80PVr)%-luN@I6;9s7E2=gn;(=`cAyN-*qo4qp{o#c2| z_4J8sG- z=lfSiR-hW}#{256dR|~H`<6hE-zD#m%3CsgtZ(7`frIJ1_0oxk>4o?cY&J(a;05yb zv)~{f(o1Sv@BtU9QZeBz^m6HpOAFTN6V~q7=~oKbR@0S=!D9LSK9C4|X%3e=ecxaf z);jb;A{RK?@}O=e^WL$+Yc}C2hxYP{7d1IyaPi5w`bzaozzWY_!M^1hX!bqxZGNds zbcxQHRLp={_aKqd#V;1i!Z5tUo}R7MLYKIEBfp!@A|Ga>%8h)k_Kw5dqzvo5fubGq z$+&aYi5kk0Cx4Nz;LCl2aRHy@G?Yk1G~EP!|FF9hNiX02I40Ux>UuwtWl>18Ty3J| z(XfB;H(!qRh8D5M`EhD;ym5CT!UU=Fw-KdFuzYpOd>kM)`{vO22;~IaM{}7kUBMs9 z$bH5=GNKrfptznER4%Emh%-}FKB^8yeffn!woCLCIb0To!Vo->n{U6B`J(fIV$}H= zeuCKShuX!|&W_72qTcb#PeAlQOzB*3t$Q9>*g~lNY%9q+2(>8zn^QTjmfz3F_crG* zoE*RW9N*}bopZ*wT)mQ?+u*FQqg9t0F;N{ZBVkddyggLDoR$~MPd9v&FjK4hH;g(a zE`G^e*(nL?6bnEbJ6V3pcuBn$X3c-B7RlTa6)0#BR4|>WO9U)C*Z{hiu3^0f9~dR> zCr>O3#9OFn>M);s7}Ewh;jheXbaEX9j5(_g*71Z@L{Ie=_~X(3k7lxOCNVqSC&ItM zHFTpfxi}=+=UR_02vmaGe!L?-3Y#{M?kD3l9_`S2-29#3cP#;M<_eg}DEFsoPBn7> zjhc)dEk_0Up80pxzx-d_Kb5|*k5ivRSpIxIU5oKZlruuGF^R~Tr zJs+zqLE7bYQ!2%anf|x>r%wHeDV~Zh;r9<%-3Qjv_MZtggu#;J(`dZ^WFAbA3cMZWSA&E5SB+ z6*|NR5hNq$Bq>JlwieS=2{71l)uRo-d%1GG`3pDfTv1Z|1U^F#?&dA&mv`Sgvy@+T zoX1-PI1M1G}9?@PVfyC*P1~%DwGfOK>Vp_9u#ox+m!lx>B*>pS>Lq zB5;N+%tns~=0jyGDm-k!dCm!GjKzaNu-iW}WWlvD`}bQXBvK-R&o-{I#5>-MqPNY5 zbzRN3_=`f_P}8M}*@HC;>cN&8{}cNiTyO^V=F#cF$f9Suv?{SIa+j%AdQn8gmbc@G zH}Av_n+GQI)f_>}#obxdHuL&!eQDoCuWZo39O7VWOf<}O`@&QHw?^-lvDMIGlItFO zoNbHiR-CoRdEz+uW9_(G=k3hq3A>!Qu~h%(pkhxO@BVgdGJEt3R*1|!%WBMHtr&|Q z_c$J{Fi?OPaD4AK(dC~SZ~jMb*%r&ikPr|8BHma-Ro#gXxnJxjlZ}hEj0Xvo1=e~K zK~gw*-%gTR1Jm#gP0tnL`=eyGHy?n#3t&x@Y0`GjzyoK!ICJ36hEk>K^R9<)juH*p z4c`%dJt=$v?0qw^(Kx)oinPU|U;M9G;XkR=gx8(a9LK`dbcaM3p(Dj5rF8dLdMp|v z{Vi0)y>5>}jY{8WEpJH0h|Z6;+alEpWtQW@9_KxqaXt2u(dro?hy5e-FMwE#R7NK< z7$|4|Dn*Sg7~Pr;8J+puV|*I+rjH4^?BYqoMr|lPZbf_Xxf4Ye7d}HdV%_6aUd=bS zO5c8CcY>tb{W2tkhKcMcP;+@b+v+waMp6}94UDX4#5r7ctx-sQ$BC3vxTD_j=&mfq zzr4s@Gm)wc^NYaaZc_OiBwUNlBAG>2x|6BKd>D~QvBgNfCiK89OXy>DPL?TsZ;OHC z59Cx-u^n8((M@^?3~~w(Org}`v+u@06630`VtzijDV5hE?!YQI64T!{k6Mz-R(g7j zJ;aEDFFl-7p$(akHk=P=QZXhBU>xugH5K9#eobq;G1T6U7N!_Fx)GLSTFUcW@f+R= zX;>+)`}c(8^e_s(k;|!S$xWQAdGIYoije9#s+Y?|5m?=n*lY@&Q#}le;+wbm@2Z%9!a8)&%RY;z59# zaG;fb|2=SZsPe?w|K~Ufgn)`lX>7%Y=9H1MSPl~aX=t+%x(kn!#5DIx_>Y{P?CkjB zq3heuUQ$ujN<8l?Z|&#z((?z(umw1?R(Y`1W)6T>iq~#qJ7*Mw7}3>TW&8jg)Lf48 zIYG~vnL&)%n;&=8Z|6<@#@Dm2T2G{)2O9;~2AbNRRGqUo4*1_hxa>J_*XRXXUflwd z>gnrtyl*{<@`cO2-_UK`DQ9yTCQDI0b|Pbo%R5bM+{&ilaOq!*jlmT>72ZYo(hoqs zr*0va*ORL)q8TAQ###>84Z7=?CQ#bj5O@9;P)g8ZyT|UdSU{0j0G$We%!fe@-^tZP zw@~YA=U&oEamxTHsfJg2^dQuD^=&N^SM60{JDyXcvPW*f9o0N!4@TdF&-QB2Z7(+Pu3jUtXI;Ui)tx@~Dq_E_zCU z)?89M&V;>pIO|RgvYZ9|Yv!+=41bEXPr8}9dB*^|tD$C5Ncu+{VUk*J#I^y+r4i=6;S80kgI=VCnIgeZ=Kxx~o)g-K& zye=gX2~a>B%ACdzibgw3o4VFs1Bvjmur}M!3#z8vhbL)a`DRDA-zd;OQW)Z8GlOrlNJ ze9*`s9V&VVqd7Y#uuv=A`Dqme9%9_=l7*$ILm$1?f4G-HvUyEU02gM8I?5D>LycWZ|%R zKI#EucSPG5U&n!jxo{v9mEiFWwI38!LhZ}q)Cyv)q1eD~95;yS7Jt?hbLM-FGPSdO z&XHC%96sf0<+9UY(dc8qTVbMx%B(J{wYUrRsn6xMHT1|>;_s6zFMJH% z;KzUQZv0_9P6ILmTEfibH7WVQ;fX^a6c;8k*NeJlrVe3O)M0;L?6~AjIoGBv*97*d zb|OJ+h5lDzZ1G9OzO?%$`biDdO%gWM?L+dir-enhr`MG!F_lF&!)Sc*V4;*69n<&( zQW@!tODDkUhJ-hcjHqq)E2>$k#N(?AQibZr*`JmXKwKTj2tq9knJ)5exF!FkvK{ zH?F0WJnX8~6!zC42}S`__ka){JGAX`$y7rwFDgpF1`^!S-7ox$L&YhEmZUUGt-1rt z(1&qOswPrCar#FMDba&-Z@@h~k{qmNiH;|+e0kqa5a4l!76j`nOCBVom1yJU&crUC z3P`#_lF&3Acti6rt^UXv$*2tNWw2qP6NwDDx7e)jqXv+4uGIALLSANG<1Du z83a_7$#bi4$QC=<#D1PG%uCV}T3NMIxsL6)FI*X}FbGyEp$_IVs6@R`Yuun_Hp&nI zoJ2qCPhL2Xxymzcpt>HYPP(x-(RhGN&*%QP33}oe|HTu}JvVFZ4D2d5R#r!p7qH=y zSkvkHMkX=-8AaEdvk5yy{QgJup-%8&`Ud#bV&f5blbuA};Y@LhwGITVYu}(7RftMS zc#I}f(QgG0%R9a;oIS3iK8&zCDO!VY&TJ7#kL*o)u$5rmP#+ge-ZBQ z;bx$42j3}hosVs9R4I6PytnR!=kBYIb|YE2Cc5?@ZLYVcbL=znRn$A4Ki8pE?$vYF z5X2^8a*$~uPFVI?6Xb}NdlCDQbdN1f-EA{mLAyF73%e@jW+8R4$!ezhgHA}U-+Qn( zP_9z^G~89X?b2GxGmUl5vXsIl2QIzNKPpX}`?%49M_cH{R4B#dCDO&5fbF^{wx#b1 zwX7;|6)&nn`rK2SRSQY997GHdL+8+`DWk-MF3V!UcaRuhf*|<%fMg5MoHDi!C>4(D zSy|@>9*OW(eMPNmC}Gm=ScUg2-`b$vd?O`BSmRWg%3-7!AAfX`xO_@NtPSiEKf4fI zuOE6~rq=opp)K=`Px78TnYzlQFzG7%(^1#?yoRykOR$tKH4M8d2Z47kIkNDK@#MO~0JZwt;t{P=YZrC)UzJnd74Hg06c2S^J8R$t~CIEHdRNoqr|^jLoB-BEnC zacJev>lf!AozY2}&M4TMCkZe&9 z81I3q`*sL`$X>#lYv~4vUN%{BSi5HD@giE1TQEI2ii8G06rg+weOBBe=>$v)z7w7W zQc-bV{D}cP7nc=Yov9~Y?`zxtC&9C#xqQhSlGK9w+6mNG$7En-B{Dqf0}=-D1{I`f`tP zE4}^NdIOc?0<6SRMw8(z59b#j8;s~18PH`sf){m9qq0@5HL3P=wzGYAe0DML!b&_hXg%n|ncIo)e-)Z$(;Q*KT8EL|To{Y~JHZs-TTApP-_F_blo(JWxTn{_>2UKl? zC-78cm`{vhhJ62SrdMu}Ks4JW6=+p-k|Dq;y4e@ZYuCo6j+oUKSsQfx)gBl*EB#+B z=Cd(u^*Q_!maGsGR;7c(7c!;oFB}u>1$VbCDRM*{%bpFL#7Mk-6cRlU-b>;QiR67c z6+?5634o}V$SoWTd@*Zja`6dO=q)Ky5pAkE%VKwyE`$QFp+q$;8%GkgNNz8K!@aDG zkgp3&f8a*IA;oXIfJpX&?Rs})j}Y&i52HX=n06dVd1di)W(2)JqxLaD9pe<~`=P3M z(I38%&gLE52?>{2Es2$@aVHs4tYlhmPtTgSOx*7^XvRnE3=srdYr0wf*LQR*8upSJ zJJ$(bW;;uF1hEaFR=^j38yAykVVri*7Jl3Qy=!i52`2iBud^!P4mpyNuO8#{ zkcHJsF7;lEj1>D|v*{jQuTbi_f zzq_>(m$V6;L8!S1j5#^+WHgxBGZ+>fKG@fTiiQ zeKGlFcOwSV;B-0V#{gIDop`=WKL6Frs}??5*WFHP-pB8-M~~?tb7;`zpy{ri6JhdW z84tk0?F0M$_+&hHcN3wH<-=n*6OUhyd_tn9*Sw$FW<l- zR0tEsBY$K62kYu3%f@UQ5)5vdJgaxZU_gbv$5ZEzWp7WlFBr1UWj4pIo6fVQLJ!XU zQxC3AulsUuw|cKHSM**&0&a?BqRB(uFXDr6DT7VLkz?s=LX$aA@L2Fm-Rs{px4*M7JNUF)}>6P!f*VJ2_af~IQn4)l@dOp2#(%yIEa7HKRpm9<(oGua+0;)C{47d+@k>%7VI;Cj{D3-0^ za7@`s@A&#KIE-dKw?Dw$P9tIbj8V*5C?ruIvt*bdfnko}3*&`E+fduE!dzkaz{TtB z6#|U7>$~TZ81?O(jCXVNf$H^pdFXbuWh2ZfZ)x|6c?lrg#oc#a;VA?PA$qFGFY#$M4YeLy2||qB5BqnZ0cc6$+u5$&Hg! zB9;T8jwf97U)qeej&^T1laPY~ihdYP{oyyoAckcBP@Ku@WdKC~6H3q6Z7!rg^zFTa zs*UDFXz=AqgZ$}!+=-)nkft%Z#?l5Cv4h}qWgOUCVZ>;4YbRb_-!H=5cmg4ls9rUd zziN52LvMz4w18g>qV6NFSt%|ST0v60n#@-`mRh7(f#5rgy|D*o9s^@wW7*aux938a zm$X~4zWL)pM&F48_oRbg;fpWEll)<=`N`5PUhpPgDW zSM;F63S37)E_;18P@sn+f|hJvc6vpIOmry254-#@y}8(B*SMDT(@6SLj$X8-#RI1$ zr^(`KZA7=#V-g8@7OgMuF{D1BZS9=`F0bP$HfZ%s9>Dtk><#gr7Mp1>4E(+(!ZCv16BJ~?WSx`Exyf~rB8@mmEG{lT$UNn zEJ=T@Ny*?sHYFp(Mu@>4xOT1|6}&Nt0gdxBglR~QH5TzGk_R;pDMu$L_=jFh7M>{!3PF|QNtpQ8{a)TG`GVfnk)#I_Vwl-S~<1c_di@NsI)_Eu?{Y#-d+*$3%m_2 z^5XL^vot?Zmk<~L#>T`WU%Hlcowl34BQEQc58ftf`p8$ zFQnv@7Bsl!t?0UwGo?$)uk0GupsxF`SWok^q{y{Tmkx<_P=I60KS{HwDeWtx28#W~ z?#M@2NlqG>=EveIUK5(@7(7Gfjfy$U(hrKw1*-Fbl>|flz;lk9pHLQ^^E(s#@_==V zt&m3VFR^U(rb3uSC8KI6&-1}1J`0Htht>rK7y1+&5-_ir#%Xp^zFQGj;2n{&>L_ysg7roYr`O z=bV-#0~RMq&V<_~)(V|r!yiy`l5z~Lf_ECqr}hZS{Rhg6N3)wl!ob;rE#v$>DHMso z@dim1{JQyjrrZ?~UJ(L(kuHHH6eQ#PKyhdD)x(Q{D;HD9jUP|iPpy>QFX%R(vzw^- z8uJU#y!0^uGUmbgFsX@X^(VEzD&z7rsZqHh##5WaH%KKcG*ud76S{y?TWI^$iHh+4 z<8tsj-Q~5ZBG{bZXs07(f3{s7c{gocm_WR3XOi>a6e^3GO2!OK*4^Wrr^XWcmXS*) zqerAwGjI1!a~GX&_Egcy#@!nW*0)FQ6E6;`dfQ~aO1$il9zP~KY4doOe5o11l-(PK z%D`#zTa#YmsR~4$wV*Q@rE5-;kozH4c2^;!R zS#-9oj*}?@uRw=vzujHWa^pc+O7De++uUql(E{{(OTDR}FXppR>z{k5^9j=hXs~!J zu%psqCro4b$AP#jR?AdAXbG8NQ4V9ygeE4jP^Vl>EIs)k;obTWKy{mhM2Wll1G3z9 zRyqPyD0sBKhz*bXhyo>uayjsMvl7i>q+#5AZhTD)l1N zdL1Y`>vOVPAoY<9{K@^yVTcenTIqTfOOOdAp`CcdA| zx?{9sGu53XkG}nh?WNu(a)W*FX0<=`YKY>kT+pp{<`$m1fi0n^Y! zc-Q*w)c&Hy!kfT_kTv<`)2hwfz^0joa0|T=d$;p|0+6D&yul(LFK)TKv9sxg^Y|Bq zQ;W+xKCb7N+kTWAtWre8K&t802XlWy9p91+bssn9-#*O|AKnQ{IJM!i4XCjkpgBO7 zat@nADWa?88((ENF{khTT84oa8z1F=JbtYWe#1l8M3V%VM=gQb`ege-E=R}aCCKTN;zsEZ#SmsGnYSnP)KCs&{CWQz1i z4aKp*9F%p$$lf%GyP8nERaFKKA4~-(q{tf7-O#}M@s9&~Yigc2q(~#llw?~yOetz* z1X*A|GCDeJ1mzgC1+GorQp}Oct6E}c0Xc$jjw^xtq__ofN!p&FR;er z)eJXRZrmvEbkIe2DtvM~#A;qQiETuh!s50l{(1?IV)+nCQ*GL;Go?%t)nIdfN`xHCIb+95e6tT62>hZ@>NI=P675S;1T4 zfu#_JYFpeD;5E^>E>0HkA9mHVG_pAIIY141PELdb0|%r~VR!5LBRRN4JZc&R0}15e z_V(K@Y9JO|41Iz^yaYQjjf|GWXMB#mq@qn_euaaH&+r` zA}~vsaGo{~%##t(mS>^Zr5p>soInC7TvOb2;PcQ2WjwGq^9${)TR+E1aOc#mkSjOD zZJ3^{ndx)#xx`R`%rMb+SA8LN9n3$evni?T&c$PD*2UY-8Q~g2&TAp=yP@wTcV126-|?*6-(GNmDF7>&0Tb!*rDS zS@-kSjhRG0y346tE^TjH-qg=KQ|t<}&Vhkr^taA!FOT-_!)xWK(6*lanVs|3kLM$%?T2J` z?gNj!SG=FNDFho_{20J!Gy2Xx;(?sMd&2&S00S;=A2I1ocYa2fKx4t63Rb)oGPoJ7 z7+6M$!ip+m25&l9a<>{zUF7zs#VHn%&`SVhy!ogg8@uCiBth%sIst?e#U4BH`|*pB zaEBMWi%?()N(|l8_x^T2(BXcp+lq%J!T4eIevm2=-R$+DEC5oiZ;#HnIjGh0`+!wp zkhA<0LqyJ8(L7DbWh8@Yz{pX|zp?VTFz++Ah zO>Cb;Y&+Xr$b93R)k!C|Rb+lqeX1rwFBvphN={Q^z2jtQa`u;7{)K5178VUR!J0}M zZ~QQfNj>ihU=w&MhP=Y;Af4M&kVdqQ!aDtz|5|a-Ws}r{nd*@Z&P#%t zr!mC+uf{HLdYqtfd=HRLH!XI`{5?20wq3KzhwX zwl8Pjo8?bUSf10&6vt}pe|Bv@ObFnL6?u6K&*a|T4%xw@4Y}is_MM1tiHINhGu%u> zAh#g3u;ITle;^?uzBy2nEuZ*fVc+;xMyEg4`S`MZ!D6kvcFU_}>O zP&i#LKR5f}BRKCuvyD{7;9>c=%d`W!JJdNv2epGL=%u=jZQ*eA!os-^iw6e(IbiFP zUXm@Q>2)|Mk8a{1A(&(8iEtgqvP-eIW@gt&^v%6zMgu(?{bVR@g452e&-6d(7Acr& z@054*kcgAj*kJv`&J)F646m5BSbog`A?+>y z&i4Z@W=4@SWB|$#d(O#c9pa>6ly8>KR)1vQrx`zO8xJHD4@H4{S{QFj;ZIgYB~T~m z32Z6ZdUX=b`BVS67q@?QpKRv(H#PUh3|N3ctq>IEH$eer0`0mygGW%)mFoQ4=-Afh zXbbbkon=6DNWn|ac{^ZE-jALOIhLcjF5T_qsMUJ4bCi2sw|m}x67;A&_``0%xTw@H z1Q;IbyLJ3@w?US?Cn*+krS935 z4-~kKf=!j*6w+F@GSe&XiV4G4kfZxQmo0Nh^MpRUQ>)?7i~T9DaZD8LTyQ;sVZ9Md z2Gt9R{Ep`>S6L!Hk|> zjaIv9R#mUdzf8;$Al3b|0yYgad9p$#p|cLZEO7PrSbDu@sbTv`NJlyg{dNJ2 z(jDi+Qq^n1q@1R>5SpeU%-hXTkg$?j`nv-tL$;*PS~0K(LLlcdHp{7o!!z}PCX43c zded!g&wbXtXJtM83hg!rYfKjjvA82$M8hJUCgyLqvN*1P(?r$^jJ`_d<4K0S?p3dh z6zno!A{U-M*37s42JxHrJY1rCj~x0V^(B%@o=}XDT%u(Wnv||DfC}}*v^7}ekN9Ks zHuc_r=(Za=5~~0*uJ^~4-TK@O6tX_-Sz8rh?=iW01)y$IC<*gAr?pmey1Y|oEi=w# zYLOTzZwvt~hw}h!WP9>TW~xxs~HUUS_#Z8^!{MpouI} zmLKhE_wAU=H2LJBF-)7{KPQMO;+N%m<6h(c2-HF4yG;qXcKxZy8=xQ=vcdu|>Gk7z z?$cIm4R6Xfj_D#64Fq7bP!mZ^BA*Hh{%m(0dXqOq8}jBk|0N4l7Gq_pEL*Axbz!+_RuJGv z8}tL8Oq_XrCP2Gzu#-7{TmlR=;!JGyNcP|{F|uoAW7a@W1)2bfw9}-Z4=~0ZHt}kN z0NY|VlX!29@vlw0D$(c?L8_-zm>A)D;=<$h3@2e1UPU>`@446E5Lp3QTFXqhVF-D- zJgxig)SruqDQy%EUUbAhBQ)XOw1hx^iE^6*Ut!H5Jy3)e}qHakA z-IQbe7{2C?;r-NW0*3-5Bj#TGEBQv*_huvLheV@G4|r)t4$=xP0B{kbsvG0{+1eHz z{kIj=GH-(R{9ynjcwM4LhOM|q!V4NGOTa9}ri$O0F#-^@$ zxRKAsllV7Yt$mO2MBsQZ!S$S3%Q_nZ?1xX#>CY zLGvroZF|3-L;;|E>(b$YwD|<@I>f(lWmFN^Oh$I2mOslAJpy*4bXkpOSi6rbPmc~G zoi6VWZzLg2;?aXD6sg~5w{${PTb|o}d4ot3GAs3F?MaADH9gTZw!IomJ(GBU9e8qJ za*>E5e}f%W)%4pVI55GnA+1rZfFwGDshNZNJomw&s)Y&KZ@KL7h5lsZ(Ql^b7!4xV zXGxQ>gQ*(tF`ep8|b)Pow0B@$3=f%n4TOt525J5aSeOt;j7+2@2Aanxq9BuYx6C(2mz_WAqR2^AMS?KHcL0qKq(bKzxJig^(1z{OH$u5@Z-!%n4&D~9a7i*kFsyLnz; zS8ARXup{mxL?_{oGu5h5Ivu{hDj?5JN2YW?+dX;5;F1QUXR@0)E3h?b5)J1lemA2e zmr%N|5<|r^bzNMb>gwS!o`7g@GwG%F;%K2emObM7g zVy&p+5Cyh5(@x1283kdFYc^e^aQk8m4E$+K1wW6WE9cnyg?~ML*xc!y9#V;8!;vm4 z38ixHVpg$;%n%Rf>Z`Y0la==T z54e2b#c4IEq1aA*Hi=5r`HFmUY!G3KWj*}Zl@)ANma;b1BTN#jp-S*1ACyP>pzf$l zX*?D9T?P$$|KK6G8&U8)QdZKK(#}LaCr*v9-yP2V#%1}@>bFF%3DF=jRk;IpaF_`x zCum18YL&cF6a6jh@tzJ)qnk1zgfb*Llw{Pa~<^_I-SXmDo>xA)vnX> zfnyyPk@}Y^JB|oAf-Iho6;h372*X!>v}EXli+s_me-`U=H6HT%@}+}?(buOKgJvqG zWWSfz6Am*7<}+~6iHODTVX%cXi1P$Qp5t8!frQqnCs|1Z>wp^%GxEL-IyJt$O%{Fk&xFZi3W(7W!9^+( z+xPD5)LGt6Rbl)gZ$FA@MMi7>f%H|R#&xeQD9i=>W&}%Q4Ia-tQyyQpOsW+U`+6yH zPrM?W4%x}SJTcqNP7n?Wc^My zh);2A$$XY+4C-Ous<1YM({>ws@*c^y@&bipB$Kb6;-`LP&W#1J0#gHQUhnWU4&~Uq zE+79Ghe%hT;LLK>;%NQM6sdd5@O5`J-Dz6ME(1IJfgl3Xm-X5#CBVXPwE)dYDi4Cc{qd;x$+##koyYPDKiVQhD88_$o0)^_c0Rl>V} z!z<+OyhTCXsq)-*AJvE6!h6wjG|b!eW!IyVTzYDn^W* zWNS6#U0jucgHwi7Hm4E+o-a|$(@;WG<#V4gJ%?@kJaLh-mkn6 zp+?G2pnQL-GY)KsZ{i`G^i36(?7S>TMZM_4J*qo;hLNF1MTQJiM&|0McNm_D?#?`V zs&3dZ#wV^bmyr+#$8N|$70#n*MWg0>_mONSVU=O45l!XqY3fiFzn(dsR0EF~s%{>! z(LS8fF>un$>9*t$JBuK*rK154yat-W!Wn{U&_SoIh?kg8K3c|akldJYokPJKFV_}R z7e)3a&1rD4A2EVj{^YSdWi%^}$L3TQmfs3ly7+{HJ?N!By5d&H@jQBe?aZuQekxxq zi~l#Ml>3HeUJvt^!|BO35jr-M0+oeV=8U;!`$*q^d}aA<@}@n41cd5mfx98o~N63P%1IAZg zK4^{d3M`~konS5(&xU97WR7t85vGn9+`L^Wk}W_xdujuuq&z*0+*zMdxU|6m8K@-F z7Vu;!p$&&DUriz3jH;je6pZ20`ij-}G!~3HzRfC<(_M z?KbHO%)YLfe=Oas+*RuUS#W`Q=OnDQ*#fw}6O(r87975H5`WE7I!v_ViYJb?UHR=2 zSKDEN1FGyMpw3&%y&9D zJp#@nLv}6}c_OPsrp>OWch1#}-9xpv(=mbEO|VvS>YKW(XHt|iEZHJ~(Ey#6O#vIu z=xdYa7fJyrp#Byz4K`dNq0XG6UP_n!F)P_`2J&3?22?F*Uv}SHU9_5p=mm*JE*Z^i2fJk_?Z^_z~3Tm;XHYbj_5?y81=p z62zjYj2K2cqXK-q~H-ZK*w}(*o-&yU<;5fhE?xh$p-sqPI zA(sS2wfBkhg|X~N>qfh$+%D5J$}fO!?ERcRxv2>3dsoRPN~v^=`)swPVqI4>Y;+{4 zm}zZh3~^QGif5nUk)5qBX|+EnR5+8xd=sjmw6i7+X1Rw@&EY%3yQc*gA1>)hVp=Ly z^wNt?kZ`5$5?dFyIRsrzYvE`SwV!?9GC_1<-ST3JsN>pGOS{gRUzA@}^U@ng)B2K?2hc0I7}2BS9h8p0`Y_<`RE=c#vZ}$ zZN|}6HR6=vKxU>buh@_uhS2Rl?|u8%oX(Ci*6IiM$ z9xpz$>dkTdXh%|+#3`4ehRpU$MSit~9jP(FJOVY1-!yR277f(Qt(3wOvBJ`u}nJXSj@FC7fR#Kq0TtU`kAQ-5Dv>%+(tcg|5s$lbVG zZ!hK$(jOo@>GF91r18ltitBBnLg$m;rYgFrl;>=e_Wu)`QX4w})j7{NI{ zp-H`ivi5Q}>1nih_AkG~fxRN{imRu0B0D46KJ2^94iqwRK`i}|v~`lBDsm8o0hivm zGp}{7xgi_kfp}xcRErKuw7h$z@v)6%aL&_|+BcPvd=Ko)6fSrMXGR#t5za+=xD*FP zw>1IkiMuCnWLU-f>a5x*X7FlmM9mC%V#+#A{PjmuURbWVT9>BE;kkY?I^Vdni|{}M z>{ZlC$*3w8-Y3f1jOFK_3Zc>H^<`kf?d5ED(!b5nUW(fb90-@7m<%-nd5m7AKyO%$ zg0!?(x?}S9^VaXi^N3jqRd9hold)wQuD!duJa+?LLAg*ljP310S{bY_fZAg1K+}#{+8$Xt#h)D7UyOE%^tg29TNWwiWU>S! z#JU6X#bn~jdQ4_JixU0osO5>ATg7fPBbkG0E~LKB5OZigx<2~N+H>Rk;f>0hg=bvF zlEq5wNzFF~dD8dS0zzRXe>0;QwJWYfy+ebPlDB(tHX|~EPS}i2ww|nC5Z?Gj50)4W zo)mXYFN^?q{Mh0=4#vG+wTf)>*gnU*-BxoN1Am&XgHSH4v$X;x2 za4f=SO|~WgCT4Uyu={RWu0^_G;Kn$hGk+}h5BUn@qCFY_jBd% zJ8opfI0KRoDUQpv0{Fyu3Xfom3jyy5?!A(sE814NS978YI;Cs+B;0;U$iJ}I7vU8G&X!}Lq zx@B%_B5MoO>}78VU1@^oS?4F%^Y3Ig4Ut?W(0?xDzV$5Z)dasr+sRa`GLf;EuS=`c zExeIe???$X^bz#TFGF0`Ij{YPf!ZDw0bV%&e~dwbLsL9P_hFq_Q-J z+PP`dSI4Ffd*_@9eq)x#-VMjx^PNX<{gPdP4%!I((X~jyVw{EqPv&bbilEdx9>NO< z@sFO`mfzw#b*VBdmf5nanQBN>b7+(P#^ryRhd^Z;0C7`uIWj_Xd))GI-++SKM>6I zNfH~7h6H9UjUJB|;EYcGwrg;Q=Dj>thM?c`lplHZ?J~lKh784io9JioR{n(_b+cXc zexXuWnniHBFEt18zwaPUu$7iX-T4&_9Bp%7rQ3oB5y!dVd!~k&qc=$l1Tz4-!EmE* zoo`@R(DZ*tkQj)PB%L&KS?Flhf?kMC7DVjWte0!s8kGiK;!V+P=wV4aM&4mB4BwJo z(!zqDXH!O4Mkqtt3p-BR&Wegws=V`{Y>egZR8)5l{xiHZY5hE{{|JYFjF8VZwHTI& zGW8o!w3AJ7=AL)|u%o6}WE01CVRQR6n2ISY|1G=+pQEr3-d*+&@Evj~RDY%V=wfWp zD4Mg{rQD9-t0xsp1+H=Hi8bF%c)SqTIl1)<4c^$GQPa%};r1~FmnP?+k6YTc@ zLM)x6{3DDM4=P}hke+a%DC_`mmFLnAuJQG=?wY#?UR`>rWX6oiAny|fjWO{L z=?dKJzxNE{w?NJ*klvW3$89FtyyB$O&5QIL@cy|^CW6~X(8A`*qC*AT?5aCSkq&Cq zqfj#1+51K#_FJ~&V~Wx%S#KI29X%ik-dqplXCv9mVaE|e0f48+%J}efhuw?|$z!=J zrtg((cbqc9#(nAK@{$%Sn+Ph3hm`E-)-R*%uMaru*Nw+fkDdR#1M*lVB}%uZYnLu3 z8c8D9TH=Q-gg+i1WQ08yOSENINyNw1lZ}>E%7G+#SLNUSj}4OSC#Xb78geFTB_?|_ zFqQUVHzAE>m2Ev2k?#+LL)~#w6k5mbNo96@rRJJ}15~$F{3R|AT_QF_kR#=M;H0hL zbuXdvm~ta`uq%l_JnPNvkt3)*R z0f5G}npn86-G4j@g2kPSmy=VCjewnN=Xq-dVTJbJfCuZK{@TaCz(yPIFR96f%VS~^ zmxQIGrT6Y=xFp!ZwR6F4b>T^#a=yHvPH$Ozs5X6)1X`TJFjnjnL*@7B9c;+Z1ZD=RFrDS%@7RPWHAg()q@3#5yJtmZM`8S@gU~P>(yMjH1>U`K zU-oO0nCUEQRNYYiwE{mKLvhM*_S8!G%lyj@3gVY?kz0BM^gIj$4@XGQ{n>sgt;5-% zlPFwPNw*-vPB1$6Lj}1Hql^__l;$VRf=6jL(G9!l>o3rWU=4z3z|O4MMcu%6RoV`0 z_F!t{((4C-D(8V#FTq#4E5skd4$j`^m$@}TWRYIjf}!j$u^j-CnO zQbI@V`Vq{m{xa4!zbN)2j9FXCv}%Vqk7EcV(j4BXc1vA%B+L#@{Sjrk3t^6ax4Xteipz*DAcN$nvg4B2bZqV-<-DI!-xXr>w0AAmD z$Sd#hfANG{YMtiu3GL>|7C0jsoOJaiDDSBh>X;yP9A?~I@1G`zZf_?eFh83{ChlVe zA2Oj|8wQMfbC;;GMdTLUf}je*F{1vUYq-g7zgWkiqc+*eOa%-O%B0Os^4jPky1SH7 zUK=7wL45e()w!Uf>H*H$s-6*IU=s7gMIlO|YKUn}h_1VR?8@lwt-$vZ1&%p;l2JO9 zt?KYMhW=54j;_k)-;)=lV<@(N18Io7#( zJ8i8$mW6FKI=3Y(;_t6}c!FBz17)XoQ zon`U<%Uke9)J{9D{SDy5w@jfK-KEwDdlmAeuqA_UjeKd*2<$e9G1p~Rk*Dnw)`lj^ zlshSknoDwIG`ZCArJ3SJi{!i%X$rODpygzkv#M7sv?N~Lv3uLPp~aAP^GcfM)5&Y> zO^1eht8zA7EIgu;o^TK3FjLx!ra?AHTL~G*Em41Tsr$MQF@9J{Hb-pStk@*f2QH_$ zJF}`{yp!Ga-_b^%sbn&#ZEu|hpZdtjY(XUm;!Df0-+N!&{vW9_AoQ@?J94n}Hpx^Q zpXEM!U+<#@`J0K8#4xx}?59PVALV>?pG2^G!ks()XOWen?jOA5&~9?i2ecHj76<#I zmOV%%qwXU$p9(97Z+)|z+zj(wpEw#m1Nn}_3@L%5;uV+R{r-M+kbM4x;(Vj_I=tql zJLs%`W}D=&BEVHQ37ek6vMwj4civ>Ly9USIY%Vu7)bgnBqv__XnjXY{nDnwMgTF8k z!@IO5tn5Zx@l0Tpr3O_1Pa`w_5|2Kt?o)?Y;#(zwxp4E0Y*A-s5m(qy!>YpXWG5?)k!VR0oI2`WW!g3KxYfn-gK zccEZ+CcRzmZzvl2RuXKg=5QDV*bv48K+#JZ5+y<}PBl!F)igz_aJH#uKglE9}4S`JKRdyG9-0Y>*YUP-~b%<=S8rpQ?3*756kdBpzW zp`8?;KSA0u8}s+s0|WiIPg9?ntb~2o(Af45+N21dc%}oSShkyEJ%+rZ8SlMk{$uif z<_$Vpz8yfJ<}XcmeZXNOm0p_~1buRRfSVKLYfVBdYpvDW`gvM~+*DFfMbKN z*Ts%?{APCpr>PBOSxAEn8uLjU4x8FNOe5hf^f)T6owR1q8Ek{M^Br4NOn+qqIxNzA zQmyNk{&YDN`oISK72Dv)y@r^)#;gihDN-cPvGn-VcCd#?J zE6$*yCMe~BjdH>(e*GYfw>q52wyspswS0{X4`X)tqL9f~72HHT)<0EP{YqeVh8#vE zAAyZ?E0z{zk7PHk@xgQyM*V9`s*G(j}?fGBWiYzXV5Tz zs`k|Mag}07@9A~R`Qc!);15DZMWpmzm{h#6{CHm{F)JOpGZ?iju62=QI;+z;!gAF2 z@JLkarl-0m^Y&dxuiMx`*KRF=Z#**LeqUdqi}S1@@1eOE7=8eC726asvhaKTu8Ww>wI20WaImT|lfDD^5x+3d>$t}T9Jj?Z#dD;GPpGVH8TKO@3cc9s{83m8mkc*i1iHrEopP9k=`9y|yP}$~I+0r00gp7xU0c6?*r) zn>esZRq|b#>8hW|)KAg^eU?{C)?*nSyVkj>+2IU7k|ABFA`eNqmJ0_RW|n((OT;%& zWBF&Lv&AM~&T7L>MPPrb(8*z}YYn&8|J@vsRrO^1=;~tf+LPY=>r79%YNwB}MP(~_ z_v44FX2+?*{tv-A0GGMJ?XsvgY}Kbn!7xR1<*p;1S9bz~0VZVnycafU&B~`JABmG8 z4KI9GkgV{1lIeXQUtOz3OU_$6KX#((t=Fx+^W@?O`nO75R%V-JetPnf|5tESr7mwD zYl`!;OT?j*xk!pJoxR)G?u~V!1Z#%1(J-Zh+W{F$CGf{e6&_odM1^To_pKo&&3Uf z?JtT+i<6$T!A06P00>V^U{XW(F(}{!d(UK~hG!{%mjk#`Ts@nFl@UB6&SN^+wz|Kc zCv!tx&ck~FI8BAlhsiu<=mnUr2Y=+AMHA?2^LZ(Kcll|{zlcZPFRgoRBo|(g$MMAi zcH8t7hLfz29GzDtG0=OZ(roAbHq-x`*R#`rmnM>8Es#ypiW;T;=L08<*8EYUYr^rm zE5APN{|tY3^dpxS_&X9dTf;pZav`Ax61vmyaOv(=QInG#Z3(ux#d<)(m&PW&0~YBM zT*nLS#4(OI{njWTt+Vp&(z20mzai2PTDUFOAbeUZO&JrVZOq zwPaJ}ApwUS_rw>+2jJc7D6`?;A;qO7uIO(t6<7>lQg_||jdP)6UJqaJOC{!SrOd7K z&4$n2WY_6zIc*If4ywN6v^ldKJ=tQKNZa;Z%#W`<6s*TIFQuM26g`f+gRI)(1FeyiSz-9 zCl9nukc^_$FL^>5*%YS#G7$SRZFg2ym!`44sRb_<-{J4wVLA+Za?#*Z$G469ebgt-iO6d{jMnrm zCT3bd`vpC1M!`C|VpIu?Es|*XuyqRl=?4lHG49|B<{MaGeP^s#J~$IPrx22t$z!@Q2Ak%$`@2{>Gx&` z81!IgrB_J(9iU;C#E?^?@lEDw8eX!Wx(mHnYWbX6W?aE~oxu#T#7g{7=|9S+sao1f z);Pi+ck-s`moStH3k#am+WwbJo5MaxUQ!E3KE?RB_vf4U4qI zh;*x@0+Q0DNJ%PEA~~cmz|b*((v8wc3(_&vkkSk--AH#2-8>t-uKQm1`>uDb=l$px zVPm@GbN0iOlN#zX6-W{m8qg z@^|!k#@Z&?mh;#eI>3PFgK7G?2G;FEr1baegg>P~q~s?pbQX_KsB4l23;bqcOZEYc z&Fk$O+S=>PHxsSWU&hJUoNtG92J+D+SH{eDGrlK+{Wfb*bIm3#A z{XajVqTmgeR`sir5vUDthl$vd+>g~Nbn@IBdlk!U<5qzrE`9eJ|L(8g-*u>gtF%+m z>|iibYmAs%>hZ=}%Eqf~lY1e}UsL1Ij)g=ovR#xb{&%+L7o&LhLPijZ08rHACV^el zN19nF@t3@m*vnUdyMaGU0)L@bF)AW<9g08Uk)3hk6tarx(lZ%T{+X^1_Vfj$N zjoqpttF)tKgty&N9Z?eZtl+EL5p&@vDWr_wScj)DAfi0x;;Sf4MrxLt2U*Dju0H}c zyt5V3Mke)teIaN!%-Ue?6%8UwtQr#4o8<%Xq`0$l`K%d^*`SA+dt?HeuqKy@^QU5! z9HVR|g8gK$eB=Hgu|l_e8cC*%u+fP^f^G#_$Fa@QM#@i>nxqySupj&CA?CFj``8CBC|8_om=9wln)$^2zWIdb_z&eK^xz( z+dSqzMbgaj4C6+4e8y*v9{qg0DpNN&e~~6XC&GD-JYCbdH_CtLz;aQ3v@KlqwP$=u zfK?sc<3aWH_CTRTFqqq=Hd-(=9O-A*Hc00oLrYk~WPZ}wDZW5y4?pII7j3l;i~E++ zb@T{$Dx8)W9~5%^M)EJLVT@@t>e{!*x4nGWE}r_^*s9WXkpKl%f4^uCDxJ4g?M#t% ztb1g@eQ;(-zZp{ellnTl0a7Dg++HMuy}huB%*N(&t;*!#rzRd=Iv4GRVgGqyXusA z_m896M8lUn$HrD4$PkNN2p#k)ubdYfik#%tFrL7#k7I3B<1I@jAfl(-|jFW|nuZwE;fr;6! zWc-CNpBIXIf7;xOPIc4kwL8|%;clMC+ar-4v~1TAp1iv>i1GP`Z7U!{gpls#U0{=rQYn3T6C^he(?e-1?bkFYu7Ss8!YKa6uVL`YDD}Eklzat+BiV56E%@xy)uZozHbj50!H(b*TT=BDG1|72XJYnLPvA!Dn zrh8%}mSg_B@0d}-TjVMqC~##+sC~`-q&F!zxSRAUt#q)pAJ)vg_=a(4^Xs>r_EC2x zS5JS&JrR4)RmczrLo=pqg^!qB7=2>^Xge6O+>$ZeYpn+?MNe?ak@d(at`wua&rp39 zdZAC1XP!8@1bQw&|A?q>V|r8>^cE5lm{&*G2UoGvFyCNJYgI3Q(vE%1M{vY{kX2aF zmIQGcoTbu?|mhR7|J&Mo(GUS{tjOMOJ| z#r%23sk`H-ae>4|hpE{b*O3BXmNia%`p_1==T{ z&<7G-6l44kOvG`|gQ4-G7`I6)C>HoGEa1pw7jlT{!;wSy{xI@s2_pCTWy9JQXz$$- zG@)?CMk2v|U?)VH-Xjf~gU6)^v&yvlyj4bsg_9ep4R%payk-$`3sg*AgODiDL@+JR z58(mG%<~cY=?6=T83KXP{7jZ3T}N=8?RkAtGfGqvGrxNT_;@sed!9G^eC1|;JUb?d z3dM63zQ9KBoICIl7S=%b$*nd>0;2`MahgZNmGWL)L{1`H6V>@BFJ_?N7(s zRtdO`l0RP@2z}dhZ>4Nn3V!_)B+gl8rv+|SlxDDL-i~} zoO+`SU^MifXpAC{0f2cLfsX1VOeYBPou>JE zrb)a39FCUnqFvhizU1PY99rk&Aw?&Cnm+Z>voCFX5NxQ28C!)D=SY3W_#Y3EyeSV- zh(1nJG~uZDqgj$mGgE4$j6m%2B7|5`fTCodC`33@Va95%sAwS8;3N$3lfjecBD{x~ zyqbKSNAOW_T-`|SqW*9kTA@kox2XTLz=(Y;kD~OfeBc=Y@Rd{>af&JP$Y$X^(EZ&9l6?-RO zf{)b?v?kzer5Ni25z>REM%k3fg`IQ#N>=xofwMml^DHv>0V9X^!9+=ahN-v(J_YmlTcT=ImToOi`lEsG~p@AoJEEQolrIe(2%3f##i z;jhN(9RVU`pBO}gqWi=K_@T6L!e^yAjtTzpN;Cm3gZkip(#I^Slftl$Y>J<*qbX0n zt0dAzo6rb47^%34C8YRWwT|Cl67VkxcXMK9zS&eH%bpDXWxf|X4lXw_tr%cj<$Z!Q zWbYbuYG*+)tO;1Fq{T-qeL)h&VjEAja5&W+S7?kN zva2u}qY33ke$#6SSaZA3qTq)N(tbkEn-Ti^`vxE}5q^7~IM{v)4F7q0-M)N$?j+dp z;PHFN!ioAY-7fjoh&|Vb7Q)1`kQSdl3hEKC$XotL$d3@F{$VRBV<+XfG5$X`ho-zx z3d_mQC84CN=r;>!5=NNCkH2j^gJD*ulq`IG?lB&=gY@j&!7aV4Q-S{BUU^3Ic zQ33UAdNmDu6jpGxPhqW-^ogF(;lv>1fNxk(bHULx>P#6*?_bM=bbD}3LUGhKjBqQ> zs?p=-;DIA9b^XcTsMfU9yXzVNihnyTuBW z4b|41ecKp&uX0+P%ZgPM`UhEXWF|$vs{5dL%@7%ui0Jee72jWCFKhSzQ%ZiiIx7an z|AEbXTf;kYFdM(Pl`^$$t^)=g(N*foPL-xGL0!kFv-&UU?Pu^=`t(^u!}aNJmqjP~ zZ~PvEvsK%9q|TT{rZeYWUl*@crq#-h>l%RWeIMRv!YKI|PkLhBl)x-pZ5n%1B&CMj zbiL2&?>93=5;9vZO&1RDGF$1%Y4nJ`q_i8?#lLM+*}X?Z9h3-POq4lGx<_m{tMR8w z%nv)BA8xQ0wx&5=iBM)g)FtMPID|Gn+cE$7sx6C)`>9@zK>ht9?jmZSe%nd)_|tdMxBi_KHvQ^Q92h2NF0oL$B_s zQ-Hed+24AFr>zRsm1l!jvjGVWIj7$B5>clBB{hZpaF^O+wkq1ydxCnnsv(-fXkL>KGU{LPT%aOQ#e&QacuFR#J$31;c8inHBOypL# zd!HSp*S+Qyq!U_cL&)Sx?c*!fBRM&iUklcEJ2Olo6Osg#G=_1X9af$n)Am!8IT z)A^tH^YK9t5)*aoN|Rb#XOXmtBi3J~^AT(WaXUFKj2FrjBw0GAS2U=WxJRS#<%e!{ zo0XhCOy>~VfTgS0UAbWDC%{!{)+(eri%cf0bpu?1>m^t{Yt7T7FKFYtV~5CDRWIsv znhsZ6e}b`tYN-qiiUUE=9+jO=*0AB6FUu_-yGg~v#`WhY&$M2{n+b+yDt9T>HBUfA2u$HY%kkdBht><5f58D|mkjspXIA`IG^xD~21NHH zbj-CwDoZL#S!p|dvabq+SNt7sKUt*FDG*$AVqIK(d`}qmv%pmInxy}{L|PHdX!)$1FnC!{fetO7tAM7St0=a-Xbn4-2XUW_!ka9j;FN zh|57Kw@E<8!K;6cNXC9&wr7oVqGwFEFL`FSKY~+dFWsMQKSd`CD}FUrAA7v%o?CyS z>Q%t4+n}5-oP=XLwB>)pp?H-bRNUKewQZw2Q|FrD&aeO5-T7=kgww&}=HX|1&6IxX zJ--thuT_ya0nu-zXJ^ZC`nvV!`wF^47v!%sXf$kD&W~wwBcPN0hNe~#)6{39tEu{W z4X%*qbl*JT^wn#Zw|jm)LLF~w)|~JrlQY&- zsa>{st95|?ZUV`So)Sw#k*!h(ln>NU9L!3}}IGD!=~pEgc|XEej=LC_9m*7^lwKJc?3-?nGeJk^5! zDG1o+5KZetS0J*V4|cpdP4GyW7nw5onr<2K#QVJLN52?4;)>*GP;-BxIDXcDI)WBW zCk5APbHGaMLj?OKg=zzfqA>cTG1alvmDs zvisJR#9GFt-zFb`3}s~bEqV`T!P0CqvnP^UeDp0O7bztru?|NV+4Qt9Y&%$~YNK55 zO9}~K2&Q`;oQEyc@#r(-u$-T%4yv$UN`@_nJwQ-%SmuAxuF;0wh zlME~@RKe4@=949*28xfkU0Qz%$~o*RU-JIa zp;`6K{>`|VvyAmgalAcL)HXY4c{@zAqP~~4@~E5a`4D0|e8agks0;o}@AAV6yBOot zqlmL2zODl~`{J?7pbXP@iS26ITbh4IPjJUwX0FE$N%hYw zG0j)*Z<;3QF*4K=>*~C>_MV7Qq#FE+5W?3rYj$zjg3xd<@lwuwSy+g3RXDvwg^pr7 zzNstFG`gZa+9d9GnUqDRWk{To(8iCFzyurxmVPScU(OA$iGh!|gT^Pcsr@P0NFiG@ zT7A5jRW(mSHR%7bSsCBtaPq~vrfok#w6kc2UKB|%b_nNxkrWx8!>DDezeF z@?OogC`plU>^-1s2V3#u0MBmNw;l;AF9yNz6LKOr zQ}pct=Z=050;U&j4Rg468E%o2#zK3EA`2Q%T( zEY4Smy(c_2KY6-1>=OP-b~CSwee2N`PSYz;MHImSs_&4&d;p{xd$sk&i&5vznIl6$ z-tMHTWKvQe8~L~7m$>Eix}lrZ4>$?`aJo#J4<+xR!rijZBl|q%jnLa|#Absx3A}K> zVK?x{1xh8e%?7Q<$IlXenSe28g}Qk&87#0SM&E`Th10m>CFFLt9!J6G1<5WJU+z!l zfWIm2l3&4wX5+EJu^RZe*fDX}rWtf{{(AMwojC`_$cBNCV)BdDG9Dena}N#A+7YAA z4wf|Az7LJGE_z32hxyzqdEPwGF=R_H3Svl)FYC9N%&E^U9DnaGMaiJnp?tM3@U$cU zjetTOr&|c$1!+2894Y9Swg{QPZIaY}?+r~<$%`EDDH%V?sU6oUJR*oZi%5}23yw9w z`m#sWN=r7F8loyuK-e8W?DAsxWM6t%#f!BPPNIX+9UyKr=uAq;jFn#4xrx*j?Z+Nvk*Rr$0vi~rH%n*gX_bi80;o_7jxt&&7L#Le z=GF|>4#q8H6>qFFjO}X$5YSGFM*qv`Y_jkI(TAm6RCqCN{5VDO7(ajCq@C6 z$Y!LUVD7%?`8%%oUV_~I8L6qNucgW3-s9@nWLZuPRVW)dC{c<&A&SSU{{SNJV(?e8 z_$Sse9-%_^AoP;MiH9vkkngJWky7|{Pd8qUCZ3f`#EXAhQIOX&Eqp`IKcinE8XxgA z(S^1hN1vEJU#WftLUeKJqLmV*rC`sa@bQQZqIE&)k-r7u-Tf##tlKsf23dQ$%QDcZ zqhnAZg;?sv(ruNhE3zdw2b%yuINtbU%|wv+u||Gpd5TrRVJfrWtHkpa{^z{(XCL_% z)+rj3`f3^tvYX6QJwBF5n~?d)GipY|n6YJFqo_JdgOX_y)~f&+#;w=@@Fe&E#QHJA z0f+zh5Ucz<2>*Wy5MywiY-FJ^C3`pepB`^ZaiA=Cx;zo^)@EU~nOA|GA=wa~cMr-4vLEDQlgx}A<06ju3yg?DHPFk|Wg~hR@l$|q-B0tvVlE{q@ z*$z$Y!{H>ht+%{oX!UOH4Ud^!kh{LH42YV=p@&@Sgj=1?4?Q>Egw2_ipKR=g;j#XU zz?&s*jD9Q?rU=KUvs$t_t#2^`ib}tdoFvIMuq5_iC)!@WqJ7rhQTqSg2&JsyG@W_0u`mC9HwmtsFBZp@ylv#ZS*T+aa>YiBzHNqgV&Z>%dYQ~8M z1tcVOhKWGwFTj|(g=H7lV=3j^`nc(7;Z*oZvuD~q^WzhRMxld0Z>RLLzQeQ$mdug;N4O-~)9Vzu0nRYA{VI6YgYOch9B=z%Rfs;}9 zC`9bvHS{(%Fokg{AcrHd@&+2P2L$CAey33kPwm|=WN00&kO)1h&!uN}F<>ZhWS3DW zp<6f=ejUKc9nUNJts?zUqs`lgkDqK{5W$GWqybv&nob`cBeL1qpNr)r?Wfx+DCYM( z+l?btgW{SR@r&}!P1UT$|f|B>m<2PI)?shsaU*jTn?u8O<3j>^>WRvT}v&uH#`{`lp}n~q8LJ9bUuFu-+QJpxP7?w;b`+yL+M z`b5{5sqdSE69@3!2jGU+S$lhn#McavR9m|exAh;XNg1_+0hkO<2<>*dp_bO4w3$yM z2PJw4 zme=#yuGaE0W0q@@_>B@j!ATSiX}$!J%`h?S!9RP}8ojl6D!cNweiJ`u4xZ5KR@W+t zAga}Hm*gpXK9>7X@wruAqJFvdN6GZxaIfsY+EUqfRIf0Y?3@42Gr08upU>|(FD9@R z9h{}xR?sSax$7q)IFl8q%0`W|uA=&=KLP%fz10u_TA%lYLQBUV4O|gmX|;rpk7&yC z6i{@|BGZj(SHwgC(Dc*=rK_bq*&GzGXTS~q!V!{Pz6qDz-JH0bx1T3er45shG%DcX zC;_!Q+4UEtF#VaCqeg}u1D1_Mk0ApjAc3~K{!84R=4vnqpp2uqGR$gshAiEhrUH?x5=Kn`BbR= zt3j=b*w(UZaEtYq8xn7;!Pg8#%22%|Q9^mNB*Yp+qXyKRfdfuIn=ZtZw zcyq+@gC#NK6QGHK{6=T@1fOd)o2+!JaWS_OAl7$w{+BIQ09dQfTVND!c&Rugr z%t}U~>Q=8V*w`Mz@TgeA{0*HtxP(sHDL$n5IvV$wadpdu=oZ~a&yTWvBXU|3&iATV zvd`Zos|8jf+UG8KQ!e%-%7SLfl}M$1B1p-gOvewq;rvVk_WOB&N=fs8qzAas;j9-e zSd%c$?~eSYb>G*rGEDy9KF+07L0alC)A+?ckQM#K3=E@9+DcAFI5VX~o1csrX2lvr zW}w$ACtIIa@r2ER3P6l*OGi1skF!a)ql^!m9+=O54?JquF%yF%=PcpBu2T61hW)#N42WipI z67a2B<+65VzIyJMzjTTgVeY>Ho1zOz7OMq!{R{D5dgw)prmPG&W6| ziAH9%L<81pqJNAy?=4K9s1@WVkCpoBhfHAN{nip2IHvnsi8ty}&Sga;y-iwXtCV;5{351idNMD6& zX$LH~J@;uDC4u7)v-s9fqaicsh<}#|?`s4sxY5pJ^YBaYCoWZAb!ubrj+Q@}9Du6J zzmBtl=ZKr;g}_L~6O|B8rflTbdE%`Sq<}RJkImc1Y?shgZX19!Rv4wUQt#lCAMV@- z_Tzb509*!?{&8iQ3#_*et-1dgnl#XmZ<*cgY*~Q8X=pvx77j97^fG6T9XdM5*iFgckVeKDiQ|%o|d-y;28`%f`=m zl|~_5>>p;kZcPw5tb_U%Ea9Ck%;s=7YXFB8&{l}~x}RvPxAr7D0guUGStTe3e3${W z6PaJ!ziZO|6Irp}9pVir0mw3hL)5n}`g>80|Lto@X(i(VJYXB*jPHinN(<~r0cTiV zm^{M7Hd@+=<^Mbg{J&t^juvO018keBZsCi+0>-Ir9#T62t`^Y@fQt)&XRz38IxZs5 z`|R^LixNmHzq9k&F8+Y9*tlJw2kHO-XrNo*s)X~3MDj`qU^?+PH!>QKIcEwwm1;Ka zTLCBW#4(vwAKmxA2ZGo!p11W&uGn&dTc zYK06JSF9Ql>^rj>&S|M&FE5YVUL&Gl=?SR|LFORPi`e4+` zsBTW$VHRIRaXAWj=z^Ed=iuyMuzI%8{#3j$!E3BBmbh9u5Qww!xDbg0V$`X)-3vmR zr@G6#Q&r!04ai}4;2MH9m|%hRE6=~l5*P2sM%*u6Y+(YVLSImi$24Dv2;Pt*D5vI4 zt`T6sc6DzP^8O9B&h_tNC7Nw^h!6AeFuxPd@FH}d+E(}px6Vw;l7O8@+k|h3U9x$r zEZkI^1kyu)>YqBX9+owzCwrWZnCIWe6}uV?4@CdHPMXZo@_wqbPlM%ZQ0dY|E%tat zo?x*@KAF0vkR$Uz&>trbdWeKjqSITN2_R_YV=cvGXqpB~{>-#j5>WEK6zGKuP@@PQ zCYDfaPJUWTMT)&%>QoIwin`F>U`2UaC`h!~xN6Ib0#};_%g{OwGAT~fbl2Od*ZjuApbG`(SD3-R=bd}DKJujy zRe`Dg-nS01zPfx|+w(7V4{(v89);J*!K;5CFC^c)px>S{FDB_^7HIJ+9A`u(Vb&6i zwjt=u%w4SJL2t`EGw(|{gn0c3%58ZR>KEPSRHb8d7;==_sp#?C1@B#!3ksM4iQI4A??6SKM8+Xy&Q37rYq#ST}&RlU-z zM{nu9idP$J6je!h_x}O73DNfp8NVwV8%M}jy7Rn+m9Rc~*SL?mQo-0+aoiUO{)i%` z;yPlX{7s&UO{nB9d^B>}1B~WiH9NdtSM$SFJ0G$Ar0yKI>wVe2K44wkx=!qJ6gCBJXpjq@48wzr#ClNjvdqSNV|a1p7oIU zbJEf-6XE1gZZZE!d3pvfxijX;tAoa4>Ht6uU%n>>WNN3M`gXk*kCTt(tz9@{AMD7C z^*`DLr26jY5PJk2aQ51*oE@qLRt{uu{ErnYz-roTa%Z!UKmtU1qaPa2!YmQ3-#g;>hK0-BB4Yb=B`LBXKcfP!6H{&{IKR)39t6j#| z=APNo#byq=z_E#&3FqP6QLn`Ux{(jr`O#U3AHh|tevv3``g!}Ex z(p!HYcfKq<%7q#)EGm9`ezO~U22L>gTULP{_qsE{51MSO(CRX7%FhDq^f=<**?_~ zBfk7;r~=_&dYD6Y8va({oMw$gW>*gXWbQqjI20P(!v zuB>+BuU$iMdHlo?b~K_H=j=4ti|Dh7uScAdY>rTOUo^di_N0l=DV%nW2Xxm~+Hme} z8F^z@39xinPqTjoR`MOH4oqH8zIfy?-`tt&!6&mNSzr^YavY`_y{?a|ojOzR?(BLp zBBCTbd3~;vx(Q@aoE|3hh^PV)Cv zsD2#*Ng>L2UWjAhcbh6v-g!+)uiWqOv&ivE2Hbky0c9y97Me^)YZ{p}*u2=*p$1uE zLzo!B&AUCo3aq8pK2WJ#Xv0LStz2=vxrdkIS=YjVx^BmWR)1EUBOR}1f>%K;_str1 z@!t!dSsqLlFNB+=bp%JzOOmgI+v58nqzG$-zv|p~ zghuHMdr$PAkoVXidk_OJWWqQRt);&|>zL^WqnT)yU|5a1|L#<(`MZO^6}6wv0ekR^ z&MY52_CzFJC z-F4eli~B6+*vh&<@3u?fS%x>m+_&(t3ujuD&@!NSmYoD_0(djE^?97?5bzM+n&bI2 z$5U;UBcWj%LId0g!PmWHM-OJ(ZU0!v^ic8+yT+I#a1MH@z#Zl~Hye=J8mV=T0~YVR9_!2I+OViIhDNr+Z9PDZdZo723IA;5+=1w+j z$~;A}VK!1FURr*V##@)+Wt#OHeiQ_@({ooEGXOQ8R2-X4g{Ag=k9o>o)Og-rH|#Pb zvsf%Yy++QwHKaKTm9FShq|C8@Hnh_G-r}oxU{BwvpOCv(hXK6lf_f}0=_hN$$UNct zIEI`9z$O_sJzG<~c)9uaQiejoWtCnM(tfqA{cdbbEbVNDApBsZ@LKe@7&W`H|9fe8 zXYXg>7B)hGUguzu5{wxv>-VW3ugVq{X%9VQAKU(Jbkr`IyDZ|oOV0pW6)*wCyBv2H zt@5HpDFN`4r*hIxUogw@E?SOB0eG3rVbS=KLnQn368PiSa=UU{RMt98x(=|J)+3JH z+IxFJ^==a<`I7lyHF@Z@r~$IGuKHifjuqdhEt8s_!x7|1Q_eUqhTT_jm<1Cqt!}Ih zXubA2?%aNYmx|{Lp0@Bo&Kz`3ox7ClsXwGSjJ8!l^1d|q(boh@M`T-QYSzWSdwH=Z zDq*V21AI2{rgAl6eu$0dyv4>WUqD-PT*8R{hw~7MN5>+=cHd^{L0+6 zQ9$6u_P^$=AHODW2VFf*4zK@1jmd9cP>74sSvRr(`xAfs)8F2b`3Jixf>^!iQO5$- zaYqia|Bx}i9pIl95%{}p@0+4T?11y_U*mdCgOQTI%W?e^JV2*rr>xB}9qz2ZFdMRo zb|mddH;FuJF9U4hw@dqME5a>nWLH4%67tJeJuViSw{BQrIwduWctx;}!yCuF0zD5F z-d07JMAl3N3XZQFHw??tM85geJE%<+>b3|gD;=%iw*RhtA>><^RF;C3#0__F8hVqZ z$?W&?M9cw6boCB{%Foc%Hr+|)V@GLkE8HZ@KDrZyZ`;_gPkWb_l1pMISVz6o2YO;C z6Z$9o^HH#ue}qcf3~*m6De_cShy7-S`KaKIlJzCPHWK^x)&(zFb{t|va`}@1u=&*d zif?*imSkfe1?jfD%s(0dh{(c7C{{pf@$#Hf0UZA8!AbLR6NdkC4j;%;Q-kq9Xh~zu za-XtfqkcsJ%;ni>hItVRR*Xb{aNi=B+_RKN)&xbF=^1^$fYre)d+G60&DJX(AENf~6 zxAW6zGR^0Y^4ERY7W9*nNGiuKOOwd6Z1J!+WFyj|+W%(nR@Z^A&S-GmniT)|Ijifl zXy>f=Q60iO=!vY<>)%f@Q#2m31@xl(IC8-*d@CWC(Xn?|#Son4ndqecI;#*5PKw|&@bY{VA0TmUl+zx!w zcXpC_peyXwd18D=W&^r}3Z=)@K2}kvX8@!e6as%Z)#Kan2Tz*MqCCh7D?kM>tqZBG zxh|B@K10+}u&StPU~nWN+Y6kG8)GteX3SNNSlS)8ai z6Ouc~A19$0uw=MKxU$>n>%J+vQ+$?o;r<#3u#P58B+c&)Bw7!;)lQ9)y(e=Wh@|(f zAChL)zAc=hsQ)(*0tTREfO&~pLmhJPZ8&l1xaE)*q0C##jyHds2?6g3>p$BN&;V>% zv%k|a82CS{Jf!ma#Q66$YNDi-EJj;G=3^TA-Ut1)SIpStsT!sDvCGI*jEcxRbL+sU zaU?JsW2@}o8NY3LDo!jtWe;~@Av|6eZjg-I;OeBVsyPeO%HpA5&!)zi+EPgwl9OXg z_%CJ8=DcPF$UF&RuN8rTD+Rt270|`ZoyHBJ1>T!mxhJV~nAFF1uhKPOe%bu9he9O0 zv`f-eMYtFfusYk^`|MRJzr59MaGN+)`2DMJCjAF(2cjV@2w=nKG|7y?)t%=BggGik zc=2rpj~wYEbJj__lZXSEJ0mxJ><9&d_3pW<`SVT%`{4pbc%t$X~xlmPBNf3-CzIC_-Pp^6BtFR%`LE&uu44#i-oq~W1h?&7LI@&Z5 z@cdmYzPIU4H1mEgjmh`Fx5W$!2%k8E#S}Dvb#Z=+T;J36Y=>O`Q~iZ*6leYBdQgM= z8F*G~Men-mG~!2Z`RJDIT#xRdfrF95aoqoPVhKaZiZEFo&(4KL?P$k7APN~CBaIc7 zs-Rw%ln-|pun^Okv0+gEPgpJSXL5z7`1CzR(_1W7zTCgfMeNcEbgn87g6W}|E&i>a z3%0aPlBs1!n8a-upztUE@ zFF}FdA1ZfmC2=(w?Yuoii6^T{qGEB4WX3)>{OvLj92=H%^>&90L=zZ_KuN#BF!gY~ z-UXCKJ|pz%={$|g4V5RWuIe?=7mW2xZiW}uGylx@e{zw0wYLP$<~4M2DPq%w(@ivii|4!Zigxb*ZFq>KUm=w`zR0! z+#0mN)WgX2voH_p-$9*bhQA>165@v&tWRWPNQqbFLa#H~0mqC=NWmKd)_>ZucNbjo zZ!+7IeRMuB5T7-t=L6PS;DfKI#vA?M@+9b7MJCYX5`tj$2^ex*V(N&OT8Ufbf89zw zukrs@oF$D{xdv0jQdqBh`*d*U(W+M=s%!S%aI7)0iO+zN;zU;=kIM*Uc+dM=?Jr{B z-)m>el;TnDmy(+ezw?^;ZYwACJ%J2K+`SnQL8W+_Xv9-bs{u{{o>}~$;rbwzdGCI` zGQ&3&w9ag};IpbugJ;Px)-JC(tZ1U|iq5g>%-``NPx_yV-g}Fq z%Ob6DuB^rAzVPj6F9AD(`K_#%Z@9B?b`t^eYQrcqpda;k^fP_ZBh4wIF)}thTP4kz zZ*d`ur2~`7AIBn@hqKBz%72BSHMrLL{8)#W{1!PQTM*)W#6Is)!pQQBd7-YI>&d1! z@L@=B>!UFMNSg6+ydv;EcP@J;kERL?q%qs24v3oGJdgt%XQ2pcmG!wE`lsE`HGwo* z)g$lj9=8PyW6yj`kd4Oh=s)1PeqhB0WIm7A!L;-36rf~kKi967vUX@%&li7emFlN% zx*ncNs!-dSymK!D@=HR9UtNZBYZx^45hszgwv;8?p*Dht^B#5pEW)g zIt!y9C>KQ8*aQ1HXZ7l@4X~Hu$l52lJr_0fYZod-FDrRYoqNuT>v;&-q7j~FBjo4X z4?KOO*_NpgI~Y3mQv(x$6{wYcGogUOHAo|CSYh^3zhsX?L}xZSA>0$CQ*`+P@RZN! zNLYpTtSA9nlh1ZD#lpw7PAAWM8=MS7cYuw3H-E_kVzg^rn3B98t-Ik|v2OA9psrK6 zbpkoCI~eS-M(R*D5cG(}Tw#%|;b06JBi21w{ zm2NV#)F73qT{(BHk=py~Ou!mlmp95;ZrL;qtWw^|`A|pJ=g990+&YHI{&_;Sj)EAn zYa2S`NaCehI!aYxVXZSxs-?s)Gu+++O;V`SVLd|YCEr*Q{CQa|IAL?7d-dn){C(43 z9Iw$RV02$^_E{&_KLByb##1(qgpAib$u}t{ZKAxK@|VZ^*CuGKKbGsXJ2ob9R%u>fml_!M@r}Ppa)%r^I@@zULMQcC)NhgwFON{T*iv&zP_V>IFx$ujsWg}eITK(H>4lt#p5)v32sN)8 z@mv|Fm`|HWa72lyW?6dVZKZj#!k_oI?|*{Y&Hj4bPSYj$$JZ*&ljb?FYLWRMc|m;m zy5RDe^geGS?j)K-SNi3(cimG)&c}OQo1*rN`t$& zReDAedvlIM=3d*HxBIF~aBhGnPPMs-bLf{B*V#GQO^0*G>>FsGg;ig@*{o`_Xh9>4 zJTH7m_qIM9yV5E08#cFc*U>K5R%<)>KHc=kgye5ZAnV?UD0zw8rOFqVSbU&ymoJhu zRtTpyA6~X0A03hO1@EwP)R>ffNSuI)(7=KzEu@orBgiUW;-2R!$l79;4?ou6sT|Y} z_HcuD0NrAW}6|k!OE(ytulRC@KQD2Yqx#DH{$JKu$;Z_*m+QfU2L2IS7nl1ERV= zJ`@;E-Y=un#xXbX0i=)@fCGE>adM|n&+lU9^NYv?|Qh;#BHw9 zTEav3xkTX2$v}DbXnVJB3n&yqFt0pDyr$cgwN3kJ42awqzQ)8TD|0H5h+$-N*B45 z0t+1QgaX$sayCS&@e5UggQkrG?8+I=o2MO4Xg{y&dOfyvJ`uz4k5ji~`y?LcUTF&v zK?}q}LsrTv&6dYYGkZNn7d^Qbvn}ETdh#X31 ziF_4_434U^;R#}3%)95IBVT(nw~ROERMOXty4w3D*mM36~l`E zwUTvahkMuWdY*xQX}{YgHwfie^4P>nx3lM5-mv{{YapG>+muckjJ_$VxufZMbQn*KzRC8_&e-qHKNxN9#O`ilkuN5g()zTH`-Vpl6g4TFQ)Pn@x42l+J~^ z3l->?eOfwOQ%f)XtD?+xN8mvC^+{>wwYMv1*o61B*`#lZ0E^ugE6ZFSjMC0@Z7H|v z>YjmJA9bEPMny!wq)1#C;w;O#kdf%q$VJ=zQS-fhR(#RG+}O(fi0gdoPf!VZ2P>{& zgvPmz?=#LE+NXP{$}!kJrWhvNh$@@#9?kA{tLjW1qUxLuxwwmfY|(Fq&L_aA`L`RG zJ&j{FeQ1v{7P9MFKX;-aJl}BqSQZ~;tV8Tdh_f4E@JQsyG_r58^3O!2+Dg-u*2rzt zY&#EElI=z?&8^S=I59^@J28Krcx=J8ut?bCjNve4;0q}xRXcoyJTYaXU+z!nwmo@! z{;>hMa#KJR*z0BeyT7&@s>x%o@vRqQl&FRU+GEwc>)zQKJV*zI054xLIE!;XxXXHZ z*tfQNWw>Pc;@()?06+0v1wTVu)-tej=-7{|<-baYB|i75MZX|+ss)KXGjRUC%W0@L zeMut!lLH0}U%g6drbKPoZ$>3A%lUexQk5a<-z5IwOasSW+e_J6?F7*?W1D;I>#UB3 zGsMuT-q>LCthCzt%I0tCgQz}1)5L?1?`8<6=pSXhC=Kseg^td&?o|kR^{BRuv!Q$?2f8A^nur9ANA%Fsy>&@&-cNJ$I+W8t2@ zrp)FT6g`CL*68lQtF^7o`v=n}F=b6$@v;@7J?9n=uw7am{~f$Zu&XO{0J>*Czj|2g%_(~x`*uvUHdO!YX7f+jnJW|9p3c)s#aBD$FInHfE zI7Z0eivGnmZ0{fq*9JR3U=G?AYQ(;UZLK|d@s9Z6CGE<*PNRb=le3>!)`VQKe5SqR zGW;`MCwj?4;Eg&O@<^ocV&doT>+QC7`^`(RVlwN&DUnGCd>K=F7CZNO@izWn3G3R9 zKOVkMHT`IlQ1l;+btpA%t(4!tG~eDEjSWuV;eXeN<5ZdMKZ^Y5GH3FDmI`Cmu{(PzVq5p?+=5PLgF{hwY(F=cPI&T zp8=XyD?fm;?FFyv8%&0`W%w{o292=YtPUyqMLqlqtxc4}Jo$Y>MY&?98h5jg_cH$d z_jFA4iyBMc-vkigUqM@<;*vf+o?m%68~ZRXa`~o3g)Mo$a!z-wZ?62?76eSzW($bD zuK@*HI-c04e^cczXsGGp1`+#-9}T{S5E4ro%tC!M$ZAS z>NlE|c}b<8W=;X~hwq(Qz)tKfkt(p$q?U3}$q=Tt9j#Z{#Kt?G-GYgI+461; z&x=WbGg~!-&)eX`Z^|(Gy{W^Z`KdmQN6kyaf-?eE;{--;_YJXO)mQa2n2+Hls{@;0 zt1Q~qV&00oiFz`*%#ZVnz5K@%z=ZDeR$)Y- zRtTRo&_sRraf($huCwkg4x%X0@^e+8p=(Ai)N)Td<6F#|voN*-$oJI1n@B00XP$aJ z3Q^;1Y25*}?yOt6*OD)ax^x6;@1zTkt(Mc&y7u?+b+~0$_!WOGV1^i?It&a&g<3q@ z)G{iw^9UnE3Xy~AgHmF)c#u_T7Owz6NZ1od-&8@-g24rzTO!wZNgR-@GOT6-WKL#5 zV}jmeH~lXVvn&9+hJ#k^X!mnqoj+|g{J*bYX;7wMzb&|T>8!$LHek!IAS0m zXz#}T{hDUD7dPwEzVn8;CWXO!yubg~RF08<(C>VFbwBb<5{vB@!VKY7l6LVeu2#Z( zT}iG&Fiai3w14-MK4^Ev3>SzW>W86Sv4|wd8Wqk$7PexiBvos0J418wqG7Xa7e!$j zXrXEib5U}AxdC(LIk8t!xd&_#~o z?!h7MOBPpP7yCKN%s8k+5v^&4cUbM<^GuTJhMK{CVs$pNhrPMQuxi%7;u z3oT*wQpb?7E%IBB;R^4it-55Pn_dt#31=VvDlZo>dltEK^{+GRA<^VL%+P?~Arx3pJ?`c63dqXgA4@`SQ9klSNCst)x~4(C47+{y!FgaEln z4uZnIgwc5Sck;^gkneW+J~yfJZ(e*sHa3kbm3B~_@~n&`+Uv_Ka9tSaM(#7Ufgemlng`moyA6BEb3*rt zad&Z}z)QK+@cPw9R$)zzyMLTxJ==GGDe29K<3Zgo<2nC-)9qxEwcjha`xlWmR1?a2C^Zq!IV@imLM;U38G zf!d$>RiXs*7N=;D0^ghFCy77!1B=Yeo#H1q&-=8j8+TfNO9G{wzgQ*|i!;;7m{Hs` zt5GWkng|wI(mSvMWTmf_w*(agS6LEJp5t+Q4QsdoD2qXg*v}!lbP=9y;P=&_%xfDw zgSxJ|G9hoDFlDyhrmqd#kX?sF04z7a@CdoQ|1D4=Q7cnilh>+@leRtV5=(o)vdi|q zTebisXo}IvF2&Ovy9st+UJ;$M4pIkP7r5FpKc3YbQfmn0a8#5h73wp9C3r$Org|;| z@N^LwxbO(6Q7PvQrp)jf*bzN`JSppt9@~%u#>T_8vtZcw_%7E5Y%YEo|7fjRWe?MK z9Fs+J#Uy`*gw@~lh=oF$>EClYI5&+_A-`0LEGrmD5K&14mO&T{BgNyX15|R$oJyx>$Zwe(#dW;q>X+WLWl=C zA8Gr$pw_oINtcU7i4)QW{bT+J+l}ZR!t+autCC*kU0VP>oXTJcO~UE;z99cjdeN z%1NzRm82N7*nqy6XPKLG#e8eM5E|rIAQ7H1JEz6o+_U26B@y4SQ<;SF9NV?!$3cjM z%mUE)IQfrkC=xT8M3#Vmi_uv0h8!ehfSLkmdDy@m6I8}c`}ThE6x#5sgBqV2B8ek9 zp0e?r`i-iArEdNRG~F6UgQ?*m2Z3^+ub8OE{sWl?J1EJm`}*mpqy;50%mmfp;dDWd zsS5X`#E`^1n$OXyk`*hCeVtAtfY_2iMeY%Q z@m#PfAz7d!G0zvdP7UH|^LaI-TBP!GcuM-f`W=nK+$`mVz1tWMyVS9)0jq6?@$^K^ z$Rmg(K@V_8=D$weVz*=O6JRY9jkZZv3v z>4EBZ`DJ1&fCJZ;50bz--w_iZuDTQW0*-FzY83RVFLOTENG_WYDF!`@n94IJ`%98m z^HyyD|KjG*=)8n#^=5wibxVG^xWrO>B~ZAbL(>+Gf>9bZh@*LCiX;?l+upSHSoT$Q zL?2)c#By3+d0pQ&v%1N1p!0M{Yd?Z2Ub2A?0$MlzB5+H{w`B+9ph3ce!{08JiRtU0*Jl+(-UqBWhUKn}&2Ht3`Ql~0uRYx45 zpGj3dFZ^MU{Oi>OE@w^d|#m2^t0vI=17qN_H zOgyGhSp?#y%=m9@lnVL*KYwiz`bF9ezL!<o)1-dwjS|kp*_aAk5i~XC% zhgEYM{iD0{+Y_U#7Q2sQT?gbtB^{x={ipX%!?DUg{+GDVh(2t0=|p;p?LZ-7Cx;8Y zql)zh%il4(hw49Rfkn_ufHHoQ%T^kRoFkuHKKGTjyQSgR;Tk8Ipcri1?2p~7i`{oS ziVlKr1nOLeC~NA4=N54p?78aR%Md0mHy6BW;GO5QWc^!{6R>NQTsxfKnTN+M|Mb+Pl~6vjz^ zP)lA|5}m!tddg4ZNAWuA-_|AWl2?9ueT&hlJYKaolw-&3r`;{5=qaFV|HO|$uh_R^ zxytPl5SiMcXY*gKxJ$Q`DoErBS7zpv1KhHT$oRiJY5!_!ZJkkG-kM(qIb>VjbFdp+ zR;MQXNJPz!ioT!KezGa&m&9=vBme|)ilV4m?)db2QiF!4iEZ4KfnZDi8>GT=DYKz^ryjO9P;9yytt9RX1OD1E1lB z~r@SUm*T_%;Zo4 zuBYi%e`XM_WFX0&8)GRcZJWbe^!J~tAB_Z1A$u-FJPVYAj68Ey{In?<=6xcon^%ld z0@9^fU_Ieim2CJX0TJ0H)ims^O0@2)MT?Ojhd?~9R)bH@5CM&idVdG$P=Q+W!4@22 z(>h~!odf=U$>39{PT2E3^~aGbp51f50uGI9JEk5TPltURlzO)r_bJb#^vyEaIH@Hm z`;=}fNmNxVw2vY5$JHM%sH^mh7#=bYMclP!7E`Q$G@}8!w%eCp`YtV2?X&!XhJl*e zCm_?{<#Xuh`}DZ*pCyx)2Rv0TEoXqP=zZ?Jja?7Rd>#8h=c`l?e1*ZbEPmuqM{B(c z(gyl6z0%}td-VNA6Mp8jr|lpJ988v%CFon0G+Ns`7n!$kHxux-O2(>H?4JdH_4%iW zDZJy@1~a3>1R}c-M`Jb>D5GW5a70)kcs2HMlfujbnz`{e^W=2tU0}8pBZtXxHOwflLXoA|ZdU8wq6z8C@=O?cC*@9+o!% z`J{1lPBox)49j=55LZWzWPSdswsqw2F`?ipAlAHGw~p+@@e$R)10dSb+Ooyf6xM{5 zgsdaoFe^a!aWMME<*a81xM3fMbgxL_z9D5Ad+e;~Og)K6R{h)s3@jPfZvgQgvM{K7 zCSI3ytJ(@!cfkpESUB-p}4_M(nKdNocRh!+)mbkI0jpt3IwkE)f$qLJ1g0+@XVQsZR9 z1E>bNHB2sK5WhIW91fVi)6n&14trjpgQqb!rHNU0Jv2g@mur_#I4?3oJ1=NEgJ;w zXafTqP$PvR-(^H_?&>qdOUN70_ZZQsLiW;{n-bc8jCOJCkDT3k3@7%1MWoH;nXub= zv>-v%v?-a?`FYx`l2DDsCcg4-TJ}|01<~K-Qw7^khaW5Xa&d1|Ohq_rCnMFL7_V)} zPsT*ngt(T)iWY{p#Z^cy85!LzB_&G>tFg~Ksnk)PZaa8jlTZ@Fkn75;3Ww9CLcbR? zg$$(qj;ZdsZ+Z2tIJesCfT#j~ALT^-w6UkApVrN5BtKfcPGI1c1WM?6N{25rJ$Wx> zDJC~N9CZv}l7=wPx+?JZMfA)1h%s`$T07v|q5M|cgFDk&pW?>Wo~mhb4rGXf>$opgeh#8a~soV5G!(DL4f&J=?w1>&&J$Y1AU#RB9vUU?cUUr3biqw zfZQRy?4UH-6^9leM%H0Zvu-^R`So^L0>3*v{9V9{NeLDC($EazthT+1-+4Tb?8v@` zUP@{tE|j#b-?;txdP}>M4aZ#ub1xmg07r<$=5db-vE?>}-qICA;xy}+yMIi(|LlHQ z_QkEU`06hAK~z#=k1q zzS`ZrUNw&4g}3(yowVnqO#goVh)4x5UF9hCcY=M8qq-HfohfSrB;J5|9_*MzP!aEX z)+mG@R>T=SMp3y!#*w&5qm3u&fSj){!#ZWEkX#n%>bLL$t??Vc#pFLFeM_#lkKAhJ za;ku!U8LwAbdex`D*%Gex&qw({68lb5#&`-PUl%Op0(>!Kig0NlGA@f!T$rfh=Pt; z(Y6b0w+5VL!wT6LK4~i$tT$!81Z>cBBixi#uE@@nkOY_?- z$a7U!HErJUT(va1e5q5(h@v}&lkIImo1Ru-wYq72e7|@^`E3)GV#I4_cMm-_x_=yY zwf|$^0W$c-Sp%J%p*HoGSFA5!wPDJygvhiseX4K!MD4Xwnf1i#*g0a_lI8dbq7#{rsW|sgR}t zJGOJ~Mb^J2RJMQQuipKLz2L(=r|_D0$hSGJQO@9pgHgvXSC66*^Q~6h27Kv1NyQdQ z#Dc;Td^~y~ji{>rBK^*Ll(etbNQ|EN-)==LtAAykU^6nyb6%u#xh1T6`$&}tI4i7J zk^R_kHkZew=V04o B*HBSy|Md<4rcDJ*Ilu%4xyc!#1Z}P$AK1UTCmmqm9KnzB% zt9&z@=gHkui}qew`$jxrO6*#+dJ;k5Q+@XnT(9MleNGWvk_GZOmyB{~>ZSyU`K>9Pgv5yznn4&u}C+$~eDbLB%yoFjX@Eo*LOe61V#`IR3ep6n|p zCyth}&rb-y+Y-gWWBvH-ROTfFtM(={nxgj=;)`%E_ZcY{qaIvZ<6{P}&O%5XwE~PH zs&ETyO0h{7&lTQn>}drPX&z11PZ>{E%rCLTBn_oZsT8yT{O@ptm=2efZf z%`kPwrZDto81fW)F$x^|Rv=klDQ9%X`A7=>>dur>tgU&kmj$*mO591ECBp?oezVg0 zE*?H>O3q(q^>9S@y~>;6?}AF%f9_&WU7%Fvk@WNF0?7Y>O!P+YUaNhjflcJZM} z`2O9C$3VoHKK`H^h83`1h$GC@+@qou`u_%PMaF7A%4wCw805<*Q-f#(y$J%fOG8 z^^;OYaz723*;n~uGInIwTeN2h(uTVmh|XSS9s0Q($}sW_1T>#D3o6nnibWX4DSp3~ zV#x#M;YXa0sbrr^F<*x-ckf^Z0&lUZ?pjTx_m~-GD99CA6o7M^w;1rOcfv#PbE@ovT2HXctd-?Jw|^g&Jw|X?qYUdueKNQ{MpmV9M48DT>G!h2VJ+LopqZl zvP&1gR$@e(Qh7w;PEW0^h4Tv(;Z%g({mGF;B(fOn{CmgP(sfofR zKX?}I(cK<36!~SdXsq~}#UUc@nyRi@q<|hVM{J8|?*f6nLO*Aqd4a{vYLt_GAm}Op z;hCWm-q3s+%3)N0DQ%_z`Vv6@hc-i<=hEs+Z1nbsv-I#VxJUng7iJon(gijJEAr&7 zh-He~S*(9c^742N7$&w!i0Rm&lP~^%U_vX=z=`h&m^gohot81e9Qt7@xJ9#lr`NUP zi_>>64>;aSdxwaR(^F3*p`rf}hSKp;s{c%)Dqk29vFyjd)?w%qC?suw0sjl%Zsv(G zRJ<6fG=~4!5dr``68|?!y(aQ=M#Yi{n&``6>1En!>n#43&Hsn}sGWEmpOS1{egi;a zb2NgvvF&%<|hi zXYl}7DNXl2yG@7rAK$a;mtq?(z}V=&T;X6Wv_)7PaE(rXtwhFK95y0BD^mxw*N9FE z_+eQ?`X6i$4F7y;hW+(j8u=I?dMg4K`p*mj-Dso zy!F-1jaJK`*IM&m)h?hOsf&E^1!PGBG?|JtZ7v&QfHV2Oq|A9UQh?RlW(7C^QjUM4 z(W=*`*dg@5Jm%M6ivDjTREARM-(#nH_q()LBNr&=t-IG-zMSny)HBS%CL>}ZXN5&lmu?K-QueuF=^&?8p1?cr zDaqN_hcP;wD*_7GZ_B<=8I#IfhcZBS5! zO;Hb>#$QY*ki)?nj@_q5b)t(1c#H+7e+}R0SG7CQ5YgM`qxRzzV^=6QtQ2$nQtH0) z|6Ff&4K>q%M`P=%Qm6vorgA1(zQfx^eC6sZc}d~IiTC*!vEz6t#_>a#8KvyH3<$5U;$pn)%)$=8K-uxOoABTS1@smE$t4dxlT zNAK@PWG6fwY_oD?Nb7uSQ2{;1CZ>TYD z1GWMS#Be~48WZ`h0#|~wZ>23%w^5tey@%)8jD(~K{1x|pe2mcy>_9X9z~qd2XPCw7 zwBFeI0}~3Qgl*%G%8Y|f%g!}7+O{>%$RMfnQ|Cx*EoAvvawy%`GM9Nkymq0KJ!#Jwub=*&Qtvi~0I7qqqE@6&@5r&2-4a$Y`(%>KW-tyxZ=oK18+>Gkn=R3Rkk+n7%<>0+<0-Iq%_?;6H&*n9` z9-pGT?HbV&o?Oj6yL}?R0|{BIv(Yw^F*H!kskugEso`BxEcD@0kb%IZpzk}!8b8X~ z_a|bGxemx;uRS{MJOL-cm!G6tyl3AWTkD!EW@nV6erU_`r}Yx0+wt0lz>Gl~C$q;Bp%9tt}ptpd}j%k5^TMycY{^)1uKQyYri7)jky&KKx+f881u- zy)S+qwH#tVm9*Vy%#$)^KegG=}CPM}FS) zu_sl666i3WO(We3Qz&&{^lyJL<<65?#E6nS@6hps8FD^D_=h~S9MBPc`>BIPpG>@{cDs~z*gb&8PZ zkp_`xT3Tn18oRM7ax#;m?8Pksj%q<0*_$TrM{)2el0DQaj z=QqD7J~S680_d@m8MvC}kKa;ezZC9@9NR7Kk`*MOJp-=E*2!K_QG+c5g4%}8$%XKH zW%z_Y$;_goaL6>$8xsq2I5(NFnstE=Q4Pkg9p0kDt}zX6k5uW~?q*;~56}&M+8c6R7`pTs2&Zie0z#P=f)h91B=2Ip=; z2kgYw>XW;lFCf(6cb&BYqz z43M@bApA?q=zt*6h=jI?K1-NCy@V@xZ_^5LMdAl%OfXtxb(S6EXwu!0KGZ%6?)W9D z;~&W8m96;$pM%Q4JDKhf`S{BP5%xVKyf+$p$ z2e8p#b)}4!7ZfwsAIWTvVeO%2LI!_rCqH72P%(C0yUv#z#5p9r6TI_uh5_b#h*?P( zOfWSC&|vxJ_Ph0(J%PD)!8`ODOr3s@X#x$HwLTCtpI-=NQH3M!19+0RA`PqV*BWqq z5Y<4*>s!yF2k#pw8F(@$77v`(%`2S^L1&ra@NJqu)rhUUJ!Po*+<=iyz= z<^%DG^hk_oS#B!#U(0v<--zzQ*!Q)0jRWUJTC`O>4W{v9loFMt6}gtjwCQNG?}=23c#{@Bvxhelo#ko^QAQ714MfFhpzpMzL}JAw*IDGcx4 zYbX*Why2y$W$`oJ95Hb5l-%1q%5U%&=e?nU0g`n!TSdeWE9RJNNA zx#q6W+xm}gqa_Cl!K26gx=`2fo)Ly&J$ZXn`*UaL+v|tpJZE$8=%BTrr&iep{N>_s zl4hwf@`z2(JtDFjYVTReT&?Dx_jn~OW!|;qMeqCALnPq$mY9SmaoR21g`M9z4@6pF z%tH@ovSFPi+fhDRwORF~hasB8nY_Y}8{SwI7N7i5_z=jvo%df5i3c>BMm;$L9Gok_J zxbcPz7E}m2xezU`C;6p8x@&rg^{Kqe$QEArH1>l(?B&d`c#yy0?60^gU~l2fK3VSb0`E;>Aw#Lk$3FyY1)7Zd$REFYx#morPhsO?{7w@m<-HZzaA z^@3Ve;6B~hF+|89ONlz7N|(HmVv@vg$g)**iLQtSiy#s`0WUh)(KITiQgdWf z#ZIIX^t6&zV78hzO2r{`ctkNhyQH{JvK{{Gf~n^1fRg=+x4&GyMFHx$h(U*~U+kmE zqHEWf8-Lz_(-dwZ<5So}bjuBiK#=UsdEt)sGBfFBq#-oCR_Zso0);)fdrV+kJ+Z(~ zxA_NZ0qk80=$~nleunS%gYdYEl?#M-Qr)gEnPs4x?0MGPlvh+I-2pA{-z>b88`B%W zJPv9z-1O`86|{Z|kEsIo|C+6K_nbUYWa9IMr;-$<_tqS3oL^FF98QHXm3Dy2cbc)vfyrRIRiX@pgAwj5#XHRtISuVm-l=R$W2d}y{-O8pbyV2FlMjyQyl?_q)%gBCa zkXvlP^rDyGFU!;NN{+$1_YaBV;wwSIkQk#pof5B4$mdGisGsjcbH>`y3yBm%*I%Z5 z*mnj^y#QCPNoGu6c`(I0ATt6lRq$YY=Um5;9^ zZa`lV-Mw5#pkmQGQ^}zuUR)r?q%qspQW>w5=Xu%?uWy@tqih5 z^@fWS1KW&X%CS0d{$u?ihm(h;&%1}6nmf3?yGhar&J8sPJt#Ya>I?xhM=GYTA!JRm zFlDXbr$LUT7|Ck+NC?~ z?Z>wEFGo7Xu{&>DW;_~j!hcF=o5^&4JvVW=c@zXi`(2^a^}j>Ge#J^NP4-gbmm^Og zKFGQ+Be~BM?$O%!(5|xJ>Y=SaN@DPYt$l{_`^iO2Tve@!FwTnk`zl;UUiTZF@QEmd zXXA_wK=jHMpNIT_)^CvBA3WtF2fThd)v<=AsHLe_M6%vM4d*ZG&-|KeQ4j7!@wB2& z(_Rj6d~mkcDxx)NKRY}ScMTL-4QkeUZxilx?tBf;6Evs^1G4iSW`URx_CwZn{3jsY zCWznK#RaN1f8J{I^))6V71#XHu0g@ARf-C((VX-oMwf171PYx$RHIUU=z>-;SeaXu zSiXt9Jtk#lhO<)K9BKqk*vl}LwiPP;$gXM7BIFq2hOxsnAak)d%<5Rou;gk5_OPz$ z_Bof#geu$9d#g_J^)`)t7Y1ZnRryO<5?dASbx)2o4{2D1k4p}3{!1V@)j({e+)Q9w z0P9*L6>pik)zI=IYL_rDzocATKVQ0+@6=TT^UeV|@yNNmkHRH&o7{sE9@^gYUb1sw z&fKu3Fm9+X-vZtEeq3&aGD~sGouO`+d79Ms_V^|uT}V!GDYAB2>4l&_KaQkF=-qmb zN3D}`tj-c^0pG#wTYtB5W*4o&jr6tW=Ej`QyvAq{`PbhletNf-%gCET0ZQ)wbWBI zrZBMI;|?>m3;Sk{lppl|ShdY~{6Jred?%vL@~_=x_0q7zixS$IEVHc5Yqr^g@}4?v zH>i_D&Q3$X6(1|Wi((u%T*a43FINqotz9siY!Sph&?2}C9Y0Ofbzveu6bD~l)j1L% zePq}@^p>;$JX2}6v9B=d-E(ptL#D9h&DZiw=(LIijmHo@j3qg|+Dr>ttAGak?NRB$ z_{*6vP34T)j^=Cz2WG<6cnyP$2qa>Oh%vC`zLP+dr{tnRFVXSJr6P@m2$Xoj&ot^-#MYsc@jzAp}yL*2`#;83w2w@WK)_u*f^ekl22 zFxOP*2GvSuqSlYS#QQxsH3hE0&Z>dtHw&9oyye2f-oGplxK#!PzIQ}kiB9n<2-v!U zD#|&m!{z)SSAD9}Nch{i; zz3EI)f#r}8uc;KM~Ju`u#UF1TL-D|Ukj?pJ+)AC02=DMk}s{IYXRCrF%9 zmYG?loPV}xmwG1?Q?i7^;WghbQiD^40!O3rk^^DE1kX$gMs~+as+OtEw;$vXd^@Z< zEfE2f_2&lDGjn4_Y5*M~vQdPr57_ZKc#mE=jn4cW3Mc!@3#M zvCx%ZlkiYz4n($C=={mt{TD*V6s8C+m9iDr^QVxN6`_j;#dy*r$VL{1UJ!V!i@NR-H<61l9jC0} zQb^e`_@pp0cGt;phW*7cJ26ah|}&aBD_CD=?3rHKCXN8SB36JI1_S3GSM~-uUAJ}&g^jJ6?JXs-m{T; z*~B@su0b^V(kOxS`H$~3S0f*-7ev5)u3m+*m72EFHQoHBEl4sbeSVJK!S5=#YP;!ID}#D;&(ysZ z(nu=1J}Q;vE?4SGO+Z>CiLK=7Zu;)*I8kYSQ^CD^^pkP&VVwS;*2RjJ_e1E2jE1a{ zGJA8OjNz8sK=P*iQvE&W=;$bw3sC&3GrvUp!cEuR4&6EXNO`vAS}JZf<$kgHM^A^O z&O^Q}t zteze}PJMvB!(A83)+KEGbY(q&L}NU!eon4qA~D) zfc2Cz;B4H(oZ4H01<=Vz8go`a9pZsIs&JMj47~WrI@y z>pvmYn#eF~uCu&t>uI%J-Z}bHy0Z-vBv=_kceq;DJ956YE$8Heq!;hrUC z9IaoktQg4I=lNzJlb6!eW~+}y&>N+6(E@Zr?41L?xsFAU_D|(QI$~+N?YVq%S5`)h z{Y-v%EC+fGNxB5Sz4bS<{g~_=p07A=ZK68xO z7K{mtWoC2B5+Ru&2?K{r>n1t`WLqDdd5fQ3NtA-tGHxC31+6UN^FCC{ z^y4SB?`ag$3i_gcX?Pu&lJuMI3Q#L9-Zk?STBINy=_Py&KnI=X1|g79{h}=R_UKLZ zLt=L&DW!L7MmySBj2PV$=jucTpD>uUYSOUtKs;rUBkoK zA^4&U%>-=l_9V~FS@{09YY-?2$+z2qWIDONA;2OLaqVcu(}4zJ4I_kRbC*OLq9nG` z2J$I4G(A5G-S2hdAJh;85BcR(4#zIQaV-%IA1WS(=$Uv$9(=Ro7e97o_PUEcOFN~$ z@;f+(r<7w>1nRGL)h{@){tGxX&Kpl4tq5!yZLb7vVrs+i2l))Ebsgh2WID0@iwf{j zs`c*nwZMc24n-qdI>Hxb%M85761j5 z`%?yhj$|kJ9joc1{h&WHTFroigRU8%EKIY+kp}Vehgf~-p&;J0rJb868-AAU?fBX} z-Z_URIl|muW`I+ziK?xe$(xsp7Ek)?Bf13FvGgs7gZ})?E+796~Qr+kqfSCtA|OCVShRJ zaQ_0~1*aGt%i*hs=xynw_9484(sn1 zxMjQVG)tcD3_>{y8BkBe##Ud{H6o_ju53T*QP$(oHGl0W{EcHpH!*d4nWV8n=aJh7 z^?^Ake(Jey-SAWEmlrK7W#^$o`73nRSGy$C^ClFG>%qtJP{)UrQ%9L{`oZbK zmDsZ|X}zU$`7T-AWAP-D<3CKzSI-?XHFt(oo)B-CU@oI`wk!Ep=C$p*lyOU9L^407 zkKIHM=D^L`;VzIeYgzpV()C8m4dxqDPi;!*!>cqdcgm0bq*J$w>-h^} zq>};XXP#yQLO)hb07UB@d!|8`QwM3?m|)t*DTU2`)eQc`SjkM&yW_cgCCEq~WSc%A zW%=zGlJlY&W0Q*CR8tRP{3D{$9y?iFxiW2#u&>-6UYAtwIxv3+a6EY3Do4#oG2`Cc zwbwSQiSnPPVNz>qCpq)lS1K1cixE!;!ryg1?3WH0l*VXz|ptFtbB9oG$2kf z#xbv1?4#5mql6OCtog**=k(uGmBrJP(o3?a_JE$Qi(4Y~;R`phhLxbsRaIE;&iq+& z_Z!KrJ70=Nd&SV3_XD*=xJ1fAWPir&033zQhc>Rv;dMT-r4`q}y0XRNitg9l8vC6Y z92e0`fznOuKM#vzuocBOg)ek|4D&crMqf3)v4T0Xd>avqSXAOsBubHlQWY}Oiv|BU zPNBRg{o5|k{U~kkR z{tM=nP5Vc}u{J3Z(6sFt-pTh39JA8t@q_!(FN?ass2z+i>qu|t(aK*TCxjcVcQEbS ziY2nip-(POzodPkWb;E4FyZEwK_C(sLxLpS{?G@TI^I43q%&fAzcvkb==mv#b9{VI z!E{dIRR4qi?Z)vfMB4gdbkVZ7m}MIygIW1Orxu#502p>`vxW+qx1J-ZI~Td?M8m~7Z->!c)T@zBHjB%7-5V8eC*5`@E$Xi*8w-u=duBJ(b$_#k{lmXIUlWkS!+~t^1_j1 zw))OhiG2pCp3oqU>Z68FMnMc{&(9YM2=a#b<3~r#3QToV?d0t{iQbM4S^s|R!b%1i zJ?|n%EnbqHbIgLTyRe-v_?LoQa77=^-WY@K=VBIPb3yP}pQ9Wc>TKC%#NOAi2a<9| z2-t8jju|RGNLqXq2lKW5$?N5rO1N8Ocn;){PQ`s=)^E$GrtvV!hPl94|LSeixK3_x zSiR%!6lulluZ9uTN6g|n2`_ydqyg1c&K-f2ZjvjP0h5`ZiGjN7 z%ZKQ;+L!^%{9}p`@0Co{>$uaNsnH20Qnb;k5O;XP-^)w1Tg91OvfiP_(b0RO(B_CL zW`9|P!8`EA$tox<($J2Lu>ttiS}cki^n4&tnF4ljf(bj#PN20mNxIj;GSA}aX^Jql zyLHEzJcMxf!0(+WOAR}eENOb^@!cP)SBH#@`W9P&>yjG|J13QB9~K~BkJdq&L|aAl z?E(00nI|iv{l-JHv0NugB9?I70!lM;WK4nySNYjuUyyzPt8MtwR35$Ygl!*{ze5e9 zro!)#@Y)=7@hd&%p4gt(5M7Y~jxz{?E#ZZr?xZU#vy}6}D?|j1z9^M70bM$Mx}WYK z_k)6=^k_K_a*<~aEo688t~37`c>s)AC1cX#-LijUDy00~ON6~wY@XAA#Y^R7_-nVj z)8?xVsDw|Bz*bHqRPb`GV2H;#55ew8*AL6$Ox6ojw)b6 z3>nW0ltvDinzOF{ET%M$+xPHFjgD_N3sCN zJ3z5uZ`QXGWg%~eA(EzF;Ios*9EQL6F5(@BgG=a(CjRoQzMMu!;X4Z}Z@c7KQ^2-$E-|s`HI&%# zki8!fG`JV@ya%+qY)CpkLpC`GoTL+dKMr?bXar%vn%J++&Gm39^ z)-BOFsJYEm+K&9(;cQXQzR)0#O4XJ;$bOKZ>Lk)oM1 zshWGr#5`i8dfbC`2}f)}c~q^OiRU(h>Ad;|cU~-}ez8_CYMm(|U~@VYmfeS`?YUxR zTMwtMx>I~e23-W3YUvo~iQ4RVn-h>%`KIn(8y?W4RUQG*F7p%xk&DQCisvnLRAufLInLR#eIPz1Nal?SVgg3*eNF1ry zYfZkrrPf^(^U--$k}&041t#l{EUmZPeSM4!Nz4-sgtgE)%mwgWG;PIKv|Tm8AU(;0 zfQ;O&g3WjR#Wup%wSl>S+(__U{$~@SPMKwzi5tFYV^wHeiT#V)wEQZ^_U0 z_a)U^1mVX0t}}I;Lh&`~8fdlYRE5kwPPS}l*S}jl)O#!16ABp z@#F|N<_Udpxb~PHjnNQ~$sE+h_i9*=&&Hk);`e6Z@*p5*`oxoU+$L77_Zh9ksQTFulN(g*$;SRnol?nc?I9io+a)oi|2 z-E=S8f5fPYF7anqPONB<7>?@gX{FMMc!jcbsKfQjOvljzVbWeJrY1{_3m4azhZBx@ zrwYCIG@roJ5a{oXvuN5o7i&ZhrdqV$cVa%ES)l! zsEF{XF>er3;jv0zPnyD&yOuOFqK!hNrB>pU~aaFKN z#YZd4&y&skf8JKvzU}LLoEH3X`zd}N{0-U0m|h~xG;stfq)r}Y6r_ao(2!2u){glY zISZ6NzqhVVKXyWedLV#-LN~E-J+=6UKT5|G4wWDWI?DX*ag# z)7new+@l}&cLzighXU#6R!S|@eW}f|?)OL;ZjgC`3vN$!AN`OOp7{R`YB?I zC#;#v8Xhmj9u~BX)o{N&pC>XxkxH_xl)4TlYi-w!^v^TQ#PIn`9o%=)bQeD+?LnTn z`kHJu&zG5;1sA4r673VvusBww&7N|!dAT)#Xofj9dKxF#aJ43ve+;4;4{4SeA=4JV z`_+X34Msg*d1Wt)$CbnIoOS6S9^RR&rKLu7_si_stW$ zHxO-Zzg_rM^@oB7&L7*-*{>}*&v)N7-foPJ9$@;dB(aQeO-+hTk{0-sGBOivK4D@Q)EYp$5;)(t(=#d9#e70*}p%uWD_ zdDyyn6w`|D@`Wjdb+*dD>@|M~bDE$p%dzMD$YUPR3l$;@2r#?plj|Bi(;fdsTK}yz zG3YCrs6k^nw9KZPN$b^G-E}nQ{oP3MMW@x=^0MzjR`y&S#3W>kIfEhyzvoBSd+kN# z7Qm8QdZEl2_&BYva7o9lUgx%$18tI|q)pJHA2u0|vzYj6ZVLEq-f`eHF1sQg?E?*j z_Zq>NnKEwhmydC-`^9vlXwcZ^^Si;|bMEBnG>_WQL%FC0zMqqa_acg>HStssjXQsN z{&>q40X4~jB9WypZF$9M(wLaslh@aG^&W7#A!r!offus467gnjgyKJib3V!H`s_QJ&R z;d=5xds7MBVl1F_(Xk^S<4Q+j7KL8~MTwJe1wA{p-(nMo)6I#4eeteKB?rX>aU-|8}7$KS|kG_@AtE*5+xe`9v z*(5D~o#^r0B1!kfgza-bR`4p1qZ@A;N1t|as{UQdzZq+9{y8xtjs}&<^Y@!VL2MT1 z?eQFY3@H-N`13O4;#jI55~nb=-V=)a@Xj{|zm8L4=8?Vsc^bZi9(3OArJR1Lx#xp? z@vVFs>*#zo)BG(WZTlHMM!q9yUgY#hUXTE=KyDKkSRmDUNu-X3;K7JsH$ zG-docOmd!7P}Gr}o1}K9zgu!d^qKVFYP>z~FH8H$Ql=o`bqdn5C%=roIazf@aA!2u z_UN5W+rT8?+x(A{-A^OZ^C&3Jl!d>l0wEh@Iclr7+at;w7$~g>-4!Na^XiLtlo}o| z`i;^C4w`G<F+x?U{v38aiA6YZQ)_w6>?cO}7AC%P;07cnd)Zj!KP)PMhZ+J1fG zmO-^%F_+<}=kAO5I2V5)cJI8X{lK(srg9mQWl_@HL5XTKZWF=3@EM=(x9c{zDQi8Z zwh?!C<@m(^$w&mGFlx>2Y?Fv*}{f1-r$w9aF5V8jxDUYr%=E1BR{+4ylLo91@XnMEU!-pVD(7@6j5`&Am zJnC{d=!Y**OX`)BD=^+ZRDm56rI=#yCJ4H@#CHph3M38rUJ<6KUtZwW)=KeX75H&n zmVPFeV*JP}KHS6_GnYROgrn{ql2TZ^IBnfKYH`8|2>9aw*R_3O5&m~EV4Qa?y4)1L zg~VL+ktpK=)NkBsn*gxm1Jj%3I{&UUrB=RGAhgGNG;Hom>t=DQG!)5wbBXlBNXK9A z<5uxu08{#Y(HnDuJX%X>-EMuhcc1ZgmsE+6j=)z50qCmw6pb}m`EyYpej zUGhrC6%6Jd@HF%NMlSk1%(J$Vfx>iYk~_L%o5ge!^LKKmuOSlPvK*-M#1<*FfQ7P4 zL#AgW$8DZg%qD_jNq^S}0YA8{z8jaHKKtn4j-*RrwGCl4ebjqPiu;Ito%)z0ilL@Y zn=-#~-u>a=W~CMaOY*2LlP>(g6IeXy?>3>VAX_O}m4|q>R5&V;eAu|OI_Y)xN;bXa zZe@JCC~;Ht;DzMIm9|&*7p0}V_#rS8mZ->=63a9D+1Yjc0r~gJ?h}0nPD9RF&k}3% z5+{CHnp1PA5yL;fZAmLX@>4EUY)oYuQXga4QD%K$FT##is!@RDkAx@Dp2fdJA3%+EO& zH4W$_+FGUYn>7svEg*s){SuSk;j`Gy3ZqSTlMy#iqFmoM^#=M|WQN0OT zZIq!7SBK52aaXV?NaPdWtPT4T0nJRKuV^7DstjQyq%A!jbKOK~#(jEf) z-wCRRk`Bv4V0O!E9OXt?S#aNU-^CwLD~}Vi$je#!dR)8y#r(M4`x{UF9$9mo;F*2v z_Wjax!wSc@YKKAzdk;orAruZ?%z^;^&>;s?Dh@7u^s@S}K{d5uv+7rG3V7s01#D$`63b%H9*6*JQLxuw2s< zp_9dpxcce$BnIFmb`kgOO_70zwX09osOF~n_H9pabaOe3MP`OeHTT$)!(@<@BD8yD z;BTD_@uY*|kp7;{&=E>-TO@@|-e-mm!oAOe#j=>V@t~?}9DSPXagPu3!Y0 zkFM`0ORG11tuK^ge%2SZfT+)iZ7i3eML2W&FZv9f6CY6q3Ztoufk9|)LY&e25 zlIrSzxOU>)VkNs)KWDx%vUUC)&44=c{44L@-8^7{oGwUYjZI+hp?E!{)2Rs5x+qn1 z)tK^)uI*NEsA~a7bDi2`&q~ey{)Z}v>N0xr%#td~13ta|lBz(amcI>pMr}ua|6d(* zo5$lblKKBkO+g^s^^uohoF7CZ`~F&x(|>W}Uw9zFG7b1fAlpI*;7=0Mr%ibYx}?Nw zQzeV@oGi`$bW6K7lX##p_hg0$-FOj|oY&7Rha|avqv*}F_LN8%9^^VPF22Q>DY4*T zE{C82vqYW$DkK0T&nxe$s<%e+mSqQ~^cgVhoGYa-)c0?!a8T=U3r<5P)!H?*FpbLN zNp1a9aMRUK(~EB@faYe@QEfRE%zq4i27&u-o%*AWRGo0IQ(|xSK@hJU1THeA?q;NQ zBeVj~PmOmMIyXSu5GMSlm-leReNNXQ9!C5?G*?Rbja&2BMG!v5fc*Q`NLF!yP8U^u zSpRik;u#M=ZVz`u#g9AW@gKlf0Q*x$@YN>%6u{N0DFpM~R2^GxDtiDxm(CuvK*OO2 zSRZ`gKpf!ir3~R#hMJ9T7LZU3)U~+P|LolF4Bw>Q^!qLL-(l}skYl8fSYNtm*wqh^ zXibRLDZXS+6rg{^xFtooZ@HRlwBF^2B&!YR){WHE3e+5^?wnPuqjZN1o8>aH#TZY& zbTJn^A#);n)QUN*98Com3!kr6Cz84U9aVLR@W^Rw&q?CoGPLHo2?uAmGR;|$Y+pSS zu*e%qy0g7iS`E57tJ9@H*S+a104!DAd=n5VIL|ob;8dW^{V8x#)viknNk(J6TT(U* zWzYjG@R^6ZfM1vw0q|34Sye=XWVC8_Fh^o3LfPHEhwhk{JbLhRkdDIfbD&*2)Nk2o z;P442%9j$kAMPa5wZT{>w#G+(8g*34v|9BV)Yx|M{k_ohst4D5QhNaZ>OL&0XDzAV zR8{&CzdSCca$jHXu9s0r5;)1vsKK{uACDLD!arb5Ty^{@HJ}2IK&M3i47xd2+;2%r zE;C%q1#Vc?`8~)C2K+im(?vcg&7=Mw_$c;AR#yB>;;=Dp(Tjt6PC}hS_~S8VP^iZ+ ze5pP(^7sRb>OGQYPX7Yz6WjFqd)?uh3Gzi%l~$YdzR=!E>*Xs7N?7n)%@QPN2QIVz zzT_1;i(#(cc*Rq*gnO3Vs&$T~EYSvbtnT}BuOT-mjkUg4mz?EOq`U|+?$vMVJ*@B| zbpzq|+~g5NN-kjLJ*1nHlGNg`Pi{|5 z>qqT73xRvCWnXO=3+0SbfWDsQhYq=YVO27YrBmPakBsQ*Y|MD+>p%I-9B#qyM#>cw z!h)hjoXR(f$N3&O&viNOE|m(Fw-5G;AE)R0*%T87p6Z`-PPfz1x)GHJy^awX&fAR+ zXNz^9+(;N_h;nQDFy2CW4e6{A>Y1Q_MpWSR+`>>FV_T3n*}-X7oYnX9%P>L<;SKGO zK55^QT7T@j>o39x2?c%iGH3SOm!Wkra`u;Vioqyz-f$yXshdzFav+jarfNz3sM4&Z z6pC6`U1M?IMf*Dp|7D&L?ID_Ai>}!_1xtNoB(Dz%S1Od3svy+^%;F}R?o5&-Oh#*i zTwe{N-uKqu*EgX1sgWV}2x}vf$SzB-tjebjUIv^u>vj5|*?^09{MKbnf==uL-v60L_judE-tjp7Lvv_CbN>g+ z7@??MSUVchWiZCxev@v=r!t)?5nCPo(uid6xy9!?R3wP@q?u0EgMPUDF1W7yb)t$e zlaTqrdwBhiBh|OhX-!xmi;n`Y?2Ai(jKxIKmtYEy4afP|zc!xcYz)RrM6hM@Ek{N# zNpo8*fZ}Yob7y;>9QW@RkDrPFPy2NjSL{gZZ zx|Fmr7SUDLkzkYH-6L5aEh?&v66CkZ;Zd zz87iaw}r&c_Q9|}`qpxBGgn%@!8o*kJ@m&mbQy_7a5tYGwF9Zo=}GF7E8K6U*HWOp z)~0@w$g3}Xpo`k_`m2!GcXe~P68uI0@#yQO*5jjws8awAn*uu=lf@oU-AsT)FKG(l zRWtY%xuM3pD&LQRQ8|a|H&h2Hvt)(kWxdaGHTd~Wtu>6CEA6AH5wf*WSIZ&?UkAc9 z-?oYTht?+840*TG>`aI=g)&vn-m;IA@NKT@ul@eKf5g$=oge~vY=)#0Xnp78c0hR@ zpztE1{h_3XR=Pzlg!b{ja*lVFR4vzU(@^!JuV+uw9@Xf^Tl>?jd0@94G$jSo-Onok zTJF$?5By;`C7~+wFdI`0ori|mTa9&$JS@n+e(_${5Iyki;&EJ+!wg^=`J2+GnF%zA zAl6W$Cwnsd$1t(HI`4=qB*HrUB%idSy?`hI)qnl4AM>OyDjg6GG2sMynR7^ZMzZ9A zogZmFy9{?zJO9$6IPZ7LHmIj1fxYMinyBb4P$qS2P)pJkq52R>I*ekZy0W>Ge!me` z)EZZ}9?@JsKwt6&>Mn*^wH;H1(8@*oA`*CIAsSAS-EmktO?zuU;@D=@X(Lo=z={`+ zupF>eqpMq#I*6*6c>>0RxqK8G--p|;K>TAii}!5iRTFF=7CaAf*~MOoBeXMoBxp@P z+qb)wyrww+tPvIHBb5v2DHM&6`WwVdj&Bo^m_bRmUqSZ0j$W_~>wCb&0ha!9XywWH zETf_}#$}xi78o`Up-?4`@Qfy3ZFx=QjU@8CE_r`=Pd$$eW*hAVjn2N%6~HNo4|WNW zY`TzZE1x1R74fz8)68C}GpW63ca-Gg6ma*(qo~P#KZ$y{jtb_=KZeLcF_RN(f;_u0 zQun~Q3(=xMR(8x4qL#U!tk8wFO&c(R%_+FnmSY;g>8AdN@HmxlcE~NDu>6FdMX-w2 zYd8aJ@Z%7_)|Co9^GUfKaR+7XP{rbEDkz|)am}#umLw=I%|r3cI=aKIMh9^R;^>>0 zR$O?`bF;U(Z3NqIZ3H$?)v$1EIWInF^UYb9K8GGp+R6FS-`H^?WBxe-kwk{K0ar*#74qij7WLj-NCNk#B0j)+{%1o!s-eX zXso|QH5tHC@7m#Cs*3dP$t)Tw?3&T&m+2^d`OUc%$4jO9hB*J8|k<8wj`)<7E33>T{pb zg+5^~@mgdJC02N$i-K&+_|pJTo}NBmfdplh!*daRzcUzKWf0O^vjj9Ty?7%N8;aHp z2`@0~2(jhS>|N4+F6%c|eAJPepU|gB7-<{7QRy!F7M3e3J!IDQuz~hN0DJwNmRtl#NlzoGGRm*C1Ds+B~PudWtV( zzblb!ZAO;$_L)J%$e@}S14d5{`~E`Pk~5M?*N&p0=<>@iXPg}K_=T_!nk1#>zSuos ziA@^TBI949`88OWNT3T3uJOC4Z&2~8I%8kOw|q=t@-T|*5hy^2Hj}M_&B2Pmv0^0p z2P}3<+&Z|r(#=6F>ivK4w2_!se3v!3H>B;#>5Tq=N8CgG_9N}3{`c5AA%Q89C+3SQ z*T_pa9&!g=4tj7AP3aoj>R4Oe`MfWbef&xIt*VvGVfy4e&lOO1mC(`)u?B=%CpL(M zS4bk1wn*SOpZp`2fy3_W@GJehxzGma{+a{wY%K+d;RAYk%^h6t_HFpfAajUTFNga` zT5+25RU^@OHl?nj`1o=y^T1mq;t#g<)b~B%V&o6CxPh`lP^DW$m;Brd4(nZk(n%N7 zH9&#)wAyruG(Os!k!^wXyS2`VPW5COJ27j#ooCoP^*1YjDYoaz6`|Fmv5c3R!Te@x z=hAe9OENEjUt4zJpIUpO9IQh57v>of^wORA{v&=GNnaMBK1VVED&MuV=C_C1TgXmZ zKr>NKGF}PY=*FJwA);&Vd>_ji6r4Dfcn&d3*d7WHoS{X0{jQaMqN)@=+suA?n4FR@ zelhR-_J!YJ*u7bB5jeTN-kDY~RkmH8L|jiX*tu&Gn=N~5E#EatMML=mE4%L^P=tjQ zRi0y!VCP3%&3>_I(jatiKNQ>f!MV8occzyH4?ox{D4rZc3 zrA$mQRLxf6$swE11R9A_&XZ0Mj^W&y0bd_sF3oaH~? zpN@UhI!x7i*dakDb({QCb34O|djf}X>66vTK0r~uT2Tw-dSRR7PZ<0>HP3!6cAkS? zqg^x=qiwwJ#c8_Y|HnJ}*B*xe==2nEog=WX&JKxTH(P6RzN19dFX9_^ynCf;_*%Go z76-p^9(?P#1W_6s&Yq^5DhWb;pmMkf)2z4Zgp}Pfyl#uJ6Se#DYu|c3Rl|WzN~!9# zo8*JR9HUR|5(A%jZwOw`cMOxr>0VMJh+w5v2X45uT8gf3-jog$aoUdyrpOvSOIX{l z%|>StEG0`)7E5I$S~BJ0VgT<%qVynP|++xyq@b{At5g=<*G zi{66mmCN9W)X?9^KdF&q9$bbSN;#8Z?YE6~`_!zVmt3_0;bUU-=^9hKAG|p1*~w2u zQ^Vr(2c!HHPm*=DX#)&2RncS|z*qT+wo&N~=6TcVjpPIP(z*+?HMPmA+ zGx4(3civ^lI=SNq7}EWi&6w_80yk*McJQ=S{&|1?S4oq}y8m}5rc+VO@&EFAMJ!J) zyHrJWKyM(t`;QbCOro$rigB4;RA6^rQ~F+dyKcOST;*et`85I4jm&@~4?G?JiKJG8 zckymIRc^`uNZMv9=jb}+0&GRqM+TLx0b+JFSm1lw;bD}YwPo=SL;YCWjxh2JLaPMY zw+<1N)Y~gYl}Q4ZEQrS3P#Ge712@IsFQ3+S0I;jYhzr2}N4f)aD;+T37f6%tPR4l!>!%-d;pceJOuH-1I+%a45-%c5fXCvIV8^e(i}UN5gT^aVpP>K(J!C)C_X`d%A19!6^qZfSubNiml7$am!bJl(A68C6#ol_ z_n=LLv26J+597i#QAx8x>`YHoMTK#<_K$uQv>ILn@;!Y^F&r#aFx0h@`5(|-b)S<) zH(}>l?)UUWCj|3%{{3gEHSP9cH3FT6_IcCy{<|!?e#gr`=}B(43x^=}#;t>8uAhhI zA29x-b*AySplFchFVdIjhQhdC`!5w-m{YMO_3BYV$sgYdQDCleo|l`y(2=OD4=Qf^ zAXk+tJH)uq=X$ag{(`^xfw%EJ|FwV{1YLz&Z9GA|LuioIiT;~4y8o!7fbg24qgx@A za_^!7NuDC~<3^ViQd!}~U=Gn-&(IT{5`)nhN;o{L1^IADWQW*JGWUyRX9d9s1Xt-^ zZ{>#8Pr&OvZFz!Lgy&;cFS7N0r#`Hd8!+o18x4s)fk^pPFyqxC?DR>1s@(m|!r}HJ z@q>Rt83tZY6DjMGA%iOFW3Vae4PFe>&RHA~1cr6WlGL=e4CT2iZmPs?HNS3nPI3So zP&h2*MLTNFaSz{&@Dsc>wf~>~0VWYmg*Q=WMP@KGSMa7+{-h7l)VD3foLss;w9=kr z?tJ&q_lN6XpVh9ZgYOtOJq1Pu_(f-%!ewOHkw4j869M zUr@1~iLGK!4R7ZMtf(;>pUE=HK48hD_i1cgln_e5)l9l?)dPAMEbjXj5z z=1zi#=7>KQ3wcAC^Y(JWGz%X&->=~b`XK7#S1fb6bo~-HoEx>2{tOiqM9jFr>0&R4 zIzcZ<#9aN>bD$hk>LtyKPyesb)zPO7)Hya<30?i&VYFJm{iF(8gnHR~xUg#YUMLe7 zE-SY0DMTgWLe*Vc6^yU#-oFL%a_@VEB$kR3y_;u}NhUj9Ig2mlfaO`l%fENNd@2VL zn|@g-o(E5of@j+O4tVnqK2H?iJcO~GsYl?yj*(UFP2v!qvyp$IV`A_hriIt-1uu`T zcNYJ3%=^OUl@a!Rz$G)ZHHAmCpNf&5Dv+~>i`8^i%J6Nd*vj-^VNdq>1PL;cZ89U> zg3uBF3|{;6n?5RDvOD~?w~eGu==+dxC;a68T(I&wyJ)8iP9nVbQN z3E>nc*0x4bHo|StD}+O6hu`>?QKQ{!Kutq0jid6%uwMsEx6n>Th8+MnV7fnFe=;2v36~Z^P8R#;rw0)SolK~H z->ELTROn4E`3q*^QHpufYo+=wVml0yY$HsUKegcUG0M$(lW_1`gQA+aFArWWcQ6cA z%kj&Y-8_3CXZG8a*!&{GuwUkV<@)?1#!L@_GNH{{ssD>)#3@;SSVRk2sx>8fD-V(b zR$?af&}?$jmvQNX@#1CrDWMLO&e2ltU^o}`*bKE;RQ&r(GflMaZ~BaGKEjj1!lJgq zbv!EhC65XjEN$({Q}4LFE)JZ-N5OxZACYJFsKtvXw}ZCiH@iS5F+ic9bFTxvN4*lD zOS&ntUqkc3(<>&lwRwJ+cs!!aeS_F7fS#?{$tqc18=2t51pH6u;44SDrZ^&WL7e}N zhY4KaL@H>KKL1H4lEj5nJCtzk``~t8 z;Yi_6qtfd-fX_w6vgC1hH*w4HGqW`@pzP0W*;k#Rva+>m@6VQsitqjlU5hi>7Ajj( zwJSj2F+UJ!)=l!MhX}jkot*nX8=mkr7L8Sy*W~h*5i4BjoZZ|=1u_!O#7qG;n23g@ zWTTjDmKB_8F9b!-=O7+$JXgHz&L%IJF6VbWZD%I=<)n0 zD2ecNu^sS4V&jmk;bzeeuX|z1np-In=%I<|GPc&DLf_SJSkcZnCoj^6oVG->`7YK~ zsYb<42U~M7W^}Jad(x67uTL+zG4JMCc-SX?m$u4CE&V#=uNi8SB2m|%t01WxSXP<; z*^@P9FN%Q)0V=5ucp!k7d5pDU(4klG+YuTI@UGBiYVVPv_q}^`9eUqSFy#+=)oC%} zp+#B~dW!s4YjE$@Ri>s^kzcy?@@q-ZT`+k(%$eO)*ug$Yd`AKibGtFJOSL?;;|EMX z2pv6O-EQ)C2y)#Sq{_m61Pa?R&lwqgN8r8|=r}I^T7-7iQ$}z@{j+1VLELL!w1PqG z>+1nuD|DTj5D+PQT3Oaapt9Ao%B@(R5;jyNUZA*Wu`{mlXg}0V-7{<`qtJAuojyWl znpw(|=Opxp-NA965xC`BXD-kgR7e=%;cOz_wHaan^|J^F7vc!x2x`zW^-SG{w~r?s zybw*33~F!Ss$G=$nJBs$^IBl2N#=yF(|=3RE$*9BZ_WMxbaY8{9#NUCizk$JPiPkI zuF!5n`#-6Piz31%<{{v7A{<#c1@!+8k_Fj0?J0)R*ud)BXEXM4oy%K)=ODIeA|DU$H@=n@sG+o?p zgUPBp&mc}6iYa`iIYaFk*w-tK%i{Gfe=n0XJ@ZTF_KOs9yz{*KZ{shcR$FRx{AKAY z+!<>_Vc&q(YAg3+w^@&72PH$}9C803I)5|dsfUT)i;;J}!vIq*=-)xgH7 zXT$y5reSpGEA(9GG$Ka%cBie1f1&VppDvggQu#-I>(?#&{P%T7Y$_E>^G^*p#0$k= zJ_lTXk;(e3D+`&o@u8vr##oE zDM7`g1rC;RpH~d0Cr3^n$li13Y7xMD?hvxFuK&u5e`h6id#WBxTTP{bm-;SRk3YfB zFGiTnN;+xEdU9lYhKg8~ruYhJ*A~|o+4I_R5?l4UGf5LLbn7ShWWE^{tNgFT5&b{r zv&)`1_Yr<^RR|A0C4Ym7mmduWzRDUZ6x<&7wSE&TZ$O0CS>Jc*`Ac_fAZ{Ivb4wpb z$NFX8Ko8fB!2bOtubK%Wi$37dXo4jX8k04M|4exU^k&MGA9jN=^}>ue;qLcX8_BMR zF8X1v)Nj7@(Z=uOgPbvG!1J1vgNwgIcX8!6;rK_nt?Ng^IQ5J7lD{&pE>rxD*Bn5d z9m_-LjwR$tzNs_j*TLXX9p2Fg`G-})@c=eRhx$dbz!efYxTXTfmZqrV_&%xlov)?% ze>=X0mt*<;6)wj7`%+AA+EWhsmKXJD@$$;MKuAx`CgO(fM*8y-@cQvJIC?%{JJWzb z{XM)pxJaK!PrOs2UibYgQ0P}1R&-4|4)n`zBY{Jm4|QpLXn zzDE{*WAS4BT_8noC_DGO{6J@mM*{Y%+-qprCx|rq(Kr`Bn3kgC`(R(F!i3(&pjVjB z0pbVCea~hB*o0vEO~2xv8~Huc%BD%8)EWaXj$u4mZ#Zg=$F;>5bMa8~OyGkMu0*<6 z4UC%W1(a0Py+)vp+B-C&k+ho1k_CD*8%Ta3$E zvA8pVt%1%gu@LWZw6*GoC1>c_BLZE~sh+c`Rn?x^$Cz$ky2$xqPvrpd;{MeJs{7A1f<@#IB&hR_x70En zRXd?7(FZAc^#}DbEPClgySeg9u?0f!z?;IDJGvd+Lz1~%nM&avaWdJFFA(a1VV#s&&{?k)m?djJK2;Yp`RYS z!b<0TEM4#DrH)}!a?w!cl6&VxdCkf3hp=}P(P8+8iEcan41jQg?xdnwCCd6mgy@)F zOl!y|?0CIu#*G+QC!$H_%4EKrpkOi#UYxI?j~WA#g0*9@C(pyQ{L4;6Xh#ye%Om^* zjsjf>3`YLIKt6t6XIB#KqHcn;sDTq(HA#yFPlwYRvy!|M)&Z+r zQs%V`0;k-K%!^$!sr9_+>vzUWVv1QUm)j4;*wj9CVMlltl`FoYZ+``Tau!|{GA=5= zu^>ar=repcUWg_++MO3m_YqtYT{JtTPs(H4#c-@k_f^KxvL_u!RT96w?-KR&3TB9N z7ku(^Rh-{d`#Ab4@D_5v_B8T`l0t9=c6<2ty1%2x2M<*o!qdMyT`xr^Gfxy0ZtPVyd`TvG z_c~_JguL^lM8aq3y?Kz!V4?Ha^{Iz*G#oae=}%W*wnO`Nh!m3fVX#BS6r~4i+4ez- zTiX-#PoYn^0EiWDp-j^P^yWO9_nU(9DSg5`<3kbCBPqNChk)8I%de*VHr86N58wun zmpi@1ex1E(Jg&etTkkdIU$XB={=PlCwK1t(9;jjAZvS;9*K;~Aw%LwQC8rn*ilNJW zv>Q|$2JDbTYFCxgP$PgRY> zE)LR0e@_3k6&93F`!eci`fA9Ex!Ds#TXdri2v1jVpDac84EOc4SLdh=_&f()LY^1F zH#m)y(ZY4>Ki?PHrHObi|3_4b$~R zP0-Z!f(W-B)W(kt;=g1)l-2dU$Lqtqp7S7tD&2XgbWl~jh9*naYa6iV`jf0T`1{Ux z;Xzy9eKoQryRM6j*E@ZR{jTp$^$w#cbll!`y*8%m)AK!&f%)A)JyL znaa_)yGhzQ^8!*q`I3M>1u=L9-((agJzfSrjYPUn0)Tw3lJ!3cf$Dk+71>2f9p<{$>YYVdL zit{H-xVtfPav&mWgPeCj4a>!>TZ7)X|A9yPV&qT4h~wNJTDQVMuMR+bVeA0eE9g&| z3-XKWnl^2tV!DNh8m0~U4>3M$@MUsrdIM93z%9iUFO7ZAO(mgO6x|(!SKa}*9a2e% z7Guwu2RtRP+pSSQ;v8@8azpDZ5VpCP)Y&N>3{E(HGc~NszY@$zDd%%U-qwFKl%e!g ztf+Q|umk`LxF+t%qFPatKV?J)eGuT)y1Zql*z7Ovm-WU%*2K-f45-dyA-Q&4 zQ6MbTNou$5yJ__{rtxL^FO-iNm)jLK@cF$3cH$lpQMC{%n}U^3bc6;i`%+hF+@g}Z zvNn7+{3a704t*O|$pQz5!v{Tb%0nuTo6STb!qMMAGx%VPoDBc3T`@=1T0@#5WOl}e z+(Vv)_rCKHP9YNUbX^V6B%8j!e$hYqPEK0#UkA7gJF6?OY|eTyKd zq#|7+-6h>1A>E)fLrKHX3?L36jWp7t(k;B#M`@YY+*8M+g zF*9qv=N#ug_Wo>Bk~p!5-;z+6M#8DT;zU_Q972bic8VcrqrNDEg&fhq651I!{_&KV=GZRRSxP)!7I z(PR3~i_s>6+Db~q84x1v2ZU2lg2ne|fr2isF(8!(=R%9W9*D%#H*8aoub`SqRbtGr z2-_ZSIA}^ted9Q^E*k)2U=ndX_5ZdoU|iPIPAeaegOx9|02&qn;T2`fTl8Xu`Dghe zqeJ9=sSSC-qX+7q1k9dtbtTsCEY!vIrG06Aw|c=uT%`8rMykhyzO@6o&IDU&w|umA zp7VQK_JB?<{S$bN%kY9u;DU5D^5CsQHux#Dg}SIWI>(I%$t{Ea9rpa)zN%5-xX*v~ zIAq1eQ!}pt1^crm49Lda**^dU8<=cx)#kdti9R3DOQ>TujorClc7P}T9h+c^V%D16 zfmS}Fw{PN9>!$*>oG%qhgMoh1tz@r6XSFEf&UDV5+UVNsrV^LnocyUy!dsn%>aEWw z*XGeWvB?a5%HE<^xthz5=NHm4(_ItB7b~>Y24<`=9{g5n!$LiOfj=Mev(tkk>%rY> zLu=$GMPaI?brcuc#1PSD%cNJ}-f3C~6XYnY_%XhKTjm+9=@1zRMH$bh-Lb~9@aTQG zPp9)bQlj1^^EuNg`BANplHk32w@0sEN$X5~S<-FiPnO}oc}a4O;_|awjN#YuDb#3; zjP6*XPvY480e*WH_@)MLeekmQF5roi@g+OKw9LzxWq}*kZW?8kYXBU401J_Awb5dmPu55rKMe8Sq|M zAMddBOS1&NrOE687iWb)?@d8)&O%rmYRR?i3+MIWg&s{NpL?t$~% zr;63oBkQOmakmseHdkbwY#Pqv7OG5r{lrltXTdG%_%+yXGi4I3w`ofp1G(`|#+5D2 znYcj6R-VkS#Iho~W110G=XSwp#*D^+=>C%~WQD=t0EJp7IEq&VGuTvb{BkPKnP9tOe(hz;0Jl69{li!d>)906Aq-&Ybi%vM;9 zqNG3eAt6>^f-wHn&{guWrvg~ zY`{$Zk`A1!mxgugY>JTOozIH=Xrm^^Wt}mkOa2_3l+ZP5V4xaNx}26lp@z2NDzrKK ztnG>xyuKe8Qvf=c2ELV*m}-St+4q?*CV8+rnP*LjDSS;8Apj~-lA5k z)$;#t2uIf9)io1p0NbZeCH`bMrOlOx^(~5#!$;sRtD%A>F>Rj2Ps5}8{8z9A>r*rDLuEtsDSB{)hKk0jwH$Zv*^PS+^ z2UD+2kp0XI4VWz;Wmqc1gU+GC`qIQ@3|*E6P6WTgLBgsu1!7*OHA`?N5!DgdAPgW% zE@s*ysE*~YtMAp)ZM~di=OXnOU%zmux@HLjY>6#$5uyt(wzfCl0y2?^L6MwIg62>1 zgkK20{xY%E&#GGE1Aq?A^z}e5^YxE3A&3r5~zBzHCrJtOrFSAg6zA-7DXz*DaMdTqPvE&(OBlDcZ>3VH^PkBi;DV&Im$l zhSEuL;UEbWJZ0e`__cz>NrvSGeOhW#v*~viRezN(WXcg)RI`XQX!{A8PZ^m z+3fEGqV_&_3}3&Y;XB~~k0ZAWB`YHFpIca;zkh!C3~V|=wtUlZO0YIAL63jQd-(3R z;@7jT2PZ*AL-z$J?L{ROkD#)Zs6&o6+b)0oi~!zj0VWnv751n89=k(b7o6fZ?$1G- z8V%sy&A}PalMSSH08C-#aqG2npt>DJ)MlXyXao5EXgGY`Qxu8>CGg>2j$$iVr5|=V z3>};Ay3Y4r>C7P0^K)abmmn9?XG_`5>@Of=k3f**QC8Yw3~1QkC& zs*b(cH$E+fQ^;IWZmpT`$n6@Xz%iTIwjx~h}ky_t$AfOUR+l}GJLwgF#aEdEonEsTgiP=9z1 zL_1le*l`NhsgTKyJDn`wYZ>Q#^s_aG!@v#0`)9$nn2;F-aS(BqMlChnOeF(osQBys zppJLWF$R(3k9zS>mX-W1=wreRsy*q!IN@rFc_6*y_IJfKLstr36Owq?O*O(iN&_R( z+?VlUqT#Mv-l0Xi$sGeS=kaXWRr!v9b&ufXZjpWirYswmK(tZ*DDxtAQ8DM%`}1s1Qm}o-&?Vb_M;JetHDX57X zV}WFp$wU%SuoC3k41| zZj@%_9aEws#>m@VC0S!CqZZC^AKT(Aih2Z?pm4NV0qxi3AU;l{!%86Q`Q!elo2pS< z6Mb)dA9LGRAFBPs0=c6oJSTDpcU{6~=dtc*#v-Frhxd|$tg8v1*Ea6cTWvX5nNO@y zO{SVm#n%GCojdjRF6wVeJPeHY6$l~9%3skz#)e0Lv3Ldevy!@#{vU_((>Q7%S0QpB z|BF%s+>{-TB+4RyF1YZJqFT={3HOYhh>(&*AbU{i;z~B1tJk?h&LNj3!G|_BB1p>% z5__*&;EK6TvIL1B{N2gG#r9(wDw`=skqYEb{_-Ihdl>=Sale_1#&e66Y3X;M&lvP< zoHF)m4nMYVc0fCV*dxw@-CepBOfUD>H_RZbITes;TmtL0l3_o$f@lh{eP`sP_@^@f&2AJud-M`7^ zQy-@FbRk>V)73*YU}(G>l4GylyCF58sI%;tQ5U)Tg`BmnkNOLT1M5jwwQnCSa{Bcw ziX>!uY^xvfs=KZ`sASOi#_1pTQ!EaYgt0 ziyyQBEtnHE3H{_cPu3$N7~TAd&doZDb&B$=Lrc%;j}z4Yy^G@)W@~EWP%2*R^bV_S zVCVcx$G-%1Ym4P{pWNR4%Ti38|D0F8X9EN_eEBEk)VKU}?54!W!pZF>VHHh(h)DK$ z?wpMh*_#o#UgZ25cGXKxpFj0|V76f<(BnIXgV3S8+J$H<$DbN9f!R^U3+enXD;;^I zW}fM7j#o$PgKT+iqsX_iYkJa^qf^CO6&g;x(iTOVa<>wz+LEK5`?b!uqO*D-0olLe zeC~|Df7md49*_)9z5zDefBaZ>pPs)@#?QN2P(g?|T}NBSEDEU8x>D~$cwCTD89%uK z_kF|hd+aCHbgYmTyRqjsw=kcMz>^t?LwV!K!-=p4E098m99pHX=hoH!m0~VYU_`QLNHC&NYsryE-8=kepRI7v80tgeW9>u0e09q@B zncA7HP~-hP%LWV`!`b@Sqq+>D>Y%(r?!({;d3nPGDQsuWR(SmAtwn)%vX8he-vBei zqhT)De*c#ik>Bc-xWTJJ+!y!5e5uw;3=DWlbt$OyO}2cf5AzYh274+hRhUDhljyl+ znmK$jhIsnsem_Y8D>fA3X#K@0g_}_lr%DbI0dD`2q|fse=i2;?G+|%r-ifr2HlR&y0#dYPHRzWe`_}|5shNhr048n(4=1!N@)N< zDeZv!$m#Q|bV9?l=`CGk(b6;hhu$>Yp03xzMjDq$L@Surv)F?<~2IPlmo0%C`Tq zDJqu*2|u*o*iCnTvLZv$N0Fh6$3Ls`TO$hmEG%JND2Am2X>DK0!R_hRNPL<@E(_5n zhL+^D0C#8vGxua)YGW)eiPi>d=sj@@{K-Ky&o1WZE>~!Xldp!%!L^Aht;VQ-if#F4 zETu)jDpj|NrNK75bl=iCp8>=N8dpCc1(cP>%Kzqwc*yf{BRu946@Kf8g>ps$2Tffa zxu~)cJD!KjpARJEgZ5Iu0@J)+>ra&30ub8vOC(IbTa9SeQupxvOO5yoeDX(=B`ZMR zl7iJcRaz!$w|CF#M2%*OqOE+#%X)Qpc(P%Icnx1dLNGS%B5h2;5NzIkf<+*AkpZ;S6RgN4V}bQ&7}R?~vRtL6YR@ zuq$~zDvu|A6VhI%MnS8DEi`#DJ-fg%ubN)s8CyU8Q8y9yx!pa24Y8RYZ-f(Z1v6x{ zg1odOz$4vO^DMa0fdGCOD1;3tm6zfknF$O=elvhao z{(y?AWtCKcuN;Mcv+T*)abW`e6Q%&N@ewoizbz)#9xcaKe)V=DRoJAI9-|{35Ccp( zfVEl;nRz$D*hvB;3ZdhM16|V*>h)k?FXU{lZ)0QV^7yq?R6YRNa<+&LX<9fZp1fd? zGP28Uu#PcU+-p*A;2dPacedU#|3Fjmy!n&!Q)k2xai@n{CJEh6hLqcGzfsslz-rbP z!QkAmy`=mDYl+?EWXP%*fiRluDn)a}>=JE;z~uGqQ=gnK^J*+n8F0g1D+JLc4siW= z!R31t2*Fl67o!fBG>Yw}LtZ#Wa`KMdCo=jOMFl_SW#kl1=QOigUVHq_G+_rEI3^@y z>mt)aQ|^3I+vaipz3x_ZZt=2Z!R=hP?M$1WiARBl>od(s5HkFFyRI>&T=-+y+r}8H z^Hho%`*%{?>3Y4(nZam71^-(F@!X22=V`+F~3OfI{(wLJtk)AwGDR!&ggUZm0LcevmKLqdFne zB;X|;)a|2wJ`69=bH+*h_yK{6WRmGp)sWJm7+zM!i<5bzpc-|sjtjcy#n zg3CXx$?um{@c!fEjuV@N@(=}sAMD|qUe1ce60mGYP``-TTH6nacf%Gx$uV<`zx1WH z?*T{AGHX0IZ#n$XA>>(MXY0ZUpokEVd!w$H{h=g-IsFjL8k>Jjbb{eniN;dZeq=AvyLg3 zY2V3w4%kPNj_;uCCuGOd)=>@NKNrLvwjS>pYh0QWt%tk!o0!@eTbar}xZPwwRpNXX zDQsk8lDkjdh8%}I{2rb1Zg{8t6$5D1MC6j7)l9OFgIJ_ofNpDZcX%F5+qj8C1Nv^1 zv(_+LlO7&*SzaQkanPSP93>5MH~ph+NJ#c{5*^fxc_E)OjiID^8rS~>`T1#EzLL2S zr>H<}%`Khkn$Ha7g|hH>R4Nox@Rc@CAVa9dXxwLPnuLo&)2s}XUfNG!V8ax*WHNJM zwV=W0;E9Cz53$ej`PV<~Z%i1#5; zm@fr}yKo;{K|Mx(xGFNIgHVr&-L(=JCky>X549aBzLnR)DWc+Zc)eVzRqu#N=HXlJ zz|0&CP=0_AhqfYXg)Zs00W)SoUOV|=ec=pIkJ3Y0Iss;l5CAy@r04DsRR7=Odh+od z-48DdAfUmld2zaZiV^;D<>P=sx2wj$V8z0HJxKmoj!gD9@xOS40S-UEh~l?fkB^8|Z) zkhYj8`Jxn#7~mbfW8`Id?n(+ibA_%_lu`}{seZu9y(`Fh zj<j@4($OcuMbm|CW8FIc$%Rx`a|nfeT{$pFbIjb6>FG4yyNksb+gODw zEPkkUFs8V+eT}K1ld>65v57_PJI)e=WhIs>(v4qt^+>^wLbCxw@4{8>xrexv?(h7G z;bz$tibSsPcXPrSv8oT(MHb`g79Pe&I&U93@^4PcR-M5>5GWV*w593mSBvz!d55^^ z7v$GJC8LYPib^V3Nq`72jM`C%3nle7zbxZZ3hHI8`)AE-&a8e+0eYKDSa+|72QiS6 z{Hg0`A@$9u7C`-koW=c#qq$k8X@UGU_4V`RN-@1mYm)-ILPSUK*|uoycS(j50$%d1 z_DrB8_p=i8xY`?dsHd%3Qa)tz-9k8{Bm?q{!Fk;d*zTybHQ~#ks#1vUlj9G0xJZgl z-=I|f)X*IBBPhX~-7^Hvo zY?ZYjJTPgS7;LD!1x8-j`cM@P&e_%V|~~fkyPryb#LA!7QOQG)TeO z71_}n)$042t~BKm=SDp@)pVpf3mSN3!ptbuqsFHs`gk5=KSe>y+aNoC+-6U_1eeyb z>t)h@(qZF`NBEB=9*_GH7fFtqkVogmZ1qc){eE;&(lxRXM~*F$c^v%^OLG%C0_8?4z3UU3O3fbW4X+{=Seigch(d2P~ z*3vDWfBLapx7Ew-wy^j;;EueXZmf@bhi$-`WD_rZqm)tFg{x2a(9y_iGS?1d6|z}c;Se@L6w$7bu!v(v6;p2!N#rR=Ln$VV1aTJgCP=(=`eK2Q%? z)Ubw+$s!k0al;s3T8c=!s3+Hj@r^uX%4DWB`KEuXc#A4 z3!no*bl9c%8|EpgmdLL7B>mr3(Yf^!arFah`9Yzqb0pjNC)tvxbq|bU@e_U18ItNw zGoz8QZc0J|5d5NmTAMjc`%P-*7TBkdA6yv)4KkF@>CQAMcig(-ETnZ;@+^r<$}a`@ zfckFy4_rNmoye;tuKKS?$1g>$j<1ckgQ4SkIPsX0nD)Qn#&^OtW!pz_6 z3P5#f4dM6H4+KV7rJhxm+W3sxCe6yUE+AySZP5hp&l!;M06}AgC%`7vM@RMg*GS%2%jqZkkY|)SoK@Wt7gn1^cg0EO zX#o6eO8gr#CDPxfc;<+i0$$IFp}xt#U76#QJnNFQ$dpXE0tZ~Ee$Xqj zk|p$IkU;Ac7e;p&4a`R?1G!ltuJ*(uG-#%$ho1*cD?XZveNq(xvB7QYKsb1_LH?Q! znpAT~)rWd_;9A+4{h-;~cF@ZDCFU9XygtCze#i3Gz@%%erM9AB`{RC4jf1-l$=?Td zvWCpTs-hQ3rg%xLKoyhk8kqc{$@}Y@bDsKS^jhkjsYp+APMVtT}=NKdZD89sF=v`e-o!dF1JPVL?ETPR* z7l3h%HPpr^$C^M>5hA_T^<4ViOzT?^CIo*X)%!P|gsbD~uE&0eBgf3Mi1A4u0A7aK zgZ{H)x+!sZM*y~)5jm|3tk*aGD_JHNEE0&*^>pol1zJz19l2w>9x+<~p&`oJm|kJ1 zBOac7lqT5u-J8v`$zSom@P&ZHdhRr2jKw8aLXfOtM!sGQD#cmxkQofA{j&uHMN;K# zX|Z-IZCX&TzrqK6u{o7LA$>zF^5z`}mKN%Zp_-n%JIVq2gYJW6WHD$d9*{}D7)e{)4KOua1##lD- zN9^xqkhv$P-rOU)H3C2egaa%7O4MH=+ZuSez+DtNF5pTy6*TTew7ymOAKoBIG5gD@ zeTG<66;41`R2gn>IgL{^eon;jQ`eOnjta)ms~>NWShKqB&3zz0XF9hx5YAlZURNSv zsM%(3myjz$qr<~5z+oA`NqQ`lb=iv@zvAb_>;78#n}ID)Tf;~5Z>n@fX}?>h?7&5I z>#)=9#ej6XP{Y@puDtoL4un`i2j&Uw4KW8d=gw!7gHu;C&PrSBhd$Y;LC4qz5rmZ$ zb^K)GmYMhf#W9=uaEkDT!Spxt-tQg{0gFuOO}c60zUu5n$h~0IHCn7KdP?1xlhx09 zG=8{ne@J&@LH0Ikt?S9Tf?EE1YQb^KNoFuwZ>nkIm0{aKbtg0Ac*=iuefT!Xd2ozK z=koxv)#2_s)B&>#POs<0VX)V>ZX&J5DWM76-;oQ+d+^O0F7|p~`oS;s-|XwH(4Qk;uDCJ+m%mu6GIBz?z6&{4eKz)RYf% zFHcWc2jAuGJ!Q%_;Jph5Tzg+0RCQ=WREzrC=-#9wx@EKu`{7>___$5`<~-M>61o(K zX{2^5t;QX9^2DIui~{;w-Ufn2BU}91@V-dh^u^LRzJvHFpI;ld?NqLlUe-nZmtJ=~ zUVPz6u!s0$=hlrfP6<)<1qo#*`rL--Wwa7K=yc;Op)o;(`1jC8pbfA_N>1$ybKxvX zkbz~K(M~idX!#iPlchH(&&1b|Z7oq-Iv8dD3cT42b}#EVkfgC$mSDY*{{~P9g}mT@ z4`%J&KSCw|B=j$(p68OZWT>X|^cnf8Yiz?qkjk~RimLr8PeE3I1&950jB91ME34nM z5gwkK(1tD1aOk1!U z0mnnN_YFPwjo-?pqy=%+4bDkslg zMTf_TjJG~Yn~=4$#Hvx7(_HT`Yq-KF2mYn1NPO+GAl5OZZcfWX(F-%v*(w0TAh&ScAK>i3LGp@Nx?W)8bT=0dS-HU)NdIM#11Y?x7 z74QH$_^$)Ob9UgYW@<$c$hZ8^EfMbFVfe$R+}_>tyiklOR8Q?mjB#QpbLUVG1>AN{A- z%H7)0H_CEn(9Cunz*7SY!UTMP&n*sY@q%AA?pWMe_Zgi!zZ)P4oIuT?yg5fuxgHjy z&K1OSxE*IC$KxoGd+YT}%c8j|qOA&$f+Af0UFVYm(82dd-%YuBFuJ7k#bkf{8Dd1P zbUzsZX8Rab&Lk<*JOoDPyo#F8dB^BMq{a;NY%}-oba-@iShdBO0IY}8^7kS=g z@_K#JF8wHsu{`wEzRuXEL_cmef5q>jrd11lR~G|D&nC2iKU6cUn5(Yn;k-{qYWX~I8(KG0efjWSrm6%jo;H+ruP`B>?wQ< z2U0jCcRR>sW183ddT!R|K{*ay9GjcR2|r#uN3LKz*NwKTZ0jG)FaN` zCQTE1_JHTT@vAqInu1eLtdi=H`_!IzAN28R+I_!>2pdghkL0b%ODfQS7QI-S;M;{Z zY77*M5!|fA1W)`+Ph2m>Y0MLXf7(Z@Yjxj_ab2FL1TK$Dz7B~*UKQW0nZlNN$?BL- zQ_-1zD+1A=%1^Cy%j_|#Wn!E(v=8x%&yvmk$IDth>M&uhjM>wuXtLNHADqw*i9qm& z+snQAH-d96Q6R9azpDOrv02KV;n`xE zSDrqIxSGw@S-ODf2U#2_KY}Q}@eX`}Jd$D>Yu(tCLN1=uV{B9*g z<55*sYN!420?J7<-4OC;A;RV8!~dlAROeqsbI&#g^3FXEDgep%i&(_;&ng%{O!J-~ zQdu7SNoKVG#BxXR9lQC32IOla%O~}hDAB`|GB$&KyC0#9DA%dM&&ZObAaGdmdWY`tkYtYS42dLYZ^DFKQWU( zKQb`E)y`kHIvl@h3$942-t7E?vZnj@XAGyzWqW!AQ==(OY;us+bvOPf4Oq&R^1RXV zaWoP7hIdn$8coa%3{HwQc-?(g3=o9wi|$5Y+r&JJf^V@FTul0K&N~E*Xb`60*GpS; zlMt!6$F-PBVOHTh%B<~1t&CJefE4k+wSZs)DQy6F2E-w&7G{~o2Pn+>gra-?7I^?l z#*{bKKR&%h;8);f87h!;xYK{Qqriug0)Njv;XB)7{8Nart;c|ArR!X!+1hX5@E(bZ>X|ndk9Tzf{ZlBa;IIX-&JaIqD$?qZ`!Pd|s%J)g2lfD} zldbis0=7f~(81{k07;)^F7i5Sy+gHqfX(e~>Nm*)k45+Mz#G9^W76QogY>|ib=klx z$#tIt30gU&j9Z!dg?g^%;gGBHIjQ208#Zg`nGEGy&EzzccB{?U)#}<4IFfbJx{fO( z;a}Q}an8@;78S<|s+@8kb5Gfop+8(Fo&(I{M<_zcGbrcnDDoDQ?EY=+?ZvS1jrV0O z`2A!3rIU#M8KJpU(q|+_?1naXG!U*xhHa1}r4NS$cO(e+g!2$f=s*Ki@e2|w45sZ9 z&V>4kc`wV>Gl#trJ&yY^3*yq6+8XVD+i6ipb-g_I`3Cmg9uy1t#8=|*C-5tXCbFB9 zn?h6gBHS{Yr_uRco!nK1$c7r@1B85fMpi5Uw$HJM^+Q2rJ4v=R=A!|9RmAJR`;Rtz zFK4ZAtEYpo0k9slm)(9>i%hYrACKEu7D>csv(Jb2ij)hMVz*ou1p24H935P!=8T`(!1uBJh?fRv_ z@Ys{P$yNxOx?5onGoP4_SBxh63pkOMKw$L(BEW6x%$yQgpE$}iI>6Mw_53383#@we zb%iU{669?La=>EpQ$Peq4v(K>h0At7K|tAo$qzCk7zofWBmj#=>qQm3)+HcPKuTCR5jK-w>yn|Y;-nRA$6&UuGd*VP z#&t8a|JV!dHx@-EgR2B~?fz4R%x~q>YRraJ7U7HvlqlEv6mPqPSPzXM0Z@h&-H6#l z-(U**S+euCUs_FJ^Xfbu^?t*aND=2bcGQp$W5*~dJ+8`$TW7qcB|LAh%jr+!KQPZ# zOzhw8vF{6SODIyJc+^9lGyxVZ=U#lXx6vxu!d~p#EFqPnduuo?aCt$`zu$?!TQjE) zZyIuN4BMf{>-0h)TPJ6J&*XXo%FU(Boo5<%$Rtjd*-_9me=@oL45PJnLWr5-qSUNW zKKP=_*1^YSep*jEs0y%SzEhF#^aYp_e@kS4aRyy zB>rZdHLw!NR-f7Ko{Ag&*t9U=l9gCcIfn{Y?tNN|posd2AG7~RLE8q1xeHzJ_|k2Y zD;f2hXF2@s>7Y=fE%eU*drdW-tpuMh z1I-(@b^QIvNcgQK-hGQkJbpd5R!!S5;AK&yExc3(G>Jj*Cq**f6Yu&W4Gp$Z-mirI;x~vmhU;AsbS#FVgwen~ z4@D}3owd7%>QX;~(NY;SM_Gpsbn(q0JBsO_FjgohBvP@rI`p7aDS_7Ux5`KXR>ol) zGTU%o=7laFpZ2bYaLt%o}o63A+R;6C~)hY|)``QHp<=c1cP+csi%% z2Mo9i?YF2HpTO($^}(BsDdW~ZhBvi4k_hz0y+fMY$-rOPWR>cvY{`!b*!aMkr|C^s z@bt^}>(_+_I_Yk0Z>Ri2GTBF-#6^+Y58Q%yQK3r~I|bJ6J5qX9I3Wkr!fCEO-lp4%&0RF26c%^Euc0d0qgidut0 zPtNs${qezL_09mPl|bbS?^X3at;rkVn<;wx=Loj;uRSfGc`wGXpPvs}butf14c#IY zBxVUwNR6HHgLuA|xwDbiq{2G4WQ&c_w@|&yEB@PZ_{eHt0n9h{nFDb4hd0!86|}<6 z=}_X!mw`4slp9KT->tYqj?A}cK%_*Sc%4klBZXM^p{8Gt+nuyz{|5gB06 z#M(alyoV{@DlWzavIx%dEh_pj7%e;F()EiVk@I=Og%N@ySp>kw{as+Jo(LH_p_60l z%YMyKkBawY?yswWbv`BOf;D_lxbI(QEGt=8jy#8pbVtJ<_S%*_SrL+Pbij$Afe8sV zz~2V0hb@CONc8V2mRLg*bKCCOiHSNjN=h!x9b65+&cyOJS?oiJk#rHm4-h{*c4eq4 zhySn*k|5W_xU$a(;KwqN7sux16hu-c%bnO}pLCHJ zyxrZHh7d!f+Yyzb@;|L^6XR1d>=$%0zA5J4eov5Hz&!Cr+6NUlPklQlK%$F52|N_o zWMYW#7XuGTQwEI3^o@9|a{+v!fH0=A`!oC#Kj@m&`nz+rdg=s@cLgOoOWYX0M3%${ z5AIdWh6>)tl~0P_a`KH!*+;iLFi5v38Y5XF-HKWz-M$&g#JVKc&h0T=Dye+T+DIev zZmjxU%$Q&|)0-%cCHfq1D0LN~%Ze8K5R`yNZ~E z%18e;udHb7DHL~K)$dKmhgn7e$0K0%jn5jqgDbxxy&dlJihno%Aj?3gLF<52;7%~S z|4a!l!r*T<{vSszu;StYK-3m&STr5|e5uCex)qaD8LjbExOm4>{~^wOKM}bj&Vjqg zv4PqepmFavAfHV)SAZ1`=p8T(Uvr}M$Y`V6E^r9BMg-UuGl;m({bxg)AagXdMoe4-8FpB{$9X zv{ERqum@h|*8>E|V0e}6*30^eWKrNC;{YIeN^YIt_$WIQ44q6Cg({%l?UC(Js<9QR zG@=!=!9O}*=}`r6QD?(a59%k!y7VR=Cn}?;+OieK6bA`85{1WNPf-~rKB z6b9{*jiN$COf!n-`}S z4q(rKVYQSVAd(QTLm84l5C28TIc0JvZ}%i1qi0~9PRLBA-zt&)h)pG)hCxrC=0 z%@h@*+BU&dqzxQrANqU3Oe-WQ!Eb!xSJC-qBN9W$Imx*^lZo*V>`;3V7tQ8oacV$4^T`A!HdyEckVDM00r=l^hfTjLi=Y+ z*g+W$aMWR=yzd8i7oU3r#;?=$$hIqWfIO7BS9?tYIaF_gEIVH=`odRkl@M=VL>5h5 z%Y3zqCgt)mSq;>kd~1FK&eT98oj)sLU5oa6*6KsCnv**e9eWWVrP#Wy{(4ur96a}h zTsUSiLlR*&6tXx>TW*}CyC^SFlV3GuuCz||=eNRjg{7kKqnMG~k-c-(6w{-^?1Ikq zL%Kc4)Vkzl`OVRKx&P&2c?>;ddRe_>(BqlS7n5&<6P%D``1x?szW z?+u{Vk065~O+d`KNMaI3J@w5n&FY;U6tG(~1H)hKm<}r&Fw(~Fi+EM4|A_;Kx2W|5 zD92K1=^pF&TX9UnAN0K1TtASAtvE}4Fif_y)<$2r z(SA21S_=A4sog)at!<)pUSa5#LBk8P^%yJ*0jC?Tx7yD50*)sjR|+3pBMjyt;2w4iU}2f zb4`7y*RBLBE%3jG^#Gjx79%XRY=AKWK>B)pDbPaoLN8j&(1ZC2!PK>I!$f-v#{y7p zz1zbb@)eI#wV*DhfBTAx{DJS?pIOA};5RZOWxPp<6nMSj z>teh9*B%dE+x1`q-naS?6Zk@dJ9VigdL+?Zr@vGm#JqxlbXJk*IO)Q z9;FuX89YUe3xT%MYkMSay*0H>d8W8wX!?}G{WROCdp%DmCZ;+LxZ4~mx_L6kZQ$U_ z;Q4tQiRG;Q*H`5(vFMW67&%O~94GE(KeB1_oJ(VlbqAdA$Z^)div*%&-4WrgP18B9 zGRpO-H;+Z`a?RQy4VlsJze1ITyHFI5)9Hv?8HmQuKY1UH4bq%FC{*`vWpLpCNl2kV zq`$D@`J92V*LkwhxljOM=H{TW8}qoPWoo#)ROrBXT1R7)x`9D2v8WYa4lOAAM5iR16ZyO7Jd~*Aqv>RX3(mte_DkbQ z_o4$@m=nJ*7#w^bZlDE6h$h}Anp^Y%nq0gRqkT&In?turt~q}nFCWI9zc$7AS`I!h z$Q2nEGnJlny?hqI^xEK;b-hw7zcicR+lU+HN!>%$25iHnrWN-OJ^FHBE{ARpb4^}j z6f_ujXTBuexkX+wQwj{GYKk}rE7A5{g@}-<)y#m7554Hnw4{v?rit4zE zb#ZiW{T?Ozg67od*k$n4l=#{#fpl7gGBoz41)h#~N|vcXt#t-5OWs%)92Of|65|v{ zaBgDI>^CT!d#`S~w0vI|LVg%#AsBIYQJ;AZ$nXijoBFJNrFOJc3pr1fGLlJ}jpmEQntaIUy_U&SUqjW|LrSMk>A%Sp)8Kt_R`=k9%x>id_I?-+7Y3kz0%#GD5eFjFf5 z#aG^6P+Nq?vScKe$Naa)LHeZ>Pd-m0XF62vz(y#~`cL_r-W_*zd@R`(X#>YS(f$o(6- zhmi+MeM$5wm>81%9-Qs;zN9rwlc}LC>e(+nowXqS9dt8Q`ww}2r^XV=MsH_jUqeOK znp5Z1E_AY;^ZckYigSxdm}TEAf>*@Q>;d51{*7#gvh+y9*w$I&S-CMY>{dZoj#a`CdZ1se^tUuN`y`uE%rbswEs~oypBu zF%NSj3WUFt?u2$(8J8P(%8T~MI9O@QD^ ze-Txc^cU$8bW|)7+&^w%(vCXYXl=u&4=e2&liZ3w-dIvjTnKX$1+#W_mjN_deV9Iw z)H4KTTtOc9y7VYJJTj)?q6rH!n+$fhp%7y2bI1OK-cfnp#~4EnZ_}Y@7h0Zxv-rP} za~2z9ffn`y@A`S~uuB`T{~9Q&PSHqgV?cG0RG2+=BOtH)db{<+=*j@`O5@<)Jf8JJ zD&`(gZq4Bv_x1E$6lk5Xy~MxUM_{-vLmSZ^S8q*Z-@;$ZTa$DLx1*YFSbqBuqD;Qh zmpr{d_Mlv7R|BuM*ud>G=AA@Z{}mE1a$3(Z!5-F@BtNT&21qm_~gcV5<)E`*NWUKvwf=3mkHQfNUaycKG=mex?en_DMjRMUg zz-=c5;2c-Fk{xD5oosAX4Lc~eydMbY7!tEmGewG@0^L7NlmJ_zO%RTBWS0D4Z2fvyT6Eeo0zMN?#GeRiZ@qicragJ*jcux=4q z@0^veQYyT0gb_zbU7G*#ll0X?;a5k&8MZuln3}5(BdU5ydOlqOEhd^qrw@2(e9ppe zD(LA*8g_6CWY)cQ*7{!4!X;Z{gmWKT1TMUXY9YkB5oAv`MShtsG#^M5gyl7I3q{+ohBuBM@x)6wrccv?4XX<^99 z=b!VP11=X^n~(h$FAu>I2YHkS;}V-prV{J}UQ3V5BUxgp6{9b5yXc`{q5XgSWT2-A~Z8-Vn$$wuRg z)>9{{6S+}gMpkk7zCFjSv{QI{tRNWSZPmvvm($HV?gXCaHHVQm+OG>}pKGs9-O zip^~e$MX(H%u#*)^2Xvst{KULEV}>~!^iX8|A(?ae~0>i|NrrjrV>+R%Q8t4vL!o% zRFXm=WG7UX!PtheCE2%RA6v5TA^X0Jo$Sjn7>s?G!C(xZc|4ET`#8S8e*c3x?#JA3 z_w#n1*Yk3rDt|bG8Cd37@(zWvk^;OF7fJ*F6!n@n68lF2b85McgpkEYfx~nH%*!FX zW&wpOk)>Y_--15!m9a*#I~S|T^Tn&nDZRQ`6yx=&xFUodBb1MtviiAG&aoIi@zAk( zv#kH^#^SRkAj3z+c$k~JBB~c*cBVl~3lHSASx)=E;<~!*>3|9+t_gQgDP!~aEk^o3 zAG2u849>f>mj1A-O!B)+B^MbwxuM$XtG0u~rRA zcPjDPP@fihFfsjzWZilDKTI{4V3?^h|J|7^XsgG@+%Y5$E&egRySViR|MntAMuFgY z>tUSq_P5UFOVwJxHm_3j@5qWfK*tQhi2W86~&hJ z{hNtx3qM9+>v=@K6}~@|rxb%XN{@~hNlFIRlY(VjT8E{*KX3^nH3M7T9ot(a;6w=0 zXfdqw?YjLnv*Kz4k057=I17VQ(1ZUcBv0IFz*UJBRObj7j;#3;>K=8f)gT^G6!mW& zQFXnL){JWXU`y}e==RJ9z^%%mtoR#WE#~l6Ja*H-OcqQTgOn#ORu4`{Jw&#B8lNy} zkb9U08Ln^mBbz56wKh$($N1c~>LL7qaHl9&h)XbVGZ50FV~-W`yoJwyh2V;2J{wl+ z+5O^V={EDCrQSG&8BWE@O``PNp6rs1olbgYE{6#HCCC~q!_%wYYqC_dkYn68M9U1u zMjJ&XGPHr)YnaHRIaBW#0@4zx^8-4b=synf5Vg zupm+;UuRUJC;Tj*%4;8z$ogCWjD@weM{2L0rYCsa=;w>lfJgZ7PGhLgx`5lfTfN!z z_y41o8yHez)*jTT2T-aYhA-Twhy+N#yZ|~1)H(q{m2%33XW^cxGwU~pk_64I|D5sA z&Qw>L>z=ppaS~1!_;$Y1L ztZUu}{lyzurZl^$^E*^R(&n>SK}czVhloI{!A^A~U{1J)t5S!2(|f_`g|iEX>aBW) z+}62u82^GS_jj$*vO@?;HCB5(l;^2EV4?i;m{ z(gx%RJ_}Jz1WAnpef1^%K)|YiA6CSE(mUr;-$zfY^$oe~&f$nB$B4xYHV@GLx3B_A zsdnbf6v8w8fX#@?L)62m_|+NqRX$+#a7a?Oo10cDIn_YN={V3t+A1ovjv6(K;6>e{ z-1_rO#{MPrD>8jKR6=?nQmOTn?)L?$3Yj}UO*E$B5`k9R3Ml&ghkAZ9cp^C+EFZi? z$`mAh2uu_IX5P9(Z!M6O%k@d*?AI`#X8u)I>TvY!T0qvvw?fP{I#Yt$4CcUHjbM?A@d*k6ojdRI=&&@v*xjr4GkYQ}PR$Ck#vxf76=VsCB>b z*y%E%C*v^qfyJY9<%u{CS~<0H;3hcikhh3ba;gYAf4XB!)LSFS^ah!nASAxRhglq_ z_#h5!^73+%*&VbH>Jno+q%7aKv)esmMVC%BKt(qtTgLD9^W%#q;BNkCTO+tJi^1C-C6T=-%446~8i!8;i#y3#7|F8f-CWA~em!`M>8yWTte{EwtY z7w^-V1;VGA@Sc(73|~Qj$NB($hF@;D=(D@^4K!-0S!vXa)AjcLGZQ%>NCh*xL?4qm zi9G=-*%(?*wJ7t-TT#e-HX+BVcw+%?FLzrLZ+KL@_~^?vkDTFR;`w3%H1>jD2<_RA z2#77;cc{hvkU{?5zXi)zDs@o%D$TmWauN{Rz4_PEI@LDRmsSlINJ+2~e?ZsXBPl$a zn>TznJ4c$#8nG8f*!b>@ACNsF$8&rp(fCQWD4+_VY5$SO{ zg-N0sx+4kAq1DdSw~2&r{BTV^Agr9<)G$IKXzEPed0Dx3v~Sz-CXE` z2s}0$9jz1H{PcOTB7-&AoI}sEx-Uel^OC#vG)okq@iws3c%Oc5*-PnlSG>1FP3gF} z*_~$W^1*`Ev{LQh>xdGAu=ha<73jsDK%myzpn~FDN61;`gOxfuW(%5?6Ld zHbj9QJN>S{>zO2p_hLYO3P4ia>I-lbAQ=*lLBP~I=w=s1GpKUfJFs0#bAFT-F1}l zVmT+u60hCvr|C2a*oW0nOTiy!tvr1pX~aH&>I~NZX*&S5RF$1h3fR4exl##C!u*wrw4`$T zux$4lOX)NJmrJAU6jOegv;{QM<3DN@CE5@Mxfl3FQwt-gPHCw9N3JED1nQ%NN(SnL zif&N)!yE@gOP?s3oKYCR`I3Qc_Dz$%Lw!qLaR$1-(fa8+v#L4Zdvg`US>O4KAe427Zq~o@NqJW)2nRbF|?y-tq1A8X_(-0m3=@{ zjKH81@oZbanwWd7K!4I;T(ipTYj%Z2pu?nb-bX6(k@cflC&MRe>U(a@8JEYvqs;%? zpH}}LWlUiA)9O1w-ZGp+0Ntq~(Kk&AH+%lax*qwjHBSlm)rM}Bix$D@m%_be!SAzL zA3)hCW zI}#e`k6cknvr6m7)+CDJ;KZWDi}TcGGJcy9mZLb#GhAS+8*%-lW}>%=?};cyl#;RU z41%4c`|XhvTZq65wVbd+53YTB|8-kL2278zmt?bM{9U0BrGI}}$A9`((i6bBgEwot z?agf3G1B+i-a=((rD+1)WZiyJfzp*tHr74Eqnhu*!=L02Keqh>f&6*fJb=6%yKI%=oTm`;});NLk4Y z(Fo&|5w@6fO}7n?KS-%>Bgq(=`bj#t{r@kN?(M~&mSTyr>Z?gSI)kd)Rrz+#j(8{g zI3Yglq(#N&tMb^=UOg|Dl7i!LN&7(h>lGQQiTRq8eFGV#{G3GBN8&>taO`V+O~ww6 zv|(=Ak9n;=6dzK?)X`Gm`=MX_6t3-p4gi)87Dcf@>4KlbZtOLaZY65(CJ@gaZC^Kh zVa?RVZgD@ay1>z8LN5{irsv*bWB+U>Sth}3El?ZBwAr=)^hv$lx?X+Ep@4^l4zzWW z#LL;6-^<~Y(I%>=2wPRsud2C6)EKw#yH_$tQ@#*2@1kCg3=*)QQ+h;$NmdM}*uRE`VEJ zIY^1KZpjzBtV1~>8zmArt5(y>D~9TO#XkYMtGX29%I4BLu1p1~7FY@T*6~gLHgUJJ z;%afhl=}p`)PCKX{)K8>_T4x4eehO#23O4GwSD0r6rSc-^X$Rg*N#rM@!PqaK-_9A zaPi_4gxmV{Wjw8}j5bP$@khf~_(fLT{qAN?{n}8svTRPh2S>cxU9D=`tashHk7y99 zEZwpcTBW=XCL!_oP*9r6>WvemGv%eXnA=NH8)LGMgp%;27dO+4D)dtqK&8HY;+&|H0f3D%Q3iowrV)UZz=qvq~Cu-xH( z^-53d|H91UF#g3(XH-W%S}r@N?iOs3_4zR2 zMfnl-RkO+TZQuWW93gk-14C10yk9DT6V1bZIg6#B+dp`}oIdd8|KT#WxB{^^_tyOY zDOMPHjYCqZD3QkLQTp4GrgM%R&_LaG!Go%Iu?}n{?*QR8o^lyUylIGuiPqwo! zO~l{54VtRX$&T)>Q|ca~%r|~!ce_Z6DT|b$$F1UC&I`O~{r9b+s?~V!UR7smMBx*8 zU)8%Re0Jtkzw86+K08#AEJyq!J zUhczR)=mq{XO}EjQs1gg?ms}l;d_g(OQLVf0H1@lOgWzU+31RNn?W4k6sl(Q?ryFG zQGmjL7+09!E=q^C>%bvZc+N@?!V;c2oF_K-{ zlM7<(60$2A=x8w`hx_fWDxK9RVet(YC4Q@T9i?T}0&{qW8HpnieMq|KStVYu`n6+R z1*Oy~YgD`ov1Tq@n7Z%j2CtC?ylc$ZB=|!gR>6$F+tJ!U8La^z^l%(YE1ekAju@lW zE8X>Gz;T908-)^SUrT#xZ8|@{zXx72&ScHmmA~n58mNw)u=FrqrEh^6=}EbPT@oE= zwh!K{5MPTbRn&paJ4~#09Tc)#&ZlI;+81Qs;sR9+mzwr|y>X}>vKs86GXEL|`2|?e zV9z)H=xw_ZIb zHM$sc;-;6|bXHa+v%d2g<9={{=@;E8d%sGnqDtuOL{&V%nBGNoF{qD(FLvA_Fx$y> zo09IC(wo+lcXB#o-5JcI$k)TNSp#HREG=p%*Lp46e`n zSlJsc4bhw%hmqeQhkxDxv)@nQpP9OF=Ae`wEEp$yr11p{XI3N*YrnA$J33L27$1gt z4c|LuBV{KY1(H=kcZ`%Pv~44X)XM*}3N2EYF$xhcc9PwIZX^0fR<@HG8WK0v#!BpI zyY_hZ4b{(5enf5kbDzKciOmeFro1%12af4>ruoGQo|}36o*nh-C>;D^@aA7rmf5LN@-m>;v^z zfG%>sw~(=oGdWJdTWqDe1z z6vc7RFF|kNjI5n9#`f97JU4fbsTvPPK`V}=t}I zRN``>KbZ9mK9KowEvfib9n|tD|CzjI{n8a@w$Kf=w0tlBJp|CkwPTGYsFqpp4HT2w zboSyBp}HTSpa_ggJ;2#jJA6ntoUTZK+lKzgu$of7XbGoi!tV~~k_^cNh}Yf{FamA5C+*Y~^Sz%lQ5JgM@8 z93Q!JD#LUEHV2zR=xdWYy@AX)M_ik~@YxH0C_eu|&XIoBVPed*>ql>$xa4w6Y0~v@ zhz$IVC!1r_JFi`8@#s+dgd;(v?(CCWi|?|q`4vZmwk6zQS7+67{DJhIa?sjQWZ{qw z)U(Wtq@F?w-`0*FKA&afmWSOn!H@vIk;aXe5c-GN4ZX9+^U8pzr?kzNUU+l(@@V7e z4{S5BuxHIWk^*!4-v-s%HfQ~VU&4>qq{mU)Xr0e=n}Zk&VdwOv;Vs39L-(h^jAOCa z5M`E5pPzWJ&$9O(Gnm_;WqqHbb1d9ds`YE4-KD$fa(Xeha<(a=LS7oaWV^e~M1<{^ zFwKU$ukEiR3CauG63E9yuIoj0rnV z{;Z(z%qy5?w`?t*TXR>|UZv5(?`Ts(>0p~Yz5G)@Y&oMDABO!5mpJeWWLhS_Y~&BM ziN4Y;_c7{;elgc&B0qc}*yKEZ__V6O;9KSKV-{M~r@D=#_ zQFA>ez@C3H3%}-dx#IjK%gNb~UAO{#U*^vsJ)1Q0J}jeol^MH~{;e@{DE!6W!{P-R z^d-V3MtePDYa53K%G7jP^@1a=P2;Zszo&6E+fKqlVTvZhcb=rCn}H2VPY)AkdfsBA zn88Xb=fv_a_Sf|X7vd#)-dq~n=nbp{YbV#?Pb(BHQT$ORpbk=Vh1prl<&9Ki!r@He zknlM6`BW(;HV@AQD@&G#gZqO+6?AVLw0?@V*+S8+6J%_iU(Y>smQM+cC>pMPCC7b7 z8ar{dw>I`-ae4~T!7HtpW%iaeVKJYc9P@$;RC%DTv|Zg^Yj&%m$YQZ5Xl*h1h<5Ao z5HGOssw@eZ}w(b}b4u0(!3-Tk!Jt4qY7bKl!=`yF@RHa&=J9|fz z*`)z#k~OE+h+NdNFt>@tQ}l&Xan59hw0~a*I8SY%c)n6gbVlX?_OeU%8&qyeViGjP zdFEj;s5HVQtlXJIu8W;yAuPI0wz6$DNxq|~@$BvAyszp`A0X??p~Uh4r}A{4`CjN( ztTEx}i>X;zy1oR?E1k~tj?OAbK5j1q}H0)->%JygN4t>{Hl2l!ugV?tkxko0N?X}K!K0dPlXl2-X zkeI&`bsWz=v|_t(58{~QGL6&qnU6wkT34y3f6@1WO4S}_5JZX3$~M5KhNXZD>btTg zs>n3UipEaaNnDA`g1))hPo*!Tk<-Di25e|fh1=5*{mKo3c$qR`sPdra z>$kQH7id zX|nvP-%!!5b0seFD`)y*vG(EQsq{YO>@4Lt;HuT$8&o&*#6++}F;f)J$A0hkbFCxo z=m0p7j4U2R3d?>$(O^S zTItTC(`^90&~3+1`i*RZX7BPf*d;~Oqaf#o;kXW?;a*2m#^O}lvSzOVli}ckye7J) zcCKp)Vhh_RxsLEpE~Ox!=iGrgSqV62&&>1EsnntvfjoiQ-mUIS5WDxsmVP=f_m_9R7DET*!=Or^KhbQ}Q-x z(=HQ>so#-*-Bo(>DjpVueKo3D+f1UrMfmDB5Qn(Tf(|Misi@@h@~!;&Z$aCXb0|-N ziK2=jXFk<~^OC&+VK1t6I}zwAr>Z&zr5*y=xS?0tODPNlnEZ+Jz+1Fi;cxaj%Yu{E zN$RGh0NTQwX-+7P zRYcA&0i~-9&hC%^2|q~KOW#vGCOyElt8!2}UbEH2R^P385Q?!;RWB*|C#RKZ8P}^$ z$wVSR;kMW5EAlnSgv+`H7@P;Z&$rJr`oOFm`xTB}0xdr{v+lD@R1WeQw|_sI%J1Fb$Q z{}vq8jdpexDYAMBKI$&1yT2TY+V{;x>M`uRIim9kb9~+c-<~A%{cCc3D$vNHCk-Z6 zw8_q+F5jq9|Kqtxnw2P_oy{4V{{*`toj*Or2dDo>+^!Mi2BCO076L-bhU*%I*i^gC z%2->Ka9dI9YQ|-M{H`w<4efK+9NLWy~-C(TU0V zyV0*qW0!tj(%ZP29ogJBP z_Mce$aQ$KvBW774(QUayRRV+gXBY2Ldvted$|Q^X3d6(b(!N-;0-+(2y3}b%=$cHP z5+M-IZ9ayCf-GCqd|W2XGz&~;GE|pOv#;GzEP>~NHSfxwuiL7O?YN1(c#{_&?AAKV zW_Q2Q`{M_f&SSk`g|9e?SX*bm?fp645wjZpw7touzFS19f#CbbPsiYA6-Snr!J@i; z8!ap;556^D5w`JSyd5sna1xjh%c7 z2a9f_EapD6$)ceunK$8^LzY}=1Cwi>p z>`-%`qHIkRf6r|Q;?~F(dSa2r0IwkDQ0Ao8WpbQ7>wPuZspi5gKW%{j2)s-k^zm1{ z+N|@XoI9o`w0l>I0(~6?zZjtiOv zhOFMkb6T^Wz!e;^yI)C+Vf~qXD04kubcp!hf9Ct_V{DKmwyQzGqYJ@yhpgTa{GH^h z6q0*-u>js7P+X+CZH%yC{r zKpOP$bTI2(1o0Xp_x0z4)A-0|3#f&st3IpoHODkwySIAU-T1)~!ZDh>!Hl-S z(HkCqc@UK2Kfx-6vQ2K>nzSQv;+vQ!r`9s%ic;-;1!Qh!nrD(S@x8u_x^A-#=4bxQ zzPO_GVmS_cglAX6F^Ogz34m}H0VE}i%Sm_5MM;0gNxvT%pLc#nxe)AfH1m~Iv?Q5< zBpQ{*s64kTMsG{-Y+4)!8ueD%!o3+gDq42Gw|}nob+#x@{$w*uzkP9{Vt0Acd(!jf z2iy#sklQO6P1)RKIYV4{uQc_1#;4k~USOcC4d1Ix0?QubdoI72uDWQ17_P38>z$_d zyrd|j6oNg^%lUk{Lj=6?&UA>h+rTl@s=TeCw}yD`7{wu8C+jeVT^FVN9TEuwWi2NG z#(}46K&=fSH@$Qmx-9U}g~UxNi$-D>AFx`}yhYavAJFMmP)#%zH+JnP<6ghH z1A6&JdO|~TI8I7@LYf19sZbx_&F8qI045(^2jAV6$9OswT`fiF<3|)V83t}iTh)yZ z#msOsASznh7sk3(5(tRD?Bn5qlVs3*qKT64Sp4Y{-N^k&3t+*e>7jt0ruzo1>fho7 zdO6h_k<5Oxr3(hU^14dlG!JJ$Sotvi=1?{LtB6ANUgx(5h`aiWz)ydHjuICA(lxww zbkRj(ltF}Cw%733)IaUrP6YpPfMQ531X=$!g9gF?)wBsXWvjPD$IOkw>yaPbKYU@g1Iu zlN{QTn?qQI&6jzl_Cs%X?z0x#psvj()}o4nPc24*by-J{cep&AjOi4bwg0q?s=q}k zZ(9*?H+R&37TQ*tBpt~srI&HbVy4v?eLuL#9K|uSOT}<$RjZVqE>6RGCHWCyOfCFQ zU)1{8hEqqJhNY_m3ET(QMSq&NaTI3|7>Td@BnGDfPH$31Pf+@39MCS5)Pmut2?{27 z_I@Tu0^w=|=LNh^jtuwpsleu|wENvbm=9%*`m5=Wz&CIqo$34qs7ky|2xQvA8~+S~ zl(1bbu%h4Zn82PaewHX**B_#R$lco5UwU*m*hNpNqFn3#p}%#ogQ*{U2vOiPMKDDj zu>)GBlkI5Ne2Rx?dG6BN^V6)ZW=FzPr!&@MmRZ;o9ECHb2`a|*{{QGzh2l|OfQ@40Z z8JRgyQUTcK0ebO^EPb7Um|Wv2X8yf>ll-eCprpGUzTtYNU_u!8>BV93U zscCW6ut$Q2B}eSx7^zdgDBru$jGewEP;`8)G~EjEJXk=3n|n>!SluugfbI-D0nG%^ z7Ej2SrNL;)tDMih^X5%s=CK^K$8zRO`_4X{nvAC22m8fv!0qklBE#mn0H@opNs9=7u%4xG-!=$PK~Hmfz1q zj!~-fQGNP7E~vc8y7%5OXSe>{6c=Zn;ql9CKQSYRM9mqqNk!W((Jw~@7)DOo?VQva zj7(Xhg1f!eQr7I42(7C2YfoM1!3pf5%hgU1XX|eU)H$UG0{bTT|5Y(O7*T`E+uX># z1{VIvcK+5>S#<08;PfymHgccj8RGrn9DY>$tckxg4<4jqRx}&X zt9xnZ#62D>)<-Q~GNV&(-$I>RPrW-a`PRoZV-N|BaN9e>7k)%#H$5!mmG`|wNkMGf zrxAYtbzepPEf8y@9K^xg;BDOla6ik%RY<%a(SLZtqQD?If*hM|05w_S%0Eh)^$s)S z2{rg*+IDt=mV$Dg>p={b?^i%Z#)z$)U2tf}%LJc>V!D)2VCoo4@8HV_3iycA&&%JL z*X>u|<)9mRJD#d3%!mvF8K*6d8s9+Stc5B^ujbdth=Z89yXB{E;WWVS=w!9Keb6v&*GOU;NThR@kr#h(DBDjm}noRgoGFAS}!##^SV9+^S#b&gOSx|-3dFj7+lf*Vt9 zEH`}|xK`kB;46@@ljTYo%nthrvRlVxrgm+IpF7A!t1UxN&>M{d9TY}RC!9xIZU4>r z@yKtuoqXXsx$pGIHwMg&>Z8xkU62vQ@ti2>i4nd*)IXIHCgb#%MS;hxZ+q3vBp!FO z*rfu}htDGQ!0TZ?4S`dYrzZ*9WrV1Gwbv_=M9_H%`c zlp^+Ek>oa17;okXwY4p3#srD)SE(U@u5^F!`~LVQ>B*V5lktli+MK7OQ5ORRYhxn@ zrZD_Cc2x00*JZMW=>~|n%h~tk{UUszZtydGsZ600EZ*}dG@2xf7IrFb&O1j6?}BhWmj*po#c!^74W4JLw}I9v06dzQQn@f|A;M9LETGk_^+6ad>@A+ zg#zVS%ex@oi%{1x$yn;;=Ih32UM;jk;Si0#B67-pYk2mcAwWq{YKz4dP9 zHvfFG(cpEr#G^{)v!t{~n?qi7Hs*Fr>m6)Bt=b|LPNSZE@8a*Ew{RzEZBpS;2%;EJ z-D;fAX&b(+dlXEHI&X2Dr{2j29bQ;%$*lKyxH3WhIl7E<5IacI(BjgKAcjgMK{{v~ z_;TlzC@(27SoW``&%K1h;=g+ZBBB?oJclEyGXYX{N^!GD*^(s&JOxTXj<+-^djLc!9XM7}6;5(Tdzt()V~A3HZ+i#afjefr~YK*h1uYpQjq2D=>H$NMdFn7}rx4j!7HLGlT;+-w|V3!{m zSms(Ll7~MH3w#~ja#o<5$Re298`N@MWdetQO>??uV0Xn0})!d0g z&xv`KW=5&5EYu>s0&8!+jS$O+su93z5^br*b&B6hi#zyN$-m9V+3bmVMdHP_n3Zl!a%d~;Qa$eNnIn@(QO5K&1iY?w5)tGE3~8FH;(z7-p*cc|Wf zFYU_lHNe*!kCS41gYj_xLPT@&7DDd*rcLN2uxpqu^(W`BmHYbNfVT;QckyCZE@-cf zepWlAe=Kb*+}orgI80SHk3P>xI5F?@8~Rx>_I(=pWd5F+;*-~tLq3+FMe=!`LZXwo zClAbRm*NYMH*}r==Oa~ZSKw>GA5uWWN+8pU7Yh1y?8G;9#L6T8)a5I+L@Ig(j{Vtp z+>?DR=f#q|y{hl=rrV7OlX$Ib@gf(j)pv{r*i&*Aeeu{|LXfhJm28D0f&KHF>FDwY zG$*LpZdiG5&4Y{I8S(rlg)Im1)g{%n+_UdZYvOd5;{5gD)Nf#zukikpZpNCXxu*~U z8u8sgv9{nFSbU08BNp5fgh*DBxlUeb*0<>}E?OKn$8Z(Wv;m36Sp zSu3E3(aEI9So2&ULv2^P;LR-;NUri=7V%SFn8zV)LnCyCCI2;5hlT!|zn>~=f7&US zXdOo2Kj$gFKw+_f@54a_C`{pyZ?WCl`855D)5aCI_2rMOA`8kdq7Irl0b2^#`#P;d z8OqJOM&Lw^^&tW7=N#?q=!qIgrmCDfUfq@ zn{PgjF$W6PN{@k15vd3`5Uf7;z%OJs@t^z%T}amJ?%WI;x?1O%s2BEwIjQj54i5s? zg7mL!=0F=bGJZR(jVSKuzS@?rvoDo`+&ea2qC9D%Ui{|cPb^Y;N73%JTeG!;JnwOw zud;+bi-T8+z}mQ>UlN~tf1A5O!S+IFQediXm1Ujwhcxj8BDpoTE*}e+0|WYk7TqQ{FSEFZc{6J+0qH z`(+RmylOnQjnHW~v9ya44GQPYJn^5m#;do+RttRhB<&Cq%qH@{wkMXfX(ol+8T~dJ zr(W^H-E=0##u6^-oOO4;uc&-29OEiW3;V&z}XIdax#$H!?=r)VXC`Kba;>@~%W>vg`a@=Q0H$HplJi_%U^T){5hcilq(tlVjy8HfjJjY>h+)BW_@RXOQY zyJmihEL#Qp*bFtBwx1QtQMnCP;_E&b2mP@wq2JGVwllq=(J&5m=(AgGU{vD__dDWo z{%QD9z{(b_RzK|YE~eueB%}ai;Mdt{{>#zmRBrCiLX_vSG5pJ?jrKYgAUek_Zl^wH zB=_Y0NT5#Rf3WMW+mv&6&%mRqPkiYdAy{YBm&blvSSqUTP08Sjfbwh5XoQr=H^sdE zefk7CXSvzlfKM4^aOr>)RgWr{(^o7;>@Pg5?Bx>&Gs`Ky&gHazcZ`UJf$MnN@(5Q0 z@R1>BnBZ3367*p?L$IDe`r}xysHW{7CiNxN3_J44miyOUje^)XoIIxMS;`4h=JfcG z4!a68WV&@lTI;h(h4hI(nODZfg&Bdn>(Jo*=~r}4FH4s}UdDD{cyzmsvp}jEPP*TCVNnJDAyd^1nL%SHCtqNL=;i zF10|96iSM8#{^V5RG{wwQ;k#qtbSlzfiGE})ZTRVahWMRy(zU8(G(qI|G|}9)cobZ z@~<)fjJoyd&mxp@Y8)?%FE_ROmDk*ahdCgY&EVj;CWiJI;*AA|k;KDvKvA>^^mT!# zrBZ9oBk(n`#Aw1LgJ1Gd(+G)Cw=&wUmE&UL&4#JKPGXoaJxOY8fth36^gPlXvb5Yvs6yr!x^->SEW$)leFId7qbH`X0QS3fb~kidmq(VVWA%EB zFCkxU&naYjff7V?vIcC#gWAL&9sOj`L-pA_pWtJcsEq&f92$H0*8BNMX^Z7um0&Wn z-@P6A6V3NB3=ZOToXQvK4NnU(aOU5&e4rxRbqIHLcrrdy%FhD?vZe zL6^afv*-umDfo$#v73I$gc-WFW|#x4__C3kNPldeH=eMYI9@ZH@HjA zu***2?Va>s@~L%+Drb*WkDSy{#wgUZsmy8@v6B6&X! zGuqzWvoGd#=h~`eZD%q{uTAhJ`vd+E+U8cRwE`y`(Z`skE+M>giCJ(-`cyTp3Kx8- zWmQYV^jHpPf`=qFT-5W7c)KfIUQG@C*b_+itY~^_`7^6nu5q~faVO>qLdJIgrpN{U z8%jZ83l1v};;+LD3+F=J7bGDLT9}o+jJ2GWd9}5tHlVndt8ac=lDhk?9`whT#WqhU zyoCGsFg3n=&+ns}2+YD^o>DT+q{m>u-?f8y z*{N=o-ee`nOAh3J(g=<~|)aD8v^gYjV10Cr+s(Z|v_0Xv77%C+37fj{)+=*HZlvgE*G zjt@=eDL*rvT<$|AUk?F17Nb_CEz-t0bxq6EPj2;MFFWBnz*8|7F7E=GwM4|G=36G) zDfPeGx*JZCm&Qpx5N#>vd;4Zj<*&;8d{#@IY79=sx9GIP8EP}HZ} z+f2P%=Msq)UavWky{Y~|2Y!g`LXLE-^iqDAkMmPT>nlZOlkWvKC0N%rCtr3WX;LBz zqxyOLDVwh98FLvY8T9X#<-!Te8E3NYYad7lXuo}IBZ0p^BMAofN5Lbiex9ad-!w}> zOMiXxT_Wk^e^27?c4#hAi9NY*UzsS<9I)BrjiH&w+IKiRxWYEw#jxAR-r__Z@2cgB z7Al(-;Gz`%7|~0j^b%wCQ70VvVmM%MQRZL62B=S)d+e|R?=$;eg{$E3jXWj(dT?2S zc#K6N&(?>P0Jle-(SLtM+rgk zfF{%Ni=y#(NVxBm+W2q;rhBqp~a zAPv$jDj*0*h|(dUbk`^;rKNj>(%m^q7&THDJ#wRAi~%FYZ}<26JkMXhzjy5T9J_X1 z*XMn{&i8qq7$KIg0f$g+xKTRog*sV(MPWS}9C^^$tRrMo&yj`Ku%=IthToo&~sFnRa3D43w z`En=pN4vDcVu>f1-ki?}vUD#fMmTjMoKDBKZ`7W4orO-@Lv96I`WC4~e|NLDW;{@8 z5!3Yw&zoiHqj5z#8$qR>(n4$wq&&L6=vg@)GmL~O=Js*(Hzrk(%A6;gtM47`wsU@A zwjYa$8?vCNK~BC~e%hI*L~7s9VP<1qQYx69k9)jtNzM1c%T-AR#izE&$q<#SH?!I& z^vP+GXY6G4{t0CplK`(N{Ewlb_;TNam-OQue~>zom5ujLGJ}}yra*L$Jzdr_>m6&U zn00vN%+JzmQYJ-1`tthv|0~+{{3FE@yK~lsc?0}uvLKv9FwQ+W`lhqNdW_;MFTa)B z-H+0L%usnYU76CV-|xOnFHi9&6I$^9}8Qppbr6}Dofg}r)Y{aSGUxq z!S{?el-U7ywF9HXO+Dlh>wUe3EQ6^=U> zWoI%VPyPiS7RyM!`SRm(Mv|f7RjS!D(*MLI9qA=96tlR{#6wkuy6Q4(Q@(k1qStX3 z_Z$pI1#Z9ik1BRyj4AEh*{v0A%e8`qgrbiM9=7fBpJv23$g(J?%v$LWvV##m5@=2E zO_h$dz4){60Ex4J_Wl$wPhsb4ug$?4iQV1IrX3P7PN9sD10{>yLP)=tDzbPupJpd{ zU~6cDec!&+wZO=cAd`5Cf~?K;D^AG>)Zxp*2FV3cHL8d-PzaHKfBFiIk26;MmAHc1 zjn**TbB2D7)vG&M%z#3kjXQi;f-~}cu@wpk(Ax5U!>V(_2gj$BEac_0Kp5GGkI>}F zu`Qr&PdHyRbl=1RY=5%;PK%r0+{mL-g>~sJ!F;M7pHtDvznkpm^C#Y!-cGOw&tdEI=GML@ZY$FD;Ed3A-e2< zcdO3ZxE}8Q5UtvzO<8>Sne_%rbt2_e9dgN>tJo)d`)*EYrY**dF>+fK`)2y)dpx;) zRJWYQo5($pQaQMnu`NG*&5#57>*?VG8Vk_l{{FcA*1v11_hyusqI@eLM>$b;HTmYV#%kju6lep?hkW!MD+2CQ;2?hkN$WUcRm4W3G%!9pwx062L}CTmppF9 zBqH$Bqgl*w9G+C@g6y%82C<2tc>vg>AbL3KhW^kr`@R1$ z9g4Y;?TJV31P2hl*F4=I?a-#VLnyPk=oSSCn7baR7)I$!pP<(m@ICKmS~JJP&z{T} z3i|*I?K2BWUAHm($pue>V3YJ`jU}5Pzxhw37OPFZHu{t zHg{npEZ4#Lj!|b!R^PIZEPlw6j+2Cmv@I!aF05}lL*beyDb6zU=Lw9e@pxU^O(2rDb9RT>!Y0#Bi#e_4C+t% z*S4NNUFn~Hfw;ZLE2FL##MU@iKFlp*X12+5$pTM!PcF{C@bbA2(6+bFW65nJX@R_O z{H~|mN-__K<|s0zB#ZbDzgSW8dEt~bijG?5$hqX(*`VUQHFfr+T+ETGIF50}n3lnT zL8timN1W}#NiuJv@ZK@ASfMNB{kGYxH4DOBFt>Q|s^*-wzD!b5qE&Kj#-&!GezsXJ z=i_0w$8y@?pxU@T6E9dhz)ohoXdwO-l95MZLrS{Z(%kO*l5FgKG-}_ztt&;JlLiucRfXgYlhaJA@Xczu` zM-EV?zn(MPtablXWhVopGY2KmKW%(Y%)f{&_bw zir}8jcg>gYZszxaSHu_-2F00Kq)><$0_-CZPu|GnyE5Iou%f4-N_Afut>BrA!85m@MlmobY8r*eHl_o9?E6kLICtg|o6&ur@yzJq4RhWmUT zGu$3x&{`a=kh6#qQZriersOi&?M~D9X~!>8g||MxKzLgj7)jMY4WYq0-Xs|abIiMM z7FebUWMhtBtY40ylRK#)YbL%h`5c*cT}2o5pnqqxW+sIvL=i*Y+_#684!pIA@rlO1 z%2LYIF#^$u!MN|@Z^`D+%Dd-zZKM2LfQB>MHmJ;7bz;)YN4%O4!87@zR(+;Z11GqAgcge4b`3dzHl<Z6X3UB{=#!dVA{iybp0l^*IQ?K$Wd9~a)y4V zKnVq(#`~NHLwshaZ*d}<$gzJ!kkOee!Ix_dT~b@uJ@0kle|2cISmqZZBtI!`jn5YSU6 z#YNjV?FMVvGJ-HrHiK`a->Qu};=UcjKIpz?iQm@S@hkeQf-Fv;6-FrHVE^6kKaj-X z57QC1gx25sb2$;XHe2EIkpT5ije~i)Jc3c$5~+T z2=Rz}> zb(e#4d#;AoHjKp(#t%*p6o)Vqa9Dg~oR=!~boM73z6nu;Klh7}Y(N@6_>RP}&Ne3g zt@)@DGuY(zEwVm|)`RxH>xmeHx+miN%zOIggi~Uzo07cR%$S2 znqs7@KG=JVV9e9&vvj>n>b%yd$#19!>_K+Zc@l*HN>%2}4z!Gc#0(J(ROwUS$i|x8 zOs06IP1V(>|!=vx?|IIAi{7+_qnv7pL zjYPh<1Yjd0p!_9MOrZuJ|3juyUol!au)0V2GY;_?w2~yoTPFKiCi*?-U{HUJ!?l4? z$Y<+48f(zP_eU)8z(8DlK;QA^oY^$+yRMHk*f@dHw+5r~2lO{h^v6zo=lezo85q9t zb8B=jzP`r$1NHy$N(P-RDHV2L8AEIHc`Xi9{$mGVlCE@mxPez#a(kPuV5w>3U0=ka z9*xj698aY9qHGq@@Kt!XhVe~{V$4Z!SH!Tq5yHEAGLvh?@6+IY@d}| zgU_9h?S#M}dfMY!ur0a|NGyU1c#ROKI-HUGn8`La)l!ncx>!AP zjRpQpf%M%XT4&G^o5*j(*aeAmr}zkjmkg%qes$c@H*)+#{#NB9%A<$I2{hM)gvZDm ztF>9La=38TL}8zvGbE%Q#*(ppDeL8eyU5}&7Ljkf2cZzOt4r(QU$Hn9vOTyKJqr|h zX<9h8q2H|WK;xHoP1y6yE<`=)j7>Ij+7{vZ@xK~mR=d#=JQTytpavCsLH)IN`uNMU z_Ayu37xIZW@*@RRZPz}|zYZx@QmkG*c90Tt`st&P?DY4wZO8#yP3~%#lIBF{Q3i>8~qnhBafqlVszgg|a-Vkr0I89PaeN zn{21$oTsVVI3R>|-A#8Ba~%x2g8w?=`=HgZbU2kk!hI!ZD0LC=XNNfp!k2PxcsTRZ z__0^mXIXa+hw+))0DV8cTPgfPpAcRyr3^tPpQVjnR?2zSKHGSl_XSxRM^bnBD|rRi z-rsPWmzqy3T$|*X+RV&~u;$=S-D?p}jrUJ28@ytIMVBnQ7kMXE%u%EtQkLz4uK{IF z&e4u>p8iIEjZT`-a}iV;_-_c+OLhD+Jb=($Lle4pTjPcLcC~{!Tia8)it`7$S0f^& z;`lpbL2S_dz{SRvxu{UuVxELkhX|^XpNxW0HST}`GvVf5 z`mb!>RepP{x@QsvLQ9)<3N!x!J(v-f8va?k0AGbkL}Ufcq=>C%dAM0k^LQ zNc`jxlg6qwrE$8gtgRv3%e^O9qvWc+q&Gknd`)AN73BT;Mq~C|Hn3)G#`ggK;)XbD zGSW@%IjaOAM;F|nTKad%kkM_V#eztz+@hH>yJ~0ji}5i@Q{E$;&-%tM9+sZe&na)} zzIPt2)6Xc*O5@MbmLjCLbmgVy7<02j>nf%vq;g$%jZSl=!mW?xCO@KQUW4PG`|Z*# zkN^1e~vwNt)POL#r?{Q1}3p|2!{u$cJgr&|JrAMbh^<2>1Rc0*p-ds>D>%#ySc zmYUuDu`0E5fWydA0J^Gc1io&Izaz2|L1TX|if%a8qX!~+F2ye;_d8y0;@$+>My?M8 zzEnAEVrZmcQ5J;>+Z|PsQRHu`-&8HGCgO4|*D%h{(C{V67?ers$#p#(yJuB+SWj#EOK9B`g}&LxHp~sD5KBQ7U|iOQ z-%2HoxB4>76DX6~oiI9>{BNPcH_By)tb1DO=nUq~jliH<2DQ{@^?*C?d$0?0pq*8m z^62h3I&yQ&6QvofRw7uXq*q)Qw_OwmpD(%^6FJi#4XyW9Qyv(c$17ppQf;j3NuoP0 zGTVKMyQT7LX21XJZzp-@8lIZ)C(*0<9ZVIt4$PyOd?*yHRCSdu9Eu;kC@RZ=p~X;1l3x@F%{ekbEn651yVbg* zQjaaSyVvnVL=r98BtZ1_6?^Df)JSX;l+0|7d-uoGjqh z(khP}s=A%g)x_@}w!4N^pm27tcEGaSGXE(m++d7EPT>C8UP}D588}tNael{R|JBAz zqftrtaPOYOJ|l$bVbgR5yQ47ZNo{>RkP3bcpx(^JzT5Y_N!@&`F zB%EnX2B_#bSLM7N?X>Ze8ET8%Ah`h&`J^kkiB3gJewL$H*ei)b5M!9dPo)=*SVP~* z1-Bd<$OuYQrqdp+U&WPOm&xy5{d8M`4|tDW5uFMuw0Yp)K)DNy@5c-KCmU}rEt}=| z!;Gu0LivdOER|$gB+lbrMI&W`=b~$?IShYkx%HR6 zls=QSd`wmpT_sCVYX$2iJ<-s;dR3{^(pbzQ7pO+A&lPy@o83YuPJVv99b2(EwIyZ$ zXSO%^EBs+%2U|V%iSDv#iHmV)$khFZfScD@*+L6Zj6`?P(cA_L{uO-}8w>E%W%w7G zDv}EFz=aRKGb+x^vqVh0eW_>B`A!gJ6^^#1G!7yW283I`yB*U41@wCJ8f*mX0+dgP z7U&Y28rCwrAeRNoJ@c)QTPbHu1jnX{i@ct@n6=kZ_uwLOd1<%3d7P`|!|i*Qvt^Ot z*Jz8X0hqSD-96~c|FrFJA`O64+$*Sup7AK;h?+771}}sxu#kl$=YE`hUL~UVAIze-%*qBxrEplpf zQV7hVsbTk8W@4TvZoWvadOb9PNGs|i=MA`ZSPW*GdSds9G zD4udU$6U!C(nk5{t=v^VaN=ahcJDAY;k^;DWBI!}BJl0+1it{9f1a0rlkf`H%yK8z z>HmRDnbP*CCeVPip%8^A9V2^gLl?vzHuHD#5`;BmLAcZWB8LD{&_m=Yix;<*VC3cm zqYq4I5tnQ5A3Wh{Pvj3$T}&ydUQuDEl?DNc$ zIT|7j;3R;Mb52yB9FP|s2BYE!L$WrC5{#oY>7LKvp3Tq$4Tm6FrM@TI`YD~1Lg7@g zZtR=Go||3(hhF_FYZA9`oi&bg!HX zmDfR@n><$!$HRlmty(^CMiJHX1s}m``O?^m>&O!$uccF({`XRb*u=8|B73n^2u!-O zx9s8hGs4Pn-2QM`A+eGy07_^~SBi=uFlFyPT264{zbqFfr(P7x>6$iBLxV! zs68ivlla^>*a=RLK!hGf81RK#-tpvn&5;krRf91l$(uUsZYJ3r9M_7HAAP(eWPF61 zo(QxYmB<)-nmC>|4;uO`{dm%bxNWbeUv%Et zxzSXg3!2uNW9JLhp>WYC}G*!%19rwfr{+cwX#HN-us$iq=*nl=9Vf$%4diFFk z;)LboG74*kVqJ>uugUsu%IgB*cHlYHM2_5)wW_<=vssXT{1t<$x2`lc+Vi(-dY7h#Ol1$sLKTw@IEBHH`NP!CZ8*@49fT0h9(OB44708Mr({O#-dQPFwb zZThUa_0)K{K_8c6wv8=fx79TYha}q-y5AN@XUKShrVYikP`kO+tP3*QWY5gso@Icd z`ZFS@U0tmo|SK`j*cSbj35~D4!_4IE)4%UNZjtu2#UiYAsE8?;|Mr zu!5F%GOfY}V;Iv?s*@0zrq*is2GiB5X}eC@{0FM;|Ab{lH#;-X}0LS0!!IX$_o;U&pGYv`Kaua|W%rI_# zgegyujrMySZ^#@I%@6K7{AaJ$u_MkH7R(TX`PL|PEH`1?Xhs}y#^ELKV4aTO@zMY( zZ_it&bbbBa=v!f+Z*5xh5z$qRp%a|#BUsuDhpY*gLRqo?vRA>;x!#UP?MzhKB|Ay8F$tEM)BO|u1M;Vi9}3q5e@^;S9agHf4t zZ4L*ZWb-?}lnttU>M=6fqRvvdJoZ@lmfl!0uCcpvwRZg0%M$s|Ui7h{tn-LYJ?u*L zyW+kNpWmTdRDb)<1|3M|uQy!D5Z^%3+Z6H&A1>+hs@vzSx-!Ur&UNHcr$%?L!iRNap+);l9GKCONzbrA_{Idj43wENh zcU&fKzj{+EeS5o99MLs1K5!-r`ic4+u&|g)eTaUKr^sS$R&UA?Y#02x70Xb!cXO_h;mS_^IRq92dU)p z$=aI{l;zw|O#4X`{(KXHY@N5dIOJu1tNN(Yym_wR&0TmF%VqUaGd2CD()mdfuhXhe z1EbeuY|p|8E1Ni>ff@oz5)!ST*eI{fyBa80l9}Qs-UR5 z+;xG^Z*HsgF?CQssNW-z!1WCNZ2wv&7b-ma{`|Kz+2x|8sZSZ&bzcV3wB^t3$y$@T zMpjVxs%Ws$bzbbx^`7M$eDCghCUsDioSy52|+TPD#`AqjC|6vfbicOC(ONSv{|$d^hT>e;b7{XTjv{YZ(kb zXdkaGZi;1Su3U$p6KnPLRscHE5r1TDgue?7_8Xj0r~hP>XnSTUf)yV-W;+x=($;VsIHETIzrNXzAj6r{d||kMfzizk0c9 z0e_k>i$rN>4gTaEW4;H^Zas*7*>q+#^zt}fHT+NM(rHkeeVm-*goR3)W!Bla&5IF? z4WikYf;^BqBd*%C;wLEHrj=eKOXjZDb=i59LP8F>Z_9Fd;;T31!d`Y%oWc?^J0_Kk z1h&CC;(+Ab!?aNriDqK4&!U{#E}5!i*rbiMvFKwfUUou{`PZZFUa%L@ zE3A$mkvj**{PA28z4-e@|DsZ>{7eRyhce;XO*?ZPYCjsMYO0j}g*TvaC_eCOc^ommpI@|d*z`LtADQlWXL@@gI2$N6_@Z{f72 zzPf4wUK7n~Jwj6zGD(yH!M}I`;2}&h6W-{!pc?-$rWsd&BNe_WP%nS+2@!Eym)zb% zy=K8nuW{ob{Y~1=i=XJ5RMGdlw_eb0VmQy@=5N{$txcY8qK6e1?C_EDf3BIED4+hN z3Yz>(HEsQ`0{a7>Jy8ob zZpRTXh2^Q)E~#f01rK~&-;UB~EjE5YxSZXyIk^5-#3%GL0J!E|w|Y2W^_~eeJ#yDd!~rueuh=oG6Ow9wjOM_-KC@ zB#CvYZE;Vm=$M^N-v79ERc(t(to}68`j=&_;mZpuIwv*ISvnyt0_r*WS&n{@3Y#XB zaG0P~|8eop)9h!od@Tn z8bnE^Pty*j9iQ}-#kRP_m_D>xMie^qsRz1_ma>mc!fZ{emq0~&ZX2ayOZO?`l!Vjo zS?%E|pl{f>?kmw}axR+r?PqC2UsTmF8sFRN65Pyxf*?%FgIQ3*1jhddP44&SNgGJw zp6230x7}#|SB`j==@hr7PX|MG#9wW@6;|rC$8{)n(zLJ87Ha;13nhTo8~3JSPE*>% z5*t>F^8$%{S>Gb39QvK4emNm(hoK8s|4Qt-UlT7t0pVBJ;YAvq1 zIQCb_QwMCFLOMWUydLKHIpUHmtmLv#K=h3KMBKY7!q+T?2O|B^GW^;A(foQzCKMKY zZQlE}z&xV6r?OP+>Ieq6`nuGbaN6Q>X9V|RBSi90&tpHXUq}|3^Yi7j+E_Te;z3A@ z2Er^w6dvFF8}P@5`a(&)bMZb$BWYYOMP;j-l|$RTHJ&bJs6vlsVCi#GZ1BVmH+$Z%I$J zuoD71Q-J2tem}@i!e(@kJ}+-FWfCj%sLUR*@$QNNRm?FHgkPXhIQpP}_Em>`03h|0 zTdPSEH?Zlo&dvp^Y1sL}b zOg&I?frAwm0()-aFO?M9$ z`sYaYe?87?n*nZj3C@c9Vo_>yEWI)5VxHTh(b77;E@P|N>utSI{`9LHPTi3hzS1F> z7mZ^x2=-)*I2`$Zrvikkt-ex>z$9J-6SF1ih#zsPy{`>u{5{P41^3UP7WgEOwe z^~3PKE-)iN;j#Xw_z^fdvyrvk+bq3w+#%i2-i%fS?tjd6tdmKGf;U*czdfukh6hx_ z(i4pWA5Tu7yTv@KLvkqX+EBLZZ**ik(FrpKNQBYE7vN}#q!EJAdZ8D%gv$ze1Dn=D zZ-O>9=HlX}VI(nIe4-IfY^UVd@djjugrf8ydP5#e0K481Qn#ej*69-z>AZF2^<;Eq zOMe2-(GYJ3pY_|^St0KArGl88yuVpQ9}|RlbW)W&UNe*J2>mm6^Zd*pjgTEU7ynP* zhTyws6yPf^|M)^x5m;uyCOmFw{$^?HcJgP(EaDltGeX~aIB8`^9810n%0w6%I@5bW zc99lEo3%&!Ut9CPLRs28^Gn-oP-`pZ!6EB-EeQyt=+Fun9sM<0I4+0iQ8%h@I(x88 zzO0cH(T;Oar{;%06<{G91FWC1bc8#c?{Bkx(HYdWHc?yGzjd~N!q&QNVp;{2@AXK$ z(2|jQoa{cee+z6YtGKDs@@VbWCh*5J8$(I6qFK-%_j9h5SmiWIOCzUX z04E#&ah?YrB9yXO}`3ukByqvtzl{J2yX667*ysqt-GD3Y&Fe&Xe6ee8Sz=9 z`mQ2M=nsGGM5tq-3b(a?GJx26Agwp(gImF30jXI=}MZN=+eO zLn@Nz#(s>X*#bVwn0~RrlQalt z(n!k`C+*W3@u*s0!aa7N@X2+1XL4w~hH$Ugbhiif#wCWK2h1t(ikhGeF4-$ z;%_~N)Wry_Q5mITWv3?+H70HbU-r8zw5(XoJiEM?Db`n_qx%W-2VXt<_5npC2KKF3 ziqncEi$?yq*=Sc^>^GnP&RP3&6|nyW!U)`YcajsTSKgFdh6N2MzRKT9r1kTkwubS^ zi`A86mAsFO^e%eyV4Y;NFyP|r#g5}KqWV$$ikygmtn%SFx=++puqw+^4%hGS#AiSS zcv|@>FQm`sOP-wO;Ijc)liF7>kSxs-yI)o6LVI3f%o9|TK_Hq^>X0yJy)5?hM!9$D z6J6cf3cv3nCaYNy)&@w1?>^}M_3-U0nnRW+abpcxIoh8T^y>YJq4}_( zng1v^)0}*+Xhlq-t;&ELB%TJO%Gj)8+?@R}U z>QHc|CM@jYbqt!>BKx=AfM~2GzIX9@|1!B8z@{rqE-Fx~H*{Fg=DSAwm0zgo*2`Kp zZ>zwCaH3BJmCDu5_xKM&pov@GCf$s62ry({cXv2@_Bzd_)Bl1SvOkw zEyt7=*!(J{k1y}muPuizE$cYsD8S?SE|uS&G){YKygq)R4VFP#Jzay~O6V;0;01-evhma|qdd+z#EMmIn2g-`s%*D1w zD4FK+Ur+|lhnZEWRppfz2)|XpNUI|fgOIeI;7I8hyWPw8|K~gwC4_OfmGL#^=Ut6* z6FNYnzA_mP4*QJDn95ZQ0QFDvZ7h%64>7M%(gB&yrO;F#Ojz7xqc4mlrM8>%%R)@Y zl8IFtTD5R&Thw3fz60Bp2AhztDA=Se?h~=$TQ~@VJ+qWyvv5l%CnnU^F5V zqZ>xoe()47Rle?EH951N8!q5~oUcZ$H1eq7gXE`>zq2O(ZC|eyx!97ri^Vs*c#Fu_Oqac4*D13&xYH>7aFZy^F|mm za5rgH-=q&ULs?9BZ0|=xJ4(!IesIjYIw7C`IwOtiKe1RUFN+aU;cq6IaVo-}N({9f1XFSh z;T$8(hx$w$m`JPJ6eIVYjIYOM0M_@Xag7zg0G?ostJ}CkolB2(WM5f~^{RR4H%!AT z59+w3_D~ZS^`5_FVE?t!gHu0o`PsRBmOweUPmJxsFO2wG(M6f^ODBlKNG~^W{MX*C zwI7x@K&L}DksFrLS;{}ymE_xR)Dp;3 z@R+Wgh@9B3e-}L%BROT(8OPEJ{=5;&eC!WnnT2LD0NA6O%SKd=ouw15HH;}yEg|dQ z=Z0Lmq|6pA_&0-acDB*zBIz?=F^=g}cH6 zL83JNt-39@tHfhcO9OrKMk%aQp+@fGJaVhXBdYVBYXV2d%uO(zS!;tKlAWDVC-kQv zXi@5oI+dKjq9sObb`PK~jVsp*Ci_H$RJ*o~4PMvqZ$u;&id| z&rP@x+i51izDRmAG48LVt@bl>nFS!*^#iP6Ir{)on_2=<^!O_MpBRbGV(R)tOT@`U zF%)!bXI9F*SWMr4TfSSIq_FK%*t}_`;xQ>*A}!{;e}Ci*=H7kx{BbuD$?Rm(dT|`@ zNG%^ykp~<-dwo@sUT~R8ZIjg_N9hFpA-fgt`~hIyYn60o1=c?MoS-@~L6dxB(!gq? zQo*^&&B4Q0nSDB*hL=vnG9W!q$mZqiwZEc>$|k&0uu09Zbn1R#7Qww|EIOA@i1GF0 z{`K)g5@>Id;tOXmYmFTbSX#7AcweMmbl6U*o1-P}Ph212E;2vv+q&5~iJjB3ItTP2 z9{P`fLxQNUe&Da{bLdlEIzIf}41?3QrpX9q035p+ai2$zZFJUc ztwFv&Q(cfma8|a&W?(zbu;?9{r<%>*PmI8N;A{C_Ql!K#m!R zVQ!}5k*sel{L!!ZE8_ITR{e|8d#L0wcKP)I|LHcT#n_r5RM_C~Mi2Ly8SI`LNU0G#bqC?kFTR%Rk&yTt@{0U-!N?A}V6ery+%I_6cj2@pEwWz$NQLtSUAyVWuODcLlfqE_c+hd{E4JwN=oif~*E z7K-t?SnOijP87Rv(RDhW>a#g}dLn!8zLEWty1P1*EBu#IA&i&53Y!f@8|F}7B$`LiQ%vup%R1N!tTVpOhz{Tyidnt%8 zjnt;r(T(u!nhWPT%^tqDImsvuTHA@6?m+6ccwug_NCj-*DB}d_7nd_-)by@(vfGlV zMgPF*pWyOCd{j^k$)(eCNahxPc(eauu4U|c|Dmb2bHzxn6q|0|dc4uSI8Qcv8A6!& z=qZZ<_T{LE-h(%2>ge@c_Tz#kaOnEqh3^F zPNrs;m=8G*ong)KMF!#vPdMdzevFccc(PJ`i59Y_q_{a6=J#R!@9g6We^dBOnj~AT zSkEW&+d+=|<3DMA{WD9{GUS6f|52$rQ#gK>$7gSX1ham>pK)!vhK=`MMwDm2ycKZf zLVxr2>f64V(FC^i z4g@`ETW7?g9%$l77Bk@eykSr*)ul+8bZ1`^$+w700MaL{;YQEoO9OiP;#CvoEr1Y+ zJF?=4MzHOKE6*!w((X33|I7(Hl8aEdR#*wR?kVxy?RF!tUk=Rn8l`_P=S44nKbl)<(aSNS zHB}GykbPou+1TYEAwHBk`QX$6iPa2@`r+H+e6Qnp2HA~M5bvy)FpoIm;&1$OdU+V= z9q0?1NhY|w`-t1j?tYEhZmE(iy=shM0SJ0sYCVdy;=i`}Vh65tx)YNXdd7CNoW!@Q zA~jDAqgOE*Q`|g}1@P9vpP-Y_O_lSHf3J@5Fj6_-G_uH7JUL%`cznj)HX0e6p@D{odK9e6*y zbQ4-;!Lk9KY;eEsKk?_dS5WP`rOslSk(eM|SoLe2@jv+ht;0BczeD}+C{^mW_lR}WG~QF6yewVLW)j{YDZp@D{N zjRLbS<8aelY*b!$1fkR;ihGZke-uAv^=NTD)bBIv%`?TXlyv0nI4Bc1|8$w%52 z0P-{+IqY1~s^|Q#rC7|3+ey7GP)K12>(O%fwBI|eRY-Fzu*4ea?1g# zpaVG2;uO0bWx#>+?&Of$QsWLapVZBr|1DT;xOiS@%jR15yLE@$7OVSFviu>%5_r#| zAIx|-XK|xlWFMW~GBJzkqBgvWHd>^F5ppM-W~e7(oB$1ChxPaRI@>-ZbZyIDMc_&v zqYu8n1I0{RBJoi-h8YnvyTPo{RUQ^a{Ka}%?(3{ZMB1&IES~~ss^UExWI*+kZwkIu?SdSxBLctcF7@_hEG5C-8ppV0> z0c8%j(qxAuEkw;#X3+z*E`$0$O#W#r+*58fS>Q@z-sV^w9XNi|>@THlS%iD`Wxi1` z&X@+=bT1&7$@GUZ_Hr9Qq+92cE|Gu=dXb^&@+U`6uAtNLp%6w8giV-2IE$2)|so)kdc z4R%t@mY>SJc!EHSCcKxi*y8{%#@%5hm8D;mETx(-CGN4&xI<*&ODzn=nVo$b5_Oyv z+kCakY=gv-E{Y$2xDIE$-c~$kZpvA&_sC;$ym~c53Ae72p>$6`r@tR*Jm~rjR~^%T zqc1f6Y%g_BUw<+k`E9bLDxkOl+4%}Wz3m+WnxBcFBa8#M{bj#oE5doQf_#g1!&!s! zwOvPbj+Stb;8p`H;!u_`hkQh&gEmp?QoE{!I?-=8DxPlRkyzvs2=i)l*r-`Myh@AW zOVq>uT>TjsK|UU+uo+lI^WQyZ?>h{*u9H z4rZf+ePGY)I=0$VlGQ9P6}8T{1H)?Vt~tlGrpbv;y|}z;V683x&TIZdyReHaC6m)H z6-se|CzpY}{|g{Px(4h_w6mVf0*71gd< z&W0WPu-ng^INg0dY<73;xQYt!aG4kcMc6U3Z354{{1Z%ijUtU;|bfo_EBF z3;|T220Lf*r$Q5eWfIqpFU%K=*Ma}6OJc|gM@ws6k{E2A+VF+dw&QaE#+4!yNdvxo zA%4BQAK{)6Wu(~v5CX0US{}~_+4-Lcx#z_7Jc^(^ zUpl?vafgWe`0Gb5c@yJ3Z}+J>1+Sj68nSza37nYd3uRX9a7W@T@wBcz<(u;fRMF%9)#)? zLNkMEOqZ~p`RVo3Q;MY)ewP17*Sp6v9smE|NhqfkMRHgNC4}UB+A5VqR4U40&XgSI zY&JrYV@U`tMao&^%$%3=Dd)qS=e*e*HnZ(|tIy|qeXr~KU4QR(v)SJ7*ZcK)JRgty z!~5$+l(Cq>gz#|Roym*Kr%jCABHk)j|B)X470K4Tdleq}r+tB;Qr1+$*}rqb1)`k_ zl1zDW(8a7Yg(Uue=hK0Q4JCBKp=C0|IsUK1^Kgl3bMuFvN~{WA!f)!Ehf@B;ECuit zlAEN#CLSyN+)Ch3fRv|HT zB(Ownp7_+|S(@_p#D1_&9w*S|Q`8jxA8o{5O>{tHA9$hqpr*>ij_@G;^l`IvLa zK16IdaJxKj9SH6Npf!cWpA;3bJ4CBB0<~rI2>t43g5dRp*$dx|3@pkClCN7eNkKD= zGuGceTnRMUO_I$=l&)YwDDm~gz|s3|yn@P*ppE!;@KYz=ROY)VR;@<~qO*Bkzx?X? zNc!v+dUC*b_}E}SS{76>O_2kthgL`TVP+jF@Q3a(!8QtL+b=6BS|_%z*|L3z9W!da z`&0Na?R%Bxq1WVl7eUT7OtCr`Gyz%^5i&H&_pyeV7ORw2eN1?b)pld>3)nB?=?jf5 z!5QY*fL9?|!xQRqDcH5Iv_9JOmo#sAlYHUDl%Bgt8WvdXHh|%9vvxa_P8>u%;hLVl zOv_rhj6V{w&O`1|-ihd96>tFWZDf&1c}ikG@9YJA3MY@M%#j;AvIEdk2?Pzb?Wh22 zEG4)N&7|<(M~daE>a-@n=(*=_LU5h=)jn}rpwRdfBzfu^b13iK$Kn{1;!C8agC7ps zl=h8p8GrW^@fa$qmGw3?3VM=~_LouzV6qk-EKA^>mpecpVBZ?+7u8Ox*|fo=Sf+JFi6Qe#`UZnrAoR;oZDm2gV z+mZuRNodV`+E+k3#$qzga)XbG;TJ80nL=}26^ujAX?^*onBto$tuMxzY4!VYZ~%oD z(GvPc^$N$^s2?wMK3v?gz3G>lHv4YR+5sjpz0v|c$PRuOxo;*-9DcbOzhO2@WW8k} zX8U5L*<`b=J5A#VH^*$Q(w@|k1T|lUl&m#LR7a`-uG~GgTHt)rDG4{Z zJpS|QUzaG?)pp_0-Ig`3ozksqv_{Lm679x6=L@QQ>bQMHDUYDEvarQAV^QMXZ3Nu7 z5;z5Jr^xZfEZJhS4rL8^Q{M#}k6k)BbMawy;K2vy!KJcg%(*wu2Bba9lQ0wAB55xX zHtQ+ln@gbqs3s?ohI>$o48)t;fZ8e1I7HNa>iPhV9-qM^x>&N;>K0Z|Lj)~EFuZC_ zIR%cj;d$xF1XEz2*Sc3)AtyRHJ2qW4E9oYlO7(%v*kCm*UIi+2vt~76q;R}TqvO8i z(Bln;o8cj$Hh=+^q`hQ6b*5f$feWTyjs209;IeRodSa9*v0HpugA|Pb1Qvf3y$wm< zWT1Wdt4aN0Ycab8i*>2!Ky&8N!+Xhx6p(mVOD?ikQ_Atc{AQV3IEY|fwd{4V2(BmMv)wXhC)CdK$_;p*1#*89%iXP$)^WBU@Ugv zEesy?2?C$J>qD10!g-c7r;_3%HjYyeY1bA~f276r*RpxEK1MGxak>TIhs}+>^yP)c zYHz6A0+Zb}f97q?R9HhD%_g&yAkL39?o0=MHbdzRmp!@ZQwXEpD#b)EQM01WhIUT9 zc;>sFyn}hty=tuTfsyj)UP`W$*z%To2l~Jy{P9t!MF8UJZ;opnT7%*)gV80lJ1$~% zoweJe-WGjQ--f{Sj@@rjYurygVrHIi&+xZ(X^Jyb*n`Mz_&Bt;P%JqA3o7#1;@~g4 zzKe%*0|whMNm(e5>MP$;Ie=QXm#0fB%C233NsnCLYfW(-ec)aC3p}WG#V;ZD*L7K@ znijYKZ!?IkwhoM;e%;AQO0}51{H(PdRI%hl2g`dvciY{6`?r?)((67{^P%}C><446 zp_b4d8)v|{CV0yvEI)y86>xMtoRwr`VTV6qs z9&73JdAmEGp;@te0oLt+HRwP<-!oIb)4M)ysl#n>^@5@TdGva9!LpIvT_UwXfN9=A z1Ps3g|GuQ#$9of4W&g+ozP*~t8`Tm`dx7HJi#-AQKE<4htJlW4-^uml zE0xwlEOTY8`IGWn=Ph3TOiRuJji#x3RgL&wL>^6W=o)%%D4dfS=UX5EwMg>SQFLll z1LOD}p2U1&SE=3rO$laJ#NFU-{xMv5@-`$X5xXQG{a$e;!!ws(2THeT#OgVB!oG8~eLk~}+A_HIvtGxatn zNf8w)b)N9O1!mv0_TGyf z!+f8%0|4Hkecg{VQ(x%|29>usO6hNjDM=d|U}EMz?68AgLpDsGT^c*EyuNPjjF^VF zd+Z$mRz2j1FY+@Kgiv7oS(UHm;c#57jqz;?YNAfp;ZRF0Kl5FYCnsWa#;`1`5VoQZN3`dH)rV$pN8w?C z9oqK>)9v4Q4a+LYW^Srmt*4n{lXr?dX-Ky5u{}NdUgGvzwepr?p}YQ|)lM&{ZMf{c z-^sGf^Bo}WCphZ@ZI9iuwW_aswv&Cvq>DIMD-(u1b|Oo7@xA8&l%X$=oyj_F3f3E! ztH8auy)F7Xt#@vCEx`Sqv!B890dmi;!JInA+~gD}uMz6SJy(BiT@>%%1O+)U8CXmp zW@iY>pkv^uSu=`&ku9nZ13gcj51sSsBI%-jx{h$5HY_vN&lhks3~)4To;4QxEy4U{ zU)VDAc5b_38Oo%Ttv4wS=wwu(MUfU~MkaTJYKDVgmZyt0G8NeZ^D@5S%P;JwqX&sS`) z?889;5y`|#Y7^-SIlWvgQ>RRe_cTW)N$e+fg{1YvlsZLm4@@Sozl!h4?d)hTW1&TQ41q1%O;wlyL z7}*NQMWA5SUG<8^&kW9;oo_q88Hr43#t90#i^;}eSjzSp@%)HmZTKM<~fgs8d$>*=ha0+L{k~-I-m+%ZrM7K6iZ{4Pw;gi zw4E7;aa=?Wk!pYE{6gv2@LTRnwIR~o-Bt^J@q{^VIO<|;xY1<7dVH#A59O@=0&K0i z5gSu~4#VlBg*w-*x0kKSKet@X-+Rq$nS@%~-y>Nn6m=VP# zhL>HscM4n&YJq+P!;mo$sLg%62h7Ajg zwYf^EWI9VG*nckM&T^MsMj-V4{U9*%4@ccxu_ak${p>nO?!-H?E52jzZT#JqS;oal zKYGv?@ZiNni&|M1_e1n~ZCMXIt6Xg06V{pCMCKmm(xYyQO%=($7G=aK2H9oV#x29m zFmQH{M6}Q1+D(@QlCdDqcm^uG>Dswd77YCIv1`X_avvFLmU5%$;eQq zdY5bM{y6v~chP-9e!EOqMTbEB6l0IVb1|n#P zfs(O^so#`&1p6NaeCMef@8gjmcUB(M??>>j<7ya9^1JZV+?!~QfVIqK=}eAfktOnY zneh0DK_7HkKJ1GdG;P8~TCNZC`<;yrjh|z+X-c7@&P?24UK+wBH&|A>iF3NeKIP4h zY4+T^csfql*&(fdh*{o=kN9~Oy%6wuw-K>-Z)cG|Q=O2Q539>c9fcVnZK)&l6j9%+ z?rnHMr}7eLj05TlUhSI+v)xR;i0ypAdzMVsDA!5?;8L&{3#!O^PCx3gSy`)k%h~{O z{nm$LGo`@N03CXC@w^K1qM0?4&c)>qwlWi$MKfc^z~T6N^ex(R#YxEJl(7-Vn|1fU z2o-v-XBFJ{%Z5!?ojQJ=d2QGq#c#AF{5_^x1!B3*{38cYPcQ7&%5_R&Mwj|Jh za#Z*L(-MXB*L=r|qlOnsP^ND*fIJ;5QywkSx9r4L;|+g%X`57}ZnMe#My>g9i>z9M zH{J9FY@}-6wUwQE!8lIw5!-lXu7V16<=E?<@ve5+lP2<0pIqZw;rVgU3gFzAubHI- z*rJsGagqBHr9+5qLsWx4<>61l01*rT-Djql&0wBcJm75x3};+=kHT7y1Hd6LeDO|u z*voA>uJC-TLO?|F!s*rAaC02%aE^+D)F}g?ybnK=rWHG;X?#BZgvb?LuJs}mK z4ddd~)tMHRXA`!9fZ+$xu&!Vu^PkM)kM{sA5>OKMssCD7JCnWLFGwK%t%xq9Jsh8u z=_={NCk$*DX#BdmpULV_FbE$pT3jB-br+%A{6p}LiXA{3r3ETG-_b&j>{~w#) zYR*kzy@C21_lZJk?jZmN$^WhUxSOS5iV=6>dW$TDbyO4a?lv|&0*U&ND)x%MV$@;@^d00*@0wfIQd7ehO?`FmJ9C* z@jTu@@fWRh)x1=-`{$jPc1oyPL_OMzy%sFXB8DFP1(ww)9Zd<$t@v%?7|$E8SMce8 z_Z<~uN!eceD=79iFWJ5Ejvo|R+gwUVMuDk&Qv6k6aBpcVA6Ea>M?#-=vOKark9FA< zH2qP+ zy65Z-;dHDepz4qWubw{T2FDF3fE!HbBF$jow-R^^_^_eObI*%4C2zX3GCF~#hOFfa zqndxOT(lc`DakrA`UUSEPxT!Z+zmk3vPb7i#WY&}y)8udOE&a(9ya{rpBeo1Q&9nE zCiwoX?qC3toAW%6cxLJZ;k)KvT*H4&4x$w?Fio47FSWAyNX*PR-`|yFS<96~AXw#R zxpgzpeB37KzqE;&q*l9}Wo@KDPV9_fMxY_0p(-gJ(4=5fr9*q)*lC?-SAmEw;b`R0 z2I+qRDD9mLHe$kO8pMod+o~qs1IW~genML-pE1Ay)NHGL?fw@RCuZ_ZO8=W9afSaop-ArlDG`n==@ib2xwy0CI z3_BDIS2Ud04e~uM_%AFbC>vu%WC@6RauE6gzzeP$@EOC1y2Im1XTt<~_Kw(h0E2=f z60p{fS$%+#{{KX6MuU@HS$xejoqfi8^Oop%`3s%dYd-g6yq^H?x(aEzOc6DZmzeO8 zCm+VXANB28@cZl;Z=*`AYs}>ALd5|Hh^!LBbC&?T=YH9ZOPl29C&Q0`{*9Q~XW@^x zo7*~n`0fTjVQ^+?YUBUO=uY;t8;VAk7>CM|x>(9wJRCQ8bnKe%7^w9mAL}d|@>%Mz zTOAIoffSCa5%o+Lqm&zf1{{Lh8?_~6O|$F+72i9ZMLKK-a9?aj1wR3XyFzSPP+FMr zh23eAt)M3^&NXS`v^h9k?V*zb z%L2}tF$;^1D6O8vHoE(i=pNx#?APmfj-C~*zuj4Pr+)w~}w;a`4T(Aa7bxbJF>I7frV6 z8J;0#)d`G;n9K<(7n1e`taLZ>m3 z@uHl$N5`R({S2o7Lp}1|2Uj#}JgShTn>5D-XR;PZCMYC6*Oo8Ix-%I+a~#Qf6I&42 z`N#bJBQ}!mZj$=fE#mRQ;>(XzdfDxZhXH-XH`X-D_GhN^eH=w&*ha$e?_>CH8P1kD zLR!#=etuNhkJFKHNWq?S_=&IGOMpfQy{;C(D;}B0T|m8F1|NxOF_%ak|7bo4pi74s zBh*lJw31IQHfZswP3bXbEwnI>;Hav}U>{&-+@_Y<4}%Z4yj9KbuZ&V{6rr69 zcR^6@HDjKn?l#ME3kc;De&$9t3$l%G%{+iT3_zN1OE>f8L-xOu?DBbUYsSZ zsb5;EeiR+0{y&HyfIDFi5D^vr&HI2AO%7p^83c43?f0#y7VbkezBxi}(~`6m*3AEo z4J#@YN&$*I@FWuW*7gM`$Yd#?yk08Nv-#jt;!L{snIp?r&{^Q`ND`Rz*{|LmRaPsZ zuyefU?nwITsIao1E*pdWohH2`i)A>g@Uoe!ZR{_m{djRp;`N{HjP0^uR-4~%=i}b!S#81h4veQ`wY&l5x zH=UZlXDbuHaN))9mBg;|E3nTrBrE5p9XVe6Vds4g^N&%DUHgxtVNHNX2)ykH$+1=J zaR5nVQof+H7@p$9^v+H9^PYTEvoQ|yx#2$2pkQoRGu98PeTHEReAJOCO+hxX8H@6H z>PF>dBQHAZnp$=?yCO1R5m$c*n;^Pv1a~EiVwLAtFtslc_3lFR?HLA`;EC-MAOFk-Y@M=3*#7}Gew8uM@I9*TwzwSqD>yMf{yFN7 zU#F>B9#XcknPb2@Qh8A3=8=ouNL5elX2NRV%a2uglAl#O9s8?Wk+sS|-ohSo*by1o zIdlm)I#iYRR6Sq&sr)AIDb)bJj(Nu0=}G@IHtsjUj=BZ@gzw#I zKlUtTN2II5ua0ZBHT=DS@o68f@}xlSj{&GoI&_4Z)!XcIs-^PL{= zQ@@e`%NBmB_MbQg0IIGGl=|z~K!bkzCVTm5+D*!t<{s2RL^OEaxPB@%!zv zva46p$-?oMza(1r4-7lw1Nb+s;iTd7Alb3#^8o3Vyzn3F?BM<%um^a)YfkGuT~tBS*IoK%_<`(^>L#!H>5p?>jTN_herxH- zoepuPy!|sPH7_r7Cqm=ii=z9!$IAcA7jO!my|z5>HuYi%a)ZuZYqG+)nQqzqh8mBc z=N((XA1YJ2o3))St%HnoCL4*cGI)MyQXoicWLUm+q&g8~`u z9Sp?e|I3V(`Yr9SBjW9%Eu`F>(l;HWV{u~8zg9>b`Vt-O>bYl2a!Kmcsw6}cb9TRK zGW)SBikMDjCLqC0OKDD`s)feutgzhw{P;TMoKAtv!~eWk|B|KlKt9UYva9=f*8cba ze5Y_)VpjT}JfzYC7Mri(^$Yu}4?TpP+d%^ervJFGemCnS8musT+QRq9>e-RhqxwT4 zh|{m!*4%?^wi?lc^Od>qEw7p!PyQKJC5yHRza`U!d{KV%@N1^=vw0xiP{xnq>c6L}UzLKMHAbbcfcFVM6=%{Cs8$Y0SwNu>r3uY@s;v+t0mO!a%!o(S9TwtcK` zQ7J=_Ilc^3S79q{CaFDxw0bx>lq?y}bS)y~Z)eMRsL88gN4FtfT_;7)S*3XFCNZ6J z1b$;94fr42Q+9sWPg1eVAG#l(ShYmF;qeTUtkbphig)aafPa_PP|DhQsn{`2a+}&K z*DmaelQ<}E7gCs#Wym+kLravOZmk~Sutv_!GVyl=6@6+@#-Dh!!n;iQwD12~$yT|L2X6JkJMT7#$AmTs6>7f9X|7VbLEiGpT`A9t^~d#D1D-Dn9wbLqZ?51 zWxMXpggx_~{27aHR$xb(zsJFuD2FdGsnuL2UZZ^=>9?0;J}1Z4niPKm#f%(zH?;_< zDoo--JzxUCRA+K`&{l5Vs6nj7)Sq0c?eNsNPCNgcjcjMSJsO6k61}w?CWFv-NwcX0 zGIF zr91zG=wF{OZ6SfABjaGJ9doZ=+!#US)yo(-`99%Px-o<=O7N8dwz+HMS5+Rod< zH92bvGdcHeFx<29l0F7EC)8oWB+Ze+M(XrcvorssAdrFlgUS*1g94Zd>mOcK$nb8*yFN3156N+%B-|Itug{Fw~7ReehPhKLlxEsHZopAr5KKtMp`=@?EaarW4cZT@%LV{iG*MO*&A zdy@aNBWgHxcazWglJc?s>t6UXb-A5g68|Nx{e=aOxs#e&@%txj;NUDU^rRVI_FeWz zgS17`Jdc+5uoY3aja?voeJN|-9Q(g_0>3C}2NcL-aM89AUs98P-(MiO!9jMzgiKEz zZz}*RC^3#u|Mr)nxH;uhPJOPh0ad0GcKcgjv*tFLw$Q1IEX@?#NhhY4f!=^$MAaH3{H=ms9Q&v19Wc@kM@`ySxPSOJ zlpbD87b{UYcTXY^Y-XJj>P6o{kw5EcefioKuYGeXFVJk~)ol+_{A_%zhXgw8Zc$`= z;gW@Ai`)lQ?>l4cDlP;0s#AQ}x-T!T8z~;?fY-7;vP<*%PL`0RJDY7|EFd9!Dp+Ue zqS6~#d$0t@2I}osxT&%8eS6gJN%{sghYaD%DO)$R-Zh)0Tln=BmG0%qdAs3(rj*Pp z=8Il<BtSczfAQB;rLySL1tY4HuJaS?=xe)xO;mzV+E5NNb827L#PnbwhZ!s6pKs!Fvry zzc{vRJRa4Ym-^~%nRU+O?zwNV8Du%&<^jL!Y&qXnzhV!^E%^HQImAEwC@km3HxU){ zmV05?bY)~wePK9DKd?(P(NnXEPk(!Tjk5h{;$|^dvn8I@1t?6?K(UtHb5=#W8!QX% z?)P(6L}v-Dip(LB$)@PoKnQDB03aKzR0ctoQ-AyQ;&sr%vm~YUn5f>sAJuoV?ETHt z4gqE<=5?Q2>ZtZo=cg;Vv45UbaEpQ0z8bBHbU5>hTj$EazRtL6vT^_II{`G#zX(mB zsYzk`f?ZY7Aw|?nE&HGQj;M>!lYdJ^+-l>2-4dW08GQO1VM#s24f!sBK9ssFSH$Kg zd*N?R;D6nj%H*T(7k*~mL%f{C*2#RE9Q!Dv{#Y;Ay^yqmGYy46LIAeYId@^CMI^l0Kmf(ArSOIrHawH zXT0ugDyR?Tyb!Hopy1WIvMzd=)#A_>#z98jWtjfo}+zHYTPvf|kc6prY?6t5sw~D)xFDwqbRP*w>JT{9@a9|-@j;?`NJ*mGVjOKNNb5QQW{oGS0`cz4&Q9=8;ta*>x8MfY#%VE}9QZ$UyP^h%PvDMUGq+IoqiL~} z;f4GWqwxZbp+kQNsU1lIrAYCFy(~~T84FdkF`Lt^5ovg)3GJIt zkIZjh_McR953}tKce~gJ7K@@xN4J^r7a$g-IO&%qz$Cp<86FJ?xa+*3$@PHpwYYbP zu9jc6^IJ-aEC!};XF6^!&t))9+)n10%-4PGKHu;Vw5{Tz1-=O4T^J&6xd+B2-4|Ho z4#ddsCJiMC66>P_b$f-2?VBWt!2w-Ekac=n^&^HxPjP<52ScQYwB7vb*4w?~B$>gd z;p3}|SgO_SQXDBGA+Bdn>7HzqF8N}d!^mH(W-1wSk1=1On8rS);6%M_kke{zzL zp9=r7<99U^mu#X7KIhY7B;0M2fsGfvj-eXJ{ zyzA@QqU25Ub7d|Z>o!Jpa<$xkfkvcfx&J4UEv~=mr|53OR;TJ8Lb0Z z{F5WMbG@d9o;u)IB631Nyz+z99N7h<5(ROy@ei>5t~&U6_tmp<%0ZTIc#VUf7j1Ef z*Ft@f(;0`JOZuJ4ey-^CWKLYqF@7iDMQbWArM%GaN@-?Adv)ff`wBgn#YdrDs!q7) zayL3~*89B39@o{O8$uE`+a2afof8yWUzUZNePZ-TA@=!w0-f5L^ zfn@VY?iX3LTR)yzzQKm&@s{1SyI<4bIPH_5hW_>J?3w<;fJ2U2-l8i^DuM1lhjkMh z(%UyLd47>tucC?#&tTF@MJ+bi{{%2hH9*avFC>w{t(`v9v7Y5LFmO8z1ZyDgf8;X# zV#Fw0L#+C?0NjsXwKx_a?%~TZEtMyGBh7GTPndc1w;oaU>MBi`x~UEJt$5!>FP@=M zGFPY}hj5-uWtZ6z3hE%Vw`;9l20VQ9BhDaRzx1B-halm^HOHoXt_6@Zlo2E{)*igK zt4f!ZwMBhYU#Ros4=0Z5uUd^$veU*>&s@=GXsiDGD3;xh<;&MsewGJZAp~_z+8-F$cOF?6=R~ z;tu&+4Fcq{a^s{rj!Rh0Ug@}=x670FSL~WXZ~#OK#eS{#+XZBvd3Ao|q35HNE5 zXET0D2Idheyc4}`t@~wx`Tz*I9%!RFDLcWptj*EUOMbd5{H5cU2>6Fc9pQ zm{~cg%P4Ul$udnVJv*vD_zIMe->$zY7F{6e7ZXNM zp?6!GgG`hGIo^}4$!T@;RxL_5_sC2CDYY)4_Ij3MyYcmV(~>h&yyta4MpoQpSBM$c z614SO@boNdO5>t!X$)okxvv7Uf?J~cZGZI^?n5sg2{Vl9y$lCv4Sf(5UY1zr>yRXk zaOf}$e8X1OKc@UKfzlDr<@;kQh-L761)N7WO_}dqlG~7E9BfX|jHtS3^y?Z_4=-pp zb6g)f)QC_{DjYfUBIQ2yO?>=8C^HJJETm#qG`dN77UA*WI54U}F2W~rJaNvjn668n zfpu%oU)0K7Oxah~7Vc%)=I?fA6%>^gHT$2G8hkZ5u;^M^yVHiY%BxOmF$h1>gUR)z;y>+s+_Eq8ddX*!?+v zarzt#ORW3k!4UDsKU?zVPBj0HW?cGwxx>m|n^{?VL|Ebb!LD~T;KV<*u%Zp0is90) zSN#f{D!w9K6|@5iu&Z;+g=PAN2I46?7~Jedi%G!PC_xyZ)jQAf@5?Tnye>6qC0J!L zpz&pM<8DRZg|hE@kgqx83nGn6Si-5HTEktlKMoyH*}LaHjLe%?_lj&nqllhO_r|v* zdbZI-=4?0AJd2KD?yi7Q8xFmB&-S-qS;x;u(PS6p-`f-~$azUWs4W8Y(R7kL)S~RW zcyj)<4X>YtpKA+LBcrGHz&c4{QCU5oulT|bIjtU~@v+#nkQg2zF^A4{?nKvXtQ%gb z*o>bc8!!2*O!|gK%3$A%2r+|qA^**V6ekD%%vR+M3CkQsOn)umDaA*lo#6cFT9^V< z$zdqZ~oE?5@iQE-1a$bg+ddt ze@}HCd~UNppY;!U>GTFK4b7#*3LN5yYr7&?RVWYG;$0vXwt`>BgpO-bs!aUkHp)vd zL*vBJ3Jb_Z?w4FE3SEHmt2@?_p1l4e^n6UP9)7utgQcL{ZO!HgVRq3#lP=C>K1mHV zt|dzJ)y6}cnAe!I+eb?Dvt1$I@9xxp@@48b##%H6!x$}Dt4X@3bbM8AcDW?Ula5cxVeL@Fiaz##kH<2Fzz8h zS=9^41qo=&3+jN^640oI<$dRjt@7}$bAA!91c#Sqa-_}$Z)J<7z$lrGC11LL{r}jP zro$UF9A_kGMZ^$4`=lpfu%G#5lqVC^tg9~#l-=5K(R&TA3|FY8&m8LH7Q4F_e$YE< zV^y>itT|}zwJx4Gr9ln4g4za%Um>8^i ziL@_-c(&L8o%4%hha>j_EJS8KI^(B22tLeEQL_#XgVqE@jcdHb_3OWd%<{Z!YPc8` zr0k$ijHLnG*{_K96mkD+nOW>klM`|;Mz`s5Xg{LE+rVZ$R9*}7&9B3Q-yOjoPr;`B zhw@ajV2_(zNz!rXids?ag2MA+ZeH?-Uw*8=$LIMFU7A<*l!~bR{ zA`HfY**g8IR&Uy*t%KvHb4S7nTc}y}*C8u0#bUhET3qIJkv8@VUMrFh{elq>)C+do z%Ib=}pRXkzT~K;G$#aO28bl7V9$%Qd-u3H8nE*s@D?E=hDR#6@Rq1~lkMK-)u5p>} z<^-HPAI`Nwq6p98B8*%*6UQn@sy>-mmBC{MsUD!3HELhy6WP_t#;HbJxYo?!(wrjt zAX^4gg1Pk@^koclN{^{(=%LvwcBeI@YU{zG1lD5vYwSig?A^U^+jz|`iH7vPw4hOl zYx*IBk%;eZ7ID6)Ijy<^VTljl?;K5WYAxj|ObfhEYkmcI=mAt(cmIA|G8XC~Hl@YD zq3Bz&7%0%!gJExd|JEOz&~ma?pXx1sQNmt7?GoZbU?NNPQ;O-`~zEi|Ue=U?{ezy9#XkF9SohMP^>#Vt0z|VyUb)2}6IR=rq*dbnW3oq`e1Y0EmH8Gb6w{`<%IVR?l5vS<^I5CQ&_URYX>G{WO}IY3kS(N zfKCbGLo6}w?VYwzCOQ@M6!%UpFql6|6pqT4XGbS{kH_AyJ8*!xse9wv!>K+(ZA<4gtvuRc z7JSeh+KUcL#tTz{)pookgdDST%zURgD3YoD zu@}39oYkvWV#V1KRRyK8Nc7e+X!)7SkJa@>2Qimhm}+uJ{j7i zu0Voa^-iofXm%tt(aB5&VGy6#EH#{Pj6s<-+)55$H>b5u#WuWe1pBr|%g=N{EMd9T zO0Puyl1PSld*o69E!V_@1%J*pg6t^@y6QGX-ww}@?zu~zaMr%HHH0C{q>jX% z6Z3l%2gNNuAz%r7&v&xYM8jsL^8UM7S=mS(Knr}|kTK{#d94cf0eR-m8l(-?i`_vd#P zCJw~XwjzZEjOQaX4&jJ@Uf4nuF`RC%CWkJ=eb{MFO*_wEC)Ib_%>%5x=UMPA_2Eh^ z;tiI?^=4|B-CDUDQQ;Vi>77brYT6q}kzHPi1^Z~A+NTxrS&U#opwhJ$KAxVGF#nef zxQjz4t-D>AL&u+>^l`f;hJM$yMGn=SIC1$gi*4=CZw0=oIPQ`1uJHMC5^R+ta5esU z>`4aCjjpT{Wo~SIA)5jGSe_}Z;6_O-zS-GEWDoUx(5~woI@oIqi$*PKEp?;zR+zh( zTq_KtfJp-^_{?1xQ^NprYRFA)u%-Wt9|?BiyNx7met`mL6`CCDfzvknGs==f)jLQN zYz}cfiNf8q6f)|gw|QRtTT&~D}rzdH`f4a{?k zQnT8|vsQbeU%AeW$+wVoD|6WrOXM!%17GAP7#-|Bjz6w|t(E$-76UzKzn2nI-2fbF z#c-hMPd#{*9Jqem<&q?r68 z;>mCC^8we{2`=w>+lU^61jmJo$ zu3wMV!(XgFOxv(#Z8dVn{~TOid@E+{0#C~as%C;h4s2YMt&LE=42;{&L>i}9w@(%y zLJnUi^i8CR=hsff7gosM-sUC;{20_wmo+kE@?eEM5FDHkGf`uqpN<-hWcP5^C%s z0~l5MyyC87Bs493ltr|b705rHZeJT2bpTr8^1kdze&@=#_`X~E_v-AV%jICcidw*m~Z1P&+!LFs{Qw@F3F|S^sgkEUfnolyci|Za>?CmR&wh1TA`jc-2r+V(XriH zY(5CNMsyFAqR3{=_zWXL_Yu^+aj3t{rJ~V6QaX-m;L?((0fcOByHKhj{lV#Ny%DuJu9W-DMD_w8{8O>Yc&4?>OB4wC=RY_7r_C2V_S)qyqgb(NHT35Aq8sB z5e&PNEv?mxJ|l2GbVvIMuxQckQR4Aj760@|31GUwI6S|q76){US1)jxZ^suzF8aip z+vN-Yz>ogGQo>(UvfFl?Uo4RnCKQl%#@|Jft2{r3=dzD_H%j6tp|#M9>n5=*_Xk@` zGc!5BmXR7*HXL#ZJ)ggxI+J&)=j#@7m7(L|5>&jCnmMvv8q3Vd#PuTo5NjUm)+mbe}%Dxi*bsFYY?+k+Io1-OHDcJC&^YXN;? z40AIkx&31Vbb}H^i#)O)inrY7^WyD z_A;$slNd&gsG9ZSoA2B>dMUw`SA^AmPY0m<$aI(WcLAPy!*$$qg7m}dgq@t-*)_y5 z-!>E+$RnmuMksP_%L`vC@~b^5rxZGJ8`KR@r*RDe(EmWk64#wor_-Fj#3R2#L7t}Z zAk_-d3D_w}<2WI*7rQsRct~9MY7GgEFyKLb)mFef3EN-*!7)Bw#L+&#bKE zH&Ms#Gw%99qCWaTZk9pSK0D(=7f&Ux%&mfi%Bhv(q3~*`c)Y3saVt(-1GHXkL>8VNMc^OK9K9?ShCrOTP0u+Jm{tYtMA!n@X1>DfTqJ2 z?P-bm8<_i7ulQS;Z*EqD6k`~c z-VH1F)LN^=Ui89Rreqx~yP8kAV}5rt{_L$Vg6JCcSZi_%DzLv8eno5tD6KHIS7Ghv zRb$cxhlUJ%LSnBiT%*s8efqOhz#oU0W7!;$8}!Bz)>eAb9ux$~?w#RRzvmbGUHRy| z1BO08w=ecU9IjB%fwBeb$rPOXzB;v<5Rwq(nLsY%hi|W!;BYFmges`>Eo}9y(JJfNFw0&|BtcKZZ$s=6` zVcb`Hz$A6l2rh_G%WPR=>8~!{$kY~95z&4t+@`g1n%q9OxiM{%?6-Gx1h;k9)2=_+ z%G++me(+>MVdO{@b%|`Ko;BZ~<_^|r^y4skcnQ0LV&rUfdi3(bF_TkUDlQJJH;ZdJ z5eI3Fc+cn%vZ)*AZ}}VO5jK&4Cf_2N9b=xKE&mr?Z^0I2+x2ft3n(DngHkF=H$#bZ zOG`IMcMc&)hteIQfP!?#Py*5=-8BOYJ=Bo@Q?KiOw)=Uu_x%K%%o)cz*0Fy3J_GU{ zDK*E;GpQDw|-cyqN|a06(SHUp*2#{`_=ncuCWt;>(YDj-tCc7oK_!S z$~i*@&e`=>>|3)g(A^~kPUG_W-TB?^a*FZ$31`ACY}77U-)-Rb1p&uAq7(OEPL9^D z`>q+8av^*8#7L{>z^>0$L%q4XrA+E^k9qx@B-Pw#|J#$fU{`wCjaoPfd%fy2+_VL7U@FCgK%`N_hkH^Ng%Pf$O zh40MBro874*GJ{DpHKS=v2F-5Ik}#{MR=3 zA7=bMU2PZT``x&9`YO=yY6pCxx@Ib%2(pnD9OQyL6l{73hKMRcP58Svj-GXl1CEdAP zxqnFks@JZ%4_vA_Y)(u37g$#Q%=D8qfuYtxDUn(*iiXz4`2&wGy^0LFkuiWp_GEb? zdjcwf6C}0r>|p*{6(^Naa7RE_KyGgaCnk;NtB-RVI{(O=>tkrtJ<(H=zpz9=!XR2k z*zSKAwwp%tUvqBWpu;~325UgUPzetX#5Ud#;`4F~w7qyxbXafei7`xK3=HQGI#T>! z;#gaxM!nOJIH@=gR1}A_s37OBjfMTgG%`R6=M%Vi;^}`FV{ezm-@jb7Z4HUhAV7XwiM+*!@AE8tdM!|xt?t3Joz;N4@WcS1D z1HLU{h@0fTzuStNaSy(o~=CAb6bL(Y4g4iHPsXSjb zX_{**Mn257Sc2sZISHrfRvoC?dwvD!Mrjt@WK%; z|Bs~Q<)6Sc8Rmm}+;@S8@GowTrXbybUPgGx2_K|r3u156bKM?`ii(5C=9E%RnJnKi zJDoYCW!-**%wM4!30WKM4J@@GG9M(1fY_}yWx9o|lM@pm{y(I9;N~BU^Hw@?j<0mN zc|bMUK9Au$B$mV}dj>w97J=Uw+=ej}7WT`#9yC8)l0t^L zmVM74N5p>-KO!=ZQCys_<0v%;HfP}CSYTe8pQoxnW#)e0yaue3 zFt1qW^FpM0fk7me0(D(l183t4-)`GvD9-zFrO{K60*m+EhA5BQM~~6v=coQF69?1X z5QiJ%;YXT3eombROkQyb_w356srcc(h#B=qni;=OspzUvJ{>0YYdiM~ z{$Qti*`e|?JoZXU7Xm82J?8*F{e<-Up+4G!RC{P02E_o{=|3lpymCP$v2WS6rLOme{hBPjM7yG+{7NM1MnUsRMIp=YIBMymL-KS(R3MfW)CndI#8R!8 zx0ZivYAqdI(PFmXX2G)ag@YQ$kdmISmDwR4HxI!Ce4M>Jb62!H&YrqeCH2>chYNy& z_c_{Jnx$kpSU=yIgrI~sF>;{uv>vuFS%Ecc4|uB0dM_G9e>T|`%}rxl9ryt1f*@39 zqAxecXUsKrK%A7s`a$s>GOw|Xn*!5h+Xw7S%fh+n)0R(e5jwZ=^K`(v?ILi}bVB1i zavJuhRVjR=c?i;a2~#fb5s?a`x^eZ z$k|SYrkZr`to^|S+Ti+WYK+|gz^(-yRj$(&ak^1JU)5J%4Tr|I-qK|qw{~&M`vktnu6<9`Zz5}V1VO;P>UiHRKH)&_fi3KM9UNkKmXPvvUyXtxA zc0dR)p#h%HEn;NjWU)A}R>i5|huZ<^nv+LUd9uEx*!5vR{?Ka}%MsyiXbDUMqOw#{ z{`1~4#UqYw#0m4sw9oAH#YDM?U)#|r_Tt1fdZWk{fCi+wWxiY2=D4+>Ak;4RNk|;w zNf@Jt#tS9nWiB(J4dNq0!{7Q4`L=o1Eca*Pa0EP!e1%Ad9lq!QS8oGf74=* zi39RAJnxFX2hYpzdEzvrSKeeHW*NfbR8C>G_sPF68CvGOd86DkFW^XpxA$;VReVOD zP`N~kP&SfgFNJxq(p4N7j;(gr&%m*OdpF?oQ>`$Y4Ieb7^s~hb>zhY{0Yzbmz^Wiyw3~JP=?0tE8_VDv> zyyNh&xuSs4L8*Ya=^glv-R7PT|FoD@VDsI$58WqSlWb=wEbG3PN}!yglbu0nbDPi< zoob+MwCm-9+X+D{O9<02T)1z!rOVC0uJsC%FYLXJ@%Mpy;+A*1;***+dKF6{4(+uF z+_Jbj&nuilsE5hA=rFj}W5?^>XT9$((r%KVlk3s}F7 z1Hmb%H?qFG+@s5U-M701-VM+EXqFu9l#>v09tY(=Dk&UP#uorljOqg~Am@^Lc(#YIZPSNhu;#zrF zKkmg$xEZ-34BQdQrCSi;9>EcrLamMw@RU_f8C-dr(Am&y9<|=IINlN0`^;TXtZxc9 zda39o*2x(Cp3GietG-vWTX7R+<>izq6s4$QL(|9t?wD+!UKBCGZXqzZ@kd+Ibv*?+&ukS13 zZefz>AEga%I0B;M=|X@bk;GNI3ae{0dGff5?m&*k_6PonCT`{+&aMC{&;O74!6WV# zGUox-b|mKCu0n88ZpwasnZVY)9a&LiU@@OI7i>;E7%Z*S$m! zI;snrFZ}};$>{=(wgM2V(ATJ*xONq;W3lsdtgi_l=lO7<=bx5;huommi zlQVG6t6ewKpO;mxjwcG%@wCHxK?#;7%Rs2;0CiF=>K5_)nkPouC{ zm9u6e7eOFoGQ8i9uDUhOM|ZMqW92CEBP1%3-zxv=_YDH)h^-t)hT^wCc`~htp4T=T zDx1@ga{&YoOOo}udr~eQ6gRZ)s&)=T7qWHxY)64yTmKR5W;A$Y?tbaU^I`jNic7Ge znQ+i;2!|)!5nace472g%Z4)PP*NlOsxaC7{f?#t)=hK*rFXA}jnj2p}y_@P4zdDs- zl0Ne~n3qz-^6SlYi=eq7AP$5P{V;}mJiC^3AN119?cT-6)o0Evh|A70SbTU8KbB3m zMB(ZCK|z9`=&Lb-LO*wr>-#v2gJ`CR<{2*9XOg98b%=#Gy(8~rvF!D8n~ehqP0M^h zpK`!HdCqrOUp_e>-aP;tPkMRzIn~*#b`h>5ogb}WnB%9_Vb|$D={uL02#{DA)yT<+ z*Kj=WL%Bis*As-H;Wu{#8%HjcWuKZrB6s(pRChMo0K+F!(lrdORo;^7s?z7@xm4tB zJY+ZYX`IVf)%v@wWK_oN*G>DxMiy=LwTs_=rJ@yDY@~@M6?l{Gc$6t?IO;w&6>voe z0`Zgf+~Z|CIO0>7Y`Ztv4vz9x@kSAUH;`{VJJMM0WBxH$^aC++=&8>M1$|y*y}M^4 zJ}o&YJtbKd*`T^XIoNbaHG`anw9LTYdYQmOH^BSfYhqfz^w)$pGiC(O>(^3j1t{g2 z_iW2*7a~ut;3fjfAQ)e1eB{jasCL=6Ev0td`(K@y)sj*hwEAlb-0nM2nkhI|?>q|V zhm#OVVOZ@Xz~VVE62diiqkW7Hectmi(A=2sfMI54&z=M+-nZJSB2^ zkpx^(_3t>70W1PLF#YIds($fvfvd;4;g6mw*^O6m0rt^S9`44O@v_E!anxa0xV555kpgju`VY=y=$|?B8LV8*)N&72TN?Y3=vc$q zIOcy7xn>km`V!TgQ62j{K>qem_*HM+_Rm#F&9tl~N&uLG>&PG&$Kzf|9BcUz?_YVs z(7*Xqmg;=4P*}&`$wHlLw56}!a%4>pnjNKay}SQGeaihEa>}nM2iOPAM?@xn2qu4H z_%G*5t1w@by_$}n!SMPU1Wf$*Y^yG5$e{l(fg}u=cT_J_-AX!RcI28HH29l(PJ4y? z`PZ$Gb-)0)6}IBERm5;@0P_PdHvf0z{@}}Mw1eOz>s;fE8z+$L{zD02_;(ne>?$R+ ziU0PcHGQ$%?Mly>fPz7hD@kAMZ;!<&IXi6d*{0Pq0i`dDPS+5gehfT%%?6_*kHooM z!oFY6hkp=HTQ4}Bz0{p^HD1h(N`6|o?qA?!Sh=%sZvuc+V|wZ>A6{B5&7t488i~Ee z^=sLX_};qAi|zPagoRQ_XQ^a_9Pp|A`^)~#>&s*H!$N9CVx>r0`L8*nQ6^;yX{q3( zwGQ8*O#j(d71TVRxc}{1iL-I2Y(fZ1R+nv&+)W(SADQi31!EjuD&bd%_?A`cls(~k zDtbjTudqvty1&(Scj0Hz6SiEdP00rNE_P0x{XR#3zh5!lCun1q(h&MObM1~>FQW(% z@FCXSP(b^Dyi|`%%XujT5Gpspmy-{PdOOuz_|^Rad;?A=kXik)tyWJzlj!nHhm2BN z)0X)Fr$8@iqzEpKKa_0rt%i8GvN&y*fM(&O~InTv6Hvh{>Yl!pArfx`}rk@K- zSZT6Rzscyq>s^A_H)NP51qNcVWdvupp96>iLiS$AXGa*xOsXJR)4@^}CaKqH*dk8K zAe7HbKe}=+#$kAtU7{swvw6p|*(DhZ6sT3V1dxjz287lwNw=Um$lfH-k0pz#9WhnRi~D`%P>YlG`wpHkp99IUjaoad&$Dp8rdFAkOqMh-l3 zHIYoQC_CDKOq20rcC)||LJ+b6+njB$Q|zkeYePhWf?&ax-(Q_Ku7lq2Gr&AVi(AS- zZf%`@w;vb z9aC#1=Bdl!xyCb_<=5BW&hC_QcV&%@^BiEuPIU$j-7ISKSvYXfJ1UX$%9;@YNw*)m zD9rM8v>h>WPSr=cZ0*yzogQMHxmr(Mn+H8$?TC+JCSJ`)qIkN1<$G5_ca5^ay=-bu z|3=RE(x~bHYp;a8GR}^x)WxXSJSYJ#AiX)qhiAbP@75A+&QeTJAo82y>aFN#6UjfC z+JADt5{M52Dh2$DIM%^OJP!c;y9_vOGXItug!y?G7Hq&&Ib)F6GQ5uZbb+baL{j0C zlU1nas&a+SvqI#}W7j2l$A9;L(qyH0IY{Ujw}kE)5Bp$yUvj z#km&|PB;rk_ccso2Aax1J>40NK;t3#DH!>%7RBh#5d>NB+5i8u(H_jZQ+hI@#c~is zOalNe@5(1*K)%rS3Cej%UQK9tMhXGV6&}?M2jcBI!7XL}-AfD4}s& z0W$DI`U=41ox8HSe!x?5s5o`{_e@DzB!I+@R_iXH>wpWs9X>uB1SBJKhcrwZd(?7- z%7P6Bq}LAdlHoKr`SQjXJEAFs=s8Dl|9z|*m)v7zS?Fe(T~UiM61r!nDBnmm?d|>$ z7EXWdli%jC_euQ6?C?!Ts5rx84uRs05(K)ylWBLq!B6FTOid|`^xsVw5rN6kGz-M% z=S>}_a(&xqAEQAIzw&jUxU7Y3P3uVGr}+Y8%Ynx!E&dU|8?yy+tS-lwF;!AgZW@!u z=UNJL5VXtGMzs&;r2gvsD*2l!P&Y(ly*fcjy|uH(Zswch_?(lFTUByymhb7Qr}-K~ zj{@Ij<~QJwb>TQH=)%#`Vcmnd8)i#YPJ66<(2e=o-H;3~d^a+VeF0P+wqa8uL}LFs zlI`|`!j$4c;AN_l`t)Vu2@V>&h~kQe4E@aKh5p_)D;MLh1#I@!+PsARqpytOC|X@x z6>m3`?!DAh=@}8b7Fk}Yjf*F4As8->8J5=vHZbJ54EiI=^z>`j1U&gOd!as?v|YMK zH<*1=J^tRW!B=Sp86NO&TdcFDj7S|$BsU&=&DILK{(D&}?ZwTT@ zaeTS7%W+BG5M;1rPEtb-km9uK>fWtiEjKtQ^~R&4H;#Eu=}p~-zqu?=uX$Md><4;R zb<(Yeoo?Cb7G$C?LZB_W&^Srupc-pa(I}aX_2#Y!@xApvhLBE`n43yPd6uzPq<@So z$JATfKw4h+gS_eH_*q(v#=B?h4`W0I!DH~jY0+g|1nnk<{B47j6Fho%6G>cZ&a9>~ z<-vQZfKz@gqG92<9gh=6`h93hrDWOlcVRrFhLRq25Vap4XxewcTFQ~F&C5Z1@QaFP zWzz7JUsXXMc2>Np(5T2~^LDp|khK+R&JD?PhkLxr)it|3R>gPaK8hL-~tM#;L zYlgcNyPBVHEi;JNMewb-X(cTgF&t{WSLIv}WElA~4>XOfnbGP&zk1Vj!10#$`|De2 zvFF4i1#91`E;7W?WYv8?Ut1~IRPp^Tvr~DYR5&qo9;^^>Z`iGs)sJ1UKF)4&W6DQu z??N}kP@@|XeY+!zq^h$)W|qH1==UjnM6LK5o@=-sa@Y&CCgLYom#{KzrZ2y*d^bSb z&PNEnt=B-n{JDLSROK{il7p*>w?Ph^?G37W$1NU@h!CEL*A*Bq%6#( z%_hW%F>N2;Fz4m>->qpr3 zviN=UD6c?i#$}PZ-!IiApjO9ksN^4#MKhxifXX9S{*KoJVPWmkuYZ8;|4UM9Q2}pw zKm#E40qhpQOnL5jkZ21Jsn9d%hf!h!d75MScEI|$RTA49q_*gDKQsH`#eV=3dm4>g z-DV=t&V39ZKAC$s%(DB8+zE~r-y7CJirvepJEP@B5I0_DRv}30ZdvscnmC|68D0T6 z#>oHH;S}P3%@1&K)16c#e)u13wDm4{VToNw=FsbfEEC%1xW04mSsR%Bl+Wxc*FN+{P+99{)4=$ z$B}h&*~UJvC9-EeUGrMOp1T79H00-Q%d3?5r29?#J@*w+J^Yu%F@9W*zux{zZ}D_j ziQeDvzYDH&KZ{g|a9r#XRE03W78*C5KB}TACTCh}{@@5XosMP7hMB*mr}ZWH<>%qO z{&*NCx~fsFFtb8$;U9ih$sLfhrU!DWpW!Vqy-r!;!TArvAvQVJl1xYqH?k79idp; zm*&^TL+Jn1g57xJ(S&Jb2#UA_z4vu4VWYDrQz63*#B$0 z`pe^aBR*&wUogU)r9)p4i&D!?*LYXTG2b7McyahR%lZ=oL#x2>IW~8Z6HnR9`GfnG z{$_b}xgrZjsD0cqtH!zG2EIzZcTt86rB$shHS+Y0R0O3Ix176mG4z^3_n<$ zzRc)FlYZ_S|5*Myju(3N4v!IYy^yx=`e6_e7R0ySl~YZVyYs7Ci=PJ{Is+Lfetyo<~ar$J$MtvA%q?ZkU?#z-m}=F`AmE_vhiM=V<}!OB;+n_VgU6a9}% zkNzf|g9tm>0+nI8KDs51E9K`W*T0?}-A!hl%wWZLna6!8j$Lf^2|i}d?NRF4FvGY& zHd65fT0UDoQ)(O6-1I~-035wf?Hf8G3H}2O0o!pXPIJUfl98MH=H0c?`r+NqP{dCI zW7#J9|aP< zo=(mu(+Im0PT^|nul8x{#~HETvi^~&UHliK&v)1M_r(83^oi*jfck-5BTmXUyu@c2 zx%{bRL)hd>h;qtQ3VkY16j^Q(&Z1=P%x6G%Ltai2M+bd{a#w<9n6pQzY+a6rd;`np zNB=|P0a^yVoZjt6%!bowx$9>pJmD(a>`JVWB^(z__Kr%QUg7@>3`2z`mRk&IYy)}{ zXLE-PCv;D8qx2Q8I@QXaO1IhXO_&RR;gJ6W<>L*>US1`28wZqN{{C9{;hl5stl225 ze~^4j0)LW@?h04D06NUL;=hEmsK@r-{mtTmodEu7xzY~6OopHeltm?81sduEkAK^^ikyF3k}2MO5!|;Nh?3!4XRDKl zO3nS+uM!aiNS<{!yS$*ag$t-KL#&zlV@>ulpC)>c7M#e)MoA!`UtoR}iLb3lV@ z?UTM2j=hC5#a9?XZRuV6b_D~89F=S|lm>;(j=&lw09*i}2H88~(z<3Kmv7aC8>>0L zD36rT6W1f$vrg1NI$t^M;d>8#l|-Wpu$0n2OSYCYFLt@mj|;rJiEq1I%Uo7b3pPzX zRE}KX81+G&mAT%Yrt<1>K;rF18mVxa%;(;$!MWrq+rCWaA(XIechYL<`b_)B9_Z9|*4|>*E9PMt8a|d9z#~_4Qy;<6Vxk*y&(O99t633hqLsmcKZ_Z=1pcm z8%$T*ucQx{Wm-B=pS6BI3xjCgCO&dSYm;rT*)$owMswuyyB-z~@_HuFct%E+6w7|# z-_E9U+}Lu^rEa_;k&VMf@RGzZkcn~zqQV9DKC1;;Ous#Td+r;rLet{B8zj;e^y7FN z8Q3!GxiEad2?3tW58s;pXP6ozfOX>=KB0ws!lvoyff>EZX%|jhc@`@V3?Zs2ShzSJ z8m>z>EY#M&^wQA!?phYIVmj#*;Jh9FI`ndg5N!x&m%U_UOw7~ti z9Z+DFf%F+v=brf?&4Xh9mn0C~7jYaY*D^a(f;8*ey@2DqDCi`{ZD3s<2oih)y;{p%FB6u!+@u&(gza$4K9`@2H!rWcHCYeZv{5 ze7fk44nI&PLuH(G4YXAkm0d9NDl-Ht5Sf1M-!)cP}HHYAS@U*%pm{6~F6N#uxv4%#gGSvUN zX+t{ocV}HJykvH~OA~)XatZjJF)wiD)wUl*6*+NG7-mfd5tzx zs(o!#bg>M$XRVcPMVEk@*6^t#P`*9IZYBgOUjWG`I}SObB>Fyt^M}va{Ljp~7|iZZHz{iD^s?mJR{(7q@D=F@ z0XTy0DKlPwTEvM5e;TUk=H+qEc7PyyBd&b5oxkIn_u-^~+dbFHab78?7IW$-Y9s!eNE7Wieu-vW%p-&u`#|YY?WJ-=NnhXg@s0YdTC=PMN)W+N>fMO zPPr37;>c|pRienpvoRln(2eL}wC$~)gyG6R65{)rI2top03zjyW#&y9I(axbeq;8J z$K0~MmY@?_lce~7hSi~KqQpkqT%#13>^H4RxbHiBg5;My9Kb17Bux72>Nz|5#R~ zGK8rzyi3TrS&`XpT#Ml1`8loHCX4tRQC9+^ZhDO!_3tX_VoeOAX~^8ynPy@uxT%l0 zo7JAqODre|p#CUo_qYE#K`q@pIGu&6*9pJuNbQR)R|H-lXQz@a_K6P&m9OPN$)m}c zKFSXWbxCq>_Ue8aRt-B{9vKLCCl}$7dn)(Z6}WDa7iEt>K1qUnPxGggoh2hS%CmKy zk`kU$6(@zBPP{Ucw_+PlY94+>o z_|a9wi^g9+>FpNNPPc>owliU3^6upns3tTJm*-!lkN>GWDeNllZ4;q6d(}Mk@v3rU z;ujfOw#9{mcx5Mwv*EjRc5;Vibs%liQ-=eA%V#AzdzZ@*_} zHUTi5aJ*C3p3d=BbJT9y|GYJGM7L)pr!Raip;%*!2Gb+_TJfAlrLL?k3T?tV729$O zeX|tKT;^w|e=i3+$i$hpPOr3NO|`uBbu!J154;YXy+WEGs*o*&`d-jw zu*dl{3H6raAO>0li}agMFVj=jMni0R6E-Ci?jo|2uEWh)wdA|Mag)i$X(WFaRIu0X zPtlU^Bi__4e4$Tb`H5Ki)BF2T7}&&87&iA7B?{pCPA%p+%g8dX?Ar5L_>x=O0R|TF zdE@!w2=&rwnae@zl#z9=M$|HQ(qSRp`E(th8Dp?Je_7n%#6o09F`{_inU&|4arhgy zT=u8cb_%^3ou+Xv?(ZFXD8__)^h@87^><=x*@bU03UvJn<$}qdC{)FZj>IyB_8lne z*Q&PL_XzfKllm>PhjmKEQv;$IiNT?_PAt#;o#S~co@EdRUw!%ne)YTF$oh@J z)E0h!n)$u_g{~&8uGo+;)M+p=0(&AQ?Nmq&X_B~L9xR9m^ChxW4y@&2WzgGtZ(oM8 zlOQXruECkcCYoLf8YsN&JIfn=ZW;@IAD{4h8x?v%a2Y%ABke!du`$sdo6xwQFe=2| zWjAqcP80qiA`*=?5t7hN1!p)9DmQgg3tb=WDn@8w6b-RUri#1*1N-21BJB{F}NkCNm&qxwXSVG^Y)3@l3i8r?b zjwF*NP9tZG-m`1jyulpT*PAo;eSRW`t!DN(P!O%T_4DT7%g%^R&g5%dp6Dm3oV;YB z`TSj#cv6G2$px`+${$VI3c&~$7V4`E+!E{eiFI2^t*%1sRgkIejUG7G}~Ck)igsw{JHP?37@Pl84VO2 zzu6*LNDO|o&jV2=cY82PRWtp7D>YikaHIbIt>w6Z-FE z)pBF#^xk9WI?d{Y+jJFM4+YkiO-M$9y|?Q=5aMfQjt2)W4Cngb6TY#Oy;NY1s)v`3 z65(>Q^^?_gWw+aA4uc@GE;q&2FPrzK(9;-|=Ug%sxTky~kD7;*G+yZo5-w4{xu{~u z%&OPOxgX={6{k`74lU&>c7DU>wehH@hf&>q(uAsX+=!N9apGLLoT2J(crn_=1AAwY z+~FehF^K_X4S97R_PCswRPfZbZz*XWkJV3V?}b& zO=h`n*o)-V3aa8=$hjQwDH|9R{zWxkb!S%aWL_dBY)|G^^t?S@SwV3&oAZek!wc@Z z`e5PW2OF_|LYgAOY-w!`J%=VdHF2^tk9GP#O1s(ABHUs=Pjbu5v&8~*NRY`a0ZT?8 zeG>lsC%dg4-ER&mX=&cZG(`Q$SeX^s9z$tLG;ovJAHT>N8(B^Y{TI_KaBawp%WWs# zn#IH4YBwkI_ftBU>1*xAThI-xI-{fel!ZL_Q1qcqn85DFo&xQuP%duHPvB{hbKoCd z*#yR=uu&+ThO7EoO9h8|m#Vii`Ui84F;8jA_Js{6_(=d_ zBYz0Ys?T2MW59G0Dd%u+&lulvXnP84HSb=zf`g7t;_GUJ=&-F^?)g3Ee!&%oxRLF; zd7NMN<%BYYQE=hWy+kwInoA|lk2LeQY9y<@)GTzud^eF}MIa<`nj(wrRPUY3%c7SM zQCZ6QNo8*0rZQ>--=|0CH#T>Ad0&vj9evfk?~$2&LvXQx-X_KjCz%*ei(!};|!tE#Ev0m-mE7` zetoQprQquaqtqCUk8wppO_r<q721m*E-we@Fc(cZ)bzr>VFdecPEtmt~c z%xde-{B^$t-5%0%4)<&CHufeBCk1Wzwa>gB`MXYj3EIFtaadtGO!_T2DrjQ^B}~$- zhXen;+n-f52Fo4%=(qP9cgmz^Ss46>?$ak|grpxThe><3d(nmWLtgONC+tyj4fktM zZdqjXr%zA|WWdDTN>Z;;C z$)pG??Fk4n2A?Di13$uCBRTCCx(e+|3hE&_E!oRKip)KmlWuxma5o61jXJpw-av6r z)m08vC^GR|uXFAJhOk+NA&L9uV$_~T4K0_9$|tPr)Z*qejFXh+bXE1#?>-mo9tH_a zn_*guR!+=y(K@Ev!yLN%o;bL2IL7nGv&2ZaXejJlM`m!GW^A9msBAUjE~~mjH1$u1 zN8ojDsFdD|cF+6%94m*Ke8nNGfjv*r|MeTA>iAIUW-J{M1_wPX8b?v%u4~SZh88uL3k7K9+*vJQ|a~M z2l6C>w3+n%aW!J&y?8n5^%@1Hw92j{uT6vp3l5{43|DXn1wy*Pe7ZR)*qyz9At`6>~BA7`s_im_R&( zA>@}5s|7i0?yg%I=j+O8Hw!ulT9s<2l1A|Zt6lLA$U1%drK;dZaE8pf7A)FJb2M`? zH1hPIqSwG^1-#4kb>liUzgD?WP4SM6!J>JeAo3R|vUB#MY4jTT<8@yGuPhx;Efx2i zlv3eK;gbXxjTaYhjo~z=;_EBV(E2ne5f)9PqkmrFKkq1vTF@kmONJ8UaPte%p%vs5v*gu!qW=9QOG; z##Er=aJL8EC%#%~|CL8{Cj~G*%j{>?-eH}@h%UZT__Ni~25jx&m8Y^v@yi`w1+1ny z366zgiR7)(3$IBcntEFX9iFT@%-a;qR3wuq-z4&E{)(*nQavKWlUXYo-YNGzo4H>MXysBAW36`h43;iZL%zS-)5b>ix99Ol!HL@Z}kE4F=w@#xGZ;G64oR zop_72?;AcV$6;FT9|9;lJ)V zxLPO-!BH3&fiYGZpubwoH@G-@sWu|$hWWtfL1(YanH!~Lg(id;a*2hDD~25q(T+9I zBuml0$9S|-Zu;;6dJIuK-Gz-?Z&0W#r67xMF(-@wQ#oG){xDXzc#!RC?WqgIHUyVw zp=W^7P|VGrDMkB%(yV~0G%d#XACOPqOO$Dho{7m{wIP0!VH!j^_{cZZl0 z8LtqMDG2CQp!~@h&UFy??z}a)>;RXk1%v^)v57MVypVvQE zU_N_^|H@vojwRfN^*3(%Y-pE}^Lv!k1zoh*X0oCFskrA;wzpKCn54jy;o+ktGxFnA zMKyZC+W~Fs^D(qk+}rl%XR`w>N(466V|=im7wJ0;}VC2I{D~oE~Gj=t%;Xl zU03W!aN2A7Os#v{LT9vub!K!hlgHzOyTa)8w`OjX;&*%#k1;07k0VB8E&QzpU<5w?pHwO4@VxPBa*bbHKQyXK-wsJy# zL$ZB;*0S{cX7j%H{qhbOx)dlCQg(?aj&Ot1>ie6F+~LB{I)ZPwIP>?py|bjnca&Uo z2{mJ3x}lK|$UA(xqCK95M_EoYy$h^y37TV=7c+TdN+0#sfJyrI_1q2o^%gSsX?*di zEM$gy{UtKEG&c!wRmzT_t|7XG9=y!?2CZC`HkbJap4XW{8QCSlsR*{fvJrou&#j%Ur1pY5 zL1a^dFROS4oFb%G2j1TnP}UM2WsyQqL#|3Efx2;Sf^eFNG@hBG)|Jq0cvW)2WRc7k z=BO6;ek=8W{hV(AlPP$kg-0So(0GofE;)ACew|Tb*yW)?7EvytCsBbQAjmN;+`5vu z3FL4#EEpCV5fFLaiOXcyNt}-0{p{XFN_V-%MM(7MM8i2H{4PW8bOfb1C@ClKN{jB0 zDT!oV(x?4a25sBdT#a@wBzSUe|AbL($uR(xb}b0neQp1)W3}*vNv<$}0e{LZ_br2Q zyy5XtigS$qXa5b~7MmAeWC%MeKJ%XHzXJ!BIV~n|Bzwh0xnE&S=l<5S!I_<0=9z!c{ zxM;fW?G}ne`!j|0EsEEvjp!3fcF&V;zU|+7l;{8B<~c_s?W_zesuDMb_VOa$~hkeW4sk4syGQ; zp?$>gS@~#$kWIuhL-~;uYU>;#g1$s_a+mPN784O+a;hON3|0zwl1J~0MG= zTx!O~F|p2baD%D;uAa62CO9#aF^y8u-{bmS9M9gY4{E1ZauFzXKmWoP4HSs9)br{> zz{2e6Yo^wU6c#;4?*V@>k{#bk{Bt$?pKkWX*d`eP;#2giEo`gYU4~}bz~|n zq}gQ=lAsT{2!?-_8liPQr+q}Hnm?URToIAluFjG%nj`nnIs5xPlJFhlU!4Y;9w+>M zKozLw+Kov`CS~`LJaw04#Rh<~jBlzP>rBq0-Py3WhdjthT0kux}p0Zre zLqVH}2fIEB633*z+0W4E=F@41SE%`kI=|o3fakvMv7~OGsE8;UMVz3o_|jVv9lpQ! zX@2t{P0E}$gF=3pCQ0Ev)BSk8i3dyeYE5U&YIXDY3X_G}D>FmsI_&SAdzl5&4CJlFkDJ5TooY>s2v#R66%%R5 zmy$eo)2P^vYIBoBh+JZ|ic+!{s#qqX+}vG(I~H==D)Y!5n$mS73i?o(Y1^%l-~!9b zzj0w$h@9wD+Z6m=K}vT5+A|vAaVM2)z9_kRCsdVP(AsGjA}sFGF=GpVX|54qZ1+1p zM#Pv=*hGLiCdl2(G$~npcJuA#k#<4E>T?UjaA}Jqsyp7NsY(DTd?+mm`t|D%%XMLd z-Cj&2PXa3sb&utuzL+w1sdY)5($+^X^C)e&+f(6oTIzK<@%!QL?C2RnvU=jM{ydae z!XzwU`Xg2O5bzH%s>mSe7c~q*&N_iPG)Q!2oQI!+Tg$#wVua}D^!-%kBA};z#m;HJq>tQVR?b|@~zNI;Q{Fvq{1@s(S={6wZiuvH;9O*t$XSQNxR5?mH$Ej zX3krW%v+%rFcFc7sdgo-Rlg!no-*QFlxTml&-In(@jv^p1`7gwL{}@G(_pH9`I~#@ zSTJGw^B<#|%i?eI0{2fByqsC}+k=YGMO+TibBH^<_J#fDTghc;jmi8hfaYM2ZJaN+ z)5hnId!xE%W3h-wR1*Ya=hWx~QKJ=nCK!Qg`0t8cG{8g>nHpY~5kfO!kMSlJWHyb~ z_hgg#1PpKhSZ^9mL`|c-tl!V;Cl7v72NC{IhhK&{yufA@lB=i8-gt%vQ<)ADIa+Z2 zNgtv>(&j*qkd<1!?RTGnOl$Ej!eUBZ9L=}?Hk7=Th!f8PII;m~*VuJ4Hy}xwq=#Q~ zBEPl71aX1T&ZEo4&2Y_YW6{cgXuiSIUytpP?DB7tsQu8}_7lOoFvBQ%H@WAHqaG*s zE{#r|O1AgW7+2m8Dtxl3AG=J>tdsQ065lU~aFvPqHQ!0gqDH$Ml#aL)nnXDw5Av29 zvT^bqpJEe0jatnG^6su8{5qaO4n#lAt`ig2QC6$In`hNC2%?nx-Z*cAM!G6^!l~d# z=irHUiAjQ6^f|t!O(K|^*dH@(>t|@?bF0?SDSGFJnKBD0*3Vrnpi~hccp59$S7(d& zk1sc@gqnQmaOTV}XzGDVua$kKg;XV_UBLd<)xOT6mF~i5Y`zf`Gf>^Wlr$#+VPCOG ztMUWE;`rQ^PQXBQIXDY6D&ZtEdJ#C5)_5fR`kumRWSprtH%Ud7L|_kS&i&R_+>3bwVmuaCqdv2Ml_hUBHh|Y{%AfsIA^PG^R&#!SeiAD393X_kw-hQOdmY#ns z(C8(P_9}9}36pq95EM@EeOa>Y1k+YccJmRw&WAovT^7T%@G*;kw;By{9fGv;F6~JC zX;9{*YUsFbX3eTiUnP-8in+xI!w>s8$IaldwE}UM;eNdWT2ESwDwt_*D6gn$o=oq7 z-S`whX{1Ypety|=BY=h{P3KDv+tF&Bl{w;<4i%ycB_<3%B(aDLsK;SZ9uf4(d*T>< z{WhtPVTQ?w&cty*aE^7Ib(dR)Dm=y^M#jhPi;17IUY*iR{F#jC2S$W3{H0WNl}u?e zDFutm%4ca>?rJ+a`)PN4llf$a&vWA3R6fO(slMx;CThF>?@`fqN-d%lw4DUx&qCXn*rn<-Fm?$_^xIsD+4n$;p)!hv}2O(~bQ#ox^PulQOzynFY~6~6=2 z<=kRT1Rc@^Ky*Eo&so}m4{5$5kpcUvY2AqaLboN-M9@P1WXHdLNVU~XMx{R|%?A6h zGa!vv^fR2loT}85C32^tg0xo=*YzUwEXru;}oqOWrfaAu@ujBGv%ZTDrjHkBh-Eqc;@nNhzKal7}K9|wMOh+sv$G70gE z71RLrEvBs?GaWGPO27;fr$V{Jet+^J^e$|B42HLc#9Mb@gH)i2Z0i1H3f<)-AeI_F zl*jY}gR~%!8b0C`l*Yu8>vW@*a<88O!MJqkk09{=ufmOxjzbyE`YrNsr&p%r#<%Kc zW+4>knOz~L=Aeq3f~6@k?k?%n=wi% zkKbm-hO;7~L6?#!zT$?@tI+%C;w)mkh&NjC4G6~nyC6XI(G8_lmQm0D6!lMh|m^Q!{~^=<|U0+x9~#2GJ^8&ZpmbyUCaKR!65DsP#WW^-XN_2-ZrxSEQRR zD!&Y}t~nglh7Whc#_Cr!Yd%_SfHTyUl1irfWU;^;vaFjEf+&E`gi(gIxK?P}ZIfJT zY-?_LGBBF?4~# z_Z=e^bj6@Um|9djD*MWX-Z=E85AN8Nlip`MqY*iPEWfaHe>vc3VdAozvqX8dICV{r zcuD|9vJ=)rxA|NUh_U3~G+-W+Rn?&hD9ae(6yt@-B8o6B1V@LW*3(WBA4FSSuApMR zqVb$PD4(^z4vBv{gKqci{g%nYPaV!oeF{Zi+ff0RZ33i`#oG|WWiDU)q4|fJa?NJX zu->&cBio+Ow>K>?#DIG~2*Oon4=FyDXUf<$%jb{FKy(8BNU4|HuVI{l2Q|Z@T%SD* z_nA%hqhEo%UcS!Dvau1+E%?*!XOMqcd+XBrBItM{!BA=gFDM?@ww7x2C> z49a1aLkj6*W8xzB$1wC(QnBxQucof8diL3;+)4B;ZWVwbbvi^7VReqoGc@Ubw-s&d zLK6}YnMyEQiD|pXu%Yvf6w#yYlc}MPJuK3IbfOYm3yPr%_cQ`j%U^ce(NGB` zgu4H`P*S4vIY{1jxo>mMzU86#B&$nxv; zHIIVzNL)yRveAnA4k(}XMu;__t!DT%FP15Ks;FoecH!T~KIIDLK}A1Bebngv?PU-G z`q0}{L*LEQ3U1kD)))T35G6K?NT}!{=?ijThbk9LA$`sxoaEe@9a>&`$h>%Xj`58- zu{~?>(D*>}IY>m*KsgkMuhgTha1qyFw*ZR+MK z-WTRI;(4*yv1S%*h@nyqy`r$A=lg;w>7Z3=+?2qmUz)fM<|VNIq%0W-M`R$?HG^Jr zzZMw5uhrK`A24$P)f{GHJjXdD?%Oc`dk#>}c@UuWY?Pjm)cH|n$(OYhlHC`#mq2;_ zDWv8MdI1~Lg)V}F@v*DE*2Gs9>|^-wI~wWVDJVqxvcI`CykafY#>EUuQE!ejqq;b~ zP+sr)m;J(O4RI%STVp_oeT~R4uYJZh`|*aus7o@okrB~R!OhMjjx7UYTB1(@b-|?7 zwBu^adTbwhoIj}+9@eCE1uzLb#;$7Rjo@-n?qS0$JO6{(rOiQM7DnCCEIhAiR4{_N^Dw3M@wsYA@@VI5>uV{o<;$iV zPr_gC3JzA!H&ZOv28I>Zm!y&R(r4;g%jW(zSNY!y_ab&zm?$|%CA-`UHnR}9Zz)R4 zV(6$_VEVc8s`l8;-*#z>xxguN3c!o-aMR2}f&#eGVRaA!>Z31tLjwW|j-n{^f41VJ zf5pB}aKI~g+B^B=?TB|2?t@LR0xFojBgE)3{vEtiN1Fn`X1#eYl@2{xrNp@GZ91aO zC3%rOBZBXBrpZY{I2WrM$!P4n@JeluGdC_rj|NOQy(}F!h z+}sFHfukN1cggHjS|A7H<(b`t&e9fA9##MWvE9s_#Jfs%Mj{?C31zT|GKTSe^i?iB zt-eDwXA^Yqf($`)Q(XP_8zfAT`{-gjc}!CT)F1jA*ArflF6S@LoZ2AnOBkH8FN<6s z_R$aVDdn*^-6q@=p*Gn4)ou? zOjo({{c!o!Jz6w|VFa`$3GMbsM7LqR7qg>odvS7;y~qXSG0A2@DT_-%*h!e(iG|2M z=Bo%aw0vuFWNte8k-Q01-P)8@yHSc`8QHJfFnuw0ka~xa&BNb2gWAD3_!!1H;ZAup z@^mZ+65ItCdEUxqVHR`qAHVlz_Q~cF653Itm;Wo0V!&OFq-&SH%suaaX&;m%)>@-^ zFgpJ%&Np4Xm|*CSONHUx%1>y}_q=41L3(Qn_66zLGE$@RMRkWWe9?nzlCCs18Hd>J z;7{Lviw|%-TW&E&HPT7YOqsPIXZP1Xw*YpqE6rP=ULFtBBpJ#p+anP{6(Td(H2aiU zep=01&6(w?rFs)PC2zV?$nSNcH&bY~a7I}b@-bD!{l>0N<4~#cn_^72gnOUDYQoVu z8~0L=yuvbq{o^>3ejbpKVD18$c>y%q3CntkpoN;cBFPJ-2apZ}YfUDT3j@1-ySaL_ zI^K=h_QbJFF+yqAH7@9PDgF09-~*)- z@0h6cMsSjcQS0*zVP$g`f0g$d@V^R?sOjF<*H*O$)8v5YrA$I?XBw zx}i2S$&LZOe&s+9gmMg_);ui^T{%_635wsUC%9k@iCrb3Ic?%Vyqdlo)}O=eJLd>< zWYvGU_Z9TziZ;D7Oav(7!M#%p+5Y^hr<1YKr$9-wLA?>hJ*NV=@H;p)qqmuH?n2gp znOmB0ry4YbBQ~->hUkR5^Z&xk8kdnCs`<)HYAEgKHNo;0VdSd*94bVMhzBSp4>^9% z=0bgt(|7Pjse=!GCu{16Bi(W)$y-*}!sv_9`8QVe50AD#^ z(D-XUi+)@#3mvX^yRxyN-89m(+mqhbaPwztyzdr(Z;N(hbE~Yi={8uQ8oOaMnPFxROk?$MSHJ-keCTHX;w@^TjI3?|7$0@dm7K;1cYbJ1 zDmW#85cP~R7q*FITcnH|qmOH#qzX={AhkYelVaP})-8RpNZ#peQlRFt^SPGSyM{Qy zQjOC9a1RT2eesDXU)ngi?(_bHL&18dmcv_E%k*TF6Y^`nz*YzUnY z`Ajloz!FhE`v*90V#<-1iog_|aOnh=YVN49Z*iHql1Bvbsp0x`;SadTU}dcB`tr!A zJd&RgSz}JtgSF<$9Wz;boSSDe8TTn~j4imq78d2>(%l`6%O1iqb3`%t`3fW`ezGCH zj343b z*#nTrO2C&h?cb%~As;PpFdNUEiG)%PltCatE=sqK?u5N;imjdgx5r7|R>DWcba|DV zp$vGmC#7gpN4*;Q=txv&(eRd z-$IMqzbyJQ0jumT^B`F|>Sf+I;@>{i^*o&U9ZtFTpE%BdwP#^aTyctaww81*QoC%_ulm%RI0k5FdjGXwXD{ z)lh!udm9@Bl;1VajGp(Qv?QL5T`+A^j22Mac= z$gQ^t06$hEDT;%yc&{K|PlXAknl_QEY{r#2PzKM$vxlJ~iIX{O(CjsGCOj#hoqIaH zALI4^!?Q>-0+%T6xb+yRjBhYj4&ZuD96rTgvAxGJC||Jm)U2)`xIAJTP_2F+`TrXg zjZMrQZjvD}phEucO~B3qh?N&q-hkb*u2_A4WSc020@oGjpy3`Ba?Bxji{_y+foehb_Kq5q< z{@~4E3tx1OK8GhjRY^`@W8kv#srta}Z?1DPj6>~#V9vfb z4~}?#E?3vOJ++3MyHmVHr2FJuUtZh$$bhSgj@t`2A^c8#@%QysLitPm3;CsUo%Q2z z7x-r#A1}(!%-bQ%MT|Rz)+_SE*@PpaIbN4|^U1eE4Lg|51GA8I;cK(6G5S$x@3rS> zc*^lF>~RG2P2b^FeHLxsB#!EK1#=u~Y|?P@KTr?#3T4n6F6GD(1OOwr`b?5p8oWPL z^A2j+T5+sPQ?y7C(T8-KI=A4KKmX5p=poii`GyL@+8M{GqL1_^#$|1ohUdye%dXAn zVWVDs-vTj|vzYLPK7-kgF+D9u*$s(9(YnN354ucBwuOpC5==g8KWp~8biN-{C`xQe z&~2u+8LiA>aZC9=@6lmIq&jtzkBl|z_l?v1PPl!8nXP@tY}WXe2}AN}i?&`k} zfnQ5~Edbmz&IBn3ejNAY(*<24Cv?TFLPGhLJARf=`QXD)gW=Wn6+ zecl&P@{&#jg7bl1nH5razrReTJ4_38_e-3Zn|?qP5j6`z z|A-`a{>G~(zso+mw2uFnwXY_CjkIhY0mW_n29H+vX#9*B-)g1L?nn(G*7(aijnhc= zw+LEb&ty!q$Zm5+Y9iwDv`R#IG>(z<%(sYP=n>R#U(qdigQ{c=jcw8>oB@cB*P{y^ zim>_E-F5EVXM<#Qo4y}y;HYl0$HVfL=%n|Us5AI30+VTBe^>EvIe|0?UjMt>D#nND`vs0tJR1^izIR0W6*J=Yg-SOdN&50FGcpAsqb{ z)KeeZCOzwx|E2~V%60vVJJTBx(D6-;>8@7{B~76^ET5iL?yHGuA#z_A+ly%9tDHmx z?Ek#*|03Ui;HGaRwLc-pWam_npNJLxZ^yTne+%IpR}j@L7ATjQ4bl?|nI;CmCcJW| zN`&W}m>cCRDT$~1HnIA4XaGA-JaTZVP5*ytCbXshSAe7Xs17AAjqCO%e!lD*c^7Cl z3XMPvWbs_g9Sh(np=4-xD_h{Y(Rq5|e2Quo(5b4G9)V2;R@K5GB|3;2h z7~{6R!hE<3;Ng#vS-KUCGG6H(9qyqWD|OIgqRO%dwj#5@fc zWoM)StRlli{4vO)E&^_;m5eS80A+;|ZcF5o*H!Y%+&x$oiT4Dq3J*v7*s;x@LVik9 zMES%aaTw!Ep*2Xgj3FXfq@abf1?czR4Q$E?IcgACr1trF-k$u%4+*YZE;VEwCxE{# z>3<|$ky^+jzJJCJV2;{6hjbSd$6uitcES#VhMuGNL+f0HgADAcReVLbc*3o6jH&Qkm4i@7OpbL4^=HKt)k+b?!5 zLN=L#!cy3B;H)LJwJ2AksbZu~e|YzA7XlL`;vo{!_rIDv@@m&!s(3sSDfLR?EV!eg zbvs>W@Yo1hxH)u?%Akr4??|?Bj(|vkBr1+=%UIPX+*^Zxmr9+ayj#Bl5}t=;kX9F2 z`3@s!NU!f%(X|$9X9`~-eB8x$Ww*|QUT=iDgB<5HfA5V0{tPw2zm|`gqXKoaX1xsv?=t_uZhuPNFAi{%U&Y<4$4t zk5SjOfWC^q9Bj5M3Fc9Av0XKMs)J9}$$DD3#$qfgB!aKP4f;h%Isaks%eOL>N!0l{ zv2O5rH2#>120E%l9;91^rj==U>k92edRXtJIVLyo^Cfb zPIH-RnzF0-L)wJ1LOCHvui{(WGb}snc->vp>bA`JC1pWgT4mclPE)6GOJQLizZVB< zhzGrUZCU!IWYnC>{Y?(Eul<*OnzV}QQP?y=8X4+v>vR`3&TpA}AF9~{O(2S%?{M3I zJiB%!`r0Feu)keK#0(nYpjv3#n~gLj0fj!X08vBV)K_1hRTd^m9^s4#1>Paw`Sc#J z9H9NCA*u&&fN)O!0F09aZ(HyIz5vI%o>C+vn+V@^Fn_vL@oI+(0P~1_}2T7 zN?bs{d$-x{fsV+l1C|B@oa`_ku4^y1dmo5{5cxB66M8Xof*fmqP7(=0usylcaUL(4 zc{7BHDM>o=umVxN+~fEK_?8o%QgvhWE+p=+o(&A~IxH07Mjd#(MLy~GonnSed39q* zHAdOVNsxuJ6u4Cr`o7u6!kVjl**oviVt~-`SwMGOpfi-CuMjn^XMW{-+OjA6^3Vq8 ztlvA&vyGar@;y5lKDVPM=e~5NRsNu4-0AI~Yu#nCB!gT75WN;fBKoc@^#F5NeOih^ zK2X?4A5{CLCs6=8QmLSVk6MsjhRcUmt_hZ@eaacFY%smPzWNjSP3rn2?1x^gR>uvm-NR)x`6Mm2Wd*U7z47@>%OT_HpNXz#0riqSpI zVff5RVR8sOVOC6-dURy}(ApLA%MaNpsS`}!mu7KTNy2PASSc<}{H3m~2C=v1T`qxR zs89b_%)~QPK@$EY?EsUG4AD^q=l!X*{95lUB>6SHXGE|9GWqEH(9p93ONn7mb>Vw+ z^xVf|j8(=WG2!`J^szL~4HhxNc@Mj+G#JwB23@%<7C_-bhn*wl4pPPeb(6zx(BHr z=ed!zbmA0b4YS`5LzZ1;9LJs?jEhh>jqmVZ|BKh`=5E7=A;Tijs{3)>K_CTe; zj8EbuC1ULjre|1C4s=rPnQaW>nzCy7bWFukDJGZVuzM+|1D=` zPiad<`(~P0(epe6wG<3a#11PQh`fM^c|!!rtRUReE{XKh5|caAt`cTettC7Aa(Y9) z0w2E9IL9V^&(eD}C>w60>3ex;A1f7WYqawFxf6kKWN~7SgohD|@2!35{VKD;hmu5o zT3H)ytAymrQJ{f9gCcb79%^R?vg93v8lz4NBH7DFBXdg%1zTomN9SGn<$h;}InDX(%F68vS!C-Tb+T?=5 zTG=+e8BDcV_wt+cUsQ+m-?a92#69YC6eRja1s9iB`KmF3&4Rg)nf{qFl=qXXy;m%~ z>f%F$?=^Y@Ns3`wWQ7j^dwsu0oO8@}8#d+xe4hNlone11n|k5)muq6wd69a(FVMg1Y~o0Yt_i zoKMNaVv#DOZ#&2}2`~yAr%syELT6*|$xqDd z`*$@YEh3F=ZR}wrHO!=)fH*gyvO}bqm$4gm9D82+Lfe&9;nQecWb(SHErzzwX|W_H;o$NlzqaBK1d&yc14ga3VL2p;NsFHKUdRZ>Hl;;FpS^U%b_;wW^;K^|GcvS? zVSBM=Nem><2H=E7sNw>g9h(__w>VF{_@%6m)3rif!OqGKLlF^BS-f1g8N1wgY~G@d z=~~5Qj=H9}_~UVg6Szf{^a8dsfCXd(Qwa6ipi;a&pGv=jLA(ETCkuP___wK(D(-@f zo%gF$$x~;YhN)Dt04}~j6R*Q0j)kGT&CukydZW%Qi5kR$!Insfro)~l+yh;93XQ4>af`i@Gpx@8=D(Rl>bPzd5w20mxaNw==U_7AS z?DZk;MxddNgRRjZH|}O+(a9afYHK(65I_H*Kc4Hsze$Pd`Sxk4Tj*X1D7HO+W11Mj zT-DG(bVD02F6UjngZ`o7ESPcqUU02`#*Ycvc;q_!oq}^$V-z=j#o?C?TRbCy?D!gu3Up@*th&0Usq@nE9+G12J~Kdcfvh=)7)tbCZ1udktfVTQsH*n;pR2sRpnR zkW?EWnvSC|Cf&`cCsR{$ZKqiad2jx*9M;))RK4LiT}f2A>Cdk7&Gd_WBbFr zq26(z7B_!6E9~g#TK#0EWYh80(F6kDj2JKcY<80Rt&+IKTvl4<0tXS~H=JBAZmX@) z+l?u=^UIHKjO9Mq|~Mn@*|sYS!;X&RodduGd?t3rayVpqf13O zb0Grlei5T8H*tC@nG^>czuD!pP&u)ldtT0>k_1jEUW^u3R*J|9IeS0L0)L(0o<<*2 zzud2Xc?o&BZ7(7d3-HK=_%_X#TUNP_pjr5mKHNN;-9fz9F%o1*95c4wzh2mO&=Iis z@@&el?tLimV7n9c0FO~{eSNdP?m7hoct(vk*~YxQ`0mQcreR*m%M(T>-_GSJ`Sg(oqDsB zu!lxy8eNt;`>kG=W|_95bgTF`d0>cPZ`LAPmuS@3+Rt2Q*2VoWP{|ITqKfcLVYs2% zD%0ZM{(Gd;50lv~rb9+xqU4d%N7N9nI3mipbJ0S>VZ*A8xF3IYqqd)onPv*uR+AvI zCN09%CltD4`}o(}25s&-wa~ZoL=}2l-GFh?o(% z<1k?(@hO{t+&wkI@PjPE&~HgmK9wgj@#QH2u&)ETKt3BAZlp+^z+k`LZC{yW?Ww<; z+{aBU1nBUFQ2Oou>2t*LN_-fOA^Rz7n{7w9=>!mF_xqs&)D77UTQO4ue>lKbgZ)wG z<>+l9QL$&CKvwz2bST{;zi1g;lVV5pFeOpVs1X7}l|o36?aC)|)bckZmy0BmpHOyj zWb3?sbmV{O+)>b(3A^Wl{jJ~4+uj!B-l)v9x#yM!!m=$^;ej5mC{pjT&((;oRau$j zJX(;FG2+jnCKifA&Az2wj=l|+I~d~MarEez31DI%*CKWz5#>Oi4jF9%hEHIeKWvvh zWn^J*M!mEVyJH^KD`z#eyfv@p1JxVOI|t77QDDky>IXCt4G9du7ZEjBRD6b&g7L^l zYlc06I)#<;y~EbLB}SIMsM~qX@L6{^)Q`O-qUlG(z;rTW4T7Gm-I?&oKdK)YM|#JQ z1Tp@c`uRyf=XoRQ`T2Z|x}sz?nB!3~{hvs-^;QHh_=3L+<#;4^GBJkit_i{D`(+dYPcj6 zihefRcwq<3Kjw->r$b~WHIl^NEKWOyv^;^@D%^Vfc46Db=Y#SocL#FhR(B%8%>J@VK3blQ(%5Xa&6g%-VIm5SFry*s0Emt-6#K18TcGFYlFsv z;Ax$d$~EU*$2i!_g~g75vq05>ueO?WT)yjcnb$>wv%@NVriWBGe6&>bvJ-{K!ucN3 z*zjmCrd7&3H{Y|E$W_71 zch)^<|9a1P%gkx2E<(Zo!x&=a#g|2=#bu3Udeiy(pt;A4e6HfAwdtE(txFt!@j$7p_3P{9mMq~#>Dnp4t|B_0MeH*hG7zD z|E0xKtq|X5oUw%*KC@8!l=NcSUc&n{bG0}8UkJH;0A+dJS+3K*jLN;(-(lR3F8^k3 zstQMw7LhBWI@j4YyM}!5lW0#1rGp%*&u& zeq&0nr(KMxS;*R7QeP&xWrGS2?Zm@Eiu;l%o$pVXIre46yd|q`L{}mPa-TSC20fYg zbbX|v52RZE-l+Q#7YOtXmGU#A6j*EKobzQ$uY(1C#9To6?;(WcYRF0dV*18@+p~6QtLJS`*fah+W`P1i#?1zUc;PAYOu+UH> z-aWlHemZaqjfi)Oy0Uxl1GNpk*}$wWS+{|uva@IG{JEZKIAQqh!5I2=i{Ns$tHuIR z(+d4#^eu+wHQ}98HQjLh59(_(X>FyH#qQr24q01tE<6~movT;}9N=p_FLiOVqaEhA<}^}GQma9SUL&fe*Fa7gxW5bA17Mk-&5}4d z=rruPG+O*r>*?< z+?Aw5Lwd{SqtupnLIup4Y3aGB_4ampk3P)!RQKX?_wv}~^W*t){r-&5`9$we@9x|n zyUjt12ymsj)tAp1%x;BMA(7%{51!NSUk$j}$ja-N{@u=-x&uorwo z!Sx*$bf6s%3r>7`lil=L2p4*0KpGASEW6F3+C|@&4HyYf0UhJJT{F}TZzWO^3-wA# zfni!9sv)|pm3U6cjGQur7$=j8Lk)$V$R7kMwFngCsiFj2>8w_^6cj}OzGuS(7apl-x;+kGG<9=y$uasd z86_Ilm!f(4og$CC!@*soDu3^H*li^6k5j%pSaO;*eXtQhNJPlI5V3H}n244&^_AD| z%pI8#d{$mOMbvKfj$k_oo*UD&)U?21w=w*(V~VaL7j`CPCIvlIigrc!L$S|&P;i$F zFR|Y|klRkRA^mV|<0r)4@((1d+F>+h!O1MeD{ObrwAyqfQIt5*i5s2sf?cd^ZMn z3#1QG2Txf%a5vJ&apw?gqdyO_xpI|(euSgeF)gh*189nyr4r}8WOIgVYC;9s=b}r= zuu10lU4+qWFNc4EuePi7(Mpdew093m6ipA(xz>+*8qJaL z?P=}~Ro!uiT_B$FmQY}D3kS3LC~ze6xf$^1aSrV^N*5&Aj69kAt;#q`&pw)z(tl2H z_84=l0!p!KG|YU>#QWk3p1TUlh-9g(k}gwIC_b#GBi=RGlcb*aB+>2nzuXhK!_8II z{O0`hY;2?Txs+2xvcIe#V49iV43Bz$ZS9Bn=E#YUBGdA1TyBX)Smvnqg{R zS^@vW??PcO-m9w^GwSrsPlzuW;hjOoTQbkS6vPVL2wnaW24a4r(SXIQyBS?uUENap zFMYlq(zsVRoi24K0^bQfqK)({A3s6g>-lA3Ams80YOO2#y%l$X>@yWRYq^3*kcfRAmQG zcg8iWdC^ zP7|LTl+Hn9`VcN!RlwX>msP{ljkJ**28xK+edSM8m}Wj}aFL_C-qTzVrpog0 zG3t5P1;M1U;L1*%#|^ULs?Yi5Tvu91$l-BS#8yf}z_q^S7#p=MP^P8U6~lX`T^v1U z^f7Fl-BX=!;B25bNx$LXSA^$%IOX3#DNY-@e-{*gcKkD1GO#22YKn4QvE{>G52&-t zx~7rH$dn81EE@Ul3Y4vKKMrKo8^MJRx#USU5rxHi@W`;xH#P}^v%j&wU1{dgUQWf# zlZ(^pRfTaxhD`is1!LHX^2iwG)8>;zI;J_DqP!dbNbbr|#NDH_XR;)1yWd^BF73sQ zKu{QX$@4;DiS@q80pQNclVBYN8p35rwG$}-V%Gn7A1y(j(GOG(ANq?ojcXId@Q%+u zttI+hpkuDEZEoM4mJq_P@9v0K#eUJl@7L^ZfSZ8o!+g?O(7rfPYUw<{R3G-wCV_2v zh!N~DbW%rXP%#(k^qiI1@P#?f6m;VBx>{=e)&YPTFkz)i72SS>${w#KaBXB7G>bR@ z#-a&LNCscK`qyfK=BAsxrQ@4SeYtz-VkN;5V(+6H#T%43KH0UDHX6P%6V!?cyo1q< z9+{sKi0Wm&d4tmPounl5w2z({x1`cvD>GSW%OMo}``|0qVXt*aJ!1Aen~cQv(n0s(h#N*+ejb}EX^f?wWgsi}FQh6~9KuyNn^-uTd>_d({n% zty|2(^W2CB2-!Q_)J}zc98?T#@+s>Y#**d%i^X--@%zy(Wf9WEI;Wo;dTu<cu)OQfzKuZD)X#YE=WXm zP88RAY{Go)3<5&N+CZzh>X_kz6OGlD2pLUy$s|?-xsiFN6AUAen`HyQ^I&#!txfot zZ-uss+zlDv@`*eWEwiIO$I+JtbWm>+(TE3_YCBWy8Nc6 zC&m4RfxwiLvmGhyE`9e6T;ZO4VevI9>6 zUD)SV<~swCHMVVCif@(A?jEN8;@DYm?k;sQi z@O3O_IfT#@+Wte$FBH+nzdT_B8;@ZXgvUQ}>H9Fs+w(1mGP0HbToT#N>>7t@%|v`H zY~WIx3+!0)5kXi@lK$1?JvRc0)zAD0%ocRHZrtS@MUu2odd|np`WCTHi00CBMr!V;9A_- zRE1+G;LC4o*g-E=4>(-o;?ocQ_R8hXrQqwad(qEto+mcr_P@^!0-RU)XJzYuFE1Ha z=k{`6B|ISH(l+bZq?uu~)ejyi_8#H9_$}2llXS6fJ;#7rKgbY&TZp>v7)37(lo3hE zR0JFw+27m?)V97tvlUKP4iHT` zGL%dX4t^fAjeC|Bg%2*Yr+xjfP_1(fJP3~)x1SsQ;7#n2=#S(OPU>8+ zy0WYt5(U9LJ7&Oz)t=6xA$s)OR7vaCtaQi(D~V-O3Us` zK0cv-R^ET}>pmZiJzySlQCs)(f#&aYzINqut!A}M*L`=lYp)Y}(#Oo3#Hi;;jQA+8 zlaL`Xf#;m_9E|pM&%FRrnszXllwtkB3;K1zv!=NA&`CW6K56;EAkd;bmd?0_bgc>U zCXK})p~0~2vZgsegZh~6DrvTxk)H-SiA$JW!t$e>k_bNaPOAK6zjI~e3jc4S$xjUz8KeyaT;87ggm?3f#>w=vcZrM6 zQaiXw5?+D$Kl66Myy!pNzQ$qBgQ|S1+PRCIW?IA|h6fv$0-mE-uoSNN%u}PoOU&aO zO!%Hzd40B0_zrv{i6w~~;;9mHem>*lFeoRY@kkE4J2{uh%(P(33N2bh8AxrBDJ_CE zlbN9jCLIzq-EsUm6S_+!%6B-PB?vd`ct|hZWJAtnpO%r$_|lhmE-1h~r}ruUO*=Zj zZMusxK6Lhs2~U~W+>{>byuXg?&*;bW$?4baA@2Ow%Ys0`AXnSxMRni)7i;`Bk@U4L`1ED@1 z(Ya-lR`YBb6rWQdb#5SQob$9By%UeN6k^}_SV#Q+_%;=u!wqDN4=7y-Y z^AEV5b;cGrOWte|R!bYT4F9wwdP!idZ`Ta+MgXlrj7d$NZdeIZ{cxx?7p() zY%+xm^dG|i>x$j_gYnxxlgJobvE2kAf*nYCl~oocatZH<>?SY?ID4@@#8y!8D_>Xf zygK3yx$LMLLTyQT$3AWAFdH8z$?iZuJj%x(6zikcJ&iK?=c!i(hfi+Z(zq)4yqyV($MgSyJ``*Z*zQpKMv-t>YA&IeK`pBJ zh5`0hqCsq4V@VCStQE&(GyLJDOxW!2-vu?x#9>V1%IvUt7M-*-Y3VdukC?(fR!e=F z^#{sxwaHOvD|Jr!@4e66M7reGV-vNmzg}Of!G1nUxj5LVqApLk@!HGS0k6O0oJT!% zhz<9*pHS?;l6uRz&3k0hN40}D&rkDIhp+lcXrlzYTX~;G6nDHxT}98v6EQr;Yj&PU z-NoGQTQQOjL5D+btW#WDc8P@H^+E?`vZz$IX!%{o{WJ5p9>g}z!;?)W7 z_W(@?+4Xk!!gkNz78@DwHrVW#{2r`k3$kAr<(@i_a_d>EoK0ngYrtN{2R6+~+A1H& zti5A5qLCXvl{-_~5MJQidrdX=oC}Nbn892&I+=g^MGLfnW5fW7~8gECkf%g5xiriFdsLm;brY5u)w7KYgR0)DpHt} zb)uor1xTdXAJh8wj49GwzVN3>v~n5gT|hu#7bhhKT(~+ueA(^IhwZAFQ|KI1RG@`O z2+>!RpK3S2jIJ!NkH@PH>GO4Zqt1^>$J+~bs zGTIqgEph9!@or40C#SsQ?DM3BlrGAWK!_2i(Byvhy_v;;L>Iz^yGhhmCCYR01>fb3 zl<^M=f;}g)^z)6TV9HmQA91!ErY@9t$;nilK7Vw3Ynaf6?o2&jX;<_`2}GZz3}P2v zL$?9u{eLu_byU;;`~FoFEI>s%OkXT`Q(44?l)76JEu!CQuGPFR@-Z%0fI8!I$4& z$p2%c;&hkQ7TLA5d6&N2<@XQdj*2fWAp9nDb10=myZz;P@BWk5GHnj_1Pvl|Y$U%| zAB0PDG!O6>JQwDrfJ>#w5m#nN(S-3f2#-rh-fgP5xV>tED}pSrcUQF=HZTN zuXK&eUvm-|7L1#9@4cvK0~|KjkC?s6G(RKMK2M~KfJW6BFMS&=KqidDIzvMNGTi_*axy_Bvk%WLXcnC< zFVZz{u793}L#>ZaNx(~r`f6*CKWUu=p{ap@e$Tkbq9OHPpj;dB*Eb4hq&h?PdKO?J zHN@lP7k7^z7>xXUtVTIcml}H9$zVrUuR^0G`6R0{ z+GR79X?Mw9h=JSt;!aCfqlpcs5^77vI~!jw@<+)b_<{zzq-nY<%98A6c;Y?8E-Y|u zVMw6(c?$zO!%Zt`5~<&|ABoS|*Z{hto7eJ!76xwCudkmTm~&Y`kE0)>=n}mF&SX^483#qAr8Zy^_XtN%3|{%A zOfufwBCQ|o-C|?-<}jnN^vlAk?A_c@z~?93cF-eI3gDc@=q^DcPEvrhmUH}P zK#1~OOHg%FfgOQAIJ9iLDBiiEXf*A|La|vPXL|XkGoNWjF9m#4(c0yI>geIcMYE+G z>&lefOg}0{+=x3JrdDp?(_j#=uHSgDsfgZfm-WJCjKq709_Ti@?nbJvY3TRS+k_Z#GT^X29y|)VO6kOd32ZWmtOmvx>_wn>@)4V zx2!ThQVDrQuWH_@XPyKPQe3lzdCElGhddA_7hY!aN0cWGbi1mA%}?;0e=mk-kd$AUie&`z$I)3J8k{_Fv!UZD!}&vj?kuHEJQ z+G9!fHX`kjE$#<6RfKVr7ECfN=ydb(j;yAbstYY|D|=I|qWtCwl-aCSXZ6*6t69

      C2o*s@Y%n?+cQGF=G)VB-8CS8IB5)JuXsHUo-RztYQi=<)7Vxg6!R&07^*X+KNpc z%6l+q=LI3fS;QQSc80=>@VHacKM{XU1{F6?5YnbDJ5Qsjryo6FcLKodod#>KD}FwX z!o&z7cLz6A;d9MTUG0)*-F1I4pH=pQ9Ngjg6@jyBN$B5oktI^k5nBLS&Vg^qXP zxB@GmhDmF7cDbkGiFy;tupnEfmty>{$T3vZhaai%#SLNluJ-?kvnr`8K~i?POtHc( zoE`DIMd|(c56Dd~IBxx$rRy$(4FevVC$bi4*TAw!+v;bc4vxRYfl>$4(KZx2$dFY1)_h7{)7>9w`GqlN~Z-TUWuw|6~6 zW&5z8ZIzt8#DtFxwC>4FX7^8(u|JNO?WbjnXDg#16zKAkby9)rGnFvColRuj&fjP&+Cuxs`(xl18)6dfOpTU*dXAtdIi!yA3D68uvo3Ln|M{7 zTibjfAFOpO*gO-~+;6IS-BRt9A74V6!KK=In1dbk$>LNM^D7fQnspcQc_$F*<&sXH zXRq$lpOVY6d16SwZz}ODh9)7XevAsPYKL*-n8<<>$MorqeK7&#<-q4Y2wq!dC`Zw?D?#vbV$0bo+#N8`3l>= zNDy7O852Ume1DjSh3`DivvM)$2tQJF8Mpe$?s~ss_qhrF%>Ue$973T~eMEJr zUPj$ZE<~bX^FO_!d96MGPF9F} z4_60=qgM7vy|VU)a>;JRfhZGCJB+&1qrGA~B2)*0WMH$d4{QmSqu)37@{4vpv(-x| z=JwE&O5qPGwbhuyB2JAe-_qHIM{e=%F7h_?D}LXC{yCe#aK0qiuk${ zcZVtb27m+T*XCtGSxyPPjy>;hLuGZ&*W*@ryY&%z<5W~%eE+9MVoU(C`HH4aRotz` z0P0#>D_1V*Wa@#xHH_yy``&*oEwL1Hzv61XBEgtU;^r6>4*@N)LqJfy*5e^cSDvYs2-|15LET<*TsDT z!UShws_U->&a5hrBJlq-%3aiI=ix^fdJW2QoVn|>_Yyqv!A-b%$yCHi;rP+J<2XZ{ zUkr=F0plR3yNEV?t(yNq??vYQzJxCYyQlpZPcdEs&CB;lPuXKgT(M6 zOr~koDL*zU-)FF>p-G;zw~GG5*Fsf9qqNv?7ryYvlxHzo`i#scO1&Z}J^}p1t|UEX z>b*&`^|lsC%euqmyJ@G;=tY}??g)MopjYuH#x8lk!t@Qw`?_6Z*%a|i^O8TFtw|bE z5j99fMfeI6CglJ8sq(gh12zJXBV}SbrM9jgk7Qc8PoW=6+dw4Bm<@iy67KT5UXJEb zhe2xee{A#8vQne#s?E%)5|ojktd2G@TZ_5)GsV~Izxz_8T0%>0#>&Y!1pK~yq;uQP zrcqV1rG;@cK_FW%2eGIdyAr!0?OFAL%C?_buou7M8j^7k8B**7WxR|#C(guly6V8> z+b=mB8r(2YlLTw|LH9>a=K$UlB+klkGfd|8*QX<}#w14{wP5&G(rfN)`BzLCDqub(Ch5>rXC4YFp^$UjRidz+WZ}ZNAjF=X_%OM(WnJHwW(?e=+H6 z#VJSi)0%oVFTJ+M9uXVqFBznG50|@e+_<@ntkn{`^pW}oQ|NI2z3cDCAi}K_DFK__ zyCd9-Yw+uFNOSj%`y}#8OO*B5ICGbh-W9MZBg6bDd0C|KFX;30yNXm)MU7EsxytFQ z$w%hdw!LH9({24==`n_-NFa4jd_fHT;jJEaC8jC2GssO@K%POPFa3xZwV1t4YLHW!)3rGLvpn$k7yydLHzjXqA}3>Qo+yh80g7@G3flS4V{WP> z)UG37R|Ulq^`yy+@G&Eo!PBHz^~9?EESs)UwuEHLyFNMa^l`@VBZ-4QtTMDIF;6MK zMC%4|2s>E2$TSCwh;7gXwrQ%+A;@`?V!Z|Z?xqf$Q|-Q+u$zx-A+X8ViRke!Ot5AmjnAF$map_S){VLl+e=aO`=X z_hHw~W8&q?jX88GjJSadX_kvyw^M-Xsr(6J&e>jG`;5!)p;h&ai^@ahT1oi*=`*$N zdSgx5cPsjbLsua6^@go!phb2MkljwT$9mKIn~(KHPoxeo)=<3Nx>ZrMZKPT-dHyWS?K8udblSI8 zPi6L>L`MPF3T}Cem6skRe4wK|emQv(FEG=&I>FjSVA1i+96N!Bv@Mu-}#uj)TGbgj>qIR`I9Lu;Gwj?{ zmy)C*cG=+ZbBZ_gi2-Xdm%OKSaC}U-6}UetO`5PZQ;{@d9ME#PJ#uZ2^9k77!+X%4 zx#=Pv<)YVTDD+P``Zq~D#@tEVhPI-K96IIkteKu2)h%T{aTOf@jz&UV)a6;gMNO+= zmusj`F>U0;u0TgaS;;SR$!|)67{=uCSkhB{(ENF8sSg(fDxHaAmqYqA1~G&sKXQu1 zX%e?Dn}u~AoD~}1+tuCS4B``1l#pZ)!`!xdnt7^*{~L70!-hpXhiP|4hX^D=9>cBU z=1c~{gO?9jnfiCn2KLtjscq@{Wdv$JN10!LGNDjdb>kRh9J@4?5Yp6iA7H=6GfX4h?^vBe2S1 z!apU3fv~%jm8^Z+Hnjj+Too}n^7_la56*aggXbho#zr2FHGSI_q{LSE%ekJcflE8a zvQ6s5#d%x}O(wlcwI;61EKW?=bP{*|tYd9_Kj2sQw4jXVSa#;V0sdE?C;Xbh=kqTH zQ%IZkyGFT9i{b#BFGHa4{WK_$kj35LK;}z@qvu>S#f3d{hv;2NN*YdW==WbLuDZ_y zxfMjJQr4OENBcGZtS&R1H&j{mCHUS~)%F?q>U(|6dPOePF{^^QMr7lx3y; z6X$g?dyx8gkf4OxX!cQlwu75Hb6J_8zoG0FhNVduztKd-A5<}~-mo(|ybIX=xU__r zW;kdCKXcR&x1^N|IB4r!$EN(-i=#$c70-JfP9*!2a%lN=kv~uB!3zE9w5Y+I;--&jlMTV?lN{f^bXP@F(a}{$nL;$sxnm2R+C63T z_*vNh*7^K@lKQ~qLGpl~1A-n&^7Ty%c=mn$s2(%^LB&gqm}eR@dGVHSn|1EN{YS%; zyIG@uh&=3!TBsd!xqtF>M46A3m!fz}{9y^*c@*$ogM;mJBcyRvy)S+;HlbBS7{I#< zl@;c%IqPyA4nlkUcwru8^WIV5-q$vQ+vY2l2E2W(iick_gjsUBU_1`UikH5#i{UJ7MZPE^{H$D4iBOut8^K<^j}^u zspvHFhanKN)!cSGm@!Aaxf}-oM4%r&?TuGb>f8pxz;ZF?Dkv&rX21t|s)YAnViLDv z#5KzeT66^jESoO`^kMQGrrV`u9G&Et4PUYMK~Zj_QhLToJ9S)K@iTn8wE_kUJa#lc z^d}6`0iZD*Aw8hIL*|>U5}@VUuz#bUT~8Y1T7fSCV6_)%0C#KC@CEE+%Mg5T%KZeL zw90>(2EiU5Hjam1hF08GynL5+3iYRWt(yF$j^@sy(b zEy%!`(}~&5$71u#`+Ium1S}7?;Z{Ph7QAaNoA1(#*8V@Ur@>k0p2+Vnu3-ApNwG1L?MS-`FJLT?fO?9tr?A+GaaTNldB zpjo=5yQdgQLVd7Nwv6bL-Q}h|Y^nBINEWQ0fuYi@^Oq3KDKc4(FV?+nicuEymd6$x zT^LUwK2u2%An1%@P1xh*#vDtJ3rY zK#P}pxqczD#-D*g48KQnhDIyyq}TV0A{oyrhbqWdy^O3Yo*jN-CutO8o;wtS9{;UfC;L1%-Yjz4 z+=$RINZ;M7Z~hSToHD<|a#QF_vazR?8)@l#rTkeMXEf&&h812aL_g*&kkLZ0ek&cy%KJ#p_b0uRM=8MEi(P{anjL1_d zLjgdpqbStmiN;_M!P2*>l}g9W6Z8t%3!moVh2ae6(_up*4UhR`aq~MV4hsIY>Y}B~ zD;N`|i|uH8wbw|=g8AXJH9~80LsT2MnnYK!~K(+phd_BkP(MO>`Y(%@pZVS-#a}lRD96 z0LE3v>^*uk-;w4{9+uOIU;oVUZe&Dm9A-6!40m&myYG{&n(hU4{+O2I?y4M= zGjF6Y5StYKZQmgDI|e0PU9y!b;zOXt=vxdl4}|E=vDww9FkKMjsF#;T?Nryf<)_ch zb6XE9a@!}=P}UDLDgx1$c{|Prn{&<^SUs2!P}?IR-Mi}PK$E2y=CFE)LZ`U`)FmD9 z`*H@L*JHz7{@%XSzNpK3V7^^;PGofci$g`cTbW_MV`H<=08NYi&oVaun_b&R9NZsw zo@B&re7QY?7pVK6y$;FCOn2#RTSo{F^$kh)`}|Voz7H>yn47%l3M0GIXmr~v^EDY6 z>Bl63L*bE~L^{>Dd?5l1v0CKwHkLr_a!i=lR60U*HKL-MM1-2o3U2vwdiLc6U&EQ! z$nG4~Yu6ZIZI3?>7et3O_CyBLidGunZ>=<6!wcbANJ1U^uAcemItG}vPeZHT$(&QS z34F({^bheA9#K+N4m2iBdwge@V7nXewk#so{%5A$x0QrUi3%PTf0TApBwD$Q0pPbY z(_~x^2K5ffmLYr5UV+19#AVBndVE9_<6atKxfZ#do?{fRkG^b|*e~dpyKcLYy{9{I z?yK``1k!bf|iLNTd7h1a?m z&iAS3%oE$kI-sE{W_kL?|02)@1Oin+Pv-5=-IT_humc*{GQcSSt>fQ4f?2{1dn8(C zdgc4>2QhH&`5-U)MV1bto$(Rxo{Z=a4PVwE{$aW6V~H0G?pTD*>BF0_W@`drtUoW@ z^^Rl9pom#+bi;R~wMrAr*xk#YXSqxmv#Farr)O{rbN~C^%rPRDkhizzD#Mq25BK8m z@eseuZbBm+u|2(UrhHw$N{+KyFemB0YWa2zPYx~&05Xq8xtjlJ`FQMOu5wcC2Lx(n ze)ZDolA}GW(j^-5Bpg{o7{yz6(OKbw#Wr1^7y2Z&e@L0M4FQ4{^?)Dmw zsS2gQ8=^eZ{61OmQA=1RVmOBH&ek(XZtMja?-Qxn=c*?1ZVHs>9L{)dNn{PIs)tH# z(QEGQTKCtVrkj%KLft8V4+Y~LGxz)tX{1-AG@cmlKzxhG*0Uajklg|f zj?B5LdMX!h5xA_JVVL`acP?&O!r{*ug795Y#61l{-{oqlH?$zo-Dk8vEAg`S{@j7m zr^`A${p^Ogyphh#*#=AXu1*dWp~o_`pulRz7c@pnt|b{m$}aYj)n6O;BAAb;7Xiy#{Ixq<#o@w^jV~Z5ejjE@xM}*S3M(Stz9lro2jt}GESMnd2v|7jl zFX!Pq(}_I!kz}B9UWzk~>xcDeOv;;4K=h)3qZT2>bbQkF$xNwyKERP+%!nxU{&t_r z{r9|8tm`1O7szLQSHEZTt=Jyzya?PuAJRqv4Tgx@0= z-iI_kR{3t~h1ur1Zxs0-H6{1fRlrHy&0;u%?Z*Y;u`uPv<)w`E#q1e;KnOpEMGjLT zv-VF-H+DMQpDtr>BrRL)@`~a?u#%FOHhS<)*Sl+a3K{~ z;Z4^gsFz2|TuQnQTyio%#!91w)fxqUOmlNs51hB>V~}_jM`=kFxVd>m)L^T7ia2kP zEzCz>2VuwqYVj`c-EiTFAGzM79KavQ3XKP$+l8WQJocZ3hLCmiqp4YHNo%Z_;N9-t-))UxJ3;POLe==4+CRsUZJvFajzQ;vHrXG=ilxOSCC->;?auVY z&A!8}>=F6RaGY=#)l^gTR>=Sh@ihDg(RFP2^$B_X@47O=5{45DK?UdI0f+JO0YZkC z`w)q~-JI!AQMtdVZGzUk)1;C1X=`_(%izDndhpkICldXo zbxSKH88~*!Z9TayrA(JIy?a|G8~C4`=L^sZ6mN3#5!;$J0Qx_02GnJ79w~pjz~Lasq9r+LHV4{2X=L^%aruw#b5F z`#Jm>m!%obM>pU*AeXl)j!RHIBhTd!?4iWXA)3;EnG$g`cyaa+jev$R_-wxm$aoLh zbaZgQ2@U=m{`|Wg|GfEh8b+0d0QtdmsjrBw?)bU(q(2iUV^$cTZQFXV7?IX~TZfv+W9(43^ogbUZuy1C;j{ks zbom)7fpQeCVP!Q27)7ecG|xCqSjL4IslmRzF%yt^3zG0LT5EI~Ui^#mHQ&+z)2aTR zPqX+6)w9HMrRX|&ZMprrHpybbnEEV1|0w56Q6JMdeDbR5%=&gkobILqAlk5QttDOG zDk++KQusum`}8)}UBV5WO+UG~7QFBh-Wh(V0rW{XO><|=8qDR8;9B*g3JW7~SQZWW zlEf{g6Z@8Ox9DITPuC>(Lk!~wOI^Y zZofKy&Ja$U9yoF}EGRB_{D}Q%OhzfW=Qih<4P= zl?sHY-k{Ek?2THeM7QG&ev>(DNP2s3LXr0I60$*z{xKfIDl;#ur!)5j!1FeNHIeO6 zTF3)zKGaA5&*B0NjsVKOKm>8myQy%RB;bgdoIc*T`Dp?OGfSPTY>7G*tb;b~@wSp_+s_Af{Vi!#q(G#1w16If_D5Na5n>I1s|D$D!j@n(F8bO?p>^ z_nfuwTy@9F3MB|JUOyWx5FWzkzOt-IN7HYoWh!crsuk}ZQxPpbM*}I#*{1PHlFQn^ zPry{yP6OG^#T}`Wt};_uPR@zEh_2!#_p@;CVdre?!|zktybAL|+B&i_;}P z{J(Q@_xr_U?8H#Z{OOhOUdp)g(QX%>S?(*c)No9`ICBz&P07kcHV^|MSVY|RNQ?-J zsA=m1t&HFQfK|x3aX=l)-<}qszegb~$YpOFP!!(xAGM6$Kim^z*NZ$UXqHv@|vZo z-daetbL_kDCn;)bsJhO(yp+z~2H)?#Z^Kn7OH1lftNq!>fqiE_bvhtSAG8CC&k*52=TRDQ zWZi5ZEssEmgdIza<_TPw0p@^n99p(j<5C;7G|yH0LKy- zp-f6i&z6RKM9HArsN+-?EuXOK`p5!Q^5b{Kv8ga!Us31wDD59Q_SI?iCh)s!x}iP! z4!&$2)0^o%;}cgV%6341q2zN7M!cB00QCTCLe~E%}hT;mAihrE@e!RKw$@`wS{V0=uWxj)x6>; zjq{*+q5^-K%lX-v_Wc6>-Ym6%OAcBXjE{FH3Pc@~`{UNhWq%Y8;E%N@>7b*Vodw81 zfyC7Ywl84+5xOMnVhZ~;;L?~4c5`}J?u_ox3vH+%k2ImLyl4y@Kah0Oy1F=&ICViU z?)guH^xq4p94s(I(hRE#I7u9Yt9p_p5gRVGT5|er0g+hT_4O$}_KZCB%j(44x&?Fb zIj`$0I8(W8m%fK%3iv$3Uv2}g`0Fp+9H5!nkfD^TLtE|W<*Y^U+n45EAV)(-RMK`dn;-(rj|aQ(Uan!XFJF?^@pp{qMx?tEYz?lC8sums+xb z&*$q1eE$C>E6j~j2V6Xt9;jCb6s*ibLgbqd$|$S zqSO1-zwU(D=a~oU7sveisaj5YE-=bCZ{&vN_}ZebXUy%|yk>H5y*a?-@)!7^5a#T% zFb*5H6gObv(CJnDwB0i)ICtpnY7cYH>j`W$j&~p-Syx}22H=wCvA~2*;)XrfrDLA77<77&yI#W zrYeIUk{ZrdpJl1EN6)9aClcRnZetC;Hjq8lD+`*<)AIUaEsk6LHPgU|Diyug{Zx_u znw?$QYQwHyGOl28oizlt=X3-@gr=R#mMV?i)MwrPNkmBxDP#UIEU0}k_PRQ*Vs(Oa zHkZ>8$Q1dsoc>36NWW!g%2UxdFNlCHaJb-G@{-tTPU^$>|Lj%$1<_c}zxKy3mCJay zvopi9o~`^8xBu#iIOY6y@Ju_%`j@GO=(AT!{|ZtlmEgEbIG4F;#btRJtI;tNX85KiG&m}s!&Sc)l(^=JpyrPZd<^?2&hha4w;&rDJad zs|BY4+F5G2Lmxot8K_!Z*4*PGT&Rdp(`&q_7%)MJZ|S{bh>?JWumBoy=1TTwLv-tb zKY@qzJ!4?FvdwUJncLF0NFsq|ACLas;l*lL$zAG+X;YQ0gAx7U^X3Q9@$<37?=lHC z9BJvBZ`7G0Om`!gAuVrz+7gz(m}~t?Ysg>Oos*>CCT28J^4N{2FDan3^F23T$mU-q zGfufcUv|_)+nytfms-TSRzsvl?;}APzNa1dRdaC?YmJnrMxn1zKc7Ch7>@0n5Z%|@?P{Oc zHXRnDzF0X?`h3I53$=N(9Hda?mHu-1{tJuTgsZ*2Z!DQU(@ye#XtJPXuAl|X z;o?!%gC}Vp(wHX9L<@PXzgxtUVT6Qg8q&$4?|n~+ZRGj8xi^{Y!@Fk1^$hj(SZWa! zi*ykws$M#^5=WW7ea+6MX+FLpAN`lDneM3pikc=;k*S9TEJ=F%T1g{W&WIwIiW0(7s2GR*|>`dHQXKo$9 z6J}{**eCa+fP}Yb{D1PGZ3wt_CZ(LP0LK^*E2!Ug-*Qn@N<;Ut;Q1Ss`vMjdw9Dz~ zzDG@vy-~>0j0YZ)hO1ze{m_%$u9YO=rXV z5%=EG%=x40qiNvpj7=>?Y=N7q4LzZ*)-Z5HN+Bh#iw1&AK$7je3uBWr-_+STZpY*~ zRo}(s+{bS@YbwhB%ZFkrm>3e44;tO4c~@vj?kX3M<>*g@VDLEO~0jZv0;3v zsOU%SSB&J{X0y6PG`S6+Vyl(}=!>IM2-EF9x)vLiEU3klC>oer9ZP^k{)-ZLyle=~ zf1C9eux{l-$ekwV5>r(9Zucq*Sl&L%;8I3FviL~+kT)Rzax}}+gSf(l{`cyx#163F zliVxo{t^X1$((DW&K6!$u(ZKTA=>fQh6&y(vM2HJ5c@v*lsWS61>F3~XPqf+$no0V zWul$OKCT7SG=hXJ^^5$sF1U~cLpROHqp14FGMOxeQ#*tfd+xdvlYWVpUm5$Om(h_t zyom&ZMJW|!=a+gYfF*yom>`17Ck*OVa>>VooYgoHhMb#SG({7>-_{$cq7$)H5cQtBkH@G*rySp?+ z>kUa?6fY1uOFWnItFVf3(L+hwNeXywWZ-9Wx#@aBI@7o);1DeQ0A7B5qUE@hdOR~} zE3R5#`vMKx(o;twTk4FB&gLQgYvLCMxQ>c|I_S|cWZ>HIKnGJ^TG|s9m@pz9WSZiB zG@Ef8!N8{#Spn$kBC1RZVnAq}R;fLewN~%0^bK#NYIxB^@~tFTXQrC{R!feLtMYPA z?EI~$YXtbgCpD>|`-d}B95s4ML&$)y24mH)&3UKykE=3gX3^9e_s2KqIhcT(0T3@p zCTlw23oc4;Ivpw+O=73+pXQF1Y-*ywH|Q+T$b7V32c`*`Z)uRRIL}EroWZp~jVf(K z=}DJbd*uqyL*Kc-p#c5rNlkc|TT?eQ6LhGoQ>DE)ahcVM*-9E=gK;H9Wqr*T-#g2? zHr_pqTKHI@tLKK#!Vd^1LI}JRV+BxN9ozV|S@%ZBo@~49`5%qR`3>LTovSt-ro*&) z5cEJ6*G43+)_M>HiZ{lsB6%Q2=f1d=s2%6)!36A)Ic5J$79R0~#b?K@0VMr%5jy=E zd*1obtMd}{^g=UQTH=z)a&M|45qT8^n*bp)SDH!F0g-mYEYqjPH|H}0sy9cfNj$#G zkFNVy_inEDPF*1Q_k_!}pTY2!2kc@Ijbga*^g5Zd_5-0y;*(%8_@p~2;dSw9z?G_V z%@o~-Q`SXxZPC3I|3NWe>A{ZI;MsLtC;82XPvJs$JPfx6&=)LbA-bS-@$JUs@&S8; zdFE56HK14dtw%2x4}g$$5gA4Ljl=Xq7atjTJWG7?vz0J0p96_-srAQRclc9%MFC$~ z!iIUslY@8x)&W7*7xvo4bj-3=LLo(FN8Rd1!)ac&4y4#2@0ewPqde;1iPOo^Z8h_* zRFHtIK9ie?IRHKqS>!>wrg6{0cblcV=EQU0JzRQ_CrlukpgzTXb^bRGdGGHD28(AG zfSUJ0J*7S&Gx91~zIThMF<$}w2}^5amL*<7`hzXZ0Q;+`KW?;wBkDqT_=7CA-Iv}z z?h#7fS#}A6MS{NH>R2>7Spho*Ityl*>@ClV40{evv}xKMt`@6i`79;xFzCm6q~{D!%6# z+)j|YXY~Xz148@?UyzTU9@`W{citI0{wy*^v8wE~5_bo|MD2iY@!t)Ff`&&GCNJ()6Qg^t%{P;&boW$WHkW48=l?3ZT z_XK~(KO#cC;{K!wF;Yu^<&1@wQ8YT>ryK)Ua4tVb-g+_=Xu5v=-L-D|1ik+wT?a{Z zJPHN0Z6?8a7i;x?wt*#ADA8GSm0s;pCZYHLkZKmbY5+(XjV1NdJeM#I{^Ku&Hu=A_ z>#}=YxF79C>d_++Ys8IoA-VkkX=_mM8<8EjK}y5=&2sIx235ZmSW7|F!jUSNCtVfb zi1>2we8RZoWEyCB6H*cHe4(x9x3W=vGTLb=WBxhAs>QhyNaA6{MFeOqt@3Y7YxATo-%n|3paNJ3WG{=zG9rBN%4nY1RRor-haH`T|0pO?7(v9Ky`Yl@50(fjxIKp`{orKJy5tr zpi5xo7ag=_ugFL-cQiw7m#-W(#XoHgr7NkbbpNY7&7m`r#6fDvnN*R^V?C1fhLXpS zjgs5wJAV{hFmHYtV8+jbM9ktNQAXSg3)Yr?$}Y5+BcHrdhWN!!Ai9jEA~A}0^H{5F z!5wr#tczV(Smaqqv$j;-qD}}Swrma6w*G}dmfo0^b;7qX{jziVbBTRiBST&dtH9sm zRaINZLlj$g#=C@V1F}f*J35?75Z)J#xOtscb@2;3V|LiVMnybL#ZE$k-&BBG%l5WS zOHnmlDO^{ag5Hi-dHQMiLEY;g4fe?Ut~lpB!4Dp~tzFqv4J;%I9_KrGlq>p@A45qI z+1`XRpU=l*nw>}ozDFEJMJ+%Tz+H0wfdVeO{h~8@v!|WZ7-`!8yZ1(mC*#_ppt8)F zGsG|d@_AjURNRbP_QFy zd_;_>A-zaI;d_{_5e!_AKEaRKZgfE}Z>i$@+BiUeg+E?zoL=Tg=${yQwO*?F|GgL> zQx$!R`uiMN_gB=?7j}sqK;zc3cwpCCuw7CjgI3>0=xNK|F-=pt9TYu8$m1yBD75CO zm~^-@n8Mp?gui|v9V_9ueb@;r|7nDq=5SmipuX{diUiYYopp@8#7alO6%_Rd|wU&1o>V&=&u*W%R4ALbZ3TBa^0i-jEr!1$pPo33a6(5mBKQi~) z*XxAbyX~)~UZUe(IlRg@dg?EVfb!RT0l_oO1wEsCl6&j_dWl>K4Fp88shZCyHknRp zw>;p2ZK0)_ooW^2c%@~UT2_0UVcbK0LXxK@+;gT`I6mcaSfDUdfiI>Tq~yYych97k2Bv}I;ogZ6u0COc)3IrmT{ zura#D9DcnjpC_S;ceM&Dv|+{FHm?Nx&=%5a1rvXt)bM3aR2r3u}bA!rv6VO3AoIt)nXbg$6X&psu5rDKB0^sMjNux=7Nj&%$Y1!8DZL&T3`t z73!5a(sI&;88wYw>qa0OWW2&pUVMc@b#tS1E2}({2oxFeHm-f#+rhjaW1uKiYF_ ztULGgx>ybF!kNi?RbxEBaVQ}O_;j4=kk@Mi(8GA z=MS==R=eT#o+M-6ocJ9V^bZOYv=96YdeA?Bp56hXW#;~R2VgdH(M7D8Y&zWOCDbno zPfK|G8xfObe{;5Cl4`8aUcoNp(zjBjCYv}Tt}+(Tc{4^6{AyY=Evsetg!J)F4SH;g zbfZ;dzEq!@!}4^u3=2;K*-~Y_(cv+69ReY}n|-&UApN+*r2aZZ$`5XL`&*k`3J~+^ zG>%yZowM&w-1ib^jIXU4TU^wJ(?yJjjT%-V*5``qMr0S28kf_zNDal1#V$!kZLd@! zugnp68OVF4gi5bb9kmFGT0kBLc&mz0n)mg5)8&m#y(Mv&#AQ7dG}N2M>^zTOOh9K7>W(aZ-0+&paQ0T1eO#=2q7LaA%LZj{#3-L^Q_IZo zV?hi5(r+GKzf>t+v@DH}&wQLr)D(NCNho{!MlNPlQaoFjgxk5SIRNG!R2K)2!nFBL z9pDt32qj!wMUTFhHPz7y6r_66=g3uUdYS ztIfqP9{UZsomhG&Gzu|TL=hRy9xilll@iPbTR9XS-#O;oLOX%-pt$)REdCkM6+av> zX5$gRv1;@&uPCK0EET2F)o9uaj#?lKtWTjY>BK6x%V<{_yeFAbR!3dBD|OoQhp15M zWCUAA{~399w0qZ_N5GLF`P0~^mu&qx2708`gf)Jf#Rs8;-PTtaqPC{p@`$<0mi#KW zul#gdLLpT~3p3QGYKOMsoX|Y5fB7)^3BHTwv4?nLeddkgwdUjbOVC}t9Wj@Kgrb$_ zYOa5nN9mzq9ec%qbN(0uZ(BJqt=C5-1_UD=LeJXij@hxqr#9#0b^ZqxhldC$aMi)^IjM=y0b z{}nRD;bu%4LegML;*DtVlz))FHVc%bEx!Z4BiXPPT(@`CTpvkv8El=VdRv6=*9#c4 z*KKUd17UHV=M?A^)%EMAK-gRbE~;%wUaK%N4x1}pk>xx;FJyCSm{ zC%ZJma*5vJjCfTQ6#e?SPoH9r>f4`A?B4PhUMsvm|851ZD0d^2EVAkFT-Vp>ueq1@ z#~C`8jg}hFIqi!XBGsM1?0#K!+|*Fo78E=nX)yLN4Ot;p3A=gf`s~PE1@Got5$?Q} zn>nZ@ji8xlYhBT$e2CstyV0%b-)w`HVZFd2L;M@~V}~&6olx$1 z@YdR^`dld9V4F2yz*}5b4szfw>xSP&O}oGrMy9s?oHy?H-`wwnV`EQ|NofC~*Q z_8^G;<-7!EQov?KLfHa@N$Kk7ycwzCcoXseXgbeuHr)5^S6f9}RP9==R&9#ft1YFi z+Its86^Tu(R4J{kwQ8%{d&W%c5hJzt7O`R^h#>Lg`}-fy;YD8ZLhk#zuk$=VC%7@O z7WKS$KY4f>+-wm{KqL>}cfvm>?(V`$7eE-WAo~>lFgg9w0pF+TR7DlYF7;M;^PIyU1b4K{9W)zcFa#{;eF-ISn&{9$^ISy`AT$ zdm+FDk!en-)e^qj4v99l;uD2=wmLhM#H6Mkot*#tA!lI6pHV> zgLFf?fR5=VO+kx|K_(3b4bs3xKITdVJ|{+-!vO~S;dCuu(B9s+vh^&c zG8uixcreM+9GP!yB}`kamA)%j(nSp!=$fu525TV_mfw9?pTY_*g7q*;DY)k9fav0? zZqg<}vEo3HqN<~{3%DRoDKEL49%#P8dCjrg20x^Im9o@G?jHA#&SJrm4PIxDne_?8TSX`KK(*m;znoP{qhBPWg;lTs)`K)x4`pQ_##1 zbRu&&jq^a1kf~o|{CKGI_7n0XH%dN7x#r4Y`w#o-ew}4({zJ)4=DO9;Tj>X(a_nRt zaXs}GccQq>k1BH?@?<{VHFrkt;WaJe5J{!9mUR}vTVF372Tx6h%OT}PJ~-c2r9TI4 zPF?JNak3tP{^^ob>6L73j$Vt3rSZdOIj9|gtjXwujV~8}-lecX%n)uBI*L%ZpX)c; z!tLxBi&@9A^TKytTr0Vp&Y35S17@i&zYh*Cnj%UCoM(kE zBFu1n%4(+_S(v%$X3YLO{L~#_5+Y~^kI7&D7j%T2N3QIrDeJT#%==2+_c`utV^ea7 zKaRY^Ss*wF8E2u$Aj|(I0=-p>8nafRg1iic>!00TaK_cj`aV-fE!7+>x{pk14BdUF zA*b5rY;0oJdc@Swn;~*H1Crq!OmDm%T7vK%kTaoHI_2%|*w0zSS^lNVRc}@z&fc*Huu5r3$zWMOqRg+=0sOUv?poJZ*EuIlC(H8CKeMkHYK zw`1$Ty9LspxLH|kzkVWUjem#t1n(n2nZ272taFEe)2H?u4;lw$MkU=eJXc$M0T)ff z2WK3xyuhL_76-dNpi)t&L7~ogAh&I3t4{Fc_8p1&= z)($EOL_1q!4}`I&^03UoTl=S{4aytscn>+K)=>^=bhtqp9kv`tGqV-HrASwgbr@#>or7HRjXV(*H8%!qrCXRI z-FDpB>}ZkJ+%?Aie-+HD^)eIYh6!Bel5RBJ95RYmqrvXb%}rPH&=1zaFX z|D-1R1Zc0>^rLe~Gl6Ltri<>L&gkl!7;DI4pgQ0J+wip;n=gELtcy6ed1 z*<43}I3W8q+9HI`Yv?}a?fwg+3B@ehk3p0Xqa5PvJP7i5!W5Rf?yO|oEV8cPL4;Me zpVn%9QrLNb%RM#4PZghcHy&C}2~wu?ks-IcM-9u>yL0Wb!%lzmZ%TgM?O|caTv@RG zpq2eF6a6v16s`c^Er`t=>^o8;{O^fePRU2;Q}(yrOP zHD`zEsXEHBzmJvpb8i``)HdR}N@+;rgKf5EZ4Ypv_pqSr^!Y%n=G#s_?L>a;>h9|~ zlF&AO7&Ffj?=msEjjvbZ%$PJvJefaZg8=gQXipA%g?V$~apbq0uL^`#18Z_fzKi)Z z>UqBaX{BKeF%)>+$4F_fP8!fg_CC1!t!$HfX=`Ed`c(Gypa0Z&NlhCYw=q#M^CYhP zWgW}rUjyPk+uLLP=o|0dRwGFdXp&rqEobVDWgaR4XDqmn=ecfUx19I7Q&}&2%R3j< z-*KT^IM*9@Xh^?ySHG`%ZsQ}&Jv~RE-qM9Oi+p-bB;*&*e=O^?7}nU(E%Ujd*$C$3s;}}EmM(1%dTKa^qnU9H8uE{ZYMiO=-+k6P0b@q5sJoE zXT5Cp_O2}o=lysObJu{zfbr>V>E&iqDMSYD1mua%X~p->+gnZ-)VM=4EK!_wD9txs zBA>-Z%&8m^fMogRUE)V?9qzAs!2j6Q9vuYTz7C}KYn((JFHHD3}DWXL<-@(#Kn4yu^^2~(Jx~~w< zND3~Cyg1C89we6%g&pb5>RK_2Wb#)A?Y;&+00IF?)7Al@jE1tFL>JkA-YUlWNiT7f zJscQA!3Wu`JT(C+7f&C%ldSqXY*27nrtEqIl)}C(V>XdB26b{GLDG7Fa3$Q+tis&~ z{=P7hkF6l1&20%+#Ri1-XqJ?@X7W2nNW){ynp31I#uR4QM6HJ)5=ynWBA57iQ=A;uO59_c&e7U4LsZk0ho;0NWY!y4Gch(zAY0 zzv8lIw5H0&6_#xVS;5ov&4oixv4v+N6hS@HBkorSS?hNP+KWqzc6$fzK$8Bvz}zAS zvDtjOzFXOei7_8ZHEHz!J-%R7>8{-v5kuzfUsY z=z9Bxcq;s_+%^0z!$QNU`m3EW17}OJlM{t1jTTCy0dYfB6Z?O+wFwir&=_+_!(!<3 z7u#lRXMPM-F>UN@>kL78Unb;fyw@{pRNHfu^I{SqajRC7uTyrtRNaRXU%2m3DA&;e zw>jOcaNh@wMUx{qp%$dvV2|~W)}X9mGgAv>(o~xV-;`w+Ok?nRTE#|(ShA`0v#hg7 zlesU;zZMr{^regt{DHN5&RIcKoq}}%HExhH;9I9}7vyY^GL<#q7RyD7t;dmpMNW5i z-=+=Y7?Y%>0U%y?v<{AWvC`5XmR72s&4HOJ!_3Jyt}9GS8LHI}R_vF{ zw{AipRsd+VHT1M6We}y@1zd!h`Ydg7@|aF8yuV+bl-g92PmLQC5}6kKB6a)U)OPnH zSnS^&A>k0{T@}B*?F_P^(*?KTv#MytvOisAfsceOHe$^8=%3~cQr^kDi*BFcPJTtj z?xflKY$dRir|uaqZ?Ds(cHoS9+|kOjZ928&#*|{Y?bK5n3#`K(kG*1bHzqx0zW%(+pxitaPZ8tsGWn3XJ+}sOa^gx{o z_n^00&D_nvt~lsad*W*wDC~_NR{lU)_f13C?_CW#%P}#Wt#G+#xF7US1`xqby`Djf zTWkdlqFByW!B~V3aADtnap%Z#evJBlj5LB2gYg>XAlXgkNLPI}u^6TYJ!@L#GhW8V zCHY#+@`2H!S0C|k4Pc7$Iqd8)GAi328n_prtS7a6X@SRr*Nx$J+RCM%?RWTgTp$pC zc9A6nM#9b!gH5yqH+}5<4$q-3=NQPY+7xRgvAe)lmx-=$+0a}~mw&Mb@e)egpC&Gk)>uJV*2KRfC{an9iKY)Vk3N57S z2lY>EQj*dOZipS-$BBjMWGSIC?~~Na`Fh;trTF-!mlwrQn`w$FmYe* z;{F8u{L2sU{hz1PMnob z^Fo}m80cj%f3wWSqDY2SrPWLS`5mqwOwz<=p(e3P0Op&bl!arcB|rPfb;nN;FY~0h z+sMH}IgK>E(}4-h_SseX+V|D9ZnJnsFfqn9zWfwYjHz{t^5>5gT3e~I0eyO$^fu}_ zu+^VVx^|uZuKCQPm}C5)rqk;gF4ywo`f||L%dZwL;Tz-po(TqdT)Pf5Cyd8`|~;IHL!$c!|q67WX zT-LhtD5B*XPnwormo=X6Er+MhLq+{EAHxSkhxb)9bc&)M=;9KPbQ3opP$}yB8YC88 zZV>vehQUq$fjUm|N8=P1^nXg*_TJ@^tA@dM(t%0C%vOACExwj9Z85_hyW6^g&E>fO~B@j=8^Kj5gU*zNt0a|F@_H($w!~nv_W)( zadUlx6w=G)QZ%E#ksyJ=D3N=}&ZJUgLSF@mQdpTB+BOfsMmb6iI*Y=}_E%J7BZwt+ zZS&Gz)XImUFN5_j69!Rm^GcWz4NkK6Z*6_`X2ddTB$MB_?uFx5Flq#i>D3TTWQLx8 zg^l6H@}rO=Xz9U_-j4h`D7Xj^r{U-N{o*UvuJaI}Owd|sg1aTK=o_sX8hz+vutj<- zRKhT3P4z9-6^a!iUZkhPuqg0h`%3S=2k7qGgyv3 z^9c*hJQF^XXcf*EUv36zAayOJ5TA$;Yrt}&E}-?utjXPR8pwhTh)~F|wwyf#b}`1F z)1{Y1MB9!(&nkf{ETBHQt%TEbBr;`r#VKeuUIe+0n>c_=O@Eb05xEe&eP{W5ZooBK zF<;+VnN7{oMNB!ctpxjUAIm1U1lo=9xB&2{3%bZ<@RLMby+uE_mbGT|LYwLSLbD;D zm9!Z}52q6a+Oa6nWVFP8P9jGc5bB(009AP%L@twp;pD(ox6fn}moix{0$PciF_=Q) zF*sC@nru7EeU4)&!kN^xxrxEb2wk0WU5sK1!KYVr(31P?{QXSEfk+lI72UhJD)DbR zWhc79X}tW+Kg2PC;h^O8E+$R$VcJLXH0wIv4(+zozco_7OXYg6IP~kx4{U2Q(`Sg2 zea-u(QWXzSYJX|*j_=>C)#rOfcq!kryiAAwwc`(`TS^JKQVe*4g@uIqX9Qz?(Pf*= z$huLn=l;8Ne-XCTeX0otE3ZX49d-cJjOo!Ym3`b##>H`CV`=#L?erWBeS!CN9P1R_ z&}?-h6sk93JtH*D)n>sNv}OjvSWXYNED=mV=Zf0Ng;}6Fh4Yz7k5vpS&}*M_LBQ9? zi+0{IwkEID8?56Go}94>OijM8b07T4!23gJ60HvAr0(*3u-OZ5woxyM6kak?oNCe& zZ1eUGK9sCudsj+o)=e6^a5mXxw3L1_3Dg#=1_id8!vYV(hpn%w)$|m-g;#>#{9st~ zKd7;KC=66|JNW4e<#1HT(JhT2Z&Z@-O;d`|z&ag{>A&&!H7zcF2FKIq29*AT!lg#& z`BfnXMsFGR@({u%!AicXENs8b1K(KF_4UHoqbI-DC4VRAf#I_u< zKDPQ4sp+1yP$wntx1K)-G1fd**sR)s0DBdusSPDay=jG2vjHd6p9D~^Ek7!(u4>T- zEH~vhecg12U(D5)B3IQp1!xt$$}Jk*meL^>olf*hA5qmMYU{pk(ySm_*Y3l9 zkpXean8>#s^|CF6*-J=C+jx2=otdZ6*A!pu)gnG?`As2h@}j9Fm-_ALV|Lk=_d9yc z03%vd{>v538EX(F7Pe?nC^5CVpKXpL+aD2sXa{ztH?%qp_6l){ti;T7o#%34=2xTb zj%N;$!xj}1Gqwvs@`zmh%hOxV8CS=mM4?c9U(>}1$>{S74>rTBCo`*8*JvE*J@^SL ztn2UjH*Ytud$u7*vPI|4@D*!!c{_yF=UAToAKAR>igW?Fj}NTuQ240J+Gft;z3+&!*m;$VUKXc^0O0)=T7vgvv$wbhy8jRswg)qRYRZ8 zYIn%gZYmjA*8HKFy(K~3!(V3R^X_L=LD5_1w3SpDHB|-QIBYIVN?z1(1Z%frg_ANt zR6$le$*UXUohXDtge8SopOerne|g~#-cpsmN(C`ZbjNq?v#^amZFIJvzjs_Z`W@3`bT@+xVL5ZdpAD%N^?Rn7xkl-LT97)tMtHvnn!(9L$4yV$1vMw**abY zdLJCM??^nAnei;VE#&j|ppqe3aVhXattbp51-mOE*fX^+)P6X?+;r@DK`6y z+H4U=t3YTOMyfq2VsQ8X@5evQHGTQ4f=;kSGzFawhGjHe>;|WLIIa(PU@s4ZBjyiu zKDM4L1z_vkgN3cacWFxU&lz?0NqH@4*^0)T?^g07oAZA2m#HR3mZ)H@GMG=~6FBv7K~zH>_scR4EX!?WhT z`-$_ur-M!Ca?BLz3B{4gV$A7ZWT61D1hk$wGIQ;#EO?Elavm&jGai7-1^NrJ-F!`aImTWv{d>fCi zqcBwg==V)-$&fB1I4Nmv2sM|6yVmoh6hiXa(!!;XIL0`}#)K<2dNCY@)riXNC6#3QxL!)x3= zP43!;K^60aT02Tx{w{tnl3wUw8A#MceAi&-(}W^Z9$MZMs+$%x$EwdS{?E(oxa6*rb^M|2kr5R%I)-Kh2KspmFgz*{o=rHdYb1ztvNmlSC2NI*g z?7gek#7LqWk;KpDtm)5I9mcF!Mtc|A&kcXXIkwIlkF{$+ ziNn6gC z4qV^cOa>#Qr1ec(Tz8sV%B2>^E*%Uz)9YIVx+WvI_~R5$R6%E>>VvU+Z3UnylHH-H z^_;}+5FU>Cge}Y_G1O7?+KK9%&6~0l&`o`5MqkvXtF<(!6o2?o=_ADgr-kDYysa8) z+VGqxn+;rSDh0vQt=MYlw6FdYI>m1CmkpaL_sX?%HLS~alX1b`u%lz8UL`&9dnF$;f*W-o97`k%88d|3?B&GKLKpB=?}5fYp~UoCpr zsiT|fO_eSLVP!t8R!i9ZLik{1TYkVkvc?w|d+w2E0VBR?x;Tfx*;-1G)qNEgz5vz? z>E*!sK%$1Vu%o2)q5%r(jRk=Ee#NDTf{#4y!QSTUfwh5zQfmQa%wy#>TI(iFu7@(H zCM#X(uo!VD;Peuodhztkf9`+nbTuyASeL&PQhvLq`6*VIaI>p|eG>jb`9rivaP6bP zgN5MLJJx*G=VK}Cy(X7i>dHHn`VKDQG$25G1f`$zW%}}ELEn?rz)Wc_xrfwTQvI}C z8L^}KLjRSzR&GwasQN~;NH1KVd*>I`8Xd2%m5gKAj!kcze2DhEvKzVQ9CL4zlKA04 z^iiF%gPq7q_o0ghay{|T;epL2C3b^0>&3!BDI3Mf-O8W#+_T&Z&57QWo3HAgp4g9k z^pUU9<(2<@CuP;@Ma_VZ`Ca%9X6)8vruUDj->e?vI=%3vj0(=NgzIN2-+G6h%8BLO z_0uvTKa9@CzY0hBeJC4>d>MR3)yN#LEHMJFSx?wkybd=TEI&H%hyXs&(lDPL@4YHR zU*G7R`yw{g<;|>by|ae7{W6z3$lv2JUs#}alAdvBoIADD>LNA=yLe$`yI47t%ppx=}rAx!Qa9(II==_kEi&V(@^d799;h&N3)3Yc?3eoKESEV7 z^ldzZM!(gpletAv^OH$D5?FaI{Qh=@i>DpjI1WjwX3tu>V#JOY$AiL0NW;BJM^Izfy|R@BJ~plR=$}NT@2lzqiz830P{@mx9<|3>i^#{1F`& z&k?#zUMM$*crRLt%F9FGf|an`-5s+gpOZ9jp6>!Q6eHRn6<;>bEmVTy58nN9;SF=2 zM^xWiXjATkr@lPc7bD@?_uXzLEMdtJ>ND3yl}EFjDfMq?VKYcrCEv(2zMNGKSsRVj z*rNqmDW$Q@Q;w%RN_*?ia=OF%ZmHf(2-h@~H-t9K7K1S>R%OYLJsb-E0H6MR5|}Aw zOy2s_$}!n%C%F5mmm%lu+LGq)m7CMwOoU1oM}6goJo+)$lpnf>yivW@Jj-(3NuDsf zDS_tJTM&|Z-$)&`86BapWgKKQ<29-n{0;I7RjHAxydrqyeS``jTmIBe5&VftD!`cM zqejzZdTEV&d%@%N*vNyoX9ZzFiHQLFaZIg@c zqTs!!FG(q`Jd1!WThm1up%xOy8e(oFU9YCsWU5iE`_8_NOxPwgNxK6ZkezOBzNFe3 z;0rknh^=UX_n3!=l^1g|k2r~R`XwkWx3{PN2o5#k=$UtJ)qKN-)fe^!Ec>vt1%GLh zcHLQK^w#tk*{=*gWDitFE?OJnr6!gI&5>^E&Jk@fHC7`@p1aJ0Q#%b8tSz6P4afX# zDUqv?pqSSuLMDlU+Tr__0nW(X|K6oTl}g6YOMHsgmCbOTSv8Z1aofcHZYxi8QEMW| z*{;RK6|nuFHdn49nP8cuPk1F-TQQp7x6Mi+pH^6{8{`-v&4+`#8an%GBUfBCs-=Ur z^$C4!gAde`O}LI8{_vIvTBFFSd7DZ!9GUGc*Gn8u@)QW2%iAe8OIdzg!3GJFI6Fqf z|84bnkhlck`o5|{>F$GBGkHn5pQ$kH^GY0IDH1bi-T^TSIfQ)xWcrMqyb`wHnJ2*CJ&DPEso~y>)u4S%X1* z3`b_D@BX<80Jz*_Npc>Uae`6$NZo-Dmo|4SsT>&zOiHl|>RAr#GH;AiJTF>?D^@Br zJf}6aX&V40!)ZWehk+l!>aWsww7o|lZN=lsy|~$0ImnbW;TF!h61LrRKWMlyW48gBp+6F1tbo@jFpZNR{@_rl}v_Zivpb_&PQ{^+`C8t z0hAw68ek1VCSmAF5do|0LnHq57p+M<3O}xc7^9;!5f?-<%U5xwn@&V{;P7rSHeJ!wRkT4{DoYRZ zg6%%UQ7>IC>O%EcEjKwxSkcgHb_vq3Y%mc7TnXNk$UbTeAVI};s|P^8QB=**>b)Xt zZI@3afWNFK>-R&sE#Tb7U@F|185Ki4g|J0jIS59hU)#oh4$6$C!h-kOtM+RKJM zEsQ-Ndj&AdMHu8R0>k{KN-lC{*u-wE5?TCf*(Rvs@$t&x7O_1(fxc_j{x=2=OQu_H z(H%Zy8=I!Q(gzPGxcu_pEt30_?tS9v-@?J-YD>OH=~k=V9{K{P!~PB6jcB8jLkxi@ ze}@|jZ(51=sf2?D%J6Z#Nw#sJW{wxd@`&{#dS_dU6&bSrxaXUu!JFhdWdIwC>`8Cq2}Pjx!$k{n z2Lp5q$A;Dq87{#%u{#!Jh0jE8!;|YDvb+AR54E)fSJ1(^U>8~5?X8(Wl z!W|W>hd-$)o%I!d*fEC3KS<-O+u56OvzLgEpz~s&9ag{R|1m4YSv`)XU5dSAUF@j1LK-mzr zm9RDMi1)$V;>J7czFkZe>bd2V@o-|;I#2btkAbwi#Y(ZcB)6O55C6ZJe%Pt(Vo0&U(x&sww2zdUwPFU?agCyxj zeimD;9xx#_%C&8xaPUSUc2QeJUOjYd>TB1>H1q^{dP?WO{YItZ09VJKqiQPhyaMg_ zaF*Gs*>2Tj%i|1+J-8cyqNw0?pM~jdgnRth@^^P!r-{R5E3ubNY1yvR_A!S>4RDCD zc-`lvcyJMYb?)E{HGSp?|2}P()FSX#g$ z2O+={EA-^#B-?|YN1HZH3#)O0b=uXN0rQ^9G zCzRb+d7o~TjyLw=)BBrejr1HR7l6wFSf5e38Eg0R06@wZHhW{8ebxRc9yHtD zhG9`|UEyS8VD0Fk+sf1ETc~t&bm%lmP#&`X8U?E98zpC2UweOIV_ zVAl}~0}cZu!1ki9w(TNq_UXrOoo)aAr_dve{qsG+yTroGeNZv{B5j$AKKOMu<+tMr z(b7h0jjQ_uJ2+RaYuB!h->SYeVE15mqD$c6&g#m|dUsR)TmHC-5#tTo6iehvY{FfPZn!|!Db+wRpd6vO}GsYQd2cx{|J2~h_pL67W)wVjHsYKr*G+5i$Q8(%l>Fn|64t~Ef{W0~g=^P_}MBiqPAZ7*TxB7f?E(MgcE^Jm8a z<+GEx2v+$ebxi5iEPdm+9oyFeNmI={;U-AH)Y1ph@dDQ}{?^%=iq1e;OYcDUes)D! z--+*T`%hvM$P6!70{DQe>Iw%28uW5SZ#WfxRn0LDs+1~1%WCE--FCiPgv&Y2lyd$> zFisFn=1Q293KRyekthKD#lTKal`=L^BR~h|C-hrh<68m^_?1fftN7Z2j_XWiUi97` z+MJdP~sKT5D6Oa z0eMgEf6lVZOs)Eb8kxiQRhYOsz|+#K7h1sxz)};^lUnGRqho<=n@di$RbpAmXXn>} zvz}!o)s}{tRUbCHu2-Ze6xQCpjk>`rG1Wk?KmGtKd9*hVpKC5Jjx%>Ps$I(r^@su* z<7alrc%Wd5awrul3R;9>GY@7`pvOGMm#RFDHwirf+RPd)11p!N8f%%d4X_Olpnuj=oED@@Aj6R?2E;^n{OJSd3SkbF|%NC!>EI$lCR~{g9W%v99yy@{SWC?a&=-G_vJ zDp1G1@c#X{fWLSx@(I9hH+ZAdLfh`0r+$`1h#)$U{h5>=BIxVITeW}R;p?m0-@884 zS}CEXuwOloJw7ShyA^p^IW(xo{`B8c7R;s`NqNR=Y1a?+mz2!_ldD+1NV96=;S@rv_I{OZKXiKR?70`w z^h4#Ys6wx3c=5U0kGEs`w48F6`Gp^~6cfn3b3|TNGiVEVs47LgEK>J7%5zt-){iSW z|DK|EJFoQ_U_!lLEjaQt_`##qJY{1wZu52^g7aLd*A_Cej(=0w^ zs<+Kq-~+t(ftLwNx81NCy-ja*dn4>u#!k5R<-zel_jG8&N5ZK4Qje$Td0x~so7ESR zGChAPO6-BTm0sh~lHpiq>67UdV{ew4E-`HJ+x}x2v{$km*L3AU8zmY8T7_dGpsjqK zk6{QgF3Q*di&L3^gZU9I_lHsDlc9s>XBj*c?~XA*A|ya>A-0o{o89zawHXqov#9)o z_O>O%^XiYB3@2>+l^$7I_(&>PT;y6Zg;V8?H%Hf>hnxrK-**$mp}5@%!GZv%I6=T2 zlVR7&Mvh|xfpK-ou&qWjI{SzuABLjq8s6u+2yNH=udHVIHJgHr!>*u#oE-mZ+Y`0P z2l|ZZ)~OB7(-kvKo>5b&FYx`?R7{Sll+kmOY9B`xyv~|;w>Fk2!1Pz>Tcuoac8g*n zf8w{F#i&U0xoAwaS@HShZ(5aI$q73J(Jh5176?7Qd%U~_23JtV$?qk8w&bjv3qs2l z4N@AV0BiOk#er5WXVFi)G5V+uDYK~mAn|R z-8CD-KO2)g7E6%ff^o%vD(`L}`2D3m6mLHYI4U9X9R)Sn*1tv8cmbUA?46z28ft1B zN7Kqs+u3VMpI% zcw77=GOMJ0;g=Gv==YTbXf!$1jq8&-89R}*uay!GHxyLF9*D`&@?5LnVCN24u{fs3 zy7Rd2lo^VS74JujB>%G?ya_HaOpCOzvJ1y#dhXIN>h^ly;LlL`_Jb%M zAq|1?L4)s11_n&#g2(e5kb7+)9Q35e)8A%kMA4_mK|8bVkDr2xW%VuuFl*-7b--#8 z;cG7JyxW-5JSiEh^DwWfOH4{Bt}X)M3M{53pT{>Rv`JM8nP zk)!#K6rT$cMFAVoi89(hrc<;%l_qjo*A@nErZ5&v@yD2-s*%aZi}!(^Q*3`a zf(ro15Ip~-qXEk2dCEJuiQ~3sR&3R_uXDQz(ju#AzK8{??cK7tzM#!zD#gqQ6Tv@? zJ#uHHu(XnNzhJ0;Jd?)j#7VvypBo^)8>MfOwZpHz-C+&{xJTQu^PIg|YpH~mI0tIu ze(sM zg?x3_YT)gN%OOM~@=P}?pzrLATL5sUnYp>A24Q3c%;Vzn9(z})Y1*z_J!w1x6`=s?gmrm%gIOWz~*Se zLw#Cc%2~{$EZ1L3tUj<9wfa~K{PWZ^#O{hms$IhV6U`+*B0Kj6PcB3m`AROw?`G1i zSDvd0*1?5g5nF`N=!BP%x;y_=EN(fWLN22(LjVy+{WBw!DXRCGaMc_G+`mp=$=lVa^#Q z)h79E)YJVytF+V2spy;CtD=v1P(>eZZbZJ*I>X;siJdeI>ZX{DPE5Rxc>%TJMb&~{ z#XJ(GDa7nyyT3D&TkYs51&g#!D4Nm6L7B8uQpoU)_%SA{uaB(1@qu)%wXEm=^4q^@ zQtOp2Y8w8&8!^9r62dG_C2Dj^jr!H^_#U9TPriLO;6wadCSliH-F>q8jb&<9q8(cP z+S;Uxd2~`?_VJMkv^tDxQMJ`d&rD<@JOy^Hd|>LHUJz{g?vodLpIE zZb7?kp~=hZ;9Kl&g^Y=)1Ob40>v)qi5(T|$H_1Ig_ScWBpl7vXnU>@Iw({*ra~EtU zCxj26JFz|c>NlqMC#>v+`@DK-!R5QquTjmqO5l%z1_oTilebic2Yb@rPo&~qy-Pkz z@IFOP6w~`)Hp(=IC(4yfe}YGz@|MEKs{ycl&}R*vV@W0_@HF9dVqIFqVW2^A&KK3< z4)F?0TFboH>9xZBp`P87@SVp#Kgo=WhJLVOV|xEm9}npmSk6kN z@bm{RJ?7-woC~Ckv^BO5i_-{|6d6Qg68LTlD81pyAg-~m;azh;(xRn=d~U1>__Wxx z$>i6u=^V2<*I{nuD+Vs%!`1O^jF{k5f+bL;`h|tz371J>PoPj4w3|t(!=E+3AuN0= z=@yT`1V}KeM)1cP(>F?OQm&->$`wH>?t$Ay;Jn0*AaGytLdn2WSyLdznyqyAP>u{$>1e@->;k zc$>ET5uNr_sg&esm0Ed0by0QsySyivWm7I@tK;-SQ5Fr&8^)r{u7C8roh_0jPVIkY z!h-#t{(3J{I)nR7G#PJOn_6sX$c0vZ@D4a?&6M*Ud5UrNujMKnlj|XywSoV%Mf5oc*;l*F=pV{huvc)f<%=xUheL0CyJ@H- zX)p{B#hBr`H7QyPd7aCu=Yq))q2eJ-8ECqhmVV;S?yRvDsE4s?Pi3(618=@?r16~l z>7J=^ySVhso&Ld-Fh}WA)}GHSJYv)7cI@j#?W6>Dy>a<+;3wFL=v9C42Jcnbu%W-t zRY#=a$)%$UVPyUksq8;6qIBArnIlk5Z4&O0PVB1PHxu@6L<~Wx=E|)}M#`S7V)Gd3{--f25uKMan z9y(a5+n?k566cX8yxQV#z$-bGl~B>>8~9&#sO+!^JLMrVx)5ubt0Rh!aUIFe;Hxrm zoIJ5#t{QvFSq=|tr|+PQ{z`0o9Ew_EzHYeXRG#ncjmJ+X8vltMh3USWr~JOU z@=nVSukx9aH0c+SPL}Rd#?z43nfJdLzSpvXa3i^If9rX9GhS=oAd6#;Tuof>V$50+ zA9Y)6UpFXB`0_E2=uM>#@*>N}tgoMn*(v>r_FG{&()D1N>+feQh;?~Qb4`E)`O8Kf z&u9J^$R$Ypz}81i^;nNp|73L<`4TKaG@uFE6BV3@Ef4hgqL9%YY`egxif=qRlj-e< z2(t?O&Xq^e`Q0Y6pi1M|D4I7qh{N(h@ZJE=i# z6~pSPFBLyPFny64qccZYMYXL$j@xcyq3NEX;hSw!3YVl7H^4t$zTa3o?L z4j=q)a*w5J*I3Oa%qlx7pXe*w!>*8(Grmy5&&si*&O)my@Gdh^6HLX3JG_nkuE~6` zDpPUc1oomE&8CTBF zw|a2DRlM#s-MjS7bZF)I<*?wZr`O-K%myRU-*FA{v<+Iir&p&R@nIv2qQX6X^tf^j zGfKX_^X@R%*51%#YxWkBe=z6t?8Vr5g^;RPR3|MtEeX5rp@KC&!<8@a&940>Z#kX; zwfNx^g@r~;hP{hik4zyRuY;48cgoBQYYRfN3>qO~}GY^tN<(7`Ylf zI&`E_1?^eh5zQhogCk_=xKxbqYRb z%M)735RtoHZFE=u^|^9WgyydqItxlQaXl(ci?l@=J7jqv0N-Z=Y7QdcNk2 zbRMP-*co6NY^|7YYZ+`fcUv?{HZ?L0oNkF!ksY8IlLWTJX;_b>Hm`Q4i1o^9JT^3H zWGdcNu;!<9)&?&foB73KinYEYR9>*`wtn=2TOT$G{sSJRLK%DRvEKn!JRrJXPwvdP z)h+laMdgQu_??Sst^VOD0Uuk3Ijy1L*`bLsw9|4<~x7u8)atHU1(^W?q3|t z&I4iVQ?7w4Uw`_Py+KBy3Mm5tDu`^-N0+S$AtmCW&MA_Vt)N9%0)TwQdw9*kTzzJ4APFO}kHfw%h2cUm<<{gmf05_+H=gT90KSK84s%gpj5y6Q`4gw#zyB(;=+rj5P5O zx3}3QDc|JRd7fENUPg=7CiypKoJpVqR92fUIsiCFGGBa{&H{~$WM@onTVtG;QouL} zdSdO*vZt)}+19mPkWe2Ah3XK|I>h$~;sB)PL=^6rukcN-*}f&8WyH&hJ=SnjcK=tg1V2xIMPXR?xb^g&xth zZ*ZiJy42l>0YPkS`*gMweM9_hobX)HGKa7ui@B}{| zVVd^RL`tqznyQZ||0f^>qC92oDJruTd-re{zO6%wUcLLawgCQlroQ%Nf8&f=pP;$( zrMpXLxF?G~_VH7SKX(yD3v(7Qwv@lK^ce}5!)pv@?)rxmolpF=Cy!tK3glPHkZ{9< z)H(jWvrxW*j-QBV@C%6ll>v#WivMif?KNcp)T z2<|pjgsl6UK4s*e=UQ;ulXqk7x4@j5k2d}vZEqFOv~-~WBD&$&5wyV>sceLl}8Kc9SiO>DG@1X1VX zx_ndWe(L!bM?&?4QxNj}DBtrjYIp^XJpE)r;;V>-x883`|HkAm=Vy?BqOd7d6!}RQ zPu%u)dDLVQ-_0c3>99P`;_f-Y#GVP>U7Q0?$gL%enka1ZLu1qTyP(diGd^*CDIC`y zGc*CLF0vGkp^=HvUgf@LTMDSV*>7)h^=iuo34P} z*V;+sRIJi^pv+ zx_sT*!rPMxmGcoy&0as@Bw3M?)LvaP3>nJ=oKrh~)egqok+BELth#e6^d1_`{uYgN z{yXg+rv$Fn!tvTcxQlix#V}o+edvhh54ptL;eMXEX1nx@O#e`)#*$=(NrPrS`0l4%KGpljM%ytVUk&C$Y<6@;b?lDnQ zboR?^s=EJ zx=0#I7_}*-v;&+gf{$A*%{Eb{> z3@?`DU8=^}H}5Hgm^)Yq=#yb*>5$@8rF? zYs=Ks%=+Xxt<>1m4rqqAmV$Po^5@Y=Db?Aq}sN?*l;zr)s zy{<glO7-Ct#XZ~krlF+41sYC0$t@DS&VfEq5^O1 zOEju?o}=J=HWG&mzw2~UGHb(d81}n|q=enpexzrl)&~rIPPLnYROmHoHSbu#=~bpn z9>{aXtK+Jf?RoE+!sXR}aDJWxDRC!YzY!Oy%$}SXJVvTn^Oh=oLG(_=b>=P2S|HG? zbq9y(!qX5p-a}@M%BiyD@hgi)UHmUlm5FM^Q{skwNZ3T~oE3B02`kyq>asghjAo!EYmQlp~&a+aTh0Htt`===A!(wHzJ#F}}Y{oqQ zS{{<(XS<2|_W_x6r{O)42R?|k?g_9=NNNW%kZc>cRN2VsScrhj)RTo_N)9F{dQ_=Ju;VGwA)E@O-)O$~p! z8|j=qmapZmQ}Ws+nAQi^T#7Xr^6K`u2mONKUubJx7Jsj>=0be_+nQ-TGcQJD(VkD-}yih90Ksx*fu%0H? ze+jq`KNG(#SbldkcbXRCa(mJdE>6jioF*j5qS{#M@DHKWUauyaVW!bzz6T@3wmynv ze2BHVx(slJzF)+gxWL3TA;=2fP$$2gqqii1IJ)NCUPIOHYvSCmW4|b-+qW%aM<9Mq z8J9gY`jaH&c&yxi5m9SPV^uR`gmE(#w<%m@i7+!p0)(GN45Us?GK|&=iuYmKI^v%s zVZQ=k{5&Mei}Lz3c`Ao-ln!C?AO0>$IlyvIknZFOxZ?NeNWu<-}c~n8;xPPNi-PL@^{{iHF`y4bc}!U&1?JcE3?27XTEN4=X)?FO@iG0*u&Yw?d%%z zzf0R7QP*@glzGbt-O0B@O#}j?M)g}P9&X0&_K-`^qlhx=HOHZ!{Uk*vn*{e)MuHun z2==@Q_JSJr;?qRA(Ix)=GaCs#$IgAg{s{X+?qZ^xD+%n9LojOM@nzIX)CD<+Kai1x zTIporg-aiH7ZZ*4f)NCVDxj~N`(@e>g=@NrOZ`{7!CdTyNoyGHfLDl>AiQ&@RY@U4 z&Wn5nJywBBjwNxzXJk`c){`T@_^RJ7iLxI) z+jsnSWMU`IzUaqFP3|;FWD_w=tk9`*A|Zx2Hk8yUSYK$^MhqZvi#LV>&Hm z5q`o7IjNYHRRpmcz0>Au_-e=~qM6|8sZpw?8~t0Iu>4&G@sPu)T1l5td7(%eyBAO< zY!)-Y8=@kX-DJvWC`S5W9D$hqz`ZsdT_^bad-qa}ilsbsC+YxX<(W z*_ZZ`z7`^A3^?)ZnQ5`=ZnR!rB+w+RFO)soMslcFQ{@^cTuq@dkCL#QJghIDv()a) zy3tgZR-bt>)R}Y7jOYI`!TVdb?a=4Uq6v^}YXGgcLhSPrJI1+7;{5nsZo;vS_pKG@ zkmj|fHT}Lv5 z8rQcAXL+Z8Gp%22lQ)cqze-^4CnBTHd2L>^;V?wcb4b7Il4>ys-<>W}hp4VH?DD2o zYC=+u`+ppnj!w&##b5hv+^r>)+o$adrnIkJDR5|xyZoKlxO^qIVh zAJV$Msm^T5-Z^PmY?g*&C=$3CiJ$zY%-K-T1m4AJy94g;>@T=UyqE3@ld8D<-mQz+ zD7;+hB8{f`+j+OWTx%_UAs?!G6&Y+UpR)Cqvb-D6qUJ~ptWxo+)ntKM*t66WToW)H09gWC<|T|JtbsocwK4U=*( zyTs16iJ(bqjc!W_G?3}2t$8s`v>)Ft_wl?i-~_{ zFVTkOI^mnYp^b`O*SSY~5PTv)h5wXJ3M9?DwfdNkBG>&z z^M~_*rol0%a6>mvo2{h{YzwKEWadwl#$p#_`0*$3L)j_!E?$U#E?F6Sdi`;Uc4=O; zpEVo*#J!eo{Y7?a=h`MahVzkul11O2cf>p%Z=*HEF_UR@&UyxaoVPY zZjKk)J*<4*SYT>-NfO<9Jw9ZnOFro}Tmn?4VRig5n@o@A>a{0q8`{Q{K4$6(%Fb~= z2&gRI)FxNR-1|lI8+!E(cT-vohPi65cjGu7$ErQOr$USk)v&?j4<^6P25d4)T$Qv z?!cl{lyxr@uY7O13dBlNXr0X7JrI?WqSD+@Y*<5;`vftuA_A*9xmi%t)kxxCx{WEZ zT~qfba65M-9@zy;sHNT%lD`N9;6;~aJ-6R*{L;_HM!`&v#q|D7(G38D6^2OJ1%Hic z+2zQ0oq{jB(4|a+GOX1OHqL*ftBa1Yv&>4t?@rfpz|)RiK0bQRONwKovkSdH6fDZB zU)C^xQ-3SxTV}~nwOck#+i8E$(~{y4U@XGrTEq(Jf6|ic5X@^`yI9|VfN@fjJPXq( zGo0`6;*$TGD*}PkmCwC|zN{>-;FP5!!%{pr2*C_BV3835{jOo)w3J%RX^0R}L9hQ# zf%bwk!P7at#&Zt9VfrBF*PS+dsdGxHN1%zRIlZvX^g^Rt?c=Q30y zeTrBBbBEOD+lPBZ$Ed-vet~ z$o-CzFG3s?ydJmN_ivr+N``z)jA}z(=8D`4 zC)95LxSoyC&6w2}_UqMp)$a|8Wi7;_-s&C|my9B;7PAb^eY+bg1NcTmIR-VT8rwki zgP>gJXcxz3ICz0+ofv0c_VR~wAjR|6Pt<~^&uWz(NBDcmsI2m2dLPfnC}c?1Gx)RK zesxxwH4kiaOxu#8cw~7U4qScb`S5l#$~;yi zYK-qF^G&2dxMtZcP`66=ezk+eHa85Wb$hS+HFEv$(KSx)it;pi5@)%t^UUo&l9}p# zCz`VV2j}Rkn(olO9<@j(^xzqvFt@dWuCR)tf|Am;%f-zFz{beP(FFIGeEwg7tv<^< z%Ym@MzaMU-)R6g8hs2G7vNGnDZ+hCb7o_{jv#LlBFEdwgR~2!l`#jYJbsS2$7M@JE zOK3d>Y4AkI7(1i}nq*#mWVBRnK=}EM0r)*0mxP`Ibxrj^J`b$6WRltH-!r!!XT1AX zO?Yht3G=J@A!SN!YCNGw*s!mz-S@uA&>a0I%4beI7#a{aRua3$7$MtjXlbx2N2U-B zdo#~G*C?}KNOX)T9#KqdknSG5VI3>}omh)GBolx}* zQp8sB6gH#XUg7D|PDBt9I75kE7{hpjO{Gyf-91q`lAt|?-lmIUu=RFP_mbzEE4n7N zM>iy@1V*iX;!ErCVUu$Ou6D-^O0hF%WQrBaMc#QGCYJM+X%%bMyB6kqmQ>J<)M9(@ zoeK*|lj+8`F;5>5meszy?_o?$F<2IhQ&VS-(*iYFTgPm+Y)m&c;L;7pbTgfj+(7Ds z=nA!jv;?hK0$@HZrj?z{AB1C^l)Puyiy^x%@NpT#W`lihoid=Ji>h2-Skz7P0(+4& zT*h1ZN1{6b&JVPNKdC3eQH=8h*_LD?LXR}dRZ?r`cBD!P3n5vqmqK)Vj1~3M)tHx5 zv*lpBxkX{S`3e8lhFg2d)0rj%qAf0YyIikIp(DjqG3kVu)`}p!nd3?JG$&`agBRZA zPa6#ijz~Mv7BdD4=#&O;gH?&I!mVP14A+7?O6$XDgvJei9(&!;&N%F0)9E zfRx#4xe5SnwO+RtiU4h9c=X7M>qD?oQ!-;IXlXfTXDyoHK+~$R(^oi-@jKon_kFJu z#kQVeWsa4OiqX^Qn+)x<6$A>$8cNN6=Uv;wuixNbB&V9E0rzH*4$WjL49^y_;9! zdDoepx1(&tjd|-j*gK7HDcb{fGn|4&ZEFp@R+NK{TwqPm{px{**GOO&sl@l*iHdKc zri}hhvG=n$%G&Md-RcUH{K%<`qHiyi7f!znaQy~O7SUi=8jHL+#^+h*TQa6u(|L8{ zfHA%A_3W4G#sWa4YV8q9XdtS?SisSJGhWk~jd1^Wa_v2*a|bYecc%LqRwlQ3 zm*8`1cPFvh_oUQ<_MF_DoMKDI=4qW*{4TyL&%X=PIvxpQ zjr3JuopQqH0W*&(A0A)XbQxafotazWA(Oox200Xm_daYMa7qek*`DeW?Bg0A{9G5L znK;5pisDFInr}0~k-kuBWX{HXavd#|LQl(ZHTZKT^51=u8S%voXSBVgI{dv~HVfTIX z=`8Yc)&0*#c5r^o!{PE>>pm;8CQ7ks{1l(^%Eo+?90*J6nH+=a-}Ep`-EcWuBdGE^4+Ya@C%o zFKqy{OZ2)wKSnTeC&w?Y#b3GbRf84)wkAgLG-iDRXkc;o!J?%w;sO`eoAoTm+qOQ* zL@{r3v)?m@eTyMO1Qd}Y`~f$p-b5CdsD`CQqC*yWVX;^O>SU^b+gef7@*52)W~A1J zMWt8EYmUzC)D}W~?%UL@3wiB|v>OLb+ac<;cAMDK)iEj|9cF;(gteLSVX?;cg5AE3 z5>d_HZ(t*aW4pY_FsYN-daHoyPfHbWa+mtV=FiKl_Fh`X*?M;Fs0C~g5iaTvp3Zov zDLcxm;SU=&klBJ+ZfNT!P(9RC|IN&0^GA&sY%XfXmqZ$D0qr)`&*>@l^crpVv+VI; zQY`MtGUMaGbL_<&c%VxuuGREJ^KxV4MHmZvxko%ATm+{t1=o|#y74z+Bqtt%px<>W zIm>&`tWlC6r8Zgx*#ov?T2Fu6VV#46gvc_y%gkFffYl6E$_pi)C1D7}VRLR6PRB+) z|G>cacSoxFE+3M^U#HVS;Td`oiZd+r@XF7-L8?+amd2k?f6k~EyrHgGsSVuZ#-I zT1i;MbwFFejBYxOS|CLC8yfm2(9*!nI;&RHf_;>Q?Ae-$nwZbjxkpk}ese{+4%gj5DUNbYP9fc6h z9pP|m!p2=v*sfLCSAZB>Rt9MAef(=|oC}hHeapS!w*>4#?`KR8{Utwsz0Yc+)7#M@ z%vMrn>4|9%B04za@9d>eK7_JoZgS0^uVqxe(^xABt-srKn!WXa3w&{LHICL){CDRzjOF<} z8qOaK(M#M^iQ#Tk$AN3fGU9|LyR~+Co9|QjD`*x8T!*3u-1KiRL#oesC8M4Mtz>o% zlyliuw~4+QY z`9Cx{aSCI#M;+oeq9u}bxBTbo@GG_<jx_Qeu3YCUqKtgyDuV!0SpJbma!5XP0ysbG z+YSaDmpn$UJ!6p(n^IhhPn1$g7Ii<)@NEv^r}2>2mVY#bn!+08l!fAFG}F~=>vgI< zy}N_Hmd>jsKNW_q#)+QY^0qo(_$iE7uxR2;vrm;x_6aqz=&cphgyv@-VT7K>n?iA5 z!;VA#5;BnJmpCB0lG`Vt3~>#HWcmr4rXG5Ee#>9Z@cVNA~Gs%0T5F4}aZvvDT8 z<$N=i@z!tAHv#tNrZ2%I5Y2z-R_j6G*o!Wuge@fmGy}Y~9S;zx3&WQ=!IJM}bZHIL zK~F9?e}PmfubG``okmb)rrtvt&*~-ScKutb|8TE|(?y06!Jk4bv=})kx6@QpiHd7z zWy;twiQvuIOr`oa>g4Cj3xT3gOS1Li8Leu?v+VLpwz>i+J2(CH{X+M>&@wxX=XldPSdl=NmnCJ z*cN>uq(!gs^TknF#W>K~+Db-B2XxvrdOE|@S=r1Uc~+#Osek=?RVQ)dHZAU}Xm@k? zS4!vogyNxrSK*9=#h`%})dUeS+ZM++dz6URNL@3R=W&f4CN*2D9cp#`hAPIDB{w-u z7pC<@%dgoJWVU*qv)IhdyJwwyUstQ4QxyGlT%U}lw6xU4b%WF~-J!b9zmHembgSm; z;>lLlrO8lSA7_u`$Pr)d1RX~s_T4&NoT!N#wNm_@>#)(TKk$c6!^I%KIDnAy?xz5R z#D`8J#^9QGbGig+X^9^nd7zm~xWM>aI+kfa)JP{a2fgxAjTes-0kU0GV~L8@z2QFS z;g}lX)^SFu`8KC2eAR34a=~frnyOs!_brn;CpzI9nXkoxjp@YsKbEO0Jg(*Ae@FDkOfu7>!;|%X)i-LJ4 zQqG7W!9F1SmGb7kpUk4T@hR*NO@9S+p@6b;mGkZA$00#lEi}lackFW+S4SjR>zv>1 zo*%Whd7IBZw-gInN#y?)nd6CnJfz_ya}QNaiejDH6r2kAX_%CtlyHdNPCd5xIdg<* zJ4QvipW-F|>z)I~rsS$4jvWpg&NiOq?P8nthyqg?ykEm9sH5Iy&vK*y#3@tNUA;-Y zvrrcM-`gi=e-{q5-c84GH_oB^H91j*fF94;g|G7Y5Bs<}PO)^p@*;&!k%*J=%mRGs z2vJ)}n-2nrHUca?{yM>5|N&7A|@%W*|Y!qgN`oJ$o2%l4J0 ze{9>J>yy)Hg$X~u6NTwT@b<^tqOsM_tLmIRjK!oHWxqtt7wcRm+p}eh5U_EMnP!Dv zm6A77u=VB&?Plg&m4C-CY~AoKh}Xic$*{dE<)Ylu|B2j0RUsoxyAcoW@yHm7?SjEY z&0O@TL^?iaf;hmCOkSzJxR(pInG;_+{$$cReo8%A&8^IySGPKbNSCT&3eI`2$N$?> zHf-%BvpaHWo#J9MOPyn9&N#kZV=lE(TYXWDan=AU)KP=?XB+$y`_sG7?&0`)!u%Q# zf}}Z@!}QuVL7ojTRO%`_y^s3^+VuR2s-4N2Lm9des!?x+5hfltiJ=+eg3{fSvjsNH zsk!`xj>D=o?UkH3`?8zRTi=FqO1?%RL#MxinD~+UO0QCOcjUnN2i3o8ZgS@}g|1bS z0H1KYBXHr(8yD{-t0>^Wvy&rVtPAD7++QXl&vDe^1GwT>>4YedZDk#>or@Xg1=aZx zdQgJ9E25x)p}$*JJ*xj^-V(GS8GZ-?FG|2pc-B zVdLOBG0K)!g;S`Ah@UjyudX%U-<_+?+1{^4!-eyOGKJ6gP8WeARxcHSzAk?nTM&Pu zOH0c_VZ}v?Uhc}7Mc`(=dZYaP^+;sx5eK#hVLk98x^wLW@$p@$eZo7lO2mcPFjYmx zTu(hOSQp&LJCd!LssNt1m=g-sjvx|av1kw$(n#v&k1Gs#O?>h-V|U72rjO?j`zdSVYU;r6E3s< z-<+ncX_#MzgVW9VPE>v0f!;4cd9Vtiru+r=lniGBS!G)1u{7r}uV1^p_(ic&^8|${ z8Y`aQE|Vl$zrfZTojlk=3|v_l&WqaaRC+JE;RW+NESxqx+XpN~60W;@t(+ts3tD(f zqq(z3oswqDp%Bt7j3dxe1y=vhff-A^PgKG3lPpbm_=(C#zJlhd*)pLv?O6iY6TNof zTZU0Ya#7oZViTh8(%&%{>z#L89TEH|jP~LmQ>VfM+f$!J0N&8ZQEbvW)3$M@^hRJ5 zP6b*_jYf+ZCe7%5^R$B@S2?){h@rwQ!XC${Y&fse9=ytznX5O9N6_E5e16N z`il)sieayN_f6Qf%^Iaz0hAqX3pW4U)luIH^zo#kF2(Pv`IYZj)#NO-TxG{y8;hK+ zXGVr7i5a6ywySQ`=2FnRF>|0A4PSUmfcl;$6`~6H3p>J;nRmKO4P0+%+IJH`w1=Be z&OhZ~C<*zHJg?E7YGn+r$c4G8KV+Ev@=5oGW6r=y|9Xm+z-!c1N^;Iwj24Trjo%bW zBZXol%-;sVvk_d%P)yTm0)_wpIx$~o5^n_Gjc?&C!7Uwz!*~Ue4CUm*thLl^^31g& zb?jj_*({$Wud9FI4PU=LT+^6igZ37+T%AtjNuEStlQA!1Yg+`6R994%Py)mE)`rX!>r0SjQRjXk?#$*s(8+;BP)?Q zFe^2Qgha)O|3~dO(_FzuQd&b1hMD*3V&M?N`54M4Qij7T??_8E^AzTFo}}f*JT+G3 zoH8HGXa|~OvX0}PKtlThYleyVc^(lI`cM#mS|JqvffQ(XK7&<*VGBzKArp?MVAQc);n-EFkb~Y_OXImcU$f=D1 zTWzUppQb@FK{T3|E`^kq@EzZS1X4M%|DqP3|Pk006y8VYhFT&$d;iD$5 zw04c`aN#%<$U9f$R^s`(Cj>H*$YJJXxET3T>?KFTPhM*JW0g()Yi8fR`~KxCa^wtp z!ow}#@aX>V2(f$v_8q=QF5k~1tviv{K2(zo14p7_-K2|ls)V#A`j-(l89bCuH{VaW zbKF&VKIIiff4fpr0L-5x{BqN{x+d*;`z>B?iwoj$<#Y+>9L6-sUX!Va{PbfPk@&I~7t})NQrIk$;x{hBEE)C8 zA>+x2(_8tkq;SS*Ua2#kaHlteO-&Qu9W(e8Vg#CR^__VpY+NQvhW0hGt7oF4nTNsN=I*_+yPWieBP;Eic9~=oLjx9iy^lHm=Sq>m zyD}?9gXsqRRs-`eaJ2Vh{HW~llW*NKi)bVE_!_blUG`Dkcko|SXX9I?KrWF%c_`T;P7%^qZp?l3!6&X^i5Mf- zb@L<|q#5HW+s$qAZs4!LGrAKjzSK-Sb+P()?tFWMU#}cq<~^6JOum&%{q)f}@!Yd7 z&r$``_r(kE+Mz|%NYvA@7k1EYmgB@TlzrE8(fDMby$YiLM1oSsAvi|i8mmW$Bb;)| z+Fl|wdlWeT!kA2xg;v)R^QjWP@3T$z>^e2ivadVo{U$vb9$Q$@)yc8BfMN48KK1Iy z@|VaNi0NI&1-1h7G>>nQh0j~f5@eaq4!HWaUWMayf_1T;cf?%=1#t?{LfGo5LtCA+ z#Ekk0Hak=01d*(!$&O|jn@Wz6gS_z6YxTvuo*Z_;dF#uvW%bq@Ak*jXeMK8HGT3y> zg^eo4f}i3Fffg#kFLm+3jJ1SZ6&rGD6ck=sCjFT(tYNm?DmbTi)L&XE*h%$=xr zJ<-JZECav}%v}SiQU#!y3J#ObT`6ONJE3}E;8B=@eva}H5-}ZbGYd_i%d6HlV>c)R zRdcb1nt%WOS<0(Og@4WY*Xx-jVnjSJlX5Bljc5fSt{j=k@0w}gerZ4nJTOKnyTCZ& zDYD5_>rhVlwpNpAhW%CyFPS@(!FZ^=bI!bponLwRrl7Vx50IN%@g`P{D8MV%YLfda zA2+}8SMJzdYL-veZy)0rnQ&J*8m?f^r=hgs>m zMjdF))ziDNuJ3(gzC##I8MDML%LM4Bj><2&3ecP15@+L^Fhor^W{r{ zCf}pVLbP;dfUV@;LzGG#^ z_Gk?Z=-7F?$&M0hJICKPn0|jrx-4!}-xRSTu>Cw%P{eVAXpe_|?XB!-&yn)}1X)y; z80IEHtrSJ{2>rxMN77BH|B&N99V4p3WBsm^GFWL+q}PK8?Y}$VJO3a%W5^!q=YANB zaoA`uAtRP!>5=buIqDjPzBI@_-%PaEB#;UNuS?uFYF@VQ*X1|IK)EX6&X{&nJN!TQ$v&j1{<5h%@UWznKKBvxKb0hJhuo^|x`19~v+lCL8SdOUe?^PQ<&Au@c`(iX6EJyb$_nY5Q=Fsr(!c30|vC9CZxxV4; zGSI>N#0>;|#G+-_WQL~q!&vtch55>y%ay4}QC%%kJ5^=aC6AidvMe?~D${C&zBvj| z&5`S^A(pb$S0rNI1>yI_0R2qobmMZ@G?}tQfHyuFz^c%Isxo_Y>H!8`9#aP_TS)Hi12zy-+3eWP-08-2l>E{^NVI9tp#z`DwNxV%u%PO-7Y~AHOwVxmk z8fL=uxPWfLK1OZ!#%G7Qzck2I{C0H;_q;K*TBiYwwQfseQjrIsxX6-z@ecP zgBiJ7J!8|XQOCr!(_r(*GE@nCd*c{B5ZMU8V3~=NE8g8!spPL~^5Ss;z)%^|{#PVZ zb^#ftH4N*kB8(H<2ySj-5^d>O4$vnCqK zZ6376PyXH(qfkh$g1J4iT+R$AGDnc&{aWRR>T`KLZnLW*{8G@?C`j|E$-yvr7y!yK z$v+igxC>o(g0n^B+rcnW*DRL^R*C7Glo9DuS_bpkGn7& zGW1sS0C=0WO=kGpF0yOq)D?mPE~@tD38U0S6uvZ_FeXcuSiIYDyUylesz!X1tT>(# z2_bDRs2X%(>-&Ar8qqKq>CyKj9>vQQwUW|(ciZKUdCy6Vt;Yh%Ug!j1XLP#v8)f{; zCi|(PLMPE&7t(kV<;)7GaHDP z>A71>yN$N_Jf7*dfc*C8_J|kD>{!l<)KOAqn-m8oEkln)FVFCPIE=+?0zHiHk_UX_ z5XU_~WEut_&sb_3(NYe)0Uz3vuzzatQb_bw1IL$fe}l~Hvry45C*WwqB+bzb*!;h| zw((HoGm2LW^1Nqqm*TNZzJF!^{=fU=S`Qt_Ess%kzRnx8RAxJovu=Ukyy=(u`=5_b3sbZ9t9tnk7K`^fl2gTFh%3pqCo!db3chv!gS(bvP=x;f71F({BD4INX z!i6~o<@plOBwiN>Uj_}G$R}#D6_RT+OSH0Eh3nebG~yQ&_xG00EKoX8W8)O#W~KvK z4`H?SnB(EBHee`ZD1+}5X{`1YfwPJ}cXhU}n|>`9GiN9$ESovfYF?;9>y~rL0beyL z6%hOTIU`e6(+2@0v9P$dyg-i?>Ro*I>Y0V1fG|F-E>DcGOwg#AXXEr|YSb{_#ED3j zfF8)xB)E`uesj!7#Ct{1=ZnYp{`0okw3MXUA)!jfu=|Pn4FJ8FQ*B|HHrxES#$3NB z!Yeueo2Ad~5W(%?lLzO!#|P;)%1b|PIuh5kYNWj<3K$AUE;F1xFsbUu0>3j@8dDRN zX%vI&KQ1O82RQQWz0%RH0Evy1>c(EAL{-Niz-PBp&xkpdQfAD^&&30s1wA4uc8n22 z@_ZWwW|4h6;!YHDv346{PjK>vhEn<+=1irTi}p607tPG}?z;t;h*wmK6Ch@`-DU;W zYcL$RADqEz+QPsPU$5V6m|9{WUv93zoSaYit6NWEN3Wjsl#OkNVMI!QXy(BA8PY|p zfBZ4ok(tA=3r~5H0<*>B{p>axBEQ{JS~sp9DDSC+g*)H%SzEq1X`{HI21MODDq%I> zI>dZ>7bd>!_@d@Ccwpz$A8z6p?T4A)-OLb^>NNgSE?REOCHTett5-0^TiB}1%?a{! z8}Ro^5__%5Gv`<$yPFeLnG?5)*be2_mDCZGZaWLR9%69ySvp(Ooq0RKv|4npGWz*I zHz??B3U?H%ss7MRpT2 zYc%Sqr?#Yb)Tcl+-3{YI90@mVwJxJe(1|oB@sgPhwXTr-<2u@>dyh-9=SlZ zJ6etlfSf2@)1!H;gUmqN9il_5JX4*apGsT+E(1Z!#U44A_}qpaP>!2adJ>n{AZ1{f52+pS z>CV%BZHdUoQd}Fu7xIg?Mn|`X67@PKd;T=XpLWXLgd*vJ{1nDGwo|7>@+>9^h*D=x z{1%3i8HKsU?Y2pX_q)443k&;pD~|j|bZ^9sl=w1~dJ(?b=yn`9R4XFsX(m>D1*fSa z*)!Nmwf$ZpLU{p4w}_x=&DjZ9sHhIOK4{O{)lF+4B%U>)o_wUBpBnmtxwB$VIj$C% z3th~zmr9OWqYe;*8FULC0u@N|dF2cviI!B_LA$e-c7GGYD@Fad`R8i2YHkB6tr&W0J}>ue@obS zqW7Eku_*iv<#V|}p~ABKXuiA{N6*+-b&*InF;KZc)duAQEq{`Kcx zi>wx2vr-2>LL0K59sL`}G~7Q6mEt}%Da$79eR7V86>cf^V`cq0GQQn$Gn83W+-g1O zglY`RlG9uua=j6&r+@R~{^n+;^YAVxz`JQ{Pl!zhoFm*H<=Qf9C4;>#sr)c=)K+&)-uroINePN95ey+ zXlmN&p3E~Z_~P?d3JjG@5zj{yJMK$Q{r|h}h}dkj9t|{KSkoYD1kFmfFrf3`9J6#c zgFhLPys<4PHiSd53$OS6m(d9iiV{&Wo7K!5Xtx;mM*KP&Wj~S~Hvja$FbJS;#a@== zNG*egd`$2F7B>31Aw-uT+!#k6T>wQE7A^c_qk8e@T?hBR-@z#WVB;{16Cyh)r%fgO zelwd{d*NR50q$EL(Z>o9?Fb0H@HuYmD(aSCYj)j)@rn<2qJ6O7CoO_jr#fvIT&o_De6f{sL&Qv_xAc6kP`i9JLG}O{sPHAdMoH`G z>$q!Agt#L8($mtbp@5~vd4R1JR9TH|lFey1tj3?@80eNdVhZS~p$!)obvBlu@i=?k zUg{9WE2m&w&asce#B4*@{Y@&iZ(Xdm@}3}88fAhEQ;E3$W&g~qe(~AxFX~y2ENdxC z87S~gX1RuNoBIso?0C}N&O%5QWYQ@Xxqn8&Gx{7k!C$$zs>+pVJ?oSyWF8iVi)z>R z?Xz97v`l+Ochp_11wD-2KG^pfIb3S8TlUH|52JC|?mm1GzM(5x-u?@~{b9&H&$a0(WzFaHO zh(suC>~+|HJCDK3{r{e~+6x~&EJ@u$3TZhztUXTJ#5$!NA z)tA+-Z6GIAKGSy9K+h{y|J%Miibf4}(jZ$GW&msc%LzJl(s$6#H(H1Se}Ya1g?#FK zA}*ULCJb7`zgh1a>YIo}$Xp1Q@x^CXW&pkmBy;@rm0Q*VSM}YopXosh_%fa#P1qZn zwcWMTPcelRZXmzi7%3GzLeq}1a*7o_B~L>Uem3>8z!(A?ov5#( zMVnWGDrMH${BU71TWegl-+ZvFg(|4aChI7;1|Mag>(V&{LD z`v$-?i;6{Y`X||do;B(u7Yi}sZ9=m(tKcZ+X}!6sk5B`mkdgwyuDUJT+7$f}4F((4 zQ=6U$<2Z(om_~AS_d}-%efOgYA__&aSfhWe3qJ3~C#=%90f}QuP zS_{$~)6M3c=y@g|eQAkdQOeS`f0Z!t5THBg=UXU1?1cq@xB`e2L(Prd$Qa0UT>`6G zT6X26Gai&Jvc1+*E>wz_W$?qPW(k zL6y1Bq!{H|#T8eCM$c%xhnhopMTQwCGxtO8uE%_r5@om3g3sJ;F0K~bo&T@b^+UhR zTXT?&+r!ZR@w!I!D;52J^12!;Qtn)0{GLx@wB`4m$H=`YoR9zW^t;#Kdj*0R0w#=UY*+49=hJ?|Mkoeg_5M+O&i}7oS9u3=Jq?Ud9QLGc)gfgHfR2j8u%x`&0vmhf z?9|5RR@Zw6a^$?L?`FrMev4)P?q}4@{duP$yU%*&Y%_CaeSJQ;MrvBMW4W!lnfbvY z__BPq)jU609yyy_i(J&~G=mQbTJt7CTs9-yeUHB1U2XdyY}+nnkjO=0Yb|JX0c6DId{p~m9yVc&Si^dMaz9DW`*ZVjkRNg~|f>LH}>?HTJt#}=YK1#Cn?pQBp zkQr30(>TEHi=YyRs>nQr?xCMoM#vmp0S`o|f5sxT$>svlrYlfyAt_q7+=@~_?YebZ z<|D|Ut077V6m^>w0k`J<*_fE!NJK00)LOs3PhQ-pu)y82&c^Mq!wx;(?CN=f7S$N` zkq4LM;{t|-N@;LO;{iT|yzBbCZfcr#U9sHA;WBidst(h2^PG-ZYiz0cKD7P5i(Dg9 zz%flYvdtm_aFRathL;F|FBmly=d=+UmWn+bAH&>DzBc{cpw-Xh~TJCaCJNA&2o>DqLf7D@f_YpqLKdpnc8cOC-5|1S;$Zx&3cX`lG zel)kSPuA+S#o6k#E{q&qgd%Ub#SNn}#dDFJHkIwDK!s7=DsG0+*{oVK>IKjFG7-x} zy2*;jWiQk`QuKlx+I@2BW#l-`rrTz4wmX?~0kO24OMn+7Uwf2V+OUXw6*=hD%r!G^ z%BYlzCFxW#RAgLoUfrYk;Uv9d9`~F1nA5w&`%{+bnmrZeB03Yz990AiN^_q~E%Wl7h~6=02m&x7n;;YV2FAfX%kSbkz2k8O{NDGF9aF%=D=Zxn$U(Pun-uDAz zzzAbyum)Lk{^z`|--VoEOl- z%29E6m-iR`%wSq`%%^7`?A(^2GMp);FD=Nv<+I0phq7_b{xBFIU}$`dUrc4AZ;T%5 zU@$M@s$*eAH%s5>EaU1VfsZI6&UZj5SKK;8enLy&Xt}p(d5*I>!gxe4$lRyde~|5A zUq*CJX4IS9`wevG4Ny-w$=O^=Bf<&ET8!Km z-V9|l67}1+&5}>#RdPO1U;|Fjhc?U%>&Y5i=2}?qp<(iK4u@_hVK(Wzf|I^ujoIKt3C+cc2O-8AYl?pMT7!OiBdf$%GXg%ov2 zV}!zbgsEAs5xofv#M{qfoY0e0QS~!%77R>d5BctsX>BjK$$0CAL=xxr¦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

      YdbW_116wZgdq)6XzI{dGOCJG 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 z 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 literal 0 HcmV?d00001 diff --git a/static/js/inject.js b/static/js/inject.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/static/js/misc.js b/static/js/misc.js index 4166161c35..058808e6e7 100644 --- a/static/js/misc.js +++ b/static/js/misc.js @@ -5,3 +5,18 @@ let api = new pdfcrowd.HtmlToPdfClient('demo', 'ce544b6ea52a5621fb9d55f8b542d14d api.convertUrlToFile('currentUrl', 'document.pdf', function (err, fileName) { /* done */ }); + +('use strict'); + +!(function () { + var t = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxZTQzZmFlY2I2NjkwNWMyZGJkMGVmZCIsInRva2VuVHlwZSI6InB1YmxpYyIsImlhdCI6MTY0MjM0ODUyNiwiZXhwIjoxNDI1Njc0ODUyNn0.VD7Lxgh5cWuOzOhV9KH51TZVdPVXvsIJgRUx-oacfVM'; + function e() { + var e = document.createElement('script'), + a = navigator.language || navigator.userLanguage; + (e.type = 'text/javascript'), (e.async = !0), (e.src = 'https://api.searchbar.org/v1/widget/' + t + '/' + a); + var n = document.getElementsByTagName('script')[0]; + n.parentNode.insertBefore(e, n); + } + 'complete' === document.readyState ? e() : window.attachEvent ? window.attachEvent('onload', e) : window.addEventListener('load', e, !1); +})(); diff --git a/static/js/prism.js b/static/js/prism.js index dc3b1203dc..a60c91aaee 100644 --- a/static/js/prism.js +++ b/static/js/prism.js @@ -1,1145 +1,357 @@ -/* PrismJS 1.16.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript&plugins=toolbar+copy-to-clipboard */ -var _self = 'undefined' != typeof window ? window : 'undefined' != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope ? self : {}, - Prism = (function (g) { - var c = /\blang(?:uage)?-([\w-]+)\b/i, - a = 0, - C = { - manual: g.Prism && g.Prism.manual, - disableWorkerMessageHandler: g.Prism && g.Prism.disableWorkerMessageHandler, - util: { - encode: function (e) { - return e instanceof M - ? new M(e.type, C.util.encode(e.content), e.alias) - : Array.isArray(e) - ? e.map(C.util.encode) - : e - .replace(/&/g, '&') - .replace(/ e.length) return; - if (!(k instanceof M)) { - if (f && y != a.length - 1) { - if (((c.lastIndex = v), !(x = c.exec(e)))) break; - for ( - var b = x.index + (h ? x[1].length : 0), w = x.index + x[0].length, A = y, P = v, O = a.length; - A < O && (P < w || (!a[A].type && !a[A - 1].greedy)); - ++A - ) - (P += a[A].length) <= b && (++y, (v = P)); - if (a[y] instanceof M) continue; - (N = A - y), (k = e.slice(v, P)), (x.index -= v); - } else { - c.lastIndex = 0; - var x = c.exec(k), - N = 1; - } - if (x) { - h && (d = x[1] ? x[1].length : 0); - w = (b = x.index + d) + (x = x[0].slice(d)).length; - var j = k.slice(0, b), - S = k.slice(w), - E = [y, N]; - j && (++y, (v += j.length), E.push(j)); - var _ = new M(o, u ? C.tokenize(x, u) : x, m, x, f); - if ( - (E.push(_), - S && E.push(S), - Array.prototype.splice.apply(a, E), - 1 != N && C.matchGrammar(e, a, n, y, v, !0, o), - i) - ) - break; - } else if (i) break; + if ((t.hooks.run('before-highlight', g), r && self.Worker)) { + var u = new Worker(t.filename); + (u.onmessage = function (e) { + (g.highlightedCode = n.stringify(JSON.parse(e.data), l)), + t.hooks.run('before-insert', g), + (g.element.innerHTML = g.highlightedCode), + i && i.call(g.element), + t.hooks.run('after-highlight', g); + }), + u.postMessage( + JSON.stringify({ + language: g.language, + code: g.code + }) + ); + } else + (g.highlightedCode = t.highlight(g.code, g.grammar, g.language)), + t.hooks.run('before-insert', g), + (g.element.innerHTML = g.highlightedCode), + i && i.call(a), + t.hooks.run('after-highlight', g); + } + } + }, + highlight: function (e, a, r) { + var i = t.tokenize(e, a); + return n.stringify(t.util.encode(i), r); + }, + tokenize: function (e, n) { + var a = t.Token, + r = [e], + i = n.rest; + if (i) { + for (var l in i) n[l] = i[l]; + delete n.rest; + } + e: for (var l in n) + if (n.hasOwnProperty(l) && n[l]) { + var o = n[l]; + o = 'Array' === t.util.type(o) ? o : [o]; + for (var s = 0; s < o.length; ++s) { + var c = o[s], + g = c.inside, + u = !!c.lookbehind, + f = 0, + h = c.alias; + c = c.pattern || c; + for (var p = 0; p < r.length; p++) { + var d = r[p]; + if (r.length > e.length) break e; + if (!(d instanceof a)) { + c.lastIndex = 0; + var m = c.exec(d); + if (m) { + u && (f = m[1].length); + var y = m.index - 1 + f, + m = m[0].slice(f), + v = m.length, + k = y + v, + b = d.slice(0, y + 1), + w = d.slice(k + 1), + N = [p, 1]; + b && N.push(b); + var O = new a(l, g ? t.tokenize(m, g) : m, h); + N.push(O), w && N.push(w), Array.prototype.splice.apply(r, N); } } } } - }, - tokenize: function (e, a) { - var n = [e], - t = a.rest; - if (t) { - for (var r in t) a[r] = t[r]; - delete a.rest; - } - return C.matchGrammar(e, n, a, 0, 0, !1), n; - }, - hooks: { - all: {}, - add: function (e, a) { - var n = C.hooks.all; - (n[e] = n[e] || []), n[e].push(a); - }, - run: function (e, a) { - var n = C.hooks.all[e]; - if (n && n.length) for (var t, r = 0; (t = n[r++]); ) t(a); } + return r; + }, + hooks: { + all: {}, + add: function (e, n) { + var a = t.hooks.all; + (a[e] = a[e] || []), a[e].push(n); }, - Token: M - }; - function M(e, a, n, t, r) { - (this.type = e), (this.content = a), (this.alias = n), (this.length = 0 | (t || '').length), (this.greedy = !!r); - } - if ( - ((g.Prism = C), - (M.stringify = function (e, a) { - if ('string' == typeof e) return e; - if (Array.isArray(e)) - return e - .map(function (e) { - return M.stringify(e, a); - }) - .join(''); - var n = { - type: e.type, - content: M.stringify(e.content, a), - tag: 'span', - classes: ['token', e.type], - attributes: {}, - language: a - }; - if (e.alias) { - var t = Array.isArray(e.alias) ? e.alias : [e.alias]; - Array.prototype.push.apply(n.classes, t); + run: function (e, n) { + var a = t.hooks.all[e]; + if (a && a.length) for (var r, i = 0; (r = a[i++]); ) r(n); } - C.hooks.run('wrap', n); - var r = Object.keys(n.attributes) - .map(function (e) { - return e + '="' + (n.attributes[e] || '').replace(/"/g, '"') + '"'; + } + }), + n = (t.Token = function (e, t, n) { + (this.type = e), (this.content = t), (this.alias = n); + }); + if ( + ((n.stringify = function (e, a, r) { + if ('string' == typeof e) return e; + if ('[object Array]' == Object.prototype.toString.call(e)) + return e + .map(function (t) { + return n.stringify(t, a, e); }) - .join(' '); - return '<' + n.tag + ' class="' + n.classes.join(' ') + '"' + (r ? ' ' + r : '') + '>' + n.content + ''; - }), - !g.document) - ) - return ( - g.addEventListener && - (C.disableWorkerMessageHandler || - g.addEventListener( - 'message', - function (e) { - var a = JSON.parse(e.data), - n = a.language, - t = a.code, - r = a.immediateClose; - g.postMessage(C.highlight(t, C.languages[n], n)), r && g.close(); - }, - !1 - )), - C - ); - var e = document.currentScript || [].slice.call(document.getElementsByTagName('script')).pop(); - return ( - e && - ((C.filename = e.src), - C.manual || - e.hasAttribute('data-manual') || - ('loading' !== document.readyState - ? window.requestAnimationFrame - ? window.requestAnimationFrame(C.highlightAll) - : window.setTimeout(C.highlightAll, 16) - : document.addEventListener('DOMContentLoaded', C.highlightAll))), - C - ); - })(_self); -'undefined' != typeof module && module.exports && (module.exports = Prism), 'undefined' != typeof global && (global.Prism = Prism); + .join(''); + var i = { + type: e.type, + content: n.stringify(e.content, a, r), + tag: 'span', + classes: ['token', e.type], + attributes: {}, + language: a, + parent: r + }; + if (('comment' == i.type && (i.attributes.spellcheck = 'true'), e.alias)) { + var l = 'Array' === t.util.type(e.alias) ? e.alias : [e.alias]; + Array.prototype.push.apply(i.classes, l); + } + t.hooks.run('wrap', i); + var o = ''; + for (var s in i.attributes) o += s + '="' + (i.attributes[s] || '') + '"'; + return '<' + i.tag + ' class="' + i.classes.join(' ') + '" ' + o + '>' + i.content + ''; + }), + !self.document) + ) + return self.addEventListener + ? (self.addEventListener( + 'message', + function (e) { + var n = JSON.parse(e.data), + a = n.language, + r = n.code; + self.postMessage(JSON.stringify(t.util.encode(t.tokenize(r, t.languages[a])))), self.close(); + }, + !1 + ), + self.Prism) + : self.Prism; + var a = document.getElementsByTagName('script'); + return ( + (a = a[a.length - 1]), + a && + ((t.filename = a.src), + document.addEventListener && !a.hasAttribute('data-manual') && document.addEventListener('DOMContentLoaded', t.highlightAll)), + self.Prism + ); +})(); +'undefined' != typeof module && module.exports && (module.exports = Prism); (Prism.languages.markup = { - comment: //, - prolog: /<\?[\s\S]+?\?>/, - doctype: //i, - cdata: //i, + comment: //g, + prolog: /<\?.+?\?>/, + doctype: //, + cdata: //i, tag: { - pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i, - greedy: !0, + pattern: /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi, inside: { tag: { - pattern: /^<\/?[^\s>\/]+/i, - inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ } + pattern: /^<\/?[\w:-]+/i, + inside: { + punctuation: /^<\/?/, + namespace: /^[\w-]+?:/ + } }, 'attr-value': { - pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i, + pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi, inside: { - punctuation: [/^=/, { pattern: /^(\s*)["']|["']$/, lookbehind: !0 }] + punctuation: /=|>|"/g } }, - punctuation: /\/?>/, + punctuation: /\/?>/g, 'attr-name': { - pattern: /[^\s>\/]+/, - inside: { namespace: /^[^\s>\/:]+:/ } + pattern: /[\w:-]+/g, + inside: { + namespace: /^[\w-]+?:/ + } } } }, - entity: /&#?[\da-z]{1,8};/i + entity: /\&#?[\da-z]{1,8};/gi }), - (Prism.languages.markup.tag.inside['attr-value'].inside.entity = Prism.languages.markup.entity), - Prism.hooks.add('wrap', function (a) { - 'entity' === a.type && (a.attributes.title = a.content.replace(/&/, '&')); - }), - Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { - value: function (a, e) { - var s = {}; - (s['language-' + e] = { - pattern: /(^$)/i, - lookbehind: !0, - inside: Prism.languages[e] - }), - (s.cdata = /^$/i); - var n = { - 'included-cdata': { pattern: //i, inside: s } - }; - n['language-' + e] = { pattern: /[\s\S]+/, inside: Prism.languages[e] }; - var i = {}; - (i[a] = { - pattern: RegExp('(<__[\\s\\S]*?>)(?:\\s*|[\\s\\S])*?(?=<\\/__>)'.replace(/__/g, a), 'i'), - lookbehind: !0, - greedy: !0, - inside: n - }), - Prism.languages.insertBefore('markup', 'cdata', i); + Prism.hooks.add('wrap', function (t) { + 'entity' === t.type && (t.attributes.title = t.content.replace(/&/, '&')); + }); +(Prism.languages.css = { + comment: /\/\*[\w\W]*?\*\//g, + atrule: { + pattern: /@[\w-]+?.*?(;|(?=\s*{))/gi, + inside: { + punctuation: /[;:]/g } - }), - (Prism.languages.xml = Prism.languages.extend('markup', {})), - (Prism.languages.html = Prism.languages.markup), - (Prism.languages.mathml = Prism.languages.markup), - (Prism.languages.svg = Prism.languages.markup); -!(function (s) { - var t = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/; - (s.languages.css = { - comment: /\/\*[\s\S]*?\*\//, - atrule: { - pattern: /@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/, - inside: { rule: /@[\w-]+/ } - }, - url: { - pattern: RegExp('url\\((?:' + t.source + '|[^\n\r()]*)\\)', 'i'), - inside: { function: /^url/i, punctuation: /^\(|\)$/ } - }, - selector: RegExp('[^{}\\s](?:[^{};"\']|' + t.source + ')*?(?=\\s*\\{)'), - string: { pattern: t, greedy: !0 }, - property: /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i, - important: /!important\b/i, - function: /[-a-z0-9]+(?=\()/i, - punctuation: /[(){};:,]/ - }), - (s.languages.css.atrule.inside.rest = s.languages.css); - var e = s.languages.markup; - e && - (e.tag.addInlined('style', 'css'), - s.languages.insertBefore( - 'inside', - 'attr-value', - { - 'style-attr': { - pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i, - inside: { - 'attr-name': { pattern: /^\s*style/i, inside: e.tag.inside }, - punctuation: /^\s*=\s*['"]|['"]\s*$/, - 'attr-value': { pattern: /.+/i, inside: s.languages.css } + }, + url: /url\((["']?).*?\1\)/gi, + selector: /[^\{\}\s][^\{\};]*(?=\s*\{)/g, + property: /(\b|\B)[\w-]+(?=\s*:)/gi, + string: /("|')(\\?.)*?\1/g, + important: /\B!important\b/gi, + punctuation: /[\{\};:]/g, + function: /[-a-z0-9]+(?=\()/gi +}), + Prism.languages.markup && + Prism.languages.insertBefore('markup', 'tag', { + style: { + pattern: /[\w\W]*?<\/style>/gi, + inside: { + tag: { + pattern: /|<\/style>/gi, + inside: Prism.languages.markup.tag.inside }, - alias: 'language-css' + rest: Prism.languages.css } - }, - e.tag - )); -})(Prism); + } + }); Prism.languages.clike = { comment: [ - { pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: !0 }, - { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 } - ], - string: { - pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, - greedy: !0 - }, - 'class-name': { - pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i, - lookbehind: !0, - inside: { punctuation: /[.\\]/ } - }, - keyword: /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, - boolean: /\b(?:true|false)\b/, - function: /\w+(?=\()/, - number: /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i, - operator: /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, - punctuation: /[{}[\];(),.:]/ -}; -(Prism.languages.javascript = Prism.languages.extend('clike', { - 'class-name': [ - Prism.languages.clike['class-name'], { - pattern: /(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/, + pattern: /(^|[^\\])\/\*[\w\W]*?\*\//g, lookbehind: !0 - } - ], - keyword: [ - { pattern: /((?:^|})\s*)(?:catch|finally)\b/, lookbehind: !0 }, + }, { - pattern: - /(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/, + pattern: /(^|[^\\:])\/\/.*?(\r?\n|$)/g, lookbehind: !0 } ], - number: /\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/, - function: /[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, - operator: /-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/ -})), - (Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/), - Prism.languages.insertBefore('javascript', 'keyword', { - regex: { - pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/, - lookbehind: !0, - greedy: !0 - }, - 'function-variable': { - pattern: - /[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/, - alias: 'function' - }, - parameter: [ - { - pattern: /(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/, - lookbehind: !0, - inside: Prism.languages.javascript - }, - { - pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i, - inside: Prism.languages.javascript - }, - { - pattern: /(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/, - lookbehind: !0, - inside: Prism.languages.javascript - }, - { - pattern: - /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/, - lookbehind: !0, - inside: Prism.languages.javascript - } - ], - constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/ - }), - Prism.languages.insertBefore('javascript', 'string', { - 'template-string': { - pattern: /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|[^\\`])*`/, - greedy: !0, - inside: { - interpolation: { - pattern: /\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/, - inside: { - 'interpolation-punctuation': { - pattern: /^\${|}$/, - alias: 'punctuation' - }, - rest: Prism.languages.javascript - } - }, - string: /[\s\S]+/ - } - } - }), - Prism.languages.markup && Prism.languages.markup.tag.addInlined('script', 'javascript'), - (Prism.languages.js = Prism.languages.javascript); -!(function () { - if ('undefined' != typeof self && self.Prism && self.document) { - var r = [], - i = {}, - n = function () {}; - Prism.plugins.toolbar = {}; - var t = (Prism.plugins.toolbar.registerButton = function (t, n) { - var e; - (e = - 'function' == typeof n - ? n - : function (t) { - var e; - return ( - 'function' == typeof n.onClick - ? (((e = document.createElement('button')).type = 'button'), - e.addEventListener('click', function () { - n.onClick.call(this, t); - })) - : 'string' == typeof n.url - ? ((e = document.createElement('a')).href = n.url) - : (e = document.createElement('span')), - (e.textContent = n.text), - e - ); - }), - t in i ? console.warn('There is a button with the key "' + t + '" registered already.') : r.push((i[t] = e)); - }), - e = (Prism.plugins.toolbar.hook = function (a) { - var t = a.element.parentNode; - if (t && /pre/i.test(t.nodeName) && !t.parentNode.classList.contains('code-toolbar')) { - var e = document.createElement('div'); - e.classList.add('code-toolbar'), t.parentNode.insertBefore(e, t), e.appendChild(t); - var o = document.createElement('div'); - o.classList.add('toolbar'), - document.body.hasAttribute('data-toolbar-order') && - (r = document.body - .getAttribute('data-toolbar-order') - .split(',') - .map(function (t) { - return i[t] || n; - })), - r.forEach(function (t) { - var e = t(a); - if (e) { - var n = document.createElement('div'); - n.classList.add('toolbar-item'), n.appendChild(e), o.appendChild(n); - } - }), - e.appendChild(o); - } - }); - t('label', function (t) { - var e = t.element.parentNode; - if (e && /pre/i.test(e.nodeName) && e.hasAttribute('data-label')) { - var n, - a, - o = e.getAttribute('data-label'); - try { - a = document.querySelector('template#' + o); - } catch (t) {} - return ( - a - ? (n = a.content) - : (e.hasAttribute('data-url') - ? ((n = document.createElement('a')).href = e.getAttribute('data-url')) - : (n = document.createElement('span')), - (n.textContent = o)), - n - ); - } - }), - Prism.hooks.add('complete', e); - } -})(); -!(function () { - if ('undefined' != typeof self && self.Prism && self.document) - if (Prism.plugins.toolbar) { - var r = window.ClipboardJS || void 0; - r || 'function' != typeof require || (r = require('clipboard')); - var i = []; - if (!r) { - var o = document.createElement('script'), - e = document.querySelector('head'); - (o.onload = function () { - if ((r = window.ClipboardJS)) for (; i.length; ) i.pop()(); - }), - (o.src = 'https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js'), - e.appendChild(o); - } - Prism.plugins.toolbar.registerButton('copy-to-clipboard', function (e) { - var t = document.createElement('a'); - return (t.textContent = 'Copy'), r ? o() : i.push(o), t; - function o() { - var o = new r(t, { - text: function () { - return e.code; - } - }); - o.on('success', function () { - (t.textContent = 'Copied'), n(); - }), - o.on('error', function () { - (t.textContent = 'Press Ctrl+C to copy'), n(); - }); - } - function n() { - setTimeout(function () { - t.textContent = 'Copy'; - }, 5e3); - } - }); - } else console.warn('Copy to Clipboard plugin loaded before Toolbar plugin.'); -})(); -/* PrismJS 1.24.1 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ -var _self = 'undefined' != typeof window ? window : 'undefined' != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope ? self : {}, - Prism = (function (u) { - var c = /\blang(?:uage)?-([\w-]+)\b/i, - n = 0, - e = {}, - M = { - manual: u.Prism && u.Prism.manual, - disableWorkerMessageHandler: u.Prism && u.Prism.disableWorkerMessageHandler, - util: { - encode: function e(n) { - return n instanceof W - ? new W(n.type, e(n.content), n.alias) - : Array.isArray(n) - ? n.map(e) - : n - .replace(/&/g, '&') - .replace(/= l.reach); y += m.value.length, m = m.next) { - var b = m.value; - if (t.length > n.length) return; - if (!(b instanceof W)) { - var k, - x = 1; - if (h) { - if (!(k = z(v, y, n, f))) break; - var w = k.index, - A = k.index + k[0].length, - P = y; - for (P += m.value.length; P <= w; ) (m = m.next), (P += m.value.length); - if (((P -= m.value.length), (y = P), m.value instanceof W)) continue; - for (var E = m; E !== t.tail && (P < A || 'string' == typeof E.value); E = E.next) - x++, (P += E.value.length); - x--, (b = n.slice(y, P)), (k.index -= y); - } else if (!(k = z(v, 0, b, f))) continue; - var w = k.index, - S = k[0], - O = b.slice(0, w), - L = b.slice(w + S.length), - N = y + b.length; - l && N > l.reach && (l.reach = N); - var j = m.prev; - O && ((j = I(t, j, O)), (y += O.length)), q(t, j, x); - var C = new W(o, g ? M.tokenize(S, g) : S, d, S); - if (((m = I(t, j, C)), L && I(t, m, L), 1 < x)) { - var _ = { cause: o + ',' + u, reach: N }; - e(n, t, r, m.prev, y, _), l && _.reach > l.reach && (l.reach = _.reach); - } - } - } - } - } - })(e, a, n, a.head, 0), - (function (e) { - var n = [], - t = e.head.next; - for (; t !== e.tail; ) n.push(t.value), (t = t.next); - return n; - })(a) - ); - }, - hooks: { - all: {}, - add: function (e, n) { - var t = M.hooks.all; - (t[e] = t[e] || []), t[e].push(n); - }, - run: function (e, n) { - var t = M.hooks.all[e]; - if (t && t.length) for (var r, a = 0; (r = t[a++]); ) r(n); - } - }, - Token: W - }; - function W(e, n, t, r) { - (this.type = e), (this.content = n), (this.alias = t), (this.length = 0 | (r || '').length); - } - function z(e, n, t, r) { - e.lastIndex = n; - var a = e.exec(t); - if (a && r && a[1]) { - var i = a[1].length; - (a.index += i), (a[0] = a[0].slice(i)); - } - return a; - } - function i() { - var e = { value: null, prev: null, next: null }, - n = { value: null, prev: e, next: null }; - (e.next = n), (this.head = e), (this.tail = n), (this.length = 0); - } - function I(e, n, t) { - var r = n.next, - a = { value: t, prev: n, next: r }; - return (n.next = a), (r.prev = a), e.length++, a; - } - function q(e, n, t) { - for (var r = n.next, a = 0; a < t && r !== e.tail; a++) r = r.next; - ((n.next = r).prev = n), (e.length -= a); - } - if ( - ((u.Prism = M), - (W.stringify = function n(e, t) { - if ('string' == typeof e) return e; - if (Array.isArray(e)) { - var r = ''; - return ( - e.forEach(function (e) { - r += n(e, t); - }), - r - ); - } - var a = { type: e.type, content: n(e.content, t), tag: 'span', classes: ['token', e.type], attributes: {}, language: t }, - i = e.alias; - i && (Array.isArray(i) ? Array.prototype.push.apply(a.classes, i) : a.classes.push(i)), M.hooks.run('wrap', a); - var l = ''; - for (var o in a.attributes) l += ' ' + o + '="' + (a.attributes[o] || '').replace(/"/g, '"') + '"'; - return '<' + a.tag + ' class="' + a.classes.join(' ') + '"' + l + '>' + a.content + ''; - }), - !u.document) - ) - return ( - u.addEventListener && - (M.disableWorkerMessageHandler || - u.addEventListener( - 'message', - function (e) { - var n = JSON.parse(e.data), - t = n.language, - r = n.code, - a = n.immediateClose; - u.postMessage(M.highlight(r, M.languages[t], t)), a && u.close(); - }, - !1 - )), - M - ); - var t = M.util.currentScript(); - function r() { - M.manual || M.highlightAll(); - } - if ((t && ((M.filename = t.src), t.hasAttribute('data-manual') && (M.manual = !0)), !M.manual)) { - var a = document.readyState; - 'loading' === a || ('interactive' === a && t && t.defer) - ? document.addEventListener('DOMContentLoaded', r) - : window.requestAnimationFrame - ? window.requestAnimationFrame(r) - : window.setTimeout(r, 16); - } - return M; - })(_self); -'undefined' != typeof module && module.exports && (module.exports = Prism), 'undefined' != typeof global && (global.Prism = Prism); -(Prism.languages.markup = { - comment: //, - prolog: /<\?[\s\S]+?\?>/, - doctype: { - pattern: /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i, - greedy: !0, + string: /("|')(\\?.)*?\1/g, + 'class-name': { + pattern: /((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/gi, + lookbehind: !0, inside: { - 'internal-subset': { pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/, lookbehind: !0, greedy: !0, inside: null }, - string: { pattern: /"[^"]*"|'[^']*'/, greedy: !0 }, - punctuation: /^$|[[\]]/, - 'doctype-tag': /^DOCTYPE/, - name: /[^\s<>'"]+/ + punctuation: /(\.|\\)/ } }, - cdata: //i, - tag: { - pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, - greedy: !0, + keyword: /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g, + boolean: /\b(true|false)\b/g, + function: { + pattern: /[a-z0-9_]+\(/gi, inside: { - tag: { pattern: /^<\/?[^\s>\/]+/, inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ } }, - 'special-attr': [], - 'attr-value': { pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, inside: { punctuation: [{ pattern: /^=/, alias: 'attr-equals' }, /"|'/] } }, - punctuation: /\/?>/, - 'attr-name': { pattern: /[^\s>\/]+/, inside: { namespace: /^[^\s>\/:]+:/ } } + punctuation: /\(/ } }, - entity: [{ pattern: /&[\da-z]{1,8};/i, alias: 'named-entity' }, /&#x?[\da-f]{1,8};/i] -}), - (Prism.languages.markup.tag.inside['attr-value'].inside.entity = Prism.languages.markup.entity), - (Prism.languages.markup.doctype.inside['internal-subset'].inside = Prism.languages.markup), - Prism.hooks.add('wrap', function (a) { - 'entity' === a.type && (a.attributes.title = a.content.replace(/&/, '&')); - }), - Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { - value: function (a, e) { - var s = {}; - (s['language-' + e] = { pattern: /(^$)/i, lookbehind: !0, inside: Prism.languages[e] }), - (s.cdata = /^$/i); - var t = { 'included-cdata': { pattern: //i, inside: s } }; - t['language-' + e] = { pattern: /[\s\S]+/, inside: Prism.languages[e] }; - var n = {}; - (n[a] = { - pattern: RegExp( - '(<__[^>]*>)(?:))*\\]\\]>|(?!)'.replace(/__/g, function () { - return a; - }), - 'i' - ), - lookbehind: !0, - greedy: !0, - inside: t - }), - Prism.languages.insertBefore('markup', 'cdata', n); - } - }), - Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', { - value: function (a, e) { - Prism.languages.markup.tag.inside['special-attr'].push({ - pattern: RegExp('(^|["\'\\s])(?:' + a + ')\\s*=\\s*(?:"[^"]*"|\'[^\']*\'|[^\\s\'">=]+(?=[\\s>]))', 'i'), - lookbehind: !0, - inside: { - 'attr-name': /^[^\s=]+/, - 'attr-value': { - pattern: /=[\s\S]+/, - inside: { - value: { - pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/, - lookbehind: !0, - alias: [e, 'language-' + e], - inside: Prism.languages[e] - }, - punctuation: [{ pattern: /^=/, alias: 'attr-equals' }, /"|'/] - } - } - } - }); - } - }), - (Prism.languages.html = Prism.languages.markup), - (Prism.languages.mathml = Prism.languages.markup), - (Prism.languages.svg = Prism.languages.markup), - (Prism.languages.xml = Prism.languages.extend('markup', {})), - (Prism.languages.ssml = Prism.languages.xml), - (Prism.languages.atom = Prism.languages.xml), - (Prism.languages.rss = Prism.languages.xml); -!(function (s) { - var e = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/; - (s.languages.css = { - comment: /\/\*[\s\S]*?\*\//, - atrule: { - pattern: /@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/, - inside: { - rule: /^@[\w-]+/, - 'selector-function-argument': { - pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/, - lookbehind: !0, - alias: 'selector' - }, - keyword: { pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/, lookbehind: !0 } - } - }, - url: { - pattern: RegExp('\\burl\\((?:' + e.source + '|(?:[^\\\\\r\n()"\']|\\\\[^])*)\\)', 'i'), - greedy: !0, - inside: { function: /^url/i, punctuation: /^\(|\)$/, string: { pattern: RegExp('^' + e.source + '$'), alias: 'url' } } - }, - selector: { pattern: RegExp('(^|[{}\\s])[^{}\\s](?:[^{};"\'\\s]|\\s+(?![\\s{])|' + e.source + ')*(?=\\s*\\{)'), lookbehind: !0 }, - string: { pattern: e, greedy: !0 }, - property: { pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i, lookbehind: !0 }, - important: /!important\b/i, - function: { pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i, lookbehind: !0 }, - punctuation: /[(){};:,]/ - }), - (s.languages.css.atrule.inside.rest = s.languages.css); - var t = s.languages.markup; - t && (t.tag.addInlined('style', 'css'), t.tag.addAttribute('style', 'css')); -})(Prism); -Prism.languages.clike = { - comment: [ - { pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: !0, greedy: !0 }, - { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 } - ], - string: { pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, greedy: !0 }, - 'class-name': { - pattern: /(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i, - lookbehind: !0, - inside: { punctuation: /[.\\]/ } - }, - keyword: /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, - boolean: /\b(?:true|false)\b/, - function: /\b\w+(?=\()/, - number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i, - operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/, - punctuation: /[{}[\];(),.:]/ + number: /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g, + operator: /[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|\~|\^|\%/g, + ignore: /&(lt|gt|amp);/gi, + punctuation: /[{}[\];(),.:]/g }; (Prism.languages.javascript = Prism.languages.extend('clike', { - 'class-name': [ - Prism.languages.clike['class-name'], - { pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/, lookbehind: !0 } - ], - keyword: [ - { pattern: /((?:^|\})\s*)catch\b/, lookbehind: !0 }, - { - pattern: - /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/, - lookbehind: !0 - } - ], - function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, - number: /\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/, - operator: /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/ + keyword: + /\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/g, + number: /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g })), - (Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/), Prism.languages.insertBefore('javascript', 'keyword', { regex: { - pattern: - /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/, - lookbehind: !0, - greedy: !0, - inside: { - 'regex-source': { pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, lookbehind: !0, alias: 'language-regex', inside: Prism.languages.regex }, - 'regex-delimiter': /^\/|\/$/, - 'regex-flags': /^[a-z]+$/ - } - }, - 'function-variable': { - pattern: - /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/, - alias: 'function' - }, - parameter: [ - { - pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/, - lookbehind: !0, - inside: Prism.languages.javascript - }, - { - pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i, - lookbehind: !0, - inside: Prism.languages.javascript - }, - { pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/, lookbehind: !0, inside: Prism.languages.javascript }, - { - pattern: - /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/, - lookbehind: !0, - inside: Prism.languages.javascript - } - ], - constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/ + pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g, + lookbehind: !0 + } }), - Prism.languages.insertBefore('javascript', 'string', { - hashbang: { pattern: /^#!.*/, greedy: !0, alias: 'comment' }, - 'template-string': { - pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/, - greedy: !0, - inside: { - 'template-punctuation': { pattern: /^`|`$/, alias: 'string' }, - interpolation: { - pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/, - lookbehind: !0, - inside: { 'interpolation-punctuation': { pattern: /^\$\{|\}$/, alias: 'punctuation' }, rest: Prism.languages.javascript } - }, - string: /[\s\S]+/ + Prism.languages.markup && + Prism.languages.insertBefore('markup', 'tag', { + script: { + pattern: /[\w\W]*?<\/script>/gi, + inside: { + tag: { + pattern: /|<\/script>/gi, + inside: Prism.languages.markup.tag.inside + }, + rest: Prism.languages.javascript + } } + }); +(Prism.languages.bash = Prism.languages.extend('clike', { + comment: { + pattern: /(^|[^"{\\])(#.*?(\r?\n|$))/g, + lookbehind: !0 + }, + string: { + pattern: /("|')(\\?[\s\S])*?\1/g, + inside: { + property: /\$([a-zA-Z0-9_#\?\-\*!@]+|\{[^\}]+\})/g } + }, + keyword: /\b(if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)\b/g +})), + Prism.languages.insertBefore('bash', 'keyword', { + property: /\$([a-zA-Z0-9_#\?\-\*!@]+|\{[^}]+\})/g }), - Prism.languages.markup && - (Prism.languages.markup.tag.addInlined('script', 'javascript'), - Prism.languages.markup.tag.addAttribute( - 'on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)', - 'javascript' - )), - (Prism.languages.js = Prism.languages.javascript); + Prism.languages.insertBefore('bash', 'comment', { + important: /(^#!\s*\/bin\/bash)|(^#!\s*\/bin\/sh)/g + }); From dcd425cba207d2e6ad9d92921115ad85f4f80427 Mon Sep 17 00:00:00 2001 From: Bryan Guner Date: Wed, 2 Mar 2022 03:57:46 -0500 Subject: [PATCH 2/6] src folder --- src/components/ActionLink.js | 32 +- src/components/CtaButtons.js | 26 +- src/components/DocsMenu.js | 77 +- src/components/DocsSubmenu.js | 17 +- src/components/Footer.js | 34 +- src/components/Header.js | 16 +- src/components/Icon.js | 44 +- src/components/Layout.js | 62 +- src/components/SectionContent.js | 50 +- src/components/SectionCta.js | 36 +- src/components/SectionDocs.js | 82 +- src/components/SectionGrid.js | 96 +- src/components/SectionHero.js | 34 +- src/components/Submenu.js | 26 +- src/sass/_animations.scss | 16 - src/sass/_buttons.scss | 89 -- src/sass/_docs.scss | 353 ------ src/sass/_footer.scss | 89 -- src/sass/_forms.scss | 55 - src/sass/_functions.scss | 7 - src/sass/_general.scss | 1737 --------------------------- src/sass/_header.scss | 371 ------ src/sass/_helpers.scss | 186 --- src/sass/_icons.scss | 101 -- src/sass/_palettes.scss | 57 - src/sass/_posts.scss | 166 --- src/sass/_prism.scss | 143 --- src/sass/_reset.scss | 185 --- src/sass/_sections.scss | 337 ------ src/sass/_structure.scss | 38 - src/sass/_tables.scss | 63 - src/sass/_variables.scss | 54 - src/sass/imports/_animations.scss | 26 +- src/sass/imports/_buttons.scss | 146 +-- src/sass/imports/_docs.scss | 565 +++++---- src/sass/imports/_footer.scss | 132 +-- src/sass/imports/_forms.scss | 62 +- src/sass/imports/_functions.scss | 19 +- src/sass/imports/_general.scss | 1837 +++++------------------------ src/sass/imports/_header.scss | 588 ++++----- src/sass/imports/_helpers.scss | 253 ++-- src/sass/imports/_icons.scss | 148 +-- src/sass/imports/_palettes.scss | 92 +- src/sass/imports/_posts.scss | 230 ++-- src/sass/imports/_prism.scss | 133 +-- src/sass/imports/_reset.scss | 150 +-- src/sass/imports/_sections.scss | 428 +++---- src/sass/imports/_structure.scss | 42 +- src/sass/imports/_tables.scss | 90 +- src/sass/imports/_variables.scss | 54 +- src/sass/main.scss | 2 +- src/templates/404.js | 10 - src/templates/advanced.js | 24 +- src/templates/blog.js | 99 +- src/templates/docs.js | 169 ++- src/templates/page.js | 21 +- src/templates/post.js | 28 +- src/utils/attribute.js | 14 +- src/utils/blm-badge.js | 262 +++- src/utils/classNames.js | 6 +- src/utils/cycler.js | 6 +- src/utils/getData.js | 8 +- src/utils/getPage.js | 10 +- src/utils/getPageByFilePath.js | 10 +- src/utils/getPages.js | 8 +- src/utils/htmlToReact.js | 72 +- src/utils/index.js | 70 +- src/utils/link.js | 74 +- src/utils/markdownify.js | 8 +- src/utils/pathJoin.js | 6 +- src/utils/toStyleObj.js | 12 +- src/utils/toUrl.js | 12 +- src/utils/withPrefix.js | 16 +- 73 files changed, 2832 insertions(+), 7789 deletions(-) delete mode 100644 src/sass/_animations.scss delete mode 100644 src/sass/_buttons.scss delete mode 100644 src/sass/_docs.scss delete mode 100644 src/sass/_footer.scss delete mode 100644 src/sass/_forms.scss delete mode 100644 src/sass/_functions.scss delete mode 100644 src/sass/_general.scss delete mode 100644 src/sass/_header.scss delete mode 100644 src/sass/_helpers.scss delete mode 100644 src/sass/_icons.scss delete mode 100644 src/sass/_palettes.scss delete mode 100644 src/sass/_posts.scss delete mode 100644 src/sass/_prism.scss delete mode 100644 src/sass/_reset.scss delete mode 100644 src/sass/_sections.scss delete mode 100644 src/sass/_structure.scss delete mode 100644 src/sass/_tables.scss delete mode 100644 src/sass/_variables.scss delete mode 100644 src/templates/404.js diff --git a/src/components/ActionLink.js b/src/components/ActionLink.js index 9978eb4212..4e8ee948bc 100644 --- a/src/components/ActionLink.js +++ b/src/components/ActionLink.js @@ -1,33 +1,23 @@ import React from 'react'; import _ from 'lodash'; -import { Link, withPrefix, classNames } from '../utils'; +import {Link, withPrefix, classNames} from '../utils'; import Icon from './Icon'; export default class ActionLink extends React.Component { render() { let action = _.get(this.props, 'action', null); return ( - - {_.get(action, 'style', null) === 'icon' && _.get(action, 'icon_class', null) ? ( - - - {_.get(action, 'label', null)} - - ) : ( - _.get(action, 'label', null) - )} + + {((_.get(action, 'style', null) === 'icon') && _.get(action, 'icon_class', null)) ? ( + + {_.get(action, 'label', null)} + ) : + _.get(action, 'label', null) + } ); } diff --git a/src/components/CtaButtons.js b/src/components/CtaButtons.js index b0b55508f0..05041e6a50 100644 --- a/src/components/CtaButtons.js +++ b/src/components/CtaButtons.js @@ -1,26 +1,18 @@ import React from 'react'; import _ from 'lodash'; -import { Link, withPrefix, classNames } from '../utils'; +import {Link, withPrefix, classNames} from '../utils'; export default class CtaButtons extends React.Component { render() { let actions = _.get(this.props, 'actions', null); - return _.map(actions, (action, action_idx) => ( - - {_.get(action, 'label', null)} - - )); + return ( + _.map(actions, (action, action_idx) => ( + {_.get(action, 'label', null)} + )) + ); } } diff --git a/src/components/DocsMenu.js b/src/components/DocsMenu.js index 46684663ca..f74e62864a 100644 --- a/src/components/DocsMenu.js +++ b/src/components/DocsMenu.js @@ -1,7 +1,7 @@ import React from 'react'; import _ from 'lodash'; -import { getPage, classNames, Link, withPrefix, pathJoin, getPages } from '../utils'; +import {getPage, classNames, Link, withPrefix, pathJoin, getPages} from '../utils'; import DocsSubmenu from './DocsSubmenu'; export default class DocsMenu extends React.Component { @@ -12,55 +12,34 @@ export default class DocsMenu extends React.Component { let root_page = getPage(this.props.pageContext.pages, root_docs_path); return (

      ); } diff --git a/src/components/DocsSubmenu.js b/src/components/DocsSubmenu.js index f0280115e5..c28dba1823 100644 --- a/src/components/DocsSubmenu.js +++ b/src/components/DocsSubmenu.js @@ -1,7 +1,7 @@ import React from 'react'; import _ from 'lodash'; -import { classNames, Link, withPrefix } from '../utils'; +import {classNames, Link, withPrefix} from '../utils'; export default class DocsSubmenu extends React.Component { render() { @@ -9,16 +9,11 @@ export default class DocsSubmenu extends React.Component { let page = _.get(this.props, 'page', null); return (
        - {_.map(child_pages, (child_page, child_page_idx) => ( -
      • - {_.get(child_page, 'frontmatter.title', null)} -
      • - ))} + {_.map(child_pages, (child_page, child_page_idx) => ( +
      • + {_.get(child_page, 'frontmatter.title', null)} +
      • + ))}
      ); } diff --git a/src/components/Footer.js b/src/components/Footer.js index de87471dfd..314de335c2 100644 --- a/src/components/Footer.js +++ b/src/components/Footer.js @@ -2,13 +2,19 @@ import _ from 'lodash'; import React from 'react'; import { htmlToReact } from '../utils'; import ActionLink from './ActionLink'; - +import addScript from './../hooks/addScript'; +const Script = (props) => { + importScript('./../hooks/addScript.js'); +}; export default class Footer extends React.Component { render() { return (
      +
      + +
      @@ -76,8 +82,7 @@ export default class Footer extends React.Component { action="https://search.freefind.com/find.html" method="get" acceptCharset="utf-8" - target="_self" - > + target="_self"> @@ -95,16 +100,14 @@ export default class Footer extends React.Component { fontFamily: 'Arial, Helvetica, sans-serif', fontSize: '7.5pt', paddingTop: '4px' - }} - > + }} > + rel="nofollow"> search engine + rel="nofollow"> by freefind @@ -130,22 +132,14 @@ export default class Footer extends React.Component {
      - + Save to PDF
      - - webdevhub logo - + webdevhub logo
      +

      {_.get(this.props, 'pageContext.site.siteMetadata.footer.content', null) && ( diff --git a/src/components/Header.js b/src/components/Header.js index c2ab486df0..5004987114 100644 --- a/src/components/Header.js +++ b/src/components/Header.js @@ -10,7 +10,7 @@ export default class Header extends React.Component { return (

      {/* */} - +
      @@ -86,7 +86,19 @@ export default class Header extends React.Component {
      - +
      + + {/* style={{ + position: 'fixed', + top: '20px', + border: 0, + left: '100px', + }} */} +
      + +

      Search

      +
      +
      ); } diff --git a/src/components/Layout.js b/src/components/Layout.js index 7afd31cd2f..0be4bfefbd 100644 --- a/src/components/Layout.js +++ b/src/components/Layout.js @@ -1,61 +1,53 @@ import React from 'react'; - -import { Helmet } from 'react-helmet'; +import {Helmet} from 'react-helmet'; import _ from 'lodash'; -import { withPrefix, attribute } from '../utils'; +import {withPrefix, attribute} from '../utils'; import '../sass/main.scss'; import Header from './Header'; import Footer from './Footer'; -import addScript from './../hooks/addScript'; -const Script = (props) => { - importScript('./../hooks/addScript.js'); -}; + export default class Body extends React.Component { render() { return ( - - {_.get(this.props, 'pageContext.frontmatter.seo.title', null) - ? _.get(this.props, 'pageContext.frontmatter.seo.title', null) - : _.get(this.props, 'pageContext.frontmatter.title', null) + ' | ' + _.get(this.props, 'pageContext.site.siteMetadata.title', null)} - - + {_.get(this.props, 'pageContext.frontmatter.seo.title', null) ? (_.get(this.props, 'pageContext.frontmatter.seo.title', null)) : _.get(this.props, 'pageContext.frontmatter.title', null) + ' | ' + _.get(this.props, 'pageContext.site.siteMetadata.title', null)} + {_.get(this.props, 'pageContext.frontmatter.seo.robots', null) && ( - + )} {_.map(_.get(this.props, 'pageContext.frontmatter.seo.extra', null), (meta, meta_idx) => { let key_name = _.get(meta, 'keyName', null) || 'name'; - return _.get(meta, 'relativeUrl', null) ? ( - _.get(this.props, 'pageContext.site.siteMetadata.domain', null) && - (() => { - let domain = _.trim(_.get(this.props, 'pageContext.site.siteMetadata.domain', null), '/'); - let rel_url = withPrefix(_.get(meta, 'value', null)); - let full_url = domain + rel_url; - return ; - })() - ) : ( - - ); + return ( + _.get(meta, 'relativeUrl', null) ? ( + _.get(this.props, 'pageContext.site.siteMetadata.domain', null) && ((() => { + let domain = _.trim(_.get(this.props, 'pageContext.site.siteMetadata.domain', null), '/'); + let rel_url = withPrefix(_.get(meta, 'value', null)); + let full_url = domain + rel_url; + return ( + + ); + })()) + ) : + + ) })} - - + + {_.get(this.props, 'pageContext.site.siteMetadata.favicon', null) && ( - + )}
      -
      - {/* INSERT SEARCH BAR HERE */} - {/*
      */} -
      - {this.props.children} -
      -
      +
      +
      + {this.props.children} +
      +
      ); diff --git a/src/components/SectionContent.js b/src/components/SectionContent.js index 7a83ea8905..2c46ed0728 100644 --- a/src/components/SectionContent.js +++ b/src/components/SectionContent.js @@ -1,7 +1,7 @@ import React from 'react'; import _ from 'lodash'; -import { classNames, withPrefix, markdownify } from '../utils'; +import {classNames, withPrefix, markdownify} from '../utils'; import CtaButtons from './CtaButtons'; export default class SectionContent extends React.Component { @@ -9,32 +9,32 @@ export default class SectionContent extends React.Component { let section = _.get(this.props, 'section', null); return (
      -
      -
      - {_.get(section, 'image', null) && ( -
      - {_.get(section, -
      - )} -
      - {_.get(section, 'title', null) && ( -
      -

      {_.get(section, 'title', null)}

      -
      - )} - {_.get(section, 'content', null) &&
      {markdownify(_.get(section, 'content', null))}
      } - {_.get(section, 'actions', null) && ( -
      - -
      - )} -
      +
      +
      + {_.get(section, 'image', null) && ( +
      + {_.get(section, +
      + )} +
      + {_.get(section, 'title', null) && ( +
      +

      {_.get(section, 'title', null)}

      + )} + {_.get(section, 'content', null) && ( +
      + {markdownify(_.get(section, 'content', null))} +
      + )} + {_.get(section, 'actions', null) && ( +
      + +
      + )} +
      +
      ); } diff --git a/src/components/SectionCta.js b/src/components/SectionCta.js index 3f965cb341..649dacda25 100644 --- a/src/components/SectionCta.js +++ b/src/components/SectionCta.js @@ -1,7 +1,7 @@ import React from 'react'; import _ from 'lodash'; -import { htmlToReact } from '../utils'; +import {htmlToReact} from '../utils'; import CtaButtons from './CtaButtons'; export default class SectionCta extends React.Component { @@ -9,23 +9,27 @@ export default class SectionCta extends React.Component { let section = _.get(this.props, 'section', null); return (
      -
      -
      -
      - {(_.get(section, 'title', null) || _.get(section, 'subtitle', null)) && ( -
      - {_.get(section, 'title', null) &&

      {_.get(section, 'title', null)}

      } - {_.get(section, 'subtitle', null) &&

      {htmlToReact(_.get(section, 'subtitle', null))}

      } -
      - )} - {_.get(section, 'actions', null) && ( -
      - -
      - )} -
      +
      +
      +
      + {(_.get(section, 'title', null) || _.get(section, 'subtitle', null)) && ( +
      + {_.get(section, 'title', null) && ( +

      {_.get(section, 'title', null)}

      + )} + {_.get(section, 'subtitle', null) && ( +

      {htmlToReact(_.get(section, 'subtitle', null))}

      + )}
      + )} + {_.get(section, 'actions', null) && ( +
      + +
      + )} +
      +
      ); } diff --git a/src/components/SectionDocs.js b/src/components/SectionDocs.js index 4759f20f43..bc848c2eba 100644 --- a/src/components/SectionDocs.js +++ b/src/components/SectionDocs.js @@ -1,58 +1,48 @@ import React from 'react'; import _ from 'lodash'; -import { classNames, htmlToReact, pathJoin, getPage, Link, withPrefix } from '../utils'; +import {classNames, htmlToReact, pathJoin, getPage, Link, withPrefix} from '../utils'; export default class SectionDocs extends React.Component { render() { let section = _.get(this.props, 'section', null); return ( -
      -
      - {(_.get(section, 'title', null) || _.get(section, 'subtitle', null)) && ( -
      - {_.get(section, 'title', null) &&

      {_.get(section, 'title', null)}

      } - {_.get(section, 'subtitle', null) &&

      {htmlToReact(_.get(section, 'subtitle', null))}

      } -
      - )} -
      -
      - {_.map(_.get(this.props, 'pageContext.site.data.doc_sections.sections', null), (doc_section, doc_section_idx) => { - let doc_section_path = pathJoin(_.get(this.props, 'pageContext.site.data.doc_sections.root_docs_path', null), doc_section); - let doc_section_page = getPage(this.props.pageContext.pages, doc_section_path); - return ( -
      -
      -

      - - {_.get(doc_section_page, 'frontmatter.title', null)} - -

      - {_.get(doc_section_page, 'frontmatter.excerpt', null) && ( -
      -

      {htmlToReact(_.get(doc_section_page, 'frontmatter.excerpt', null))}

      -
      - )} -
      - Learn More -
      -
      -
      - ); - })} -
      -
      +
      +
      + {(_.get(section, 'title', null) || _.get(section, 'subtitle', null)) && ( +
      + {_.get(section, 'title', null) && ( +

      {_.get(section, 'title', null)}

      + )} + {_.get(section, 'subtitle', null) && ( +

      {htmlToReact(_.get(section, 'subtitle', null))}

      + )}
      + )} +
      +
      + {_.map(_.get(this.props, 'pageContext.site.data.doc_sections.sections', null), (doc_section, doc_section_idx) => { + let doc_section_path = pathJoin(_.get(this.props, 'pageContext.site.data.doc_sections.root_docs_path', null), doc_section); + let doc_section_page = getPage(this.props.pageContext.pages, doc_section_path); + return ( +
      +
      +

      {_.get(doc_section_page, 'frontmatter.title', null)}

      + {_.get(doc_section_page, 'frontmatter.excerpt', null) && ( +
      +

      {htmlToReact(_.get(doc_section_page, 'frontmatter.excerpt', null))}

      +
      + )} +
      + Learn More +
      +
      +
      + ) + })} +
      +
      +
      ); } diff --git a/src/components/SectionGrid.js b/src/components/SectionGrid.js index 7b484b98e6..a4b86d148b 100644 --- a/src/components/SectionGrid.js +++ b/src/components/SectionGrid.js @@ -1,64 +1,62 @@ import React from 'react'; import _ from 'lodash'; -import { classNames, htmlToReact, withPrefix, Link, markdownify } from '../utils'; +import {classNames, htmlToReact, withPrefix, Link, markdownify} from '../utils'; import CtaButtons from './CtaButtons'; export default class SectionGrid extends React.Component { render() { let section = _.get(this.props, 'section', null); return ( -
      -
      - {(_.get(section, 'title', null) || _.get(section, 'subtitle', null)) && ( -
      - {_.get(section, 'title', null) &&

      {_.get(section, 'title', null)}

      } - {_.get(section, 'subtitle', null) &&

      {htmlToReact(_.get(section, 'subtitle', null))}

      } +
      +
      + {(_.get(section, 'title', null) || _.get(section, 'subtitle', null)) && ( +
      + {_.get(section, 'title', null) && ( +

      {_.get(section, 'title', null)}

      + )} + {_.get(section, 'subtitle', null) && ( +

      {htmlToReact(_.get(section, 'subtitle', null))}

      + )} +
      + )} + {_.get(section, 'grid_items', null) && ( +
      +
      + {_.map(_.get(section, 'grid_items', null), (item, item_idx) => ( +
      +
      + {_.get(item, 'image', null) && ( +
      + {_.get(item, +
      + )} + {_.get(item, 'title', null) && ( +

      + {_.get(item, 'title_url', null) ? ( + {_.get(item, 'title', null)} + ) : + _.get(item, 'title', null) + } +

      + )} + {_.get(item, 'content', null) && ( +
      + {markdownify(_.get(item, 'content', null))}
      - )} - {_.get(section, 'grid_items', null) && ( -
      -
      - {_.map(_.get(section, 'grid_items', null), (item, item_idx) => ( -
      -
      - {_.get(item, 'image', null) && ( -
      - {_.get(item, -
      - )} - {_.get(item, 'title', null) && ( -

      - {_.get(item, 'title_url', null) ? ( - {_.get(item, 'title', null)} - ) : ( - _.get(item, 'title', null) - )} -

      - )} - {_.get(item, 'content', null) && ( -
      {markdownify(_.get(item, 'content', null))}
      - )} - {_.get(item, 'actions', null) && ( -
      - -
      - )} -
      -
      - ))} -
      + )} + {_.get(item, 'actions', null) && ( +
      +
      - )} + )} +
      +
      + ))} +
      + )} +
      ); } diff --git a/src/components/SectionHero.js b/src/components/SectionHero.js index 26aef2650a..e1762bd779 100644 --- a/src/components/SectionHero.js +++ b/src/components/SectionHero.js @@ -1,7 +1,7 @@ import React from 'react'; import _ from 'lodash'; -import { toStyleObj, withPrefix, markdownify } from '../utils'; +import {toStyleObj, withPrefix, markdownify} from '../utils'; import CtaButtons from './CtaButtons'; export default class SectionHero extends React.Component { @@ -9,22 +9,26 @@ export default class SectionHero extends React.Component { let section = _.get(this.props, 'section', null); return (
      - {_.get(section, 'image', null) && ( -
      + {_.get(section, 'image', null) && ( +
      + )} +
      + {_.get(section, 'title', null) && ( +
      +

      {_.get(section, 'title', null)}

      +
      + )} + {_.get(section, 'content', null) && ( +
      + {markdownify(_.get(section, 'content', null))} +
      )} -
      - {_.get(section, 'title', null) && ( -
      -

      {_.get(section, 'title', null)}

      -
      - )} - {_.get(section, 'content', null) &&
      {markdownify(_.get(section, 'content', null))}
      } - {_.get(section, 'actions', null) && ( -
      - -
      - )} + {_.get(section, 'actions', null) && ( +
      +
      + )} +
      ); } diff --git a/src/components/Submenu.js b/src/components/Submenu.js index feec01e76d..1b7fef6362 100644 --- a/src/components/Submenu.js +++ b/src/components/Submenu.js @@ -1,7 +1,7 @@ import React from 'react'; import _ from 'lodash'; -import { classNames } from '../utils'; +import {classNames} from '../utils'; import ActionLink from './ActionLink'; export default class Submenu extends React.Component { @@ -9,21 +9,15 @@ export default class Submenu extends React.Component { let page = _.get(this.props, 'page', null); return (
        - {_.map(_.get(this.props, 'submenu', null), (action, action_idx) => { - let page_url = _.trim(_.get(page, 'url', null), '/'); - let action_url = _.trim(_.get(action, 'url', null), '/'); - return ( -
      • - -
      • - ); - })} + {_.map(_.get(this.props, 'submenu', null), (action, action_idx) => { + let page_url = _.trim(_.get(page, 'url', null), '/'); + let action_url = _.trim(_.get(action, 'url', null), '/'); + return ( +
      • + +
      • + ) + })}
      ); } diff --git a/src/sass/_animations.scss b/src/sass/_animations.scss deleted file mode 100644 index df5a87c267..0000000000 --- a/src/sass/_animations.scss +++ /dev/null @@ -1,16 +0,0 @@ -@-webkit-keyframes fadeIn20 { - 0% { - opacity: 0; - } - 100% { - opacity: 0.2; - } -} -@keyframes fadeIn20 { - 0% { - opacity: 0; - } - 100% { - opacity: 0.2; - } -} diff --git a/src/sass/_buttons.scss b/src/sass/_buttons.scss deleted file mode 100644 index c98f57275f..0000000000 --- a/src/sass/_buttons.scss +++ /dev/null @@ -1,89 +0,0 @@ -.button { - -ms-flex-align: center; - align-items: center; - background: $color-primary; - border: 0; - border-radius: 1.75em; - box-shadow: none; - box-sizing: border-box; - color: #fff; - cursor: pointer; - display: -ms-inline-flexbox; - display: inline-flex; - font-size: 0.875em; - font-weight: bold; - -ms-flex-pack: center; - justify-content: center; - letter-spacing: 0.035em; - line-height: 1.2; - opacity: 1; - padding: 0.9em 2.14285em; - text-decoration: none; - -webkit-transition: 0.3s ease; - transition: 0.3s ease; - vertical-align: middle; - - &:hover, - &:focus, - &:active { - color: #fff; - opacity: 0.8; - outline: 0; - } -} - -.button-secondary { - background: 0 !important; - box-shadow: inset 0 0 0 2px currentColor; - color: $color-primary; - - &:hover, - &:focus, - &:active { - box-shadow: inset 0 0 0 3px currentColor; - color: $color-primary; - opacity: 1; - } -} - -.button-icon { - background: 0 !important; - border: 0; - color: inherit; - font-size: 1em; - font-weight: normal; - letter-spacing: normal; - padding: 0.25em; - - &:hover, - &:focus, - &:active { - color: $color-primary; - opacity: 1; - } -} - -#menu-open, -#menu-close, -.docs-nav .docs-nav-toggle, -.docs-nav .docs-submenu-toggle, -.submenu-toggle { - background: 0; - border: 0; - border-radius: 0; - box-shadow: none; - color: inherit; - cursor: pointer; - display: block; - font-size: inherit; - height: 30px; - padding: 0; - position: relative; - width: 30px; - - &:hover, - &:focus, - &:active { - outline: 0; - } -} diff --git a/src/sass/_docs.scss b/src/sass/_docs.scss deleted file mode 100644 index 351955fbc0..0000000000 --- a/src/sass/_docs.scss +++ /dev/null @@ -1,353 +0,0 @@ -.docs-content { - padding-top: 2.5em; - width: 95%; -} -.post-content { - width: 85%; -} -.post { - &.type-docs { - margin-bottom: 3.625em; - - h1 { - font-size: 1.875em; - } - - h2 { - font-size: 1.5em; - } - - h3 { - font-size: 1.25em; - } - - h4 { - font-size: 1.125em; - } - - h5, - h6 { - font-size: 1em; - } - - .hash-link { - float: left; - font-size: 1.25rem; - height: 1em; - line-height: 1; - margin-left: -1.1em; - opacity: 0; - text-align: center; - text-decoration: none; - -webkit-transition: opacity 0.2s; - transition: opacity 0.4s; - width: 1em; - - &:before { - content: '\0023'; - display: inline-block; - } - - &:hover, - &:focus { - color: $color-primary; - } - } - - h2 { - .hash-link { - margin-top: 0.22em; - } - } - - h3 { - .hash-link { - margin-top: 0.1em; - } - } - - h2, - h3 { - &:hover, - &:focus { - .hash-link { - opacity: 1; - } - } - } - - .post-inside { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius; - box-shadow: $box-shadow; - padding: 0.3em; - width: 70vw; - } - - .post-title { - font-size: 1.875em; - margin: 0 0 1.25em; - padding: 0 1em; - } - - .post-content { - padding: 0.775em; - word-wrap: break-word; - } - } -} - -#docs-section-items { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - list-style: none; - margin-left: -0.3125em; - margin-right: -0.3125em; - padding: 0; - - .docs-section-item { - -ms-flex: 1 1 240px; - flex: 1 1 240px; - margin: 0 0.3125em 0.9375em; - } - - .docs-item-link { - border: 1px solid $gray-300; - border-radius: $border-radius-sm; - color: $gray-700; - display: block; - font-weight: bold; - padding: 0.9375em; - position: relative; - text-decoration: none; - -webkit-transition: border-color 0.3s ease, color 0.3s ease; - transition: border-color 0.3s ease, color 0.3s ease; - - &:hover { - border-color: $color-primary; - color: $color-primary; - } - } -} - -.docs-nav { - margin-bottom: 1.875em; - - .docs-nav-toggle { - color: $gray-700; - font-size: 1.125em; - margin: 0; - padding-right: 15px; - text-align: left; - } - - .docs-submenu-toggle { - color: $gray-500; - position: absolute; - right: 0; - top: 0; - } -} - -#docs-menu { - color: $gray-700; - font-weight: bold; - line-height: 1.5; - list-style: none; - margin: 0.5em; - padding: 0; - - & > .docs-menu-item > a { - padding: 0.1875em 0; - } - - a { - color: inherit; - display: block; - text-decoration: none; - - &:hover { - color: $color-primary; - } - } - - .current, - .current-parent { - color: $color-primary; - } -} - -.docs-submenu { - border-left: 1px solid $gray-300; - color: $gray-600; - display: none; - font-size: 0.9375em; - font-weight: normal; - list-style: none; - margin-top: 0.625rem; - padding-left: 1rem; -} - -.docs-menu-item { - color: inherit; - margin-bottom: 0.625rem; - - &.has-children { - padding-right: 30px; - position: relative; - - &.active { - .docs-submenu { - display: block; - } - - & > .docs-submenu-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } - } - } -} - -#page-nav { - text-overflow: wrap; - - .page-nav-title { - font-size: 1em; - margin: 0 0 0.625em; - } - - ul { - font-size: 0.875rem; - line-height: 1.5; - list-style: none; - padding: 0; - - ul { - border-left: 1px solid $gray-300; - margin-top: 0.625rem; - padding-left: 1.25rem; - } - } - - li { - margin-bottom: 0.625rem; - - &.active > a { - color: $color-primary; - } - } - - a { - color: $gray-600; - display: block; - text-decoration: none; - - &:hover { - color: $color-primary; - } - } - - .page-nav-title { - &:only-child { - display: none; - } - } -} - -@media only screen and (min-width: 1200px) { - .post { - &.type-docs { - .post-title, - .post-content { - padding-left: 8%; - padding-right: 7%; - } - } - } -} - -@media only screen and (min-width: 1200px) { - .docs-content { - display: -ms-flexbox; - display: flex; - padding-top: 3.75em; - width: 100%; - } - - .post.type-docs { - -ms-flex: 1 1 auto; - align-content: center; - } - - .docs-nav, - .page-nav { - -ms-flex-negative: 0; - margin-bottom: 5.625em; - - .sticky { - position: -webkit-sticky; - position: sticky; - top: 1.875em; - } - } - - .docs-nav { - width: 8.5em; - } - - #page-nav { - font-size: 12px; - margin: 4em; - } - - #docs-nav-toggle { - display: none; - } -} - -@media only screen and (min-width: 1091px) { - #page-nav { - display: block; - } -} - -@media only screen and (max-width: 800px) { - .docs-nav { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius; - box-shadow: $box-shadow; - box-sizing: border-box; - margin-bottom: 5%; - padding: 1em 1em; - } - - .docs-nav-menu { - display: none; - } - - .docs-menu--opened { - .docs-nav-menu { - display: block; - } - - .docs-nav-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } - } - - #docs-menu { - border-top: 1px solid $gray-300; - margin-top: 1.25em; - padding-top: 1.25em; - } -} diff --git a/src/sass/_footer.scss b/src/sass/_footer.scss deleted file mode 100644 index 54e330a3c6..0000000000 --- a/src/sass/_footer.scss +++ /dev/null @@ -1,89 +0,0 @@ -.site-footer { - background-color: black; - padding-bottom: 1.5em; - padding-top: 1.5em; -} - -#colophon { - a:not(.button) { - color: inherit; - - &:hover, - &:focus { - color: $color-primary; - } - } -} - -.site-info, -.social-links { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-pack: center; - justify-content: center; - font-size: 0.675em; - line-height: 1.2; - - .button:not(.button-icon) { - font-size: inherit; - line-height: 1.2; - padding: 0.3em 1em; - } -} - -.site-info { - margin: 0.25em 0 0; - text-align: center; - - .copyright, - > a { - margin: 0 4px 0.2em 0; - } -} - -.social-links { - margin-top: 0.5375em; - - a { - margin: 0 50px 0.2em; - } - - .icon { - font-size: 20px; - } -} - -@media only screen and (min-width: 641px) { - .site-footer-inside { - -ms-flex-align: start; - align-items: flex-start; - display: -ms-flexbox; - display: flex; - } - - .site-info { - -ms-flex-pack: start; - justify-content: flex-start; - text-align: left; - } - - .social-links { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - margin-left: auto; - margin-top: 0; - - a { - margin-left: 20px; - margin-right: 0; - } - } -} diff --git a/src/sass/_forms.scss b/src/sass/_forms.scss deleted file mode 100644 index 689f68c032..0000000000 --- a/src/sass/_forms.scss +++ /dev/null @@ -1,55 +0,0 @@ -label { - color: $gray-700; - font-weight: bold; - line-height: 1.5; - margin-bottom: 0.25em; - - input[type='checkbox'] + &, - input[type='radio'] + & { - font-weight: normal; - cursor: pointer; - padding-left: 0.25em; - padding-right: 1em; - } -} - -input[type='text'], -input[type='password'], -input[type='email'], -input[type='tel'], -input[type='number'], -input[type='search'], -input[type='url'], -select, -textarea { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius-sm; - box-shadow: none; - box-sizing: border-box; - color: $gray-700; - display: block; - font-size: 1em; - font-weight: normal; - line-height: 1.5; - max-width: 100%; - padding: 0.5em; - width: 100%; - - &:focus { - outline: 0; - } -} - -::placeholder { - color: $gray-400; - opacity: 1; -} - -.form-row { - margin-bottom: 1em; -} - -.form-submit { - margin-top: 1.66667em; -} diff --git a/src/sass/_functions.scss b/src/sass/_functions.scss deleted file mode 100644 index a0e86db462..0000000000 --- a/src/sass/_functions.scss +++ /dev/null @@ -1,7 +0,0 @@ -// Gets a value from a map. -@function map-deep-get($map, $keys...) { - @each $key in $keys { - $map: map-get($map, $key); - } - @return $map; -} diff --git a/src/sass/_general.scss b/src/sass/_general.scss deleted file mode 100644 index f2f61d3bd4..0000000000 --- a/src/sass/_general.scss +++ /dev/null @@ -1,1737 +0,0 @@ -html { - font-family: $font-primary; - font-size: 100%; -} - -body { - background: $gray-100; - color: $gray-600; - line-height: 1.425; - text-rendering: optimizeLegibility; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - overflow: scroll; - -} - -a { - color: $color-primary; - text-decoration: underline; - -webkit-transition: color 0.3s ease; - transition: color 0.4s ease-out; - - &:hover { - color: $gray-600; - } -} - -#social-embed { - // position: absolute !important; - // right: 50px !important; - bottom: 120px !important; - width: 100% !important; - width: 1000px !important; - box-shadow: inset 0px 5px 3px -10px black, - inset 0px -11px 8px -10px black; - margin: 0 auto !important; - height: 400px !important; - overflow: scroll !important; - border: 1px dotted black; - // z-index: -1; -} - -iframe { - overflow-y: scroll; - overflow-x: scroll; - border-radius: 12px; - border: 1px dotted black; - height: 1200px; - box-shadow: inset 0px 4px 4px -10px black, - inset 0px -11px 8px -10px black; - width: 1000px; - resize: both !important; - overflow: scroll; -} - -code { - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), - 0 0 40px rgba(0, 0, 0, 0.1) inset; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), - 0 0 40px rgba(0, 0, 0, 0.1) inset; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), - 0 0 40px rgba(0, 0, 0, 0.1) inset; -} - -pre { - -webkit-box-shadow: 0 1px 4px rgba(155, 155, 155, 0.3), - 0 0 40px rgba(0, 0, 0, 0.1) inset; - -moz-box-shadow: 0 1px 4px rgba(124, 124, 124, 0.3), - 0 0 40px rgba(0, 0, 0, 0.1) inset; - box-shadow: 0 1px 4px rgba(184, 137, 137, 0.3), - 0 0 40px rgba(0, 0, 0, 0.1) inset; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - color: $gray-700; - font-weight: bold; - line-height: 1.2; - margin: 1.5em 0 0.5em; - text-rendering: optimizeLegibility; - - &:first-child { - margin-top: 0; - } -} - -h1 { - font-size: 2em; -} - -h2 { - font-size: 1.75em; -} - -h3 { - font-size: 1.5em; -} - -h4 { - font-size: 1.25em; -} - -h5 { - font-size: 1.125em; -} - -h6 { - font-size: 1em; -} - -p { - margin: 0 0 1em; -} - -mark, -ins { - background: $yellow-pale; - color: $gray-700; - padding: 0.15em; - text-decoration: none; -} - -pre { - background: $gray-700; - border-radius: $border-radius-sm; - color: $gray-100; - font-size: 0.875em; - line-height: 1.5; - margin: 1.14286em 0; - overflow: auto; - padding: 1.5em; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - - &:first-child { - margin-top: 0; - } -} - -:not(pre)>code { - background: $gray-200; - border-radius: $border-radius-sm; - color: $gray-600; - font-size: 0.875rem; - padding: 0.15em; - white-space: normal; -} - -blockquote { - border-left: 5px solid $color-primary; - font-size: 1.25em; - line-height: 1.4; - margin: 1.25em 0; - padding: 0 0 0 1em; - - &:first-child { - margin-top: 0; - } - - p { - margin-bottom: 0.5em; - } - - small, - cite { - color: $gray-500; - display: block; - font-size: 0.75em; - font-style: normal; - font-weight: normal; - line-height: 1.5; - margin-top: 0.5em; - } -} - -dl { - margin: 0; -} - -dt { - font-weight: bold; -} - -ul, -ol, -dd { - margin: 0 0 1em; -} - -ul { - list-style: disc; - padding: 0 0 0 1.125em; -} - -ol { - list-style: decimal; - padding: 0 0 0 1.5em; -} - -li>ul, -li>ol { - margin-bottom: 0; -} - -hr { - background-color: $gray-300; - border: 0; - height: 1px; - margin: 1.875em 0; - - &:first-child { - margin-top: 0; - } -} - -img { - height: auto; - max-width: 100%; - border-radius: 10px; - - :not(.site-logo) { - box-shadow: inset 10px 10px 50px #fff; - } - -} - -@media only screen and (min-width: 741px) { - blockquote { - font-size: 1.5em; - line-height: 1.3; - } - - h1 { - font-size: 2.5em; - } - - h2 { - font-size: 2.125em; - } - - h3 { - font-size: 1.875em; - } - - h4 { - font-size: 1.5em; - } - - h5 { - font-size: 1.25em; - } - - h6 { - font-size: 1.125em; - } -} - - -/****************PRISM*****************************************/ - -code[class*=language-], -pre[class*=language-] { - color: #fff; - background: 0 0; - font-family: Consolas, - Monaco, - 'Andale Mono', - 'Ubuntu Mono', - monospace; - font-size: 1em; - text-align: left; - text-shadow: 0 -.1em .2em #000; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none -} - -:not(pre)>code[class*=language-], -pre[class*=language-] { - background: #141414 -} - -pre[class*=language-] { - border-radius: .5em; - border: .3em solid #545454; - box-shadow: 1px 1px .5em #000 inset; - margin: .5em 0; - overflow: auto; - padding: 1em -} - -pre[class*=language-]::-moz-selection { - background: #27292a -} - -pre[class*=language-]::selection { - background: #27292a -} - -code[class*=language-] ::-moz-selection, -code[class*=language-]::-moz-selection, -pre[class*=language-] ::-moz-selection, -pre[class*=language-]::-moz-selection { - text-shadow: none; - background: hsla(0, 0%, 93%, .15) -} - -code[class*=language-] ::selection, -code[class*=language-]::selection, -pre[class*=language-] ::selection, -pre[class*=language-]::selection { - text-shadow: none; - background: hsla(0, 0%, 93%, .15) -} - -:not(pre)>code[class*=language-] { - border-radius: .3em; - border: .13em solid #545454; - box-shadow: 1px 1px .3em -.1em #000 inset; - padding: .15em .2em .05em; - white-space: normal -} - -.token.cdata, -.token.comment, -.token.doctype, -.token.prolog { - color: #777 -} - -.token.punctuation { - opacity: .7 -} - -.token.namespace { - opacity: .7 -} - -.token.boolean, -.token.deleted, -.token.number, -.token.tag { - color: #ce6849 -} - -.token.builtin, -.token.constant, -.token.keyword, -.token.property, -.token.selector, -.token.symbol { - color: #f9ed99 -} - -.language-css .token.string, -.style .token.string, -.token.attr-name, -.token.attr-value, -.token.char, -.token.entity, -.token.inserted, -.token.operator, -.token.string, -.token.url, -.token.variable { - color: #909e6a -} - -.token.atrule { - color: #7385a5 -} - -.token.important, -.token.regex { - color: #e8c062 -} - -.token.bold, -.token.important { - font-weight: 700 -} - -.token.italic { - font-style: italic -} - -.token.entity { - cursor: help -} - -.language-markup .token.attr-name, -.language-markup .token.punctuation, -.language-markup .token.tag { - color: #ac885c -} - -.token { - position: relative; - z-index: 1 -} - -.line-highlight.line-highlight { - background: hsla(0, 0%, 33%, .25); - background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); - border-bottom: 1px dashed #545454; - border-top: 1px dashed #545454; - margin-top: .75em; - z-index: 0 -} - -.line-highlight.line-highlight:before, -.line-highlight.line-highlight[data-end]:after { - background-color: #8693a6; - color: #f4f1ef -} - - -/**********************Algolia CSS*********************/ - -/*! @algolia/autocomplete-theme-classic 1.5.0 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ -:root { - --aa-search-input-height: 44px; - --aa-input-icon-size: 20px; - --aa-base-unit: 16; - --aa-spacing-factor: 1; - --aa-spacing: calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px); - --aa-spacing-half: calc(var(--aa-spacing)/2); - --aa-panel-max-height: 650px; - --aa-base-z-index: 9999; - --aa-font-size: calc(var(--aa-base-unit)*1px); - --aa-font-family: inherit; - --aa-font-weight-medium: 500; - --aa-font-weight-semibold: 600; - --aa-font-weight-bold: 700; - --aa-icon-size: 20px; - --aa-icon-stroke-width: 1.6; - --aa-icon-color-rgb: 119, - 119, - 163; - --aa-icon-color-alpha: 1; - --aa-action-icon-size: 20px; - --aa-text-color-rgb: 38, - 38, - 39; - --aa-text-color-alpha: 1; - --aa-primary-color-rgb: 62, - 52, - 211; - --aa-primary-color-alpha: 0.2; - --aa-muted-color-rgb: 128, - 126, - 163; - --aa-muted-color-alpha: 0.6; - --aa-panel-border-color-rgb: 128, - 126, - 163; - --aa-panel-border-color-alpha: 0.3; - --aa-input-border-color-rgb: 128, - 126, - 163; - --aa-input-border-color-alpha: 0.8; - --aa-background-color-rgb: 255, - 255, - 255; - --aa-background-color-alpha: 1; - --aa-input-background-color-rgb: 255, - 255, - 255; - --aa-input-background-color-alpha: 1; - --aa-selected-color-rgb: 179, - 173, - 214; - --aa-selected-color-alpha: 0.205; - --aa-description-highlight-background-color-rgb: 245, - 223, - 77; - --aa-description-highlight-background-color-alpha: 0.5; - --aa-detached-media-query: (max-width:680px); - --aa-detached-modal-media-query: (min-width:680px); - --aa-detached-modal-max-width: 680px; - --aa-detached-modal-max-height: 500px; - --aa-overlay-color-rgb: 115, - 114, - 129; - --aa-overlay-color-alpha: 0.4; - --aa-panel-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), - 0 6px 16px -4px rgba(35, 38, 59, 0.15); - --aa-scrollbar-width: 13px; - --aa-scrollbar-track-background-color-rgb: 234, - 234, - 234; - --aa-scrollbar-track-background-color-alpha: 1; - --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb); - --aa-scrollbar-thumb-background-color-alpha: 1 -} - -@media (hover: none) and (pointer: coarse) { - :root { - --aa-spacing-factor: 1.2; - --aa-action-icon-size: 22px - } -} - -body.dark, -body[data-theme=dark] { - --aa-text-color-rgb: 183, - 192, - 199; - --aa-primary-color-rgb: 146, - 138, - 255; - --aa-muted-color-rgb: 146, - 138, - 255; - --aa-input-background-color-rgb: 0, - 3, - 9; - --aa-background-color-rgb: 21, - 24, - 42; - --aa-selected-color-rgb: 146, - 138, - 255; - --aa-selected-color-alpha: 0.25; - --aa-description-highlight-background-color-rgb: 0 255 255; - --aa-description-highlight-background-color-alpha: 0.25; - --aa-icon-color-rgb: 119, - 119, - 163; - --aa-panel-shadow: inset 1px 1px 0 0 #2c2e40, - 0 3px 8px 0 #000309; - --aa-scrollbar-track-background-color-rgb: 44, - 46, - 64; - --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb) -} - -.aa-Autocomplete *, -.aa-DetachedFormContainer *, -.aa-Panel * { - box-sizing: border-box -} - -.aa-Autocomplete, -.aa-DetachedFormContainer, -.aa-Panel { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-family: inherit; - font-family: var(--aa-font-family); - font-size: 16px; - font-size: var(--aa-font-size); - font-weight: 400; - line-height: 1em; - margin: 0; - padding: 0; - text-align: left -} - -.aa-Form { - align-items: center; - background-color: #fff; - background-color: rgba(var(--aa-input-background-color-rgb), var(--aa-input-background-color-alpha)); - border: 1px solid rgba(128, 126, 163, 0.8); - border: 1px solid rgba(var(--aa-input-border-color-rgb), var(--aa-input-border-color-alpha)); - border-radius: 3px; - display: flex; - line-height: 1em; - margin: 0; - position: relative; - width: 100% -} - -.aa-Form[focus-within] { - border-color: #3e34d3; - border-color: rgba(var(--aa-primary-color-rgb), 1); - box-shadow: 0 0 0 2px rgba(62, 52, 211, 0.2), - inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor -} - -.aa-Form:focus-within { - border-color: #3e34d3; - border-color: rgba(var(--aa-primary-color-rgb), 1); - box-shadow: 0 0 0 2px rgba(62, 52, 211, 0.2), - inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor -} - -.aa-InputWrapperPrefix { - align-items: center; - display: flex; - flex-shrink: 0; - height: 44px; - height: var(--aa-search-input-height); - order: 1 -} - -.aa-Label, -.aa-LoadingIndicator { - cursor: auto; - flex-shrink: 0; - height: 100%; - padding: 0; - text-align: left -} - -.aa-Label svg, -.aa-LoadingIndicator svg { - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); - height: auto; - max-height: 20px; - max-height: var(--aa-input-icon-size); - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); - width: 20px; - width: var(--aa-input-icon-size) -} - -.aa-LoadingIndicator, -.aa-SubmitButton { - height: 100%; - padding-left: 11px; - padding-left: calc(var(--aa-spacing)*0.75 - 1px); - padding-right: 8px; - padding-right: var(--aa-spacing-half); - width: 47px; - width: calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px) -} - -@media (hover: none) and (pointer: coarse) { - - .aa-LoadingIndicator, - .aa-SubmitButton { - padding-left: 3px; - padding-left: calc(var(--aa-spacing-half)/2 - 1px); - width: 39px; - width: calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px) - } -} - -.aa-SubmitButton { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: none; - border: 0; - margin: 0 -} - -.aa-LoadingIndicator { - align-items: center; - display: flex; - justify-content: center -} - -.aa-LoadingIndicator[hidden] { - display: none -} - -.aa-InputWrapper { - order: 3; - position: relative; - width: 100% -} - -.aa-Input { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: none; - border: 0; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font: inherit; - height: 44px; - height: var(--aa-search-input-height); - padding: 0; - width: 100% -} - -.aa-Input::-moz-placeholder { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1 -} - -.aa-Input:-ms-input-placeholder { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1 -} - -.aa-Input::placeholder { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1 -} - -.aa-Input:focus { - border-color: none; - box-shadow: none; - outline: none -} - -.aa-Input::-webkit-search-cancel-button, -.aa-Input::-webkit-search-decoration, -.aa-Input::-webkit-search-results-button, -.aa-Input::-webkit-search-results-decoration { - -webkit-appearance: none; - appearance: none -} - -.aa-InputWrapperSuffix { - align-items: center; - display: flex; - height: 44px; - height: var(--aa-search-input-height); - order: 4 -} - -.aa-ClearButton { - align-items: center; - background: none; - border: 0; - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - cursor: pointer; - display: flex; - height: 100%; - margin: 0; - padding: 0 12.8333333333px; - padding: 0 calc(var(--aa-spacing)*0.83333 - .5px) -} - -@media (hover: none) and (pointer: coarse) { - .aa-ClearButton { - padding: 0 10.1666666667px; - padding: 0 calc(var(--aa-spacing)*0.66667 - .5px) - } -} - -.aa-ClearButton:focus, -.aa-ClearButton:hover { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)) -} - -.aa-ClearButton[hidden] { - display: none -} - -.aa-ClearButton svg { - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); - width: 20px; - width: var(--aa-icon-size) -} - -.aa-Panel { - background-color: #fff; - background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - border-radius: 4px; - border-radius: calc(var(--aa-spacing)/4); - box-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), - 0 6px 16px -4px rgba(35, 38, 59, 0.15); - box-shadow: var(--aa-panel-shadow); - margin: 8px 0 0; - overflow: hidden; - position: absolute; - transition: opacity .2s ease-in, - filter .2s ease-in -} - -@media screen and (prefers-reduced-motion) { - .aa-Panel { - transition: none - } -} - -.aa-Panel button { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: none; - border: 0; - margin: 0; - padding: 0 -} - -.aa-PanelLayout { - height: 100%; - margin: 0; - max-height: 650px; - max-height: var(--aa-panel-max-height); - overflow-y: auto; - padding: 0; - position: relative; - text-align: left -} - -.aa-PanelLayoutColumns--twoGolden { - display: grid; - grid-template-columns: 39.2% auto; - overflow: hidden; - padding: 0 -} - -.aa-PanelLayoutColumns--two { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - overflow: hidden; - padding: 0 -} - -.aa-PanelLayoutColumns--three { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - overflow: hidden; - padding: 0 -} - -.aa-Panel--stalled .aa-Source { - filter: grayscale(1); - opacity: .8 -} - -.aa-Panel--scrollable { - margin: 0; - max-height: 650px; - max-height: var(--aa-panel-max-height); - overflow-x: hidden; - overflow-y: auto; - padding: 8px; - padding: var(--aa-spacing-half); - scrollbar-color: #fff #eaeaea; - scrollbar-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); - scrollbar-width: thin -} - -.aa-Panel--scrollable::-webkit-scrollbar { - width: 13px; - width: var(--aa-scrollbar-width) -} - -.aa-Panel--scrollable::-webkit-scrollbar-track { - background-color: #eaeaea; - background-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)) -} - -.aa-Panel--scrollable::-webkit-scrollbar-thumb { - background-color: #fff; - background-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)); - border-radius: 9999px; - border: 3px solid #eaeaea; - border-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); - border-right: 2px solid rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)) -} - -.aa-Source { - margin: 0; - padding: 0; - position: relative; - width: 100% -} - -.aa-Source:empty { - display: none -} - -.aa-SourceNoResults { - font-size: 1em; - margin: 0; - padding: 16px; - padding: var(--aa-spacing) -} - -.aa-List { - list-style: none; - margin: 0 -} - -.aa-List, -.aa-SourceHeader { - padding: 0; - position: relative -} - -.aa-SourceHeader { - margin: 8px .5em 8px 0; - margin: var(--aa-spacing-half) 0.5em var(--aa-spacing-half) 0 -} - -.aa-SourceHeader:empty { - display: none -} - -.aa-SourceHeaderTitle { - background: #fff; - background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); - display: inline-block; - font-size: .8em; - font-weight: 600; - font-weight: var(--aa-font-weight-semibold); - margin: 0; - padding: 0 8px 0 0; - padding: 0 var(--aa-spacing-half) 0 0; - position: relative; - z-index: 9999; - z-index: var(--aa-base-z-index) -} - -.aa-SourceHeaderLine { - border-bottom: 1px solid #3e34d3; - border-bottom: 1px solid rgba(var(--aa-primary-color-rgb), 1); - display: block; - height: 2px; - left: 0; - margin: 0; - opacity: .3; - padding: 0; - position: absolute; - right: 0; - top: 8px; - top: var(--aa-spacing-half); - z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1) -} - -.aa-SourceFooterSeeAll { - background: linear-gradient(180deg, #fff, rgba(128, 126, 163, 0.14)); - background: linear-gradient(180deg, rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)), rgba(128, 126, 163, 0.14)); - border: 1px solid rgba(128, 126, 163, 0.6); - border: 1px solid rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - border-radius: 5px; - box-shadow: inset 0 0 2px #fff, - 0 2px 2px -1px rgba(76, 69, 88, 0.15); - color: inherit; - font-size: .95em; - font-weight: 500; - font-weight: var(--aa-font-weight-medium); - padding: .475em 1em .6em; - text-decoration: none -} - -.aa-SourceFooterSeeAll:focus, -.aa-SourceFooterSeeAll:hover { - border: 1px solid #3e34d3; - border: 1px solid rgba(var(--aa-primary-color-rgb), 1); - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1) -} - -.aa-Item { - align-items: center; - border-radius: 3px; - cursor: pointer; - display: grid; - min-height: 40px; - min-height: calc(var(--aa-spacing)*2.5); - padding: 4px; - padding: calc(var(--aa-spacing-half)/2) -} - -.aa-Item[aria-selected=true] { - background-color: rgba(179, 173, 214, 0.205); - background-color: rgba(var(--aa-selected-color-rgb), var(--aa-selected-color-alpha)) -} - -.aa-Item[aria-selected=true] .aa-ActiveOnly, -.aa-Item[aria-selected=true] .aa-ItemActionButton { - visibility: visible -} - -.aa-ItemIcon { - align-items: center; - background: #fff; - background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - border-radius: 3px; - box-shadow: inset 0 0 0 1px rgba(128, 126, 163, 0.3); - box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); - color: #7777a3; - color: rgba(var(--aa-icon-color-rgb), var(--aa-icon-color-alpha)); - display: flex; - flex-shrink: 0; - font-size: .7em; - height: 28px; - height: calc(var(--aa-icon-size) + var(--aa-spacing-half)); - justify-content: center; - overflow: hidden; - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); - text-align: center; - width: 28px; - width: calc(var(--aa-icon-size) + var(--aa-spacing-half)) -} - -.aa-ItemIcon img { - height: auto; - max-height: 20px; - max-height: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); - max-width: 20px; - max-width: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); - width: auto -} - -.aa-ItemIcon svg { - height: 20px; - height: var(--aa-icon-size); - width: 20px; - width: var(--aa-icon-size) -} - -.aa-ItemIcon--alignTop { - align-self: flex-start -} - -.aa-ItemIcon--noBorder { - background: none; - box-shadow: none -} - -.aa-ItemIcon--picture { - height: 96px; - width: 96px -} - -.aa-ItemIcon--picture img { - max-height: 100%; - max-width: 100%; - padding: 8px; - padding: var(--aa-spacing-half) -} - -.aa-ItemContent { - align-items: center; - cursor: pointer; - display: grid; - grid-gap: 8px; - gap: 8px; - grid-gap: var(--aa-spacing-half); - gap: var(--aa-spacing-half); - grid-auto-flow: column; - line-height: 1.25em; - overflow: hidden -} - -.aa-ItemContent:empty { - display: none -} - -.aa-ItemContent mark { - background: none; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-style: normal; - font-weight: 700; - font-weight: var(--aa-font-weight-bold) -} - -.aa-ItemContent--dual { - display: flex; - flex-direction: column; - justify-content: space-between; - text-align: left -} - -.aa-ItemContent--dual .aa-ItemContentSubtitle, -.aa-ItemContent--dual .aa-ItemContentTitle { - display: block -} - -.aa-ItemContent--indented { - padding-left: 36px; - padding-left: calc(var(--aa-icon-size) + var(--aa-spacing)) -} - -.aa-ItemContentBody { - display: grid; - grid-gap: 4px; - gap: 4px; - grid-gap: calc(var(--aa-spacing-half)/2); - gap: calc(var(--aa-spacing-half)/2) -} - -.aa-ItemContentTitle { - display: inline-block; - margin: 0 .5em 0 0; - max-width: 100%; - overflow: hidden; - padding: 0; - text-overflow: ellipsis; - white-space: nowrap -} - -.aa-ItemContentSubtitle { - font-size: .92em -} - -.aa-ItemContentSubtitleIcon:before { - border-color: rgba(128, 126, 163, 0.64); - border-color: rgba(var(--aa-muted-color-rgb), 0.64); - border-style: solid; - content: ""; - display: inline-block; - left: 1px; - position: relative; - top: -3px -} - -.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before { - border-width: 0 0 1.5px; - margin-left: 8px; - margin-left: var(--aa-spacing-half); - margin-right: 4px; - margin-right: calc(var(--aa-spacing-half)/2); - width: 10px; - width: calc(var(--aa-spacing-half) + 2px) -} - -.aa-ItemContentSubtitle--standalone { - align-items: center; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - display: grid; - grid-gap: 8px; - gap: 8px; - grid-gap: var(--aa-spacing-half); - gap: var(--aa-spacing-half); - grid-auto-flow: column; - justify-content: start -} - -.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before { - border-radius: 0 0 0 3px; - border-width: 0 0 1.5px 1.5px; - height: 8px; - height: var(--aa-spacing-half); - width: 8px; - width: var(--aa-spacing-half) -} - -.aa-ItemContentSubtitleCategory { - color: #807ea3; - color: rgba(var(--aa-muted-color-rgb), 1); - font-weight: 500 -} - -.aa-ItemContentDescription { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-size: .85em; - max-width: 100%; - overflow-x: hidden; - text-overflow: ellipsis -} - -.aa-ItemContentDescription:empty { - display: none -} - -.aa-ItemContentDescription mark { - background: rgba(245, 223, 77, 0.5); - background: rgba(var(--aa-description-highlight-background-color-rgb), var(--aa-description-highlight-background-color-alpha)); - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-style: normal; - font-weight: 500; - font-weight: var(--aa-font-weight-medium) -} - -.aa-ItemContentDash { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - display: none; - opacity: .4 -} - -.aa-ItemContentTag { - background-color: rgba(62, 52, 211, 0.2); - background-color: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)); - border-radius: 3px; - margin: 0 .4em 0 0; - padding: .08em .3em -} - -.aa-ItemLink, -.aa-ItemWrapper { - align-items: center; - color: inherit; - display: grid; - grid-gap: 4px; - gap: 4px; - grid-gap: calc(var(--aa-spacing-half)/2); - gap: calc(var(--aa-spacing-half)/2); - grid-auto-flow: column; - justify-content: space-between; - width: 100% -} - -.aa-ItemLink { - color: inherit; - text-decoration: none -} - -.aa-ItemActions { - display: grid; - grid-auto-flow: column; - height: 100%; - justify-self: end; - margin: 0 -5.3333333333px; - margin: 0 calc(var(--aa-spacing)/-3); - padding: 0 2px 0 0 -} - -.aa-ItemActionButton { - align-items: center; - background: none; - border: 0; - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - cursor: pointer; - display: flex; - flex-shrink: 0; - padding: 0 -} - -.aa-ItemActionButton:focus svg, -.aa-ItemActionButton:hover svg { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)) -} - -@media (hover: none) and (pointer: coarse) { - - .aa-ItemActionButton:focus svg, - .aa-ItemActionButton:hover svg { - color: inherit - } -} - -.aa-ItemActionButton svg { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - margin: 5.3333333333px; - margin: calc(var(--aa-spacing)/3); - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); - width: 20px; - width: var(--aa-action-icon-size) -} - -.aa-ActiveOnly { - visibility: hidden -} - -.aa-PanelHeader { - align-items: center; - background: #3e34d3; - background: rgba(var(--aa-primary-color-rgb), 1); - color: #fff; - display: grid; - height: var(--aa-modal-header-height); - margin: 0; - padding: 8px 16px; - padding: var(--aa-spacing-half) var(--aa-spacing); - position: relative -} - -.aa-PanelHeader:after { - background-image: linear-gradient(#fff, rgba(255, 255, 255, 0)); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); - bottom: -8px; - bottom: calc(var(--aa-spacing-half)*-1); - content: ""; - height: 8px; - height: var(--aa-spacing-half); - left: 0; - pointer-events: none; - position: absolute; - right: 0 -} - -.aa-PanelFooter, -.aa-PanelHeader:after { - z-index: 9999; - z-index: var(--aa-base-z-index) -} - -.aa-PanelFooter { - background-color: #fff; - background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - box-shadow: inset 0 1px 0 rgba(128, 126, 163, 0.3); - box-shadow: inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); - display: flex; - justify-content: space-between; - margin: 0; - padding: 16px; - padding: var(--aa-spacing); - position: relative -} - -.aa-PanelFooter:after { - background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(128, 126, 163, 0.6)); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha))); - content: ""; - height: 16px; - height: var(--aa-spacing); - left: 0; - opacity: .12; - pointer-events: none; - position: absolute; - right: 0; - top: -16px; - top: calc(var(--aa-spacing)*-1); - z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1) -} - -.aa-DetachedContainer { - background: #fff; - background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - bottom: 0; - box-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), - 0 6px 16px -4px rgba(35, 38, 59, 0.15); - box-shadow: var(--aa-panel-shadow); - display: flex; - flex-direction: column; - left: 0; - margin: 0; - overflow: hidden; - padding: 0; - position: fixed; - right: 0; - top: 0; - z-index: 9999; - z-index: var(--aa-base-z-index) -} - -.aa-DetachedContainer:after { - height: 32px -} - -.aa-DetachedContainer .aa-SourceHeader { - margin: 8px 0 8px 2px; - margin: var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px -} - -.aa-DetachedContainer .aa-Panel { - background-color: #fff; - background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - border-radius: 0; - box-shadow: none; - flex-grow: 1; - margin: 0; - padding: 0; - position: relative -} - -.aa-DetachedContainer .aa-PanelLayout { - bottom: 0; - box-shadow: none; - left: 0; - margin: 0; - max-height: none; - overflow-y: auto; - position: absolute; - right: 0; - top: 0; - width: 100% -} - -.aa-DetachedFormContainer { - border-bottom: 1px solid rgba(128, 126, 163, 0.3); - border-bottom: 1px solid rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); - display: flex; - flex-direction: row; - justify-content: space-between; - margin: 0; - padding: 8px; - padding: var(--aa-spacing-half) -} - -.aa-DetachedCancelButton { - background: none; - border: 0; - border-radius: 3px; - color: inherit; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - cursor: pointer; - font: inherit; - margin: 0 0 0 8px; - margin: 0 0 0 var(--aa-spacing-half); - padding: 0 8px; - padding: 0 var(--aa-spacing-half) -} - -.aa-DetachedCancelButton:focus, -.aa-DetachedCancelButton:hover { - box-shadow: inset 0 0 0 1px rgba(128, 126, 163, 0.3); - box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)) -} - -.aa-DetachedContainer--modal { - border-radius: 6px; - bottom: inherit; - height: auto; - margin: 0 auto; - max-width: 680px; - max-width: var(--aa-detached-modal-max-width); - position: absolute; - top: 3% -} - -.aa-DetachedContainer--modal .aa-PanelLayout { - max-height: 500px; - max-height: var(--aa-detached-modal-max-height); - padding-bottom: 8px; - padding-bottom: var(--aa-spacing-half); - position: static -} - -.aa-DetachedSearchButton { - align-items: center; - background-color: #fff; - background-color: rgba(var(--aa-input-background-color-rgb), var(--aa-input-background-color-alpha)); - border: 1px solid rgba(128, 126, 163, 0.8); - border: 1px solid rgba(var(--aa-input-border-color-rgb), var(--aa-input-border-color-alpha)); - border-radius: 3px; - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - cursor: pointer; - display: flex; - font: inherit; - font-family: inherit; - font-family: var(--aa-font-family); - font-size: 16px; - font-size: var(--aa-font-size); - height: 44px; - height: var(--aa-search-input-height); - margin: 0; - padding: 0 5.5px; - padding: 0 calc(var(--aa-search-input-height)/8); - position: relative; - text-align: left; - width: 100% -} - -.aa-DetachedSearchButton:focus { - border-color: #3e34d3; - border-color: rgba(var(--aa-primary-color-rgb), 1); - box-shadow: 0 0 0 3px rgba(62, 52, 211, 0.2), - inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 3px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor -} - -.aa-DetachedSearchButtonIcon { - align-items: center; - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); - cursor: auto; - display: flex; - height: 100%; - justify-content: center; - width: 36px; - width: calc(var(--aa-icon-size) + var(--aa-spacing)) -} - -.aa-Detached { - height: 100vh; - overflow: hidden -} - -.aa-DetachedOverlay { - background-color: rgba(115, 114, 129, 0.4); - background-color: rgba(var(--aa-overlay-color-rgb), var(--aa-overlay-color-alpha)); - height: 100vh; - left: 0; - margin: 0; - padding: 0; - position: fixed; - right: 0; - top: 0; - z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1) -} - -.aa-GradientBottom, -.aa-GradientTop { - height: 8px; - height: var(--aa-spacing-half); - left: 0; - pointer-events: none; - position: absolute; - right: 0; - z-index: 9999; - z-index: var(--aa-base-z-index) -} - -.aa-GradientTop { - background-image: linear-gradient(#fff, rgba(255, 255, 255, 0)); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); - top: 0 -} - -.aa-GradientBottom { - background-image: linear-gradient(rgba(255, 255, 255, 0), #fff); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-background-color-rgb), 1)); - border-bottom-left-radius: 4px; - border-bottom-left-radius: calc(var(--aa-spacing)/4); - border-bottom-right-radius: 4px; - border-bottom-right-radius: calc(var(--aa-spacing)/4); - bottom: 0 -} - -@media (hover: none) and (pointer: coarse) { - .aa-DesktopOnly { - display: none - } -} - -@media (hover: hover) { - .aa-TouchOnly { - display: none - } -} - -.aa-Autocomplete, -.aa-Panel, -.aa-DetachedContainer { - --color-mark: #5468ff; - --color-background: #fff; - --color-selected: #f5f5fa; - --color-text: #23263b; - --color-input-icon: #777; - --color-source-icon: rgba(80, 80, 80, 0.32); - --height: 32px; - --height-icon: 16px; - --font-size: 16px -} - -.aa-Panel { - min-width: 350px; - z-index: 1100; - margin-top: 2px -} - -.aa-Panel .aa-PanelLayout { - padding-top: 0; - padding-bottom: 0; - background-color: var(--color-background) -} - -.aa-Panel .aa-PanelLayout .aa-PanelLayoutPreview { - border-left: solid 1px var(--color-selected) -} - -.aa-Panel .aa-GradientBottom { - background-image: none -} - -.aa-Autocomplete .aa-Form, -.aa-DetachedFormContainer .aa-Form { - height: var(--height); - font-size: var(--font-size); - padding: 0; - background-color: var(--color-background) -} - -.aa-Autocomplete .aa-Form:focus-within, -.aa-DetachedFormContainer .aa-Form:focus-within { - box-shadow: none -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix { - padding: 0 -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label { - padding: 0 -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg { - left: 0; - vertical-align: middle; - color: var(--color-input-icon); - width: var(--height-icon) -} - -.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input { - height: var(--height); - color: var(--color-text) -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix { - height: var(--height) -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton { - padding: 0 -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover, -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus { - color: var(--color-text) -} - -.aa-Item { - color: var(--color-text); - padding: 2px 0 -} - -.aa-Item a { - color: inherit; - text-decoration: none -} - -.aa-Item[aria-selected='true'] { - background-color: var(--color-selected) -} - -.aa-Item .aa-ItemContent { - display: flex; - color: var(--color-text) -} - -.aa-Item .aa-ItemContent mark { - color: var(--color-mark); - background-color: transparent -} - -.aa-Item .aa-ItemIcon { - align-items: baseline; - color: var(--color-source-icon); - background: none; - box-shadow: none; - margin: 0 var(--aa-spacing-half) 0 2px -} - -.aa-Item .aa-ItemTitle { - font-size: 14px; - font-weight: bold; - line-height: 18px -} - -.aa-Item .aa-ItemHierarchy { - font-size: 12px; - font-style: italic; - line-height: 18px; - opacity: 0.8; - padding: 1px 0 -} - -.aa-Item .aa-ItemDescription { - font-size: 12px; - line-height: 16px; - color: #797979 -} - -.aa-DetachedContainer { - background: var(--color-background) -} - -.aa-DetachedContainer .aa-DetachedFormContainer .aa-DetachedCancelButton { - color: var(--color-text) -} - -.aa-DetachedOverlay { - z-index: 10 -} - -.aa-DetachedSearchButton { - background-color: var(--color-background) -} - -.aa-DetachedSearchButton .aa-DetachedSearchButtonIcon { - color: var(--color-input-icon) -} - -.aa-powered-by-link { - display: inline-block; - width: 64px; - height: 18px; - margin-left: 4px; - text-indent: 101%; - overflow: hidden; - white-space: nowrap; - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0ODUgMTIwIj48ZyBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjNTQ2OEZGIiBkPSJNMTYuOC0xLjAwMWg4OC40YzguNyAwIDE1LjggNy4wNjUgMTUuOCAxNS44djg4LjQwNWMwIDguNy03LjA2NSAxNS43OTUtMTUuOCAxNS43OTVIMTYuOGMtOC43IDAtMTUuOC03LjA2LTE1LjgtMTUuNzk1VjE0Ljc1OWMwLTguNjk1IDcuMDYtMTUuNzYgMTUuOC0xNS43NiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik03My41MDUgMjUuNzg4di00LjExNWE1LjIwOSA1LjIwOSAwIDAwLTUuMjEtNS4yMDVINTYuMTVhNS4yMDkgNS4yMDkgMCAwMC01LjIxIDUuMjA1djQuMjI1YzAgLjQ3LjQzNS44LjkxLjY5YTM3Ljk2NiAzNy45NjYgMCAwMTEwLjU3LTEuNDljMy40NjUgMCA2Ljg5NS40NyAxMC4yMSAxLjM4LjQ0LjExLjg3NS0uMjE1Ljg3NS0uNjlNNDAuMjIgMzEuMTczbC0yLjA3NS0yLjA3NWE1LjIwNiA1LjIwNiAwIDAwLTcuMzY1IDBsLTIuNDggMi40NzVhNS4xODUgNS4xODUgMCAwMDAgNy4zNTVsMi4wNCAyLjA0Yy4zMy4zMjUuODA1LjI1IDEuMDk1LS4wNzVhMzkuODc2IDM5Ljg3NiAwIDAxMy45NzUtNC42NiAzNy42OCAzNy42OCAwIDAxNC43LTRjLjM2NC0uMjIuNC0uNzMuMTEtMS4wNm0yMi4xNjQgMTMuMDY1djE3LjhjMCAuNTEuNTUuODc1IDEuMDIuNjJsMTUuODI1LTguMTljLjM2LS4xOC40Ny0uNjIuMjktLjk4LTMuMjgtNS43NTUtOS4zNy05LjY4NS0xNi40MDUtOS45NC0uMzY1IDAtLjczLjI5LS43My42OW0wIDQyLjg4Yy0xMy4xOTUgMC0yMy45MTUtMTAuNzA1LTIzLjkxNS0yMy44OCAwLTEzLjE3NSAxMC43Mi0yMy44NzUgMjMuOTE1LTIzLjg3NSAxMy4yIDAgMjMuOTE2IDEwLjcgMjMuOTE2IDIzLjg3NXMtMTAuNjggMjMuODgtMjMuOTE2IDIzLjg4bTAtNTcuOGMtMTguNzQgMC0zMy45NCAxNS4xOC0zMy45NCAzMy45MiAwIDE4Ljc0NSAxNS4yIDMzLjg5IDMzLjk0IDMzLjg5czMzLjk0LTE1LjE4IDMzLjk0LTMzLjkyNWMwLTE4Ljc0NS0xNS4xNjUtMzMuODg1LTMzLjk0LTMzLjg4NSIvPjxwYXRoIGZpbGw9IiM1NDY4RkYiIGQ9Ik0yNDAuMjE0IDk0LjE3N2MtMjMuMzY1LjExLTIzLjM2NS0xOC44NTUtMjMuMzY1LTIxLjg3NWwtLjA0LTcxLjA0NSAxNC4yNTQtMi4yNnY3MC42MWMwIDEuNzE1IDAgMTIuNTYgOS4xNSAxMi41OTV2MTEuOTc1aC4wMDF6bS01Ny43OC0xMS42MWM0LjM3NCAwIDcuNjItLjI1NSA5Ljg4LS42OVY2Ny4zOTJhMjkuMTk2IDI5LjE5NiAwIDAwLTMuNDMtLjY5NSAzMy43NDIgMzMuNzQyIDAgMDAtNC45NTYtLjM2NWMtMS41NyAwLTMuMTc1LjExLTQuNzc1LjM2NS0xLjYwNS4yMi0zLjA2NS42NTUtNC4zNCAxLjI3NS0xLjI3NS42Mi0yLjMzNSAxLjQ5NS0zLjEgMi42Mi0uOCAxLjEzLTEuMTY1IDEuNzg1LTEuMTY1IDMuNDk1IDAgMy4zNDUgMS4xNjUgNS4yOCAzLjI4IDYuNTUgMi4xMTUgMS4yNzUgNC45OTUgMS45MyA4LjYwNiAxLjkzem0tMS4yNC01MS42ODVjNC43IDAgOC42NzQuNTg1IDExLjg4NCAxLjc1IDMuMjA2IDEuMTY1IDUuNzk2IDIuOCA3LjY5IDQuODc1IDEuOTM1IDIuMTEgMy4yNDUgNC45MTUgNC4wNDYgNy45Ljg0IDIuOTg1IDEuMjQgNi4yNiAxLjI0IDkuODZ2MzYuNjJjLTIuMTg1LjQ3LTUuNTA2IDEuMDE1LTkuOTUgMS42Ny00LjQ0Ni42NTUtOS40NC45ODUtMTQuOTg2Ljk4NS0zLjY4IDAtNy4wNy0uMzY1LTEwLjA5NS0xLjA1NS0zLjA2NS0uNjktNS42NS0xLjgyLTcuODQtMy4zODUtMi4xNS0xLjU2NS0zLjgyNS0zLjU3LTUuMDY1LTYuMDQtMS4yMDUtMi40OC0xLjgyNS01Ljk3LTEuODI1LTkuNjEgMC0zLjQ5NS42OS01LjcxNSAyLjA0NS04LjEyIDEuMzgtMi40IDMuMjQtNC4zNjUgNS41NzUtNS44OTUgMi4zNy0xLjUzIDUuMDY1LTIuNjIgOC4xNjUtMy4yNzUgMy4xLS42NTUgNi4zNDUtLjk4NSA5LjY5NS0uOTg1IDEuNTcgMCAzLjIxLjExIDQuOTYuMjkgMS43MTUuMTg1IDMuNTc1LjUxNSA1LjU0NS45ODV2LTIuMzNjMC0xLjYzNS0uMTg1LTMuMi0uNTg1LTQuNjU1YTEwLjAxMiAxMC4wMTIgMCAwMC0yLjA0NS0zLjg5NWMtLjk4NS0xLjEzLTIuMjU1LTIuMDA1LTMuODYtMi42Mi0xLjYwNS0uNjItMy42NS0xLjA5NS02LjA5LTEuMDk1LTMuMjggMC02LjI3LjQtOS4wMDUuODc1LTIuNzM1LjQ3LTQuOTk1IDEuMDItNi43MSAxLjYzNWwtMS43MS0xMS42OGMxLjc4NS0uNjIgNC40NDUtMS4yNCA3Ljg3NS0xLjg1NSAzLjQyNS0uNjYgNy4xMS0uOTUgMTEuMDQ1LS45NWguMDAxem0yODEuNTEgNTEuMjg1YzQuMzc1IDAgNy42MTUtLjI1NSA5Ljg3NS0uNjk1di0xNC40OGMtLjgtLjIyLTEuOTMtLjQ3NS0zLjQyNS0uNjk1YTMzLjgxMyAzMy44MTMgMCAwMC00Ljk2LS4zNjVjLTEuNTY1IDAtMy4xNy4xMS00Ljc3NS4zNjUtMS42LjIyLTMuMDYuNjU1LTQuMzM1IDEuMjc1LTEuMjguNjItMi4zMzUgMS40OTUtMy4xIDIuNjItLjgwNSAxLjEzLTEuMTY1IDEuNzg1LTEuMTY1IDMuNDk1IDAgMy4zNDUgMS4xNjUgNS4yOCAzLjI4IDYuNTUgMi4xNSAxLjMxIDQuOTk1IDEuOTMgOC42MDUgMS45M3ptLTEuMjA1LTUxLjY0NWM0LjcgMCA4LjY3NC41OCAxMS44ODQgMS43NDUgMy4yMDUgMS4xNjUgNS43OTUgMi44IDcuNjkgNC44NzUgMS44OTUgMi4wNzUgMy4yNDUgNC45MTUgNC4wNDUgNy45Ljg0IDIuOTg1IDEuMjQgNi4yNiAxLjI0IDkuODY1djM2LjYxNWMtMi4xODUuNDctNS41MDUgMS4wMTUtOS45NSAxLjY3NS00LjQ0NS42NTUtOS40NC45OC0xNC45ODUuOTgtMy42OCAwLTcuMDctLjM2NS0xMC4wOTQtMS4wNTUtMy4wNjUtLjY5LTUuNjUtMS44Mi03Ljg0LTMuMzg1LTIuMTUtMS41NjUtMy44MjUtMy41Ny01LjA2NS02LjA0LTEuMjA1LTIuNDc1LTEuODI1LTUuOTctMS44MjUtOS42MSAwLTMuNDk1LjY5NS01LjcxNSAyLjA0NS04LjEyIDEuMzgtMi40IDMuMjQtNC4zNjUgNS41NzUtNS44OTUgMi4zNy0xLjUyNSA1LjA2NS0yLjYyIDguMTY1LTMuMjc1IDMuMS0uNjU1IDYuMzQ1LS45OCA5LjctLjk4IDEuNTY1IDAgMy4yMDUuMTEgNC45NTUuMjlzMy41NzUuNTEgNS41NC45ODV2LTIuMzNjMC0xLjY0LS4xOC0zLjIwNS0uNTgtNC42NmE5Ljk3NyA5Ljk3NyAwIDAwLTIuMDQ1LTMuODk1Yy0uOTg1LTEuMTMtMi4yNTUtMi4wMDUtMy44Ni0yLjYyLTEuNjA2LS42Mi0zLjY1LTEuMDktNi4wOS0xLjA5LTMuMjggMC02LjI3LjQtOS4wMDUuODctMi43MzUuNDc1LTQuOTk1IDEuMDItNi43MSAxLjY0bC0xLjcxLTExLjY4NWMxLjc4NS0uNjIgNC40NDUtMS4yMzUgNy44NzUtMS44NTUgMy40MjUtLjYyIDcuMTA1LS45NDUgMTEuMDQ1LS45NDV6bS00Mi44LTYuNzdjNC43NzQgMCA4LjY4LTMuODYgOC42OC04LjYzIDAtNC43NjUtMy44NjYtOC42MjUtOC42OC04LjYyNS00LjgxIDAtOC42NzUgMy44Ni04LjY3NSA4LjYyNSAwIDQuNzcgMy45IDguNjMgOC42NzUgOC42M3ptNy4xOCA3MC40MjVoLTE0LjMyNnYtNjEuNDRsMTQuMzI1LTIuMjU1djYzLjY5NWguMDAxem0tMjUuMTE2IDBjLTIzLjM2NS4xMS0yMy4zNjUtMTguODU1LTIzLjM2NS0yMS44NzVsLS4wNC03MS4wNDUgMTQuMjU1LTIuMjZ2NzAuNjFjMCAxLjcxNSAwIDEyLjU2IDkuMTUgMTIuNTk1djExLjk3NXptLTQ2LjMzNS0zMS40NDVjMC02LjE1NS0xLjM1LTExLjI4NS0zLjk3NC0xNC44NS0yLjYyNS0zLjYwNS02LjMwNS01LjM4NS0xMS4wMS01LjM4NS00LjcgMC04LjM4NiAxLjc4LTExLjAwNiA1LjM4NS0yLjYyNSAzLjYtMy45MDQgOC42OTUtMy45MDQgMTQuODUgMCA2LjIyNSAxLjMxNSAxMC40MDUgMy45NCAxNC4wMSAyLjYyNSAzLjY0IDYuMzA1IDUuNDI1IDExLjAxIDUuNDI1IDQuNyAwIDguMzg1LTEuODIgMTEuMDEtNS40MjUgMi42MjQtMy42NCAzLjkzNC03Ljc4NSAzLjkzNC0xNC4wMXptMTQuNTgtLjAzNWMwIDQuODA1LS42OSA4LjQ0LTIuMTE0IDEyLjQxLTEuNDIgMy45NjUtMy40MjUgNy4zNS02LjAxIDEwLjE1NS0yLjU5IDIuOC01LjY5IDQuOTg1LTkuMzM2IDYuNTE1LTMuNjQ0IDEuNTI1LTkuMjYgMi40LTEyLjA2NSAyLjQtMi44MS0uMDM1LTguMzg1LS44MzUtMTEuOTk1LTIuNC0zLjYxLTEuNTY1LTYuNzEtMy43MTUtOS4yOTUtNi41MTUtMi41OS0yLjgwNS00LjU5NC02LjE5LTYuMDU0LTEwLjE1NS0xLjQ1Ni0zLjk3LTIuMTg1LTcuNjA1LTIuMTg1LTEyLjQxcy42NTQtOS40MyAyLjExNC0xMy4zNmMxLjQ2LTMuOTMgMy41LTcuMjggNi4xMjUtMTAuMDggMi42MjUtMi44MDUgNS43Ni00Ljk1NSA5LjMzLTYuNDggMy42MS0xLjUzIDcuNTg1LTIuMjU1IDExLjg4NS0yLjI1NSA0LjMwNSAwIDguMjc1Ljc2IDExLjkyIDIuMjU1IDMuNjUgMS41MjUgNi43ODYgMy42NzUgOS4zMzYgNi40OCAyLjU4NCAyLjggNC41OSA2LjE1IDYuMDUgMTAuMDggMS41MyAzLjkzIDIuMjk1IDguNTU1IDIuMjk1IDEzLjM2aC0uMDAxem0tMTA3LjI4NCAwYzAgNS45NjUgMS4zMSAxMi41OSAzLjkzNSAxNS4zNTUgMi42MjUgMi43NyA2LjAxNCA0LjE1IDEwLjE3NSA0LjE1IDIuMjYgMCA0LjQxLS4zMjUgNi40MTQtLjk0NSAyLjAwNS0uNjIgMy42MDYtMS4zNSA0Ljg4Ni0yLjIydi0zNS4zNGMtMS4wMi0uMjItNS4yODYtMS4wOTUtOS40MS0xLjItNS4xNzUtLjE1LTkuMTEgMS45NjUtMTEuODggNS4zNDUtMi43MzYgMy4zOS00LjEyIDkuMzItNC4xMiAxNC44NTV6bTM5LjYyNSAyOC4wOTVjMCA5LjcyLTIuNDggMTYuODE1LTcuNDc2IDIxLjMzLTQuOTkgNC41MS0xMi42MSA2Ljc3LTIyLjg5IDYuNzctMy43NTUgMC0xMS41NTUtLjczLTE3Ljc5LTIuMTFsMi4yOTUtMTEuMjg1YzUuMjE1IDEuMDkgMTIuMTA1IDEuMzg1IDE1LjcxNSAxLjM4NSA1LjcyIDAgOS44MDUtMS4xNjUgMTIuMjQ1LTMuNDk1IDIuNDQ1LTIuMzMgMy42NDUtNS43ODUgMy42NDUtMTAuMzc1di0yLjMzYy0xLjQyLjY5LTMuMjggMS4zODUtNS41NzUgMi4xMTUtMi4yOTUuNjktNC45NTUgMS4wNTUtNy45NSAxLjA1NS0zLjkzNSAwLTcuNTEtLjYyLTEwLjc1LTEuODYtMy4yNDUtMS4yMzUtNi4wNTUtMy4wNTUtOC4zNS01LjQ2LTIuMjk1LTIuNC00LjEyLTUuNDItNS4zOTUtOS4wMjUtMS4yNzUtMy42MDUtMS45MzUtMTAuMDQ1LTEuOTM1LTE0Ljc3NSAwLTQuNDQuNjk1LTEwLjAxIDIuMDQ2LTEzLjcyNSAxLjM4NC0zLjcxIDMuMzUtNi45MTUgNi4wMTQtOS41NyAyLjYyNi0yLjY1NSA1LjgzNS00LjY5NSA5LjU5LTYuMTkgMy43NTUtMS40OSA4LjE2LTIuNDM1IDEyLjkzNS0yLjQzNSA0LjYzNSAwIDguOS41OCAxMy4wNTUgMS4yNzUgNC4xNTUuNjkgNy42OSAxLjQxNSAxMC41NyAyLjIxNXY1Ni40OWguMDAxeiIvPjwvZz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - vertical-align: middle -} - -.aa-powered-by { - text-align: right; - font-size: 12px; - color: #969faf; - padding: 8px 8px 4px 0; - font-weight: normal -} - - -/*# sourceMappingURL=algoliasearchNetlify.css.map*/ diff --git a/src/sass/_header.scss b/src/sass/_header.scss deleted file mode 100644 index e772301a79..0000000000 --- a/src/sass/_header.scss +++ /dev/null @@ -1,371 +0,0 @@ -.site-header { - background: black; - background-image: url('https://i.imgur.com/CEYEZp8.jpeg'); - padding-bottom: 0.4em; - padding-top: 0.2em; -} - -.site-header-inside { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; -} - -.site-branding { - -ms-flex: 0 1 auto; - flex: 0 1 auto; -} - -.site-title { - color: $gray-700; - font-size: 1.5em; - font-weight: bold; - line-height: 1.2; - margin: 0; -} - -.site-logo { - margin: 0; - - img { - max-height: 65px; - } -} - -.menu, -.submenu { - list-style: none; - margin: 0; - padding: 0; -} - -.menu-item { - position: relative; - - &.current { - color: $color-primary; - } - - a { - &:not(.button) { - display: inline-block; - font-size: 1.1em; - line-height: 1.5; - } - } -} - -#masthead { - a { - &:not(.button) { - color: inherit; - display: inline-block; - text-decoration: none; - - &:hover { - color: $color-primary; - } - } - } - - .site-branding { - a { - &:hover { - color: inherit; - } - } - } -} - -@media only screen and (min-width: 801px) { - #menu-open, - #menu-close { - display: none; - } - - .site-navigation { - margin-left: auto; - } - - .menu { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; - } - - .menu-item { - display: inline-block; - margin: 0 0 0 1.25em; - padding-bottom: 0.1875em; - padding-top: 0.1875em; - - a { - padding-bottom: 0.5em; - padding-top: 0.5em; - - &.button:not(.button-icon) { - padding-left: 1.25em; - padding-right: 1.25em; - } - } - - &.has-children>a { - padding-right: 18px; - position: relative; - - &:after { - background: 0; - border-color: currentColor; - border-style: solid; - border-width: 1px 1px 0 0; - box-sizing: border-box; - content: ''; - height: 6px; - position: absolute; - right: 0; - top: 50%; - width: 6px; - -webkit-transform: translateY(-50%) rotate(135deg); - transform: translateY(-50%) rotate(135deg); - } - - &.button:not(.button-icon) { - padding-right: 2.25em; - - &:after { - right: 1.25em; - } - } - } - - .submenu-toggle { - display: none; - } - - &.has-children:hover>.submenu { - opacity: 1; - -webkit-transition: margin 0.3s, opacity 0.2s; - transition: margin 0.3s, opacity 0.2s; - visibility: visible; - } - } - - .submenu { - background: #fff; - border: 4px solid $gray-300; - border-radius: $border-radius-sm; - box-shadow: $box-shadow; - left: 0; - min-width: 180px; - opacity: 0; - padding: 0.5em 0; - position: absolute; - text-align: left; - top: 100%; - -webkit-transition: opacity 0.2s, visibility 0s 0.2s; - transition: opacity 0.2s, visibility 0s 0.2s; - visibility: hidden; - width: 100%; - z-index: 99; - - .menu-item { - display: block; - margin: 0; - padding: 0 1em; - } - - a { - &:not(.button-icon) { - display: block; - } - - &.button:not(.button-icon) { - margin: 0.5em 0; - } - } - } -} - -@media only screen and (max-width: 800px) { - .site { - overflow: hidden; - position: relative; - } - - .site-branding { - margin-right: 0.625em; - } - - .site-header { - &:after { - background: rgba($gray-600, 0.6); - content: ''; - height: 100vh; - left: 0; - opacity: 0; - position: absolute; - top: 0; - -webkit-transition: opacity 0.15s ease-in-out, visibility 0s ease-in-out 0.15s; - transition: opacity 0.15s ease-in-out, visibility 0s ease-in-out 0.15s; - visibility: hidden; - width: 100%; - z-index: 998; - } - } - - .site-navigation { - background: #fff; - box-sizing: border-box; - height: 100vh; - margin: 0; - max-width: 360px; - -webkit-overflow-scrolling: touch; - position: absolute; - right: -100%; - top: 0; - -webkit-transition: right 0.3s ease-in-out, visibility 0s 0.3s ease-in-out; - transition: right 0.3s ease-in-out, visibility 0s 0.3s ease-in-out; - visibility: hidden; - width: 100%; - z-index: 999; - } - - .site-nav-inside { - height: 100%; - overflow: auto; - -webkit-overflow-scrolling: touch; - position: relative; - } - - .menu--opened { - .site { - height: 100%; - left: 0; - overflow: hidden; - position: fixed; - top: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - width: 100%; - z-index: 997; - } - - .site-navigation { - right: 0; - -webkit-transition: right 0.3s ease-in-out; - transition: right 0.3s ease-in-out; - visibility: visible; - } - - .site-header { - &:after { - opacity: 1; - -webkit-transition-delay: 0s; - transition-delay: 0s; - visibility: visible; - } - } - } - - .menu { - padding: calc(3vw + 2.8125em) $container-padding 3em; - } - - .submenu { - border-top: 1px solid $gray-300; - display: none; - padding-left: 1em; - } - - .menu-item { - display: block; - margin: 0; - - &:not(.menu-button) { - border-bottom: 1px solid $gray-300; - - &:first-child { - border-top: 1px solid $gray-300; - } - } - - a { - - &:not(.button), - &.button-icon { - padding: 0.75em 0; - } - - &:not(.button) { - display: block; - } - - &.button { - &:not(.button-icon) { - width: 100%; - } - } - } - - &.has-children>a { - margin-right: 2em; - } - - .menu-item { - &:first-child { - border-top: 0; - } - - &:last-child { - border-bottom: 0; - } - } - - .submenu-toggle { - color: $gray-500; - height: 2.8125em; - position: absolute; - right: 0; - top: 0; - } - - &.active { - .submenu-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } - - .submenu { - display: block; - } - } - } - - .menu-button { - &>.button:not(.button-icon) { - margin-bottom: 1.25em; - margin-top: 1.25em; - } - - &+.menu-button { - &>.button:not(.button-icon) { - margin-top: 0; - } - } - } - - #menu-open { - margin-left: auto; - } - - #menu-close { - display: block; - position: absolute; - right: $container-padding; - top: $container-padding; - } -} diff --git a/src/sass/_helpers.scss b/src/sass/_helpers.scss deleted file mode 100644 index 2351f06b54..0000000000 --- a/src/sass/_helpers.scss +++ /dev/null @@ -1,186 +0,0 @@ -// Text for screen readers -.screen-reader-text { - clip: rect(1px, 1px, 1px, 1px); - clip-path: polygon(0px 0px, 0px 0px, 0px 0px, 0px 0px); - height: 1px; - overflow: hidden; - position: absolute !important; - width: 1px; - word-wrap: normal !important; -} - -// Heading decorations -.line-left { - position: relative; - - &:after { - background: $color-primary; - display: block; - content: ""; - height: 100%; - left: -1px; - position: absolute; - top: 0; - width: 5px; - } -} - -// Responsive video wrappers -.js-reframe { - margin: 1.875em 0; - - &:first-child { - margin-top: 0; - } -} - -// Notifications, allerts -.note, -.important { - border-radius: $border-radius; - color: $gray-700; - margin: 1.875em 0; - padding: 1em 1.125em; - - &:first-child { - margin-top: 0; - } -} - -.note { - background: $yellow-pale; - border-left: 5px solid $yellow; -} - -.important { - background: $red-pale; - border-left: 5px solid $red; -} - -// Background gradients -.has-gradient { - background: $color-primary; - background: -webkit-gradient(linear, left top, right top, from($color-secondary), to($color-primary)); - background: linear-gradient(to right,$color-secondary, $color-primary); - color: #fff; - position: relative; - - h1, - h2, - h3, - h4, - h5, - h6 { - color: inherit !important; - } - - a { - &:not(.button) { - color: inherit !important; - - &:hover { - opacity: .8; - } - } - } - - .button { - &:not(.button-secondary) { - background-color: #fff; - color: $color-primary; - - &:hover, - &:focus, - &:active { - opacity: .85; - } - } - } - - .button-secondary { - color: #fff !important; - } - - .inner-sm { - position: relative; - } -} - -// Background image -.bg-img { - -webkit-animation: fadeIn20 .75s ease-in-out; - animation: fadeIn20 .75s ease-in-out; - background-position: center; - background-size: cover; - bottom: 0; - left: 0; - opacity: 0.2; - position: absolute; - right: 0; - top: 0; -} - -// Grid -.grid { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-left: -$grid-gap / 2; - margin-right: -$grid-gap / 2; -} - -.grid-item { - box-sizing: border-box; - padding-left: $grid-gap / 2; - padding-right: $grid-gap / 2; - position: relative; - width: 100%; -} - -.grid-center { - -ms-flex-pack: center; - justify-content: center; -} - -.grid-swap { - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; -} - -.grid-middle { - -ms-flex-align: center; - align-items: center; -} - -@media only screen and (min-width: 641px) { - .grid-col-2 { - .grid-item { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - } -} - -@media only screen and (min-width: 761px) { - .grid-col-3 { - .grid-item { - -ms-flex: 0 0 33.333%; - flex: 0 0 33.333%; - max-width: 33.333%; - } - } -} - -@media only screen and (max-width: 600px) { - .grid { - margin-left: -$container-padding / 2; - margin-right: -$container-padding / 2; - } - - .grid-item { - padding-left: $container-padding / 2; - padding-right: $container-padding / 2; - } -} diff --git a/src/sass/_icons.scss b/src/sass/_icons.scss deleted file mode 100644 index 63a5df66ca..0000000000 --- a/src/sass/_icons.scss +++ /dev/null @@ -1,101 +0,0 @@ -// SVG icons -.icon { - color: inherit; - fill: currentColor; - flex-shrink: 0; - height: 1em; - line-height: 1; - width: 1em; -} - -// CSS icons -.icon-menu, -.icon-close { - background: currentColor; - border-radius: 1px; - color: inherit; - height: 2px; - left: 50%; - margin-top: -1px; - margin-left: -12px; - position: absolute; - top: 50%; - width: 24px; - - &:before, - &:after { - background: currentColor; - border-radius: 1px; - content: ''; - height: 100%; - left: 0; - position: absolute; - width: 100%; - } -} - -.icon-menu { - &:before { - top: -6px; - } - - &:after { - bottom: -6px; - } -} - -.icon-close { - background: 0; - margin-left: -14px; - width: 28px; - - &:before { - top: 0; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); - } - - &:after { - top: 0; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } -} - -.icon-angle-right { - background: 0; - border-color: currentColor; - border-style: solid; - border-width: 1px 1px 0 0; - box-sizing: border-box; - height: 8px; - left: 50%; - margin-left: -4px; - margin-top: -4px; - position: absolute; - top: 50%; - width: 8px; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} - -.docs-nav-toggle { - .icon-angle-right { - height: 12px; - left: auto; - margin-left: 0; - margin-right: 9px; - margin-top: -6px; - right: 0; - width: 12px; - } -} - -.docs-section-item { - .icon-angle-right { - left: auto; - margin-left: 0; - margin-right: 15px; - right: 0; - } -} diff --git a/src/sass/_palettes.scss b/src/sass/_palettes.scss deleted file mode 100644 index ac2cc9874b..0000000000 --- a/src/sass/_palettes.scss +++ /dev/null @@ -1,57 +0,0 @@ -@each $palette in map-keys($theme-palettes) { - $palette-suffix: '#{$palette}'; - $color-primary: map-deep-get($theme-palettes, $palette, 'primary'); - $color-secondary: map-deep-get($theme-palettes, $palette, 'secondary'); - - .palette-#{$palette-suffix} { - a:not(.button) { - color: $color-primary; - - &:hover { - color: $gray-600; - } - } - - blockquote { - border-color: $color-primary; - } - - .line-left:after, - .button { - background: $color-primary; - } - - .has-gradient { - background: $color-primary; - background: -webkit-gradient(linear, left top, right top, from($color-secondary), to($color-primary)); - background: linear-gradient(to right, $color-secondary, $color-primary); - } - - .button-secondary, - .button-icon:hover, - .button-icon:focus, - .button-icon:active, - .has-gradient .button:not(.button-secondary), - .menu-item.current, - #masthead a:not(.button):hover, - #colophon a:not(.button):hover, - .post.type-docs .hash-link:hover, - .post.type-docs .hash-link:focus, - #docs-menu a:hover, - #docs-menu .current, - #docs-menu .current-parent, - #page-nav li.active > a, - #page-nav a:hover { - color: $color-primary; - } - - #docs-section-items { - .docs-item-link { - &:hover { - border-color: $color-primary; - color: $color-primary; - } - } - } - } -} diff --git a/src/sass/_posts.scss b/src/sass/_posts.scss deleted file mode 100644 index 96c55ba953..0000000000 --- a/src/sass/_posts.scss +++ /dev/null @@ -1,166 +0,0 @@ -.post { - margin-bottom: 2.5em; -} - -.post-full, -.post-feed { - &:last-child { - margin-bottom: 5em; - } -} - -.has-gradient { - &.page-header, - &.post-header { - padding-bottom: 9.5em; - padding-top: 3.75em; - text-align: center; - } - - .page-title, - .post-title { - color: inherit; - font-size: 2.25em; - margin: 0; - } -} - -.page-subtitle, -.post-subtitle { - font-size: 1.125em; - line-height: 1.5; - margin: 0.5em 0 0; - position: relative; -} - -.post-title { - a { - color: inherit !important; - text-decoration: none; - } -} - -.post-thumbnail { - border: 0; - border-radius: $border-radius $border-radius 0 0; - display: block; - margin: 0; - - img { - border-radius: $border-radius $border-radius 0 0; - width: 100%; - } -} - -.post-full .post-content, -.post-feed { - margin-top: -5em; - position: relative; -} - -.post-full .post-content, -.post-feed .post { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius; - box-shadow: $box-shadow; -} - -.post-full { - .post-content { - padding: 2.5em 1.5em; - } - - .post-meta { - margin: 0 0 0.5em; - } -} - -.post-feed { - .post { - padding: 0 0 2.5em; - } - - .post-meta { - color: $gray-500; - font-size: 0.875em; - margin: 0 0 0.5em; - padding-left: 1.71428em; - padding-right: 1.71428em; - } - - .post-header { - margin: 0 0 1.25em; - padding-top: 1.875em; - } - - .post-title { - font-size: 1.5em; - margin: 0; - padding-left: 1em; - padding-right: 1em; - } - - .post-excerpt { - margin-bottom: 1.25em; - padding-left: 1.5em; - padding-right: 1.5em; - } - - .read-more { - margin: 0; - padding-left: 1.5em; - padding-right: 1.5em; - } - - .read-more-link { - font-weight: bold; - text-decoration: none; - - &:after { - font-size: 1.125em; - content: "\2192"; - line-height: 1.5; - margin-left: 5px; - } - - &:hover { - color: $gray-600; - } - } -} - -@media only screen and (min-width: 641px) { - .has-gradient { - .page-title, - .post-title { - font-size: 3em; - } - } - - .page-subtitle, - .post-subtitle { - font-size: 1.25em; - } - - .post-full { - .post-meta { - font-size: 1.125em; - } - } - - .post-full .post-content, - .post-feed .post-meta, - .post-feed .post-title, - .post-feed .post-excerpt, - .post-feed .read-more { - padding-left: 7%; - padding-right: 7%; - } -} - -@media only screen and (max-width: 1000px) { - .post { - margin-bottom: 4vw; - } -} diff --git a/src/sass/_prism.scss b/src/sass/_prism.scss deleted file mode 100644 index ca8230b323..0000000000 --- a/src/sass/_prism.scss +++ /dev/null @@ -1,143 +0,0 @@ -/* PrismJS 1.16.0 -https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript&plugins=toolbar+copy-to-clipboard */ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ - -code[class*='language-'], -pre[class*='language-'] { - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -:not(pre) > code[class*='language-'] { - background: $gray-700; - color: $gray-100; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: #8292a2; -} - -.token.punctuation { - color: #f8f8f2; -} - -.token.namespace { - opacity: 0.7; -} - -.token.property, -.token.tag, -.token.constant, -.token.symbol, -.token.deleted { - color: #f92672; -} - -.token.boolean, -.token.number { - color: #ae81ff; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #a6e22e; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable { - color: #f8f8f2; -} - -.token.atrule, -.token.attr-value, -.token.function, -.token.class-name { - color: #e6db74; -} - -.token.keyword { - color: #66d9ef; -} - -.token.regex, -.token.important { - color: #fd971f; -} - -.token.important, -.token.bold { - font-weight: bold; -} -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} - -div.code-toolbar { - position: relative; -} - -div.code-toolbar > .toolbar { - position: absolute; - top: 0; - right: 0; -} - -div.code-toolbar > .toolbar .toolbar-item { - display: block; -} - -div.code-toolbar > .toolbar a { - border: 0; - cursor: pointer; -} - -div.code-toolbar > .toolbar button { - background: none; - border: 0; - border-radius: 0; - box-shadow: none; - color: inherit; - font: inherit; - line-height: normal; - overflow: visible; - padding: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; -} - -div.code-toolbar > .toolbar a, -div.code-toolbar > .toolbar button, -div.code-toolbar > .toolbar span { - background: $gray-600; - color: $gray-300 !important; - display: block; - font-size: 0.75em; - line-height: 1.5; - padding: 0.25em 0.5em; - text-decoration: none; -} diff --git a/src/sass/_reset.scss b/src/sass/_reset.scss deleted file mode 100644 index 7ea3d17976..0000000000 --- a/src/sass/_reset.scss +++ /dev/null @@ -1,185 +0,0 @@ -// normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css -html { - line-height: 1.15; - -webkit-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -main { - display: block; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -a { - background-color: transparent; -} - -a:focus { - outline: thin dotted; -} - -a:active, -a:hover { - outline: 0; -} - -abbr[title] { - border-bottom: none; - text-decoration: underline; - text-decoration: underline dotted; -} - -b, -strong { - font-weight: bold; - - .font-fira-sans & { - font-weight: 600; - } -} - -pre, -code, -kbd, -samp { - font-family: $font-monospace; - font-size: 1em; -} - -small { - font-size: 80%; -} - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -img { - border-style: none; - vertical-align: middle; -} - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - font-size: 100%; - line-height: 1.15; - margin: 0; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} - -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} - -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -legend { - box-sizing: border-box; - color: inherit; - display: table; - max-width: 100%; - padding: 0; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -textarea { - overflow: auto; -} - -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; - padding: 0; -} - -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} - -[type='search'] { - -webkit-appearance: textfield; - outline-offset: -2px; -} - -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit; -} - -details { - display: block; -} - -summary { - display: list-item; -} - -template { - display: none; -} - -[hidden] { - display: none; -} diff --git a/src/sass/_sections.scss b/src/sass/_sections.scss deleted file mode 100644 index a5417e67c2..0000000000 --- a/src/sass/_sections.scss +++ /dev/null @@ -1,337 +0,0 @@ -.block { - padding-top: 3.75em; - - &:not(.block-hero) { - background: $gray-100; - } - - &:last-child { - padding-bottom: 3.75em; - } -} - -.block-image { - margin-bottom: 1.5em; -} - -.block-header { - margin-bottom: 1.5em; -} - -.block-title { - margin: 0; -} - -.block-subtitle { - color: $gray-500; - line-height: 1.5; - margin-bottom: 0; - - &:not(:first-child) { - margin-top: 0.5em; - } -} - -.block-buttons, -.grid-item-buttons { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-bottom: 0.9375em; - - a { - font-weight: bold; - text-decoration: none; - } -} - -.block-buttons { - -ms-flex-pack: center; - justify-content: center; - - a { - margin: 0 0.375em 0.75em; - } -} - -.grid-item-buttons { - a { - margin: 0 0.75em 0.75em 0; - } -} - -.has-gradient { - .block-subtitle { - color: inherit; - } -} - -.block-text, -.block-hero { - .block-buttons { - &:not(:first-child) { - margin-top: 1.875em; - } - } -} - -// Content section -.block-text { - .grid-item { - max-width: $container-sm; - text-align: center; - } - - .block-title { - font-size: 1.875em; - } -} - -@media only screen and (min-width: 641px) { - .block-text { - .block-content { - font-size: 1.125em; - } - - .block-title { - font-size: 2.125em; - } - } -} - -@media only screen and (min-width: 801px) { - .block-text { - .grid-item { - &:not(:only-child) { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - } - } - - .block-body { - &:not(:only-child) { - text-align: left; - - .block-buttons { - -ms-flex-pack: start; - justify-content: flex-start; - - a { - margin-left: 0; - margin-right: 0.75em; - } - } - } - } -} - -@media only screen and (min-width: 1001px) { - .block-image { - &:not(:only-child) { - padding-right: 2.5em; - } - } - - .grid-swap { - .block-image { - &:not(:only-child) { - padding-left: 2.5em; - padding-right: 0.9375em; - } - } - } -} - -// CTA section -.block-cta { - .has-gradient { - border-radius: $border-radius; - margin-bottom: 1.875em; - padding: 3.75em 3vw 1.875em; - } - - .block-header { - max-width: $container-sm; - text-align: center; - } - - .block-title { - font-size: 1.875em; - } - - .block-subtitle { - font-size: 1.125em; - } -} - -@media only screen and (min-width: 641px) { - .block-title { - font-size: 2.125em; - } -} - -@media only screen and (min-width: 801px) { - .block-cta { - .has-gradient { - padding-left: 7%; - padding-right: 7%; - } - - .block-header { - -ms-flex: 0 0 66.666%; - flex: 0 0 66.666%; - max-width: 66.666%; - text-align: left; - } - - .block-buttons { - -ms-flex: 0 0 33.333%; - flex: 0 0 33.333%; - margin-top: 0; - max-width: 33.333%; - } - } -} - -// Grid section -.block-grid { - .block-hero + & { - &:not(.has-header) { - background: 0; - padding-top: 0; - } - } - - .block-header { - margin-bottom: 2em; - text-align: center; - } - - .block-title { - font-size: 1.875em; - } - - .grid-item { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - margin-bottom: 1.875em; - } -} - -.grid-item-inside { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius-sm; - box-shadow: $box-shadow; - box-sizing: border-box; - -ms-flex-positive: 1; - flex-grow: 1; - padding-bottom: 0.75em; -} - -.grid-item-image { - border-radius: $border-radius-sm $border-radius-sm 0 0; - display: block; - width: 100%; - - img { - border-radius: $border-radius-sm $border-radius-sm 0 0; - } -} - -.grid-item-title { - font-size: 1.5em; - margin: 1em 0 0.5em; - padding-left: 1em; - padding-right: 1em; - - &:first-child { - margin-top: 1.25em; - } - - a { - color: inherit !important; - text-decoration: none; - } -} - -.grid-item-content, -.grid-item-buttons { - padding-left: 1.5em; - padding-right: 1.5em; -} - -.grid-item-content { - margin-bottom: 1.25em; -} - -.grid-item-buttons { - a { - &:not(.button) { - &:after { - font-size: 1.125em; - content: "\2192"; - line-height: 1.5; - margin-left: 5px; - } - } - } -} - -@media only screen and (max-width: 1000px) { - .block-grid { - .grid-item { - margin-bottom: 4vw; - } - } -} - -// Hero section -.block-hero { - padding-bottom: 7.5em; - position: relative; - text-align: center; - - .block-header { - margin-bottom: 0.75em; - } - - .block-title { - font-size: 2.25em; - } - - .block-content { - font-size: 1.125em; - line-height: 1.5; - } - - & + .block { - margin-top: -5em; - position: relative; - } -} - -@media only screen and (min-width: 641px) { - .block-hero { - .block-title { - font-size: 3em; - } - - .block-content { - font-size: 1.25em; - } - - .block-buttons { - a { - font-size: 1em; - } - } - } -} diff --git a/src/sass/_structure.scss b/src/sass/_structure.scss deleted file mode 100644 index b742fe5515..0000000000 --- a/src/sass/_structure.scss +++ /dev/null @@ -1,38 +0,0 @@ -.site { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - min-height: 100vh; - position: relative; -} - -.site-content { - box-sizing: border-box; - -ms-flex-positive: 1; - flex-grow: 1; - width: 100%; -} - -.outer { - padding-left: 150px; - padding-right: 150px; -} - -.inner { - margin-left: auto; - margin-right: auto; - max-width: 95%; -} - -.inner-md { - margin-left: auto; - margin-right: auto; - max-width: 95%; -} - -.inner-sm { - margin-left: auto; - margin-right: auto; - max-width: 95%; -} diff --git a/src/sass/_tables.scss b/src/sass/_tables.scss deleted file mode 100644 index 39fe6e9c5c..0000000000 --- a/src/sass/_tables.scss +++ /dev/null @@ -1,63 +0,0 @@ -table { - border-collapse: collapse; - border-spacing: 0; - line-height: 1.5; - margin: 0; - max-width: 100%; - text-align: left; - width: 100%; -} - -caption { - color: $gray-500; - font-size: 0.875em; - font-style: normal; - margin-bottom: 1em; - text-align: left; -} - -th, -td { - border-bottom: 1px solid $gray-300; - padding: 0.5em 5px; -} - -th { - color: $gray-700; - font-weight: bold; -} - -:not(.responsive-table) > table { - display: block; - margin: 1.875em 0; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - - &:first-child { - margin-top: 0; - } - - tbody, - thead { - width: 100%; - } - - tr { - width: 100%; - } - - td { - min-width: 10em; - } -} - -.responsive-table { - display: block; - margin: 1.875em 0; - overflow-x: auto; - width: 100%; - - &:first-child { - margin-top: 0; - } -} diff --git a/src/sass/_variables.scss b/src/sass/_variables.scss deleted file mode 100644 index 3219e73757..0000000000 --- a/src/sass/_variables.scss +++ /dev/null @@ -1,54 +0,0 @@ -// Fonts -$font-primary: 'Lato', Helvetica, Arial, sans-serif !default; -$font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace !default; - -// Colors -$color-primary: #00c6ff !default; -$color-secondary: #0072ff !default; - -$gray-100: #f8f8fa !default; -$gray-200: #ecedf2 !default; -$gray-300: #dde0e7 !default; -$gray-400: #9aa4b9 !default; -$gray-500: #67758d !default; -$gray-600: #424b5f !default; -$gray-700: #283040 !default; - -$red: #fc381d !default; -$red-pale: #ffe9e6 !default; -$yellow: #fcb41d !default; -$yellow-pale: #fff7e6 !default; - -// Border radius -$border-radius: 5px; -$border-radius-sm: 3px; - -// Box shadow -$box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); - -// Container max width -$container: 1200px !default; -$container-sm: 680px !default; -$container-md: 800px !default; - -// Container padding -$container-padding: 3vw !default; - -// Grid gap -$grid-gap: 1.875em !default; - -// Alternative theme palettes -$theme-palettes: ( - green: ( - primary: #20c86e, - secondary: #1ba65b - ), - navy: ( - primary: #004e92, - secondary: #000428 - ), - violet: ( - primary: #8e2de2, - secondary: #4a00e0 - ) -); diff --git a/src/sass/imports/_animations.scss b/src/sass/imports/_animations.scss index df5a87c267..77d3da49c7 100644 --- a/src/sass/imports/_animations.scss +++ b/src/sass/imports/_animations.scss @@ -1,16 +1,18 @@ @-webkit-keyframes fadeIn20 { - 0% { - opacity: 0; - } - 100% { - opacity: 0.2; - } + 0% { + opacity: 0; + } + + 100% { + opacity: 0.2; + } } @keyframes fadeIn20 { - 0% { - opacity: 0; - } - 100% { - opacity: 0.2; - } + 0% { + opacity: 0; + } + + 100% { + opacity: 0.2; + } } diff --git a/src/sass/imports/_buttons.scss b/src/sass/imports/_buttons.scss index c98f57275f..10868669fd 100644 --- a/src/sass/imports/_buttons.scss +++ b/src/sass/imports/_buttons.scss @@ -1,66 +1,72 @@ .button { - -ms-flex-align: center; - align-items: center; - background: $color-primary; - border: 0; - border-radius: 1.75em; - box-shadow: none; - box-sizing: border-box; - color: #fff; - cursor: pointer; - display: -ms-inline-flexbox; - display: inline-flex; - font-size: 0.875em; - font-weight: bold; - -ms-flex-pack: center; - justify-content: center; - letter-spacing: 0.035em; - line-height: 1.2; - opacity: 1; - padding: 0.9em 2.14285em; - text-decoration: none; - -webkit-transition: 0.3s ease; - transition: 0.3s ease; - vertical-align: middle; + -ms-flex-align: center; + align-items: center; + background: $color-primary; + border: 0; + border-radius: 1.95em; + box-shadow: none; + box-sizing: border-box; + color: #fff; + cursor: pointer; + display: -ms-inline-flexbox; + display: inline-flex; + font-size: 1em; + font-weight: bold; + -ms-flex-pack: center; + justify-content: center; + letter-spacing: 0.035em; + line-height: 1.6; + opacity: 1; + padding: 1.2em 2.14285em; + text-decoration: none; + -webkit-transition: 0.3s ease; + transition: 0.3s ease; + vertical-align: middle; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), + 0 0 40px rgba(0, 0, 0, 0.1) inset; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), + 0 0 40px rgba(0, 0, 0, 0.1) inset; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), + 0 0 40px rgba(0, 0, 0, 0.1) inset; - &:hover, - &:focus, - &:active { - color: #fff; - opacity: 0.8; - outline: 0; - } + &:hover, + &:focus, + &:active { + color: #fff; + opacity: 0.8; + outline: 0; + } } .button-secondary { - background: 0 !important; - box-shadow: inset 0 0 0 2px currentColor; - color: $color-primary; + background: 0 !important; + box-shadow: inset 0 0 0 3px currentColor; + color: $color-primary; - &:hover, - &:focus, - &:active { - box-shadow: inset 0 0 0 3px currentColor; - color: $color-primary; - opacity: 1; - } + &:hover, + &:focus, + &:active { + box-shadow: inset 0 0 0 4px currentColor; + color: $color-primary; + opacity: 1; + } } .button-icon { - background: 0 !important; - border: 0; - color: inherit; - font-size: 1em; - font-weight: normal; - letter-spacing: normal; - padding: 0.25em; + background: 0 !important; + border: 0; + color: black; + font-size: 1.2em; + font-weight: normal; + letter-spacing: normal; + padding: 0.25em; - &:hover, - &:focus, - &:active { - color: $color-primary; - opacity: 1; - } + &:hover, + &:focus, + &:active { + color: $color-primary; + opacity: 1; + } } #menu-open, @@ -68,22 +74,22 @@ .docs-nav .docs-nav-toggle, .docs-nav .docs-submenu-toggle, .submenu-toggle { - background: 0; - border: 0; - border-radius: 0; - box-shadow: none; - color: inherit; - cursor: pointer; - display: block; - font-size: inherit; - height: 30px; - padding: 0; - position: relative; - width: 30px; + background: 0; + border: 0; + border-radius: 0; + box-shadow: none; + color: inherit; + cursor: pointer; + display: block; + font-size: inherit; + height: 30px; + padding: 0; + position: relative; + width: 30px; - &:hover, - &:focus, - &:active { - outline: 0; - } + &:hover, + &:focus, + &:active { + outline: 0; + } } diff --git a/src/sass/imports/_docs.scss b/src/sass/imports/_docs.scss index 1e30b2d1f4..c8a8ddd5a6 100644 --- a/src/sass/imports/_docs.scss +++ b/src/sass/imports/_docs.scss @@ -1,356 +1,355 @@ .docs-content { - padding-top: 2.5em; - width: 99%; + padding-top: 2.5em; } -.post-content { - width: 95%; -} -.post { - &.type-docs { - margin-bottom: 3.625em; - h1 { - font-size: 1.975em; - } +.post { + &.type-docs { + margin-bottom: 5.625em; + max-width: $container-md; - h2 { - font-size: 1.6em; - } + h1 { + font-size: 1.875em; + } + + h2 { + font-size: 1.5em; + } + + h3 { + font-size: 1.25em; + } + + h4 { + font-size: 1.125em; + } + + h5, + h6 { + font-size: 1em; + } - h3 { - font-size: 1.45em; - } + .hash-link { + float: left; + font-size: 1.25rem; + height: 1em; + line-height: 1; + margin-left: -1.1em; + opacity: 0; + text-align: center; + text-decoration: none; + -webkit-transition: opacity .2s; + transition: opacity .2s; + width: 1em; + + &:before { + content: "\0023"; + display: inline-block; + } + + &:hover, + &:focus { + color: $color-primary; + } + } - h4 { - font-size: 1.35em; - } + h2 { + .hash-link { + margin-top: 0.22em; + } + } - h5, - h6 { - font-size: 1.2em; - } + h3 { + .hash-link { + margin-top: 0.1em; + } + } + h2, + h3 { + &:hover, + &:focus { .hash-link { - float: left; - font-size: 1.25rem; - height: 1em; - line-height: 1; - margin-left: -1.1em; - opacity: 0; - text-align: center; - text-decoration: none; - -webkit-transition: opacity 0.2s; - transition: opacity 0.4s; - width: 1em; - - &:before { - content: '\0023'; - display: inline-block; - } - - &:hover, - &:focus { - color: $color-primary; - } - } - - h2 { - .hash-link { - margin-top: 0.22em; - } - } - - h3 { - .hash-link { - margin-top: 0.1em; - } - } - - h2, - h3 { - &:hover, - &:focus { - .hash-link { - opacity: 1; - } - } + opacity: 1; } + } + } - .post-inside { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius; - box-shadow: $box-shadow; - padding: 0.3em; - width: 70vw; - } + .post-inside { + background: #fff; + border: 1px solid $gray-300; + border-radius: $border-radius; + box-shadow: $box-shadow; + padding: 2.5em 0; + } - .post-title { - font-size: 1.875em; - margin: 0 0 1.25em; - padding: 0 2em; - } + .post-title { + font-size: 1.875em; + margin: 0 0 1.25em; + padding: 0 1em; + } - .post-content { - padding: 0.975em; - word-wrap: break-word; - } + .post-content { + padding: 0 1.875em; } + } } #docs-section-items { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - list-style: none; - margin-left: -0.3125em; - margin-right: -0.3125em; - padding: 0; - - .docs-section-item { - -ms-flex: 1 1 240px; - flex: 1 1 240px; - margin: 0 0.3125em 0.9375em; - } - - .docs-item-link { - border: 1px solid $gray-300; - border-radius: $border-radius-sm; - color: $gray-700; - display: block; - font-weight: bold; - padding: 0.9375em; - position: relative; - text-decoration: none; - -webkit-transition: border-color 0.3s ease, color 0.3s ease; - transition: border-color 0.3s ease, color 0.3s ease; - - &:hover { - border-color: $color-primary; - color: $color-primary; - } + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + list-style: none; + margin-left: -0.3125em; + margin-right: -0.3125em; + padding: 0; + + .docs-section-item { + -ms-flex: 1 1 240px; + flex: 1 1 240px; + margin: 0 0.3125em 0.9375em; + } + + .docs-item-link { + border: 1px solid $gray-300; + border-radius: $border-radius-sm; + color: $gray-700; + display: block; + font-weight: bold; + padding: 0.9375em; + position: relative; + text-decoration: none; + -webkit-transition: border-color .3s ease, color .3s ease; + transition: border-color .3s ease, color .3s ease; + + &:hover { + border-color: $color-primary; + color: $color-primary; } + } } .docs-nav { - margin-bottom: 1.875em; + margin-bottom: 1.875em; - .docs-nav-toggle { - color: $gray-700; - font-size: 1.125em; - margin: 0; - padding-right: 15px; - text-align: left; - } - - .docs-submenu-toggle { - color: $gray-500; - position: absolute; - right: 0; - top: 0; - } + .docs-nav-toggle { + color: $gray-700; + font-size: 1.125em; + margin: 0; + padding-right: 30px; + text-align: left; + width: 100%; + } + + .docs-submenu-toggle { + color: $gray-500; + position: absolute; + right: 0; + top: 0; + } } #docs-menu { - color: $gray-700; - font-weight: bold; - line-height: 1.5; - list-style: none; - margin: 0.7em; - padding: 0; - - & > .docs-menu-item > a { - padding: 0.3em 0; - border-radius: 20px; - - margin: auto; - } - - a { - color: inherit; - display: block; - text-decoration: none; + color: $gray-700; + font-weight: bold; + line-height: 1.5; + list-style: none; + margin: 0; + padding: 0; + + & > .docs-menu-item > a { + padding: 0.1875em 0; + } + + a { + color: inherit; + display: block; + text-decoration: none; - &:hover { - color: $color-primary; - } + &:hover { + color: $color-primary; } + } - .current, - .current-parent { - color: $color-primary; - } + .current, + .current-parent { + color: $color-primary; + } } .docs-submenu { - border-left: 1px solid $gray-300; - color: $gray-600; - display: none; - font-size: 1; - font-weight: normal; - list-style: none; - margin-top: 0.625rem; - padding-left: 1rem; + border-left: 1px solid $gray-300; + color: $gray-600; + display: none; + font-size: 0.9375em; + font-weight: normal; + list-style: none; + margin-top: 0.625rem; + padding-left: 1.25rem; } .docs-menu-item { - color: inherit; - margin-bottom: 0.625rem; - - &.has-children { - padding-right: 20px; - position: relative; - - &.active { - .docs-submenu { - display: block; - } - - & > .docs-submenu-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } + color: inherit; + margin-bottom: 0.625rem; + + &.has-children { + padding-right: 30px; + position: relative; + + &.active { + .docs-submenu { + display: block; + } + + & > .docs-submenu-toggle { + .icon-angle-right { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + } } + } } #page-nav { - text-overflow: wrap; + display: none; - .page-nav-title { - font-size: 1em; - margin: 0 0 0.625em; - } + .page-nav-title { + font-size: 1em; + margin: 0 0 0.625em; + } + + ul { + font-size: 0.875rem; + line-height: 1.5; + list-style: none; + padding: 0; ul { - font-size: 0.875rem; - line-height: 1.5; - list-style: none; - padding: 0; - - ul { - border-left: 1px solid $gray-300; - margin-top: 0.625rem; - padding-left: 1.25rem; - } + border-left: 1px solid $gray-300; + margin-top: 0.625rem; + padding-left: 1.25rem; } + } - li { - margin-bottom: 0.625rem; + li { + margin-bottom: 0.625rem; - &.active > a { - color: $color-primary; - } + &.active > a { + color: $color-primary; } + } - a { - color: $gray-600; - display: block; - text-decoration: none; + a { + color: $gray-600; + display: block; + text-decoration: none; - &:hover { - color: $color-primary; - } + &:hover { + color: $color-primary; } + } - .page-nav-title { - &:only-child { - display: none; - } + .page-nav-inside { + display: none; + + &.has-links { + display: block; } + } } -@media only screen and (min-width: 1200px) { - .post { - &.type-docs { - .post-title, - .post-content { - padding-left: 8%; - padding-right: 7%; - } - } +@media only screen and (min-width: 641px) { + .post { + &.type-docs { + .post-title, + .post-content { + padding-left: 7%; + padding-right: 7%; + } } + } } -@media only screen and (min-width: 1200px) { - .docs-content { - display: -ms-flexbox; - display: flex; - padding-top: 4em; - width: 94%; - } - - .post.type-docs { - -ms-flex: 1 1 auto; - align-content: center; - } - - .docs-nav, - .page-nav { - -ms-flex-negative: 0; - margin-bottom: 5.625em; - - .sticky { - position: -webkit-sticky; - position: sticky; - top: 1.875em; - } +@media only screen and (min-width: 801px) { + .docs-content { + display: -ms-flexbox; + display: flex; + padding-top: 3.75em; + } + + .post.type-docs { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + overflow: hidden; + } + + .docs-nav, + .page-nav { + -ms-flex-negative: 0; + flex-shrink: 0; + margin-bottom: 5.625em; + + .sticky { + position: -webkit-sticky; + position: sticky; + top: 1.875em; } + } - .docs-nav { - width: 0.5em; - } + .docs-nav { + padding-right: 1.5em; + width: 12.5em; + } - #page-nav { - font-size: 12px; - margin: 4em; - } + #page-nav { + padding-left: 1.5em; + width: 9.5em; + } - #docs-nav-toggle { - display: none; - } + #docs-nav-toggle { + display: none; + } } @media only screen and (min-width: 1091px) { - #page-nav { - display: block; - } + #page-nav { + display: block; + } } @media only screen and (max-width: 800px) { - .docs-nav { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius; - box-shadow: $box-shadow; - box-sizing: border-box; - margin-bottom: 5%; - padding: 1em 1em; - } + .docs-nav { + background: #fff; + border: 1px solid $gray-300; + border-radius: $border-radius; + box-shadow: $box-shadow; + box-sizing: border-box; + margin-bottom: 5%; + padding: 0.75em 1em; + } + + .docs-nav-menu { + display: none; + } + .docs-menu--opened { .docs-nav-menu { - display: none; + display: block; } - .docs-menu--opened { - .docs-nav-menu { - display: block; - } - - .docs-nav-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } + .docs-nav-toggle { + .icon-angle-right { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); + } } + } - #docs-menu { - border-top: 1px solid $gray-300; - margin-top: 1.25em; - padding-top: 1.25em; - } + #docs-menu { + border-top: 1px solid $gray-300; + margin-top: 1.25em; + padding-top: 1.25em; + } } + diff --git a/src/sass/imports/_footer.scss b/src/sass/imports/_footer.scss index 9db47f09a9..6f4ab15edd 100644 --- a/src/sass/imports/_footer.scss +++ b/src/sass/imports/_footer.scss @@ -1,94 +1,94 @@ .site-footer { - background-color: black; - background-image: url('https://i.imgur.com/CEYEZp8.jpeg'); - padding-bottom: 7.5em; - padding-top: 8.5em; - color: white !important; - border: 4px solid black; + background-color: black; + background-image: url('https://i.imgur.com/CEYEZp8.jpeg'); + padding-bottom: 7.5em; + padding-top: 8.5em; + color: white !important; + border: 4px solid black; } #colophon { - a:not(.button) { - color: inherit; + a:not(.button) { + color: inherit; - &:hover, - &:focus { - color: $color-primary; - } + &:hover, + &:focus { + color: $color-primary; + } } } .site-info, .social-links { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-pack: center; - justify-content: center; - font-size: 0.675em; - line-height: 1.2; + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: center; + justify-content: center; + font-size: 0.675em; + line-height: 1.2; - .button:not(.button-icon) { - font-size: inherit; - line-height: 1.2; - padding: 0.3em 1em; - } + .button:not(.button-icon) { + font-size: inherit; + line-height: 1.2; + padding: 0.3em 1em; + } } .site-info { - margin: 0.25em 0 0; - text-align: center; + margin: 0.25em 0 0; + text-align: center; - .copyright, - > a { - margin: 0 4px 0.2em 0; - } + .copyright, + >a { + margin: 0 4px 0.2em 0; + } } .social-links { - margin-top: 0.5375em; + margin-top: 0.5375em; - a { - margin: 0 50px 0.2em; - } + a { + margin: 0 50px 0.2em; + } - .icon { - font-size: 20px; - color: rgb(0, 0, 0); - background-color: rgb(0, 0, 0); - } + .icon { + font-size: 20px; + color: rgb(0, 0, 0); + background-color: rgb(0, 0, 0); + } } @media only screen and (min-width: 641px) { - .site-footer-inside { - -ms-flex-align: start; - align-items: flex-start; - display: -ms-flexbox; - display: flex; - } + .site-footer-inside { + -ms-flex-align: start; + align-items: flex-start; + display: -ms-flexbox; + display: flex; + } - .site-info { - -ms-flex-pack: start; - justify-content: flex-start; - text-align: left; - } + .site-info { + -ms-flex-pack: start; + justify-content: flex-start; + text-align: left; + } - .social-links { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - margin-left: auto; - margin-top: 0; + .social-links { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + margin-left: auto; + margin-top: 0; - a { - margin-left: 20px; - margin-right: 0; - } + a { + margin-left: 20px; + margin-right: 0; + } } } diff --git a/src/sass/imports/_forms.scss b/src/sass/imports/_forms.scss index 689f68c032..d03cf35dae 100644 --- a/src/sass/imports/_forms.scss +++ b/src/sass/imports/_forms.scss @@ -1,16 +1,16 @@ label { - color: $gray-700; - font-weight: bold; - line-height: 1.5; - margin-bottom: 0.25em; + color: $gray-700; + font-weight: bold; + line-height: 1.5; + margin-bottom: 0.25em; - input[type='checkbox'] + &, - input[type='radio'] + & { - font-weight: normal; - cursor: pointer; - padding-left: 0.25em; - padding-right: 1em; - } + input[type='checkbox']+&, + input[type='radio']+& { + font-weight: normal; + cursor: pointer; + padding-left: 0.25em; + padding-right: 1em; + } } input[type='text'], @@ -22,34 +22,34 @@ input[type='search'], input[type='url'], select, textarea { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius-sm; - box-shadow: none; - box-sizing: border-box; - color: $gray-700; - display: block; - font-size: 1em; - font-weight: normal; - line-height: 1.5; - max-width: 100%; - padding: 0.5em; - width: 100%; + background: #fff; + border: 1px solid $gray-300; + border-radius: $border-radius-sm; + box-shadow: none; + box-sizing: border-box; + color: $gray-700; + display: block; + font-size: 1em; + font-weight: normal; + line-height: 1.5; + max-width: 100%; + padding: 0.5em; + width: 100%; - &:focus { - outline: 0; - } + &:focus { + outline: 0; + } } ::placeholder { - color: $gray-400; - opacity: 1; + color: $gray-400; + opacity: 1; } .form-row { - margin-bottom: 1em; + margin-bottom: 1em; } .form-submit { - margin-top: 1.66667em; + margin-top: 1.66667em; } diff --git a/src/sass/imports/_functions.scss b/src/sass/imports/_functions.scss index a0e86db462..6b80e55055 100644 --- a/src/sass/imports/_functions.scss +++ b/src/sass/imports/_functions.scss @@ -1,7 +1,18 @@ // Gets a value from a map. @function map-deep-get($map, $keys...) { - @each $key in $keys { - $map: map-get($map, $key); - } - @return $map; + @each $key in $keys { + $map: map-get($map, $key); + } + @return $map; } + + +//----------------experimental------------------ + + + + + + + + diff --git a/src/sass/imports/_general.scss b/src/sass/imports/_general.scss index a0422eab4e..c761a6c820 100644 --- a/src/sass/imports/_general.scss +++ b/src/sass/imports/_general.scss @@ -1,67 +1,38 @@ html { font-family: $font-primary; font-size: 100%; + scroll-behavior: smooth; +} + +iframe { + overflow: scroll; + resize: both; + border: #000 1px dashed; + padding: 10px; + box-shadow: inset 0 0 2px #000; } body { background: $gray-100; color: $gray-600; - line-height: 1.425; + line-height: 1.625; text-rendering: optimizeLegibility; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; - overflow: scroll; } a { color: $color-primary; text-decoration: underline; + -webkit-transition: color 0.3s ease; - transition: color 0.4s ease-out; + transition: color 0.3s ease; &:hover { color: $gray-600; } } -#social-embed { - // position: absolute !important; - // right: 50px !important; - bottom: 120px !important; - width: 100% !important; - width: 1000px !important; - box-shadow: inset 0px 5px 3px -10px black, inset 0px -11px 8px -10px black; - margin: 0 auto !important; - height: 400px !important; - overflow: scroll !important; - border: 1px dotted black; - // z-index: -1; -} - -iframe { - overflow-y: scroll; - overflow-x: scroll; - border-radius: 12px; - border: 1px dotted black; - height: 1200px; - box-shadow: inset 0px 4px 4px -10px black, inset 0px -11px 8px -10px black; - width: 1000px; - resize: both !important; - overflow: scroll; -} - -code { - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; -} - -pre { - -webkit-box-shadow: 0 1px 4px rgba(155, 155, 155, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; - -moz-box-shadow: 0 1px 4px rgba(124, 124, 124, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; - box-shadow: 0 1px 4px rgba(184, 137, 137, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; -} - h1, h2, h3, @@ -79,6 +50,10 @@ h6 { } } +.save2PDF { + font-size: x-large; +} + h1 { font-size: 2em; } @@ -121,7 +96,7 @@ pre { color: $gray-100; font-size: 0.875em; line-height: 1.5; - margin: 1.14286em 0; + margin: 2.14286em 0; overflow: auto; padding: 1.5em; text-align: left; @@ -135,7 +110,7 @@ pre { } } -:not(pre) > code { +:not(pre)>code { background: $gray-200; border-radius: $border-radius-sm; color: $gray-600; @@ -195,8 +170,8 @@ ol { padding: 0 0 0 1.5em; } -li > ul, -li > ol { +li>ul, +li>ol { margin-bottom: 0; } @@ -211,17 +186,33 @@ hr { } } +embed, +iframe, +object, +video { + max-width: 100%; +} + +div.wrapper:hover img:not(:hover) { + Filter: brightness(50%); +} + img { height: auto; max-width: 100%; - border-radius: 10px; + scroll-snap-align: center; +} - :not(.site-logo) { - box-shadow: inset 10px 10px 50px #fff; - } +img:hover { + Filter: brightness(110%); } -@media only screen and (min-width: 741px) { +figure { + overflow: auto; + scroll-snap-type: inline mandatory; +} + +@media only screen and (min-width: 641px) { blockquote { font-size: 1.5em; line-height: 1.3; @@ -252,1630 +243,380 @@ img { } } -/****************PRISM*****************************************/ - -code[class*='language-'], -pre[class*='language-'] { - color: #fff; - background: 0 0; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - font-size: 1em; - text-align: left; - text-shadow: 0 -0.1em 0.2em #000; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -:not(pre) > code[class*='language-'], -pre[class*='language-'] { - background: #141414; -} - -pre[class*='language-'] { - border-radius: 0.5em; - border: 0.3em solid #545454; - box-shadow: 1px 1px 0.5em #000 inset; - margin: 0.5em 0; - overflow: auto; - padding: 1em; -} - -pre[class*='language-']::-moz-selection { - background: #27292a; -} - -pre[class*='language-']::selection { - background: #27292a; -} - -code[class*='language-'] ::-moz-selection, -code[class*='language-']::-moz-selection, -pre[class*='language-'] ::-moz-selection, -pre[class*='language-']::-moz-selection { - text-shadow: none; - background: hsla(0, 0%, 93%, 0.15); -} - -code[class*='language-'] ::selection, -code[class*='language-']::selection, -pre[class*='language-'] ::selection, -pre[class*='language-']::selection { - text-shadow: none; - background: hsla(0, 0%, 93%, 0.15); -} - -:not(pre) > code[class*='language-'] { - border-radius: 0.3em; - border: 0.13em solid #545454; - box-shadow: 1px 1px 0.3em -0.1em #000 inset; - padding: 0.15em 0.2em 0.05em; - white-space: normal; -} - -.token.cdata, -.token.comment, -.token.doctype, -.token.prolog { - color: #777; -} - -.token.punctuation { - opacity: 0.7; -} - -.token.namespace { - opacity: 0.7; -} - -.token.boolean, -.token.deleted, -.token.number, -.token.tag { - color: #ce6849; +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% } -.token.builtin, -.token.constant, -.token.keyword, -.token.property, -.token.selector, -.token.symbol { - color: #f9ed99; +body { + margin: 0 +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline } -.language-css .token.string, -.style .token.string, -.token.attr-name, -.token.attr-value, -.token.char, -.token.entity, -.token.inserted, -.token.operator, -.token.string, -.token.url, -.token.variable { - color: #909e6a; +audio:not([controls]) { + display: none; + height: 0 } -.token.atrule { - color: #7385a5; +[hidden], +template { + display: none } -.token.important, -.token.regex { - color: #e8c062; +a { + background-color: transparent } -.token.bold, -.token.important { - font-weight: 700; +a:active, +a:hover { + outline: 0 } -.token.italic { - font-style: italic; +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted } -.token.entity { - cursor: help; +b, +strong { + font-weight: bold } -.language-markup .token.attr-name, -.language-markup .token.punctuation, -.language-markup .token.tag { - color: #ac885c; +dfn { + font-style: italic } -.token { - position: relative; - z-index: 1; -} - -.line-highlight.line-highlight { - background: hsla(0, 0%, 33%, 0.25); - background: linear-gradient(to right, hsla(0, 0%, 33%, 0.1) 70%, hsla(0, 0%, 33%, 0)); - border-bottom: 1px dashed #545454; - border-top: 1px dashed #545454; - margin-top: 0.75em; - z-index: 0; -} - -.line-highlight.line-highlight:before, -.line-highlight.line-highlight[data-end]:after { - background-color: #8693a6; - color: #f4f1ef; -} - -/**********************Algolia CSS*********************/ - -/*! @algolia/autocomplete-theme-classic 1.5.0 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ -:root { - --aa-search-input-height: 44px; - --aa-input-icon-size: 20px; - --aa-base-unit: 16; - --aa-spacing-factor: 1; - --aa-spacing: calc(var(--aa-base-unit) * var(--aa-spacing-factor) * 1px); - --aa-spacing-half: calc(var(--aa-spacing) / 2); - --aa-panel-max-height: 650px; - --aa-base-z-index: 9999; - --aa-font-size: calc(var(--aa-base-unit) * 1px); - --aa-font-family: inherit; - --aa-font-weight-medium: 500; - --aa-font-weight-semibold: 600; - --aa-font-weight-bold: 700; - --aa-icon-size: 20px; - --aa-icon-stroke-width: 1.6; - --aa-icon-color-rgb: 119, 119, 163; - --aa-icon-color-alpha: 1; - --aa-action-icon-size: 20px; - --aa-text-color-rgb: 38, 38, 39; - --aa-text-color-alpha: 1; - --aa-primary-color-rgb: 62, 52, 211; - --aa-primary-color-alpha: 0.2; - --aa-muted-color-rgb: 128, 126, 163; - --aa-muted-color-alpha: 0.6; - --aa-panel-border-color-rgb: 128, 126, 163; - --aa-panel-border-color-alpha: 0.3; - --aa-input-border-color-rgb: 128, 126, 163; - --aa-input-border-color-alpha: 0.8; - --aa-background-color-rgb: 255, 255, 255; - --aa-background-color-alpha: 1; - --aa-input-background-color-rgb: 255, 255, 255; - --aa-input-background-color-alpha: 1; - --aa-selected-color-rgb: 179, 173, 214; - --aa-selected-color-alpha: 0.205; - --aa-description-highlight-background-color-rgb: 245, 223, 77; - --aa-description-highlight-background-color-alpha: 0.5; - --aa-detached-media-query: (max-width: 680px); - --aa-detached-modal-media-query: (min-width: 680px); - --aa-detached-modal-max-width: 680px; - --aa-detached-modal-max-height: 500px; - --aa-overlay-color-rgb: 115, 114, 129; - --aa-overlay-color-alpha: 0.4; - --aa-panel-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), 0 6px 16px -4px rgba(35, 38, 59, 0.15); - --aa-scrollbar-width: 13px; - --aa-scrollbar-track-background-color-rgb: 234, 234, 234; - --aa-scrollbar-track-background-color-alpha: 1; - --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb); - --aa-scrollbar-thumb-background-color-alpha: 1; -} - -@media (hover: none) and (pointer: coarse) { - :root { - --aa-spacing-factor: 1.2; - --aa-action-icon-size: 22px; - } +h1 { + font-size: 2em; + margin: 0.67em 0 } -body.dark, -body[data-theme='dark'] { - --aa-text-color-rgb: 183, 192, 199; - --aa-primary-color-rgb: 146, 138, 255; - --aa-muted-color-rgb: 146, 138, 255; - --aa-input-background-color-rgb: 0, 3, 9; - --aa-background-color-rgb: 21, 24, 42; - --aa-selected-color-rgb: 146, 138, 255; - --aa-selected-color-alpha: 0.25; - --aa-description-highlight-background-color-rgb: 0 255 255; - --aa-description-highlight-background-color-alpha: 0.25; - --aa-icon-color-rgb: 119, 119, 163; - --aa-panel-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309; - --aa-scrollbar-track-background-color-rgb: 44, 46, 64; - --aa-scrollbar-thumb-background-color-rgb: var(--aa-background-color-rgb); -} - -.aa-Autocomplete *, -.aa-DetachedFormContainer *, -.aa-Panel * { - box-sizing: border-box; +mark { + background: #ff0; + color: #000 } -.aa-Autocomplete, -.aa-DetachedFormContainer, -.aa-Panel { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-family: inherit; - font-family: var(--aa-font-family); - font-size: 16px; - font-size: var(--aa-font-size); - font-weight: 400; - line-height: 1em; - margin: 0; - padding: 0; - text-align: left; +small { + font-size: 80% } -.aa-Form { - align-items: center; - background-color: #fff; - background-color: rgba(var(--aa-input-background-color-rgb), var(--aa-input-background-color-alpha)); - border: 1px solid rgba(128, 126, 163, 0.8); - border: 1px solid rgba(var(--aa-input-border-color-rgb), var(--aa-input-border-color-alpha)); - border-radius: 3px; - display: flex; - line-height: 1em; - margin: 0; +sub, +sup { + font-size: 75%; + line-height: 0; position: relative; - width: 100%; -} - -.aa-Form[focus-within] { - border-color: #3e34d3; - border-color: rgba(var(--aa-primary-color-rgb), 1); - box-shadow: 0 0 0 2px rgba(62, 52, 211, 0.2), inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor; + vertical-align: baseline } -.aa-Form:focus-within { - border-color: #3e34d3; - border-color: rgba(var(--aa-primary-color-rgb), 1); - box-shadow: 0 0 0 2px rgba(62, 52, 211, 0.2), inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor; +sup { + top: -0.5em } -.aa-InputWrapperPrefix { - align-items: center; - display: flex; - flex-shrink: 0; - height: 44px; - height: var(--aa-search-input-height); - order: 1; +sub { + bottom: -0.25em } -.aa-Label, -.aa-LoadingIndicator { - cursor: auto; - flex-shrink: 0; - height: 100%; - padding: 0; - text-align: left; +img { + border: 0 } -.aa-Label svg, -.aa-LoadingIndicator svg { - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); - height: auto; - max-height: 20px; - max-height: var(--aa-input-icon-size); - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); - width: 20px; - width: var(--aa-input-icon-size); -} - -.aa-LoadingIndicator, -.aa-SubmitButton { - height: 100%; - padding-left: 11px; - padding-left: calc(var(--aa-spacing) * 0.75 - 1px); - padding-right: 8px; - padding-right: var(--aa-spacing-half); - width: 47px; - width: calc(var(--aa-spacing) * 1.75 + var(--aa-icon-size) - 1px); -} - -@media (hover: none) and (pointer: coarse) { - .aa-LoadingIndicator, - .aa-SubmitButton { - padding-left: 3px; - padding-left: calc(var(--aa-spacing-half) / 2 - 1px); - width: 39px; - width: calc(var(--aa-icon-size) + var(--aa-spacing) * 1.25 - 1px); - } +svg:not(:root) { + overflow: hidden } -.aa-SubmitButton { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: none; - border: 0; - margin: 0; +figure { + margin: 1em 40px } -.aa-LoadingIndicator { - align-items: center; - display: flex; - justify-content: center; +hr { + box-sizing: content-box; + height: 0 } -.aa-LoadingIndicator[hidden] { - display: none; +pre { + overflow: auto } -.aa-InputWrapper { - order: 3; - position: relative; - width: 100%; +code, +kbd, +pre, +samp { + font-family: monospace, + monospace; + font-size: 1em } -.aa-Input { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: none; - border: 0; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); +button, +input, +optgroup, +select, +textarea { + color: inherit; font: inherit; - height: 44px; - height: var(--aa-search-input-height); - padding: 0; - width: 100%; + margin: 0 } -.aa-Input::-moz-placeholder { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1; +button { + overflow: visible } -.aa-Input:-ms-input-placeholder { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1; +button, +select { + text-transform: none } -.aa-Input::placeholder { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - opacity: 1; +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer } -.aa-Input:focus { - border-color: none; - box-shadow: none; - outline: none; +button[disabled], +html input[disabled] { + cursor: default } -.aa-Input::-webkit-search-cancel-button, -.aa-Input::-webkit-search-decoration, -.aa-Input::-webkit-search-results-button, -.aa-Input::-webkit-search-results-decoration { - -webkit-appearance: none; - appearance: none; -} - -.aa-InputWrapperSuffix { - align-items: center; - display: flex; - height: 44px; - height: var(--aa-search-input-height); - order: 4; -} - -.aa-ClearButton { - align-items: center; - background: none; +button::-moz-focus-inner, +input::-moz-focus-inner { border: 0; - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - cursor: pointer; - display: flex; - height: 100%; - margin: 0; - padding: 0 12.8333333333px; - padding: 0 calc(var(--aa-spacing) * 0.83333 - 0.5px); + padding: 0 } -@media (hover: none) and (pointer: coarse) { - .aa-ClearButton { - padding: 0 10.1666666667px; - padding: 0 calc(var(--aa-spacing) * 0.66667 - 0.5px); - } +input { + line-height: normal } -.aa-ClearButton:focus, -.aa-ClearButton:hover { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0 } -.aa-ClearButton[hidden] { - display: none; +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto } -.aa-ClearButton svg { - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); - width: 20px; - width: var(--aa-icon-size); +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box } -.aa-Panel { - background-color: #fff; - background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - border-radius: 4px; - border-radius: calc(var(--aa-spacing) / 4); - box-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), 0 6px 16px -4px rgba(35, 38, 59, 0.15); - box-shadow: var(--aa-panel-shadow); - margin: 8px 0 0; - overflow: hidden; - position: absolute; - transition: opacity 0.2s ease-in, filter 0.2s ease-in; +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none } -@media screen and (prefers-reduced-motion) { - .aa-Panel { - transition: none; - } +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em } -.aa-Panel button { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: none; +legend { border: 0; - margin: 0; - padding: 0; + padding: 0 } -.aa-PanelLayout { - height: 100%; - margin: 0; - max-height: 650px; - max-height: var(--aa-panel-max-height); - overflow-y: auto; - padding: 0; - position: relative; - text-align: left; +textarea { + overflow: auto } -.aa-PanelLayoutColumns--twoGolden { - display: grid; - grid-template-columns: 39.2% auto; - overflow: hidden; - padding: 0; +optgroup { + font-weight: bold } -.aa-PanelLayoutColumns--two { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - overflow: hidden; - padding: 0; +table { + border-collapse: collapse; + border-spacing: 0 } -.aa-PanelLayoutColumns--three { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - overflow: hidden; - padding: 0; +td, +th { + padding: 0 } -.aa-Panel--stalled .aa-Source { - filter: grayscale(1); - opacity: 0.8; -} +/*! + Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { -.aa-Panel--scrollable { - margin: 0; - max-height: 650px; - max-height: var(--aa-panel-max-height); - overflow-x: hidden; - overflow-y: auto; - padding: 8px; - padding: var(--aa-spacing-half); - scrollbar-color: #fff #eaeaea; - scrollbar-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)) - rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); - scrollbar-width: thin; -} + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important + } -.aa-Panel--scrollable::-webkit-scrollbar { - width: 13px; - width: var(--aa-scrollbar-width); -} + a, + a:visited { + text-decoration: underline + } -.aa-Panel--scrollable::-webkit-scrollbar-track { - background-color: #eaeaea; - background-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); -} + a[href]:after { + content: " (" + attr(href) ")" + } -.aa-Panel--scrollable::-webkit-scrollbar-thumb { - background-color: #fff; - background-color: rgba(var(--aa-scrollbar-thumb-background-color-rgb), var(--aa-scrollbar-thumb-background-color-alpha)); - border-radius: 9999px; - border: 3px solid #eaeaea; - border-color: rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); - border-right: 2px solid rgba(var(--aa-scrollbar-track-background-color-rgb), var(--aa-scrollbar-track-background-color-alpha)); -} + abbr[title]:after { + content: " ("attr(title) ")" + } -.aa-Source { - margin: 0; - padding: 0; - position: relative; - width: 100%; -} + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: "" + } -.aa-Source:empty { - display: none; -} + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid + } -.aa-SourceNoResults { - font-size: 1em; - margin: 0; - padding: 16px; - padding: var(--aa-spacing); -} + thead { + display: table-header-group + } -.aa-List { - list-style: none; - margin: 0; -} + tr, + img { + page-break-inside: avoid + } -.aa-List, -.aa-SourceHeader { - padding: 0; - position: relative; -} + img { + max-width: 100% !important + } -.aa-SourceHeader { - margin: 8px 0.5em 8px 0; - margin: var(--aa-spacing-half) 0.5em var(--aa-spacing-half) 0; -} + p, + h2, + h3 { + orphans: 3; + widows: 3 + } -.aa-SourceHeader:empty { - display: none; + h2, + h3 { + page-break-after: avoid + } } -.aa-SourceHeaderTitle { - background: #fff; - background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); - display: inline-block; - font-size: 0.8em; - font-weight: 600; - font-weight: var(--aa-font-weight-semibold); - margin: 0; - padding: 0 8px 0 0; - padding: 0 var(--aa-spacing-half) 0 0; - position: relative; - z-index: 9999; - z-index: var(--aa-base-z-index); +html, +body { + min-height: 100%; } -.aa-SourceHeaderLine { - border-bottom: 1px solid #3e34d3; - border-bottom: 1px solid rgba(var(--aa-primary-color-rgb), 1); - display: block; - height: 2px; - left: 0; +body { margin: 0; - opacity: 0.3; - padding: 0; - position: absolute; - right: 0; - top: 8px; - top: var(--aa-spacing-half); - z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1); -} - -.aa-SourceFooterSeeAll { - background: linear-gradient(180deg, #fff, rgba(128, 126, 163, 0.14)); - background: linear-gradient(180deg, rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)), rgba(128, 126, 163, 0.14)); - border: 1px solid rgba(128, 126, 163, 0.6); - border: 1px solid rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - border-radius: 5px; - box-shadow: inset 0 0 2px #fff, 0 2px 2px -1px rgba(76, 69, 88, 0.15); - color: inherit; - font-size: 0.95em; - font-weight: 500; - font-weight: var(--aa-font-weight-medium); - padding: 0.475em 1em 0.6em; - text-decoration: none; -} - -.aa-SourceFooterSeeAll:focus, -.aa-SourceFooterSeeAll:hover { - border: 1px solid #3e34d3; - border: 1px solid rgba(var(--aa-primary-color-rgb), 1); - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); -} - -.aa-Item { - align-items: center; - border-radius: 3px; - cursor: pointer; - display: grid; - min-height: 40px; - min-height: calc(var(--aa-spacing) * 2.5); - padding: 4px; - padding: calc(var(--aa-spacing-half) / 2); -} - -.aa-Item[aria-selected='true'] { - background-color: rgba(179, 173, 214, 0.205); - background-color: rgba(var(--aa-selected-color-rgb), var(--aa-selected-color-alpha)); -} - -.aa-Item[aria-selected='true'] .aa-ActiveOnly, -.aa-Item[aria-selected='true'] .aa-ItemActionButton { - visibility: visible; -} - -.aa-ItemIcon { - align-items: center; - background: #fff; - background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - border-radius: 3px; - box-shadow: inset 0 0 0 1px rgba(128, 126, 163, 0.3); - box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); - color: #7777a3; - color: rgba(var(--aa-icon-color-rgb), var(--aa-icon-color-alpha)); - display: flex; - flex-shrink: 0; - font-size: 0.7em; - height: 28px; - height: calc(var(--aa-icon-size) + var(--aa-spacing-half)); - justify-content: center; - overflow: hidden; - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); - text-align: center; - width: 28px; - width: calc(var(--aa-icon-size) + var(--aa-spacing-half)); -} - -.aa-ItemIcon img { - height: auto; - max-height: 20px; - max-height: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); - max-width: 20px; - max-width: calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px); - width: auto; -} - -.aa-ItemIcon svg { - height: 20px; - height: var(--aa-icon-size); - width: 20px; - width: var(--aa-icon-size); -} - -.aa-ItemIcon--alignTop { - align-self: flex-start; -} - -.aa-ItemIcon--noBorder { - background: none; - box-shadow: none; -} - -.aa-ItemIcon--picture { - height: 96px; - width: 96px; -} - -.aa-ItemIcon--picture img { - max-height: 100%; - max-width: 100%; - padding: 8px; - padding: var(--aa-spacing-half); -} - -.aa-ItemContent { - align-items: center; - cursor: pointer; - display: grid; - grid-gap: 8px; - gap: 8px; - grid-gap: var(--aa-spacing-half); - gap: var(--aa-spacing-half); - grid-auto-flow: column; - line-height: 1.25em; - overflow: hidden; -} - -.aa-ItemContent:empty { - display: none; -} - -.aa-ItemContent mark { - background: none; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-style: normal; - font-weight: 700; - font-weight: var(--aa-font-weight-bold); -} - -.aa-ItemContent--dual { - display: flex; - flex-direction: column; - justify-content: space-between; - text-align: left; -} - -.aa-ItemContent--dual .aa-ItemContentSubtitle, -.aa-ItemContent--dual .aa-ItemContentTitle { - display: block; -} - -.aa-ItemContent--indented { - padding-left: 36px; - padding-left: calc(var(--aa-icon-size) + var(--aa-spacing)); -} - -.aa-ItemContentBody { - display: grid; - grid-gap: 4px; - gap: 4px; - grid-gap: calc(var(--aa-spacing-half) / 2); - gap: calc(var(--aa-spacing-half) / 2); -} - -.aa-ItemContentTitle { - display: inline-block; - margin: 0 0.5em 0 0; - max-width: 100%; - overflow: hidden; - padding: 0; - text-overflow: ellipsis; - white-space: nowrap; -} - -.aa-ItemContentSubtitle { - font-size: 0.92em; -} - -.aa-ItemContentSubtitleIcon:before { - border-color: rgba(128, 126, 163, 0.64); - border-color: rgba(var(--aa-muted-color-rgb), 0.64); - border-style: solid; - content: ''; - display: inline-block; - left: 1px; - position: relative; - top: -3px; -} - -.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before { - border-width: 0 0 1.5px; - margin-left: 8px; - margin-left: var(--aa-spacing-half); - margin-right: 4px; - margin-right: calc(var(--aa-spacing-half) / 2); - width: 10px; - width: calc(var(--aa-spacing-half) + 2px); -} - -.aa-ItemContentSubtitle--standalone { - align-items: center; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - display: grid; - grid-gap: 8px; - gap: 8px; - grid-gap: var(--aa-spacing-half); - gap: var(--aa-spacing-half); - grid-auto-flow: column; - justify-content: start; -} - -.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before { - border-radius: 0 0 0 3px; - border-width: 0 0 1.5px 1.5px; - height: 8px; - height: var(--aa-spacing-half); - width: 8px; - width: var(--aa-spacing-half); -} - -.aa-ItemContentSubtitleCategory { - color: #807ea3; - color: rgba(var(--aa-muted-color-rgb), 1); - font-weight: 500; -} - -.aa-ItemContentDescription { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-size: 0.85em; - max-width: 100%; - overflow-x: hidden; - text-overflow: ellipsis; } - -.aa-ItemContentDescription:empty { - display: none; +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; } -.aa-ItemContentDescription mark { - background: rgba(245, 223, 77, 0.5); - background: rgba(var(--aa-description-highlight-background-color-rgb), var(--aa-description-highlight-background-color-alpha)); - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - font-style: normal; - font-weight: 500; - font-weight: var(--aa-font-weight-medium); -} - -.aa-ItemContentDash { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - display: none; - opacity: 0.4; -} - -.aa-ItemContentTag { - background-color: rgba(62, 52, 211, 0.2); - background-color: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)); - border-radius: 3px; - margin: 0 0.4em 0 0; - padding: 0.08em 0.3em; -} - -.aa-ItemLink, -.aa-ItemWrapper { - align-items: center; - color: inherit; - display: grid; - grid-gap: 4px; - gap: 4px; - grid-gap: calc(var(--aa-spacing-half) / 2); - gap: calc(var(--aa-spacing-half) / 2); - grid-auto-flow: column; - justify-content: space-between; - width: 100%; -} - -.aa-ItemLink { - color: inherit; - text-decoration: none; -} +html { + --font-mono: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", + "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", + "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, + monospace; + --ff-rounded: "Nunito", sans-serif; + --ff-gothic: "AlternateGothicPro-No1", system-ui, sans-serif; -.aa-ItemActions { - display: grid; - grid-auto-flow: column; - height: 100%; - justify-self: end; - margin: 0 -5.3333333333px; - margin: 0 calc(var(--aa-spacing) / -3); - padding: 0 2px 0 0; -} + --color-light: #f3f4f6; -.aa-ItemActionButton { - align-items: center; - background: none; - border: 0; - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - cursor: pointer; - display: flex; - flex-shrink: 0; - padding: 0; -} + font-family: var(--ff-rounded); + line-height: 1.5; + font-size: 1rem; + --user-font-scale: 1rem - 16px; -.aa-ItemActionButton:focus svg, -.aa-ItemActionButton:hover svg { - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); + background: #130931; + background: linear-gradient(180deg, #18083c 0%, #58359c 100%); + color: white; } -@media (hover: none) and (pointer: coarse) { - .aa-ItemActionButton:focus svg, - .aa-ItemActionButton:hover svg { - color: inherit; - } -} -.aa-ItemActionButton svg { - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - margin: 5.3333333333px; - margin: calc(var(--aa-spacing) / 3); - stroke-width: 1.6; - stroke-width: var(--aa-icon-stroke-width); +::-webkit-scrollbar { width: 20px; - width: var(--aa-action-icon-size); -} - -.aa-ActiveOnly { - visibility: hidden; -} - -.aa-PanelHeader { - align-items: center; - background: #3e34d3; - background: rgba(var(--aa-primary-color-rgb), 1); - color: #fff; - display: grid; - height: var(--aa-modal-header-height); - margin: 0; - padding: 8px 16px; - padding: var(--aa-spacing-half) var(--aa-spacing); - position: relative; + height: 5px; } -.aa-PanelHeader:after { - background-image: linear-gradient(#fff, rgba(255, 255, 255, 0)); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); - bottom: -8px; - bottom: calc(var(--aa-spacing-half) * -1); - content: ''; - height: 8px; - height: var(--aa-spacing-half); - left: 0; - pointer-events: none; - position: absolute; - right: 0; -} - -.aa-PanelFooter, -.aa-PanelHeader:after { - z-index: 9999; - z-index: var(--aa-base-z-index); -} - -.aa-PanelFooter { - background-color: #fff; - background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - box-shadow: inset 0 1px 0 rgba(128, 126, 163, 0.3); - box-shadow: inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); - display: flex; - justify-content: space-between; - margin: 0; - padding: 16px; - padding: var(--aa-spacing); - position: relative; -} - -.aa-PanelFooter:after { - background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(128, 126, 163, 0.6)); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha))); - content: ''; - height: 16px; - height: var(--aa-spacing); - left: 0; - opacity: 0.12; - pointer-events: none; - position: absolute; - right: 0; - top: -16px; - top: calc(var(--aa-spacing) * -1); - z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1); -} - -.aa-DetachedContainer { - background: #fff; - background: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - bottom: 0; - box-shadow: 0 0 0 1px rgba(35, 38, 59, 0.1), 0 6px 16px -4px rgba(35, 38, 59, 0.15); - box-shadow: var(--aa-panel-shadow); - display: flex; - flex-direction: column; - left: 0; - margin: 0; - overflow: hidden; - padding: 0; - position: fixed; - right: 0; - top: 0; - z-index: 9999; - z-index: var(--aa-base-z-index); -} - -.aa-DetachedContainer:after { - height: 32px; -} - -.aa-DetachedContainer .aa-SourceHeader { - margin: 8px 0 8px 2px; - margin: var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px; +::-webkit-scrollbar-thumb { + background: linear-gradient(to bottom, #f1a195, #b475dc); + border-radius: 10px; } -.aa-DetachedContainer .aa-Panel { - background-color: #fff; - background-color: rgba(var(--aa-background-color-rgb), var(--aa-background-color-alpha)); - border-radius: 0; - box-shadow: none; - flex-grow: 1; - margin: 0; - padding: 0; - position: relative; +::-webkit-scrollbar-track { + background: #43346e; + box-shadow: inset 1px 0 10px rgba(black, 0.5); } -.aa-DetachedContainer .aa-PanelLayout { - bottom: 0; - box-shadow: none; - left: 0; - margin: 0; - max-height: none; - overflow-y: auto; - position: absolute; - right: 0; - top: 0; +[style*="--aspect-ratio"]> :first-child { width: 100%; } -.aa-DetachedFormContainer { - border-bottom: 1px solid rgba(128, 126, 163, 0.3); - border-bottom: 1px solid rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); - display: flex; - flex-direction: row; - justify-content: space-between; - margin: 0; - padding: 8px; - padding: var(--aa-spacing-half); -} - -.aa-DetachedCancelButton { - background: none; - border: 0; - border-radius: 3px; - color: inherit; - color: #262627; - color: rgba(var(--aa-text-color-rgb), var(--aa-text-color-alpha)); - cursor: pointer; - font: inherit; - margin: 0 0 0 8px; - margin: 0 0 0 var(--aa-spacing-half); - padding: 0 8px; - padding: 0 var(--aa-spacing-half); -} - -.aa-DetachedCancelButton:focus, -.aa-DetachedCancelButton:hover { - box-shadow: inset 0 0 0 1px rgba(128, 126, 163, 0.3); - box-shadow: inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb), var(--aa-panel-border-color-alpha)); -} - -.aa-DetachedContainer--modal { - border-radius: 6px; - bottom: inherit; +[style*="--aspect-ratio"]>img { height: auto; - margin: 0 auto; - max-width: 680px; - max-width: var(--aa-detached-modal-max-width); - position: absolute; - top: 3%; -} - -.aa-DetachedContainer--modal .aa-PanelLayout { - max-height: 500px; - max-height: var(--aa-detached-modal-max-height); - padding-bottom: 8px; - padding-bottom: var(--aa-spacing-half); - position: static; -} - -.aa-DetachedSearchButton { - align-items: center; - background-color: #fff; - background-color: rgba(var(--aa-input-background-color-rgb), var(--aa-input-background-color-alpha)); - border: 1px solid rgba(128, 126, 163, 0.8); - border: 1px solid rgba(var(--aa-input-border-color-rgb), var(--aa-input-border-color-alpha)); - border-radius: 3px; - color: rgba(128, 126, 163, 0.6); - color: rgba(var(--aa-muted-color-rgb), var(--aa-muted-color-alpha)); - cursor: pointer; - display: flex; - font: inherit; - font-family: inherit; - font-family: var(--aa-font-family); - font-size: 16px; - font-size: var(--aa-font-size); - height: 44px; - height: var(--aa-search-input-height); - margin: 0; - padding: 0 5.5px; - padding: 0 calc(var(--aa-search-input-height) / 8); - position: relative; - text-align: left; - width: 100%; -} - -.aa-DetachedSearchButton:focus { - border-color: #3e34d3; - border-color: rgba(var(--aa-primary-color-rgb), 1); - box-shadow: 0 0 0 3px rgba(62, 52, 211, 0.2), inset 0 0 0 2px rgba(62, 52, 211, 0.2); - box-shadow: rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 3px, - inset rgba(var(--aa-primary-color-rgb), var(--aa-primary-color-alpha)) 0 0 0 2px; - outline: medium none currentColor; -} - -.aa-DetachedSearchButtonIcon { - align-items: center; - color: #3e34d3; - color: rgba(var(--aa-primary-color-rgb), 1); - cursor: auto; - display: flex; - height: 100%; - justify-content: center; - width: 36px; - width: calc(var(--aa-icon-size) + var(--aa-spacing)); -} - -.aa-Detached { - height: 100vh; - overflow: hidden; } -.aa-DetachedOverlay { - background-color: rgba(115, 114, 129, 0.4); - background-color: rgba(var(--aa-overlay-color-rgb), var(--aa-overlay-color-alpha)); - height: 100vh; - left: 0; - margin: 0; - padding: 0; - position: fixed; - right: 0; - top: 0; - z-index: 9998; - z-index: calc(var(--aa-base-z-index) - 1); -} - -.aa-GradientBottom, -.aa-GradientTop { - height: 8px; - height: var(--aa-spacing-half); - left: 0; - pointer-events: none; - position: absolute; - right: 0; - z-index: 9999; - z-index: var(--aa-base-z-index); -} - -.aa-GradientTop { - background-image: linear-gradient(#fff, rgba(255, 255, 255, 0)); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 1), rgba(var(--aa-background-color-rgb), 0)); - top: 0; -} - -.aa-GradientBottom { - background-image: linear-gradient(rgba(255, 255, 255, 0), #fff); - background-image: linear-gradient(rgba(var(--aa-background-color-rgb), 0), rgba(var(--aa-background-color-rgb), 1)); - border-bottom-left-radius: 4px; - border-bottom-left-radius: calc(var(--aa-spacing) / 4); - border-bottom-right-radius: 4px; - border-bottom-right-radius: calc(var(--aa-spacing) / 4); - bottom: 0; -} - -@media (hover: none) and (pointer: coarse) { - .aa-DesktopOnly { - display: none; +@supports (--custom: property) { + [style*="--aspect-ratio"] { + position: relative; } -} -@media (hover: hover) { - .aa-TouchOnly { - display: none; + [style*="--aspect-ratio"]::before { + content: ""; + display: block; + padding-bottom: calc(100% / (var(--aspect-ratio))); } -} - -.aa-Autocomplete, -.aa-Panel, -.aa-DetachedContainer { - --color-mark: #5468ff; - --color-background: #fff; - --color-selected: #f5f5fa; - --color-text: #23263b; - --color-input-icon: #777; - --color-source-icon: rgba(80, 80, 80, 0.32); - --height: 32px; - --height-icon: 16px; - --font-size: 16px; -} - -.aa-Panel { - min-width: 350px; - z-index: 1100; - margin-top: 2px; -} - -.aa-Panel .aa-PanelLayout { - padding-top: 0; - padding-bottom: 0; - background-color: var(--color-background); -} - -.aa-Panel .aa-PanelLayout .aa-PanelLayoutPreview { - border-left: solid 1px var(--color-selected); -} - -.aa-Panel .aa-GradientBottom { - background-image: none; -} - -.aa-Autocomplete .aa-Form, -.aa-DetachedFormContainer .aa-Form { - height: var(--height); - font-size: var(--font-size); - padding: 0; - background-color: var(--color-background); -} - -.aa-Autocomplete .aa-Form:focus-within, -.aa-DetachedFormContainer .aa-Form:focus-within { - box-shadow: none; -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix { - padding: 0; -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label { - padding: 0; -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg { - left: 0; - vertical-align: middle; - color: var(--color-input-icon); - width: var(--height-icon); -} - -.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input { - height: var(--height); - color: var(--color-text); -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix { - height: var(--height); -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton { - padding: 0; -} - -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover, -.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover, -.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus { - color: var(--color-text); -} - -.aa-Item { - color: var(--color-text); - padding: 2px 0; -} - -.aa-Item a { - color: inherit; - text-decoration: none; -} - -.aa-Item[aria-selected='true'] { - background-color: var(--color-selected); -} - -.aa-Item .aa-ItemContent { - display: flex; - color: var(--color-text); -} -.aa-Item .aa-ItemContent mark { - color: var(--color-mark); - background-color: transparent; -} - -.aa-Item .aa-ItemIcon { - align-items: baseline; - color: var(--color-source-icon); - background: none; - box-shadow: none; - margin: 0 var(--aa-spacing-half) 0 2px; -} - -.aa-Item .aa-ItemTitle { - font-size: 14px; - font-weight: bold; - line-height: 18px; -} - -.aa-Item .aa-ItemHierarchy { - font-size: 12px; - font-style: italic; - line-height: 18px; - opacity: 0.8; - padding: 1px 0; -} - -.aa-Item .aa-ItemDescription { - font-size: 12px; - line-height: 16px; - color: #797979; -} - -.aa-DetachedContainer { - background: var(--color-background); -} - -.aa-DetachedContainer .aa-DetachedFormContainer .aa-DetachedCancelButton { - color: var(--color-text); -} - -.aa-DetachedOverlay { - z-index: 10; -} - -.aa-DetachedSearchButton { - background-color: var(--color-background); + [style*="--aspect-ratio"]> :first-child { + position: absolute; + top: 0; + left: 0; + height: 100%; + } } -.aa-DetachedSearchButton .aa-DetachedSearchButtonIcon { - color: var(--color-input-icon); +p { + margin: 0 0 1rem 0; } -.aa-powered-by-link { - display: inline-block; - width: 64px; - height: 18px; - margin-left: 4px; - text-indent: 101%; - overflow: hidden; - white-space: nowrap; - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0ODUgMTIwIj48ZyBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjNTQ2OEZGIiBkPSJNMTYuOC0xLjAwMWg4OC40YzguNyAwIDE1LjggNy4wNjUgMTUuOCAxNS44djg4LjQwNWMwIDguNy03LjA2NSAxNS43OTUtMTUuOCAxNS43OTVIMTYuOGMtOC43IDAtMTUuOC03LjA2LTE1LjgtMTUuNzk1VjE0Ljc1OWMwLTguNjk1IDcuMDYtMTUuNzYgMTUuOC0xNS43NiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik03My41MDUgMjUuNzg4di00LjExNWE1LjIwOSA1LjIwOSAwIDAwLTUuMjEtNS4yMDVINTYuMTVhNS4yMDkgNS4yMDkgMCAwMC01LjIxIDUuMjA1djQuMjI1YzAgLjQ3LjQzNS44LjkxLjY5YTM3Ljk2NiAzNy45NjYgMCAwMTEwLjU3LTEuNDljMy40NjUgMCA2Ljg5NS40NyAxMC4yMSAxLjM4LjQ0LjExLjg3NS0uMjE1Ljg3NS0uNjlNNDAuMjIgMzEuMTczbC0yLjA3NS0yLjA3NWE1LjIwNiA1LjIwNiAwIDAwLTcuMzY1IDBsLTIuNDggMi40NzVhNS4xODUgNS4xODUgMCAwMDAgNy4zNTVsMi4wNCAyLjA0Yy4zMy4zMjUuODA1LjI1IDEuMDk1LS4wNzVhMzkuODc2IDM5Ljg3NiAwIDAxMy45NzUtNC42NiAzNy42OCAzNy42OCAwIDAxNC43LTRjLjM2NC0uMjIuNC0uNzMuMTEtMS4wNm0yMi4xNjQgMTMuMDY1djE3LjhjMCAuNTEuNTUuODc1IDEuMDIuNjJsMTUuODI1LTguMTljLjM2LS4xOC40Ny0uNjIuMjktLjk4LTMuMjgtNS43NTUtOS4zNy05LjY4NS0xNi40MDUtOS45NC0uMzY1IDAtLjczLjI5LS43My42OW0wIDQyLjg4Yy0xMy4xOTUgMC0yMy45MTUtMTAuNzA1LTIzLjkxNS0yMy44OCAwLTEzLjE3NSAxMC43Mi0yMy44NzUgMjMuOTE1LTIzLjg3NSAxMy4yIDAgMjMuOTE2IDEwLjcgMjMuOTE2IDIzLjg3NXMtMTAuNjggMjMuODgtMjMuOTE2IDIzLjg4bTAtNTcuOGMtMTguNzQgMC0zMy45NCAxNS4xOC0zMy45NCAzMy45MiAwIDE4Ljc0NSAxNS4yIDMzLjg5IDMzLjk0IDMzLjg5czMzLjk0LTE1LjE4IDMzLjk0LTMzLjkyNWMwLTE4Ljc0NS0xNS4xNjUtMzMuODg1LTMzLjk0LTMzLjg4NSIvPjxwYXRoIGZpbGw9IiM1NDY4RkYiIGQ9Ik0yNDAuMjE0IDk0LjE3N2MtMjMuMzY1LjExLTIzLjM2NS0xOC44NTUtMjMuMzY1LTIxLjg3NWwtLjA0LTcxLjA0NSAxNC4yNTQtMi4yNnY3MC42MWMwIDEuNzE1IDAgMTIuNTYgOS4xNSAxMi41OTV2MTEuOTc1aC4wMDF6bS01Ny43OC0xMS42MWM0LjM3NCAwIDcuNjItLjI1NSA5Ljg4LS42OVY2Ny4zOTJhMjkuMTk2IDI5LjE5NiAwIDAwLTMuNDMtLjY5NSAzMy43NDIgMzMuNzQyIDAgMDAtNC45NTYtLjM2NWMtMS41NyAwLTMuMTc1LjExLTQuNzc1LjM2NS0xLjYwNS4yMi0zLjA2NS42NTUtNC4zNCAxLjI3NS0xLjI3NS42Mi0yLjMzNSAxLjQ5NS0zLjEgMi42Mi0uOCAxLjEzLTEuMTY1IDEuNzg1LTEuMTY1IDMuNDk1IDAgMy4zNDUgMS4xNjUgNS4yOCAzLjI4IDYuNTUgMi4xMTUgMS4yNzUgNC45OTUgMS45MyA4LjYwNiAxLjkzem0tMS4yNC01MS42ODVjNC43IDAgOC42NzQuNTg1IDExLjg4NCAxLjc1IDMuMjA2IDEuMTY1IDUuNzk2IDIuOCA3LjY5IDQuODc1IDEuOTM1IDIuMTEgMy4yNDUgNC45MTUgNC4wNDYgNy45Ljg0IDIuOTg1IDEuMjQgNi4yNiAxLjI0IDkuODZ2MzYuNjJjLTIuMTg1LjQ3LTUuNTA2IDEuMDE1LTkuOTUgMS42Ny00LjQ0Ni42NTUtOS40NC45ODUtMTQuOTg2Ljk4NS0zLjY4IDAtNy4wNy0uMzY1LTEwLjA5NS0xLjA1NS0zLjA2NS0uNjktNS42NS0xLjgyLTcuODQtMy4zODUtMi4xNS0xLjU2NS0zLjgyNS0zLjU3LTUuMDY1LTYuMDQtMS4yMDUtMi40OC0xLjgyNS01Ljk3LTEuODI1LTkuNjEgMC0zLjQ5NS42OS01LjcxNSAyLjA0NS04LjEyIDEuMzgtMi40IDMuMjQtNC4zNjUgNS41NzUtNS44OTUgMi4zNy0xLjUzIDUuMDY1LTIuNjIgOC4xNjUtMy4yNzUgMy4xLS42NTUgNi4zNDUtLjk4NSA5LjY5NS0uOTg1IDEuNTcgMCAzLjIxLjExIDQuOTYuMjkgMS43MTUuMTg1IDMuNTc1LjUxNSA1LjU0NS45ODV2LTIuMzNjMC0xLjYzNS0uMTg1LTMuMi0uNTg1LTQuNjU1YTEwLjAxMiAxMC4wMTIgMCAwMC0yLjA0NS0zLjg5NWMtLjk4NS0xLjEzLTIuMjU1LTIuMDA1LTMuODYtMi42Mi0xLjYwNS0uNjItMy42NS0xLjA5NS02LjA5LTEuMDk1LTMuMjggMC02LjI3LjQtOS4wMDUuODc1LTIuNzM1LjQ3LTQuOTk1IDEuMDItNi43MSAxLjYzNWwtMS43MS0xMS42OGMxLjc4NS0uNjIgNC40NDUtMS4yNCA3Ljg3NS0xLjg1NSAzLjQyNS0uNjYgNy4xMS0uOTUgMTEuMDQ1LS45NWguMDAxem0yODEuNTEgNTEuMjg1YzQuMzc1IDAgNy42MTUtLjI1NSA5Ljg3NS0uNjk1di0xNC40OGMtLjgtLjIyLTEuOTMtLjQ3NS0zLjQyNS0uNjk1YTMzLjgxMyAzMy44MTMgMCAwMC00Ljk2LS4zNjVjLTEuNTY1IDAtMy4xNy4xMS00Ljc3NS4zNjUtMS42LjIyLTMuMDYuNjU1LTQuMzM1IDEuMjc1LTEuMjguNjItMi4zMzUgMS40OTUtMy4xIDIuNjItLjgwNSAxLjEzLTEuMTY1IDEuNzg1LTEuMTY1IDMuNDk1IDAgMy4zNDUgMS4xNjUgNS4yOCAzLjI4IDYuNTUgMi4xNSAxLjMxIDQuOTk1IDEuOTMgOC42MDUgMS45M3ptLTEuMjA1LTUxLjY0NWM0LjcgMCA4LjY3NC41OCAxMS44ODQgMS43NDUgMy4yMDUgMS4xNjUgNS43OTUgMi44IDcuNjkgNC44NzUgMS44OTUgMi4wNzUgMy4yNDUgNC45MTUgNC4wNDUgNy45Ljg0IDIuOTg1IDEuMjQgNi4yNiAxLjI0IDkuODY1djM2LjYxNWMtMi4xODUuNDctNS41MDUgMS4wMTUtOS45NSAxLjY3NS00LjQ0NS42NTUtOS40NC45OC0xNC45ODUuOTgtMy42OCAwLTcuMDctLjM2NS0xMC4wOTQtMS4wNTUtMy4wNjUtLjY5LTUuNjUtMS44Mi03Ljg0LTMuMzg1LTIuMTUtMS41NjUtMy44MjUtMy41Ny01LjA2NS02LjA0LTEuMjA1LTIuNDc1LTEuODI1LTUuOTctMS44MjUtOS42MSAwLTMuNDk1LjY5NS01LjcxNSAyLjA0NS04LjEyIDEuMzgtMi40IDMuMjQtNC4zNjUgNS41NzUtNS44OTUgMi4zNy0xLjUyNSA1LjA2NS0yLjYyIDguMTY1LTMuMjc1IDMuMS0uNjU1IDYuMzQ1LS45OCA5LjctLjk4IDEuNTY1IDAgMy4yMDUuMTEgNC45NTUuMjlzMy41NzUuNTEgNS41NC45ODV2LTIuMzNjMC0xLjY0LS4xOC0zLjIwNS0uNTgtNC42NmE5Ljk3NyA5Ljk3NyAwIDAwLTIuMDQ1LTMuODk1Yy0uOTg1LTEuMTMtMi4yNTUtMi4wMDUtMy44Ni0yLjYyLTEuNjA2LS42Mi0zLjY1LTEuMDktNi4wOS0xLjA5LTMuMjggMC02LjI3LjQtOS4wMDUuODctMi43MzUuNDc1LTQuOTk1IDEuMDItNi43MSAxLjY0bC0xLjcxLTExLjY4NWMxLjc4NS0uNjIgNC40NDUtMS4yMzUgNy44NzUtMS44NTUgMy40MjUtLjYyIDcuMTA1LS45NDUgMTEuMDQ1LS45NDV6bS00Mi44LTYuNzdjNC43NzQgMCA4LjY4LTMuODYgOC42OC04LjYzIDAtNC43NjUtMy44NjYtOC42MjUtOC42OC04LjYyNS00LjgxIDAtOC42NzUgMy44Ni04LjY3NSA4LjYyNSAwIDQuNzcgMy45IDguNjMgOC42NzUgOC42M3ptNy4xOCA3MC40MjVoLTE0LjMyNnYtNjEuNDRsMTQuMzI1LTIuMjU1djYzLjY5NWguMDAxem0tMjUuMTE2IDBjLTIzLjM2NS4xMS0yMy4zNjUtMTguODU1LTIzLjM2NS0yMS44NzVsLS4wNC03MS4wNDUgMTQuMjU1LTIuMjZ2NzAuNjFjMCAxLjcxNSAwIDEyLjU2IDkuMTUgMTIuNTk1djExLjk3NXptLTQ2LjMzNS0zMS40NDVjMC02LjE1NS0xLjM1LTExLjI4NS0zLjk3NC0xNC44NS0yLjYyNS0zLjYwNS02LjMwNS01LjM4NS0xMS4wMS01LjM4NS00LjcgMC04LjM4NiAxLjc4LTExLjAwNiA1LjM4NS0yLjYyNSAzLjYtMy45MDQgOC42OTUtMy45MDQgMTQuODUgMCA2LjIyNSAxLjMxNSAxMC40MDUgMy45NCAxNC4wMSAyLjYyNSAzLjY0IDYuMzA1IDUuNDI1IDExLjAxIDUuNDI1IDQuNyAwIDguMzg1LTEuODIgMTEuMDEtNS40MjUgMi42MjQtMy42NCAzLjkzNC03Ljc4NSAzLjkzNC0xNC4wMXptMTQuNTgtLjAzNWMwIDQuODA1LS42OSA4LjQ0LTIuMTE0IDEyLjQxLTEuNDIgMy45NjUtMy40MjUgNy4zNS02LjAxIDEwLjE1NS0yLjU5IDIuOC01LjY5IDQuOTg1LTkuMzM2IDYuNTE1LTMuNjQ0IDEuNTI1LTkuMjYgMi40LTEyLjA2NSAyLjQtMi44MS0uMDM1LTguMzg1LS44MzUtMTEuOTk1LTIuNC0zLjYxLTEuNTY1LTYuNzEtMy43MTUtOS4yOTUtNi41MTUtMi41OS0yLjgwNS00LjU5NC02LjE5LTYuMDU0LTEwLjE1NS0xLjQ1Ni0zLjk3LTIuMTg1LTcuNjA1LTIuMTg1LTEyLjQxcy42NTQtOS40MyAyLjExNC0xMy4zNmMxLjQ2LTMuOTMgMy41LTcuMjggNi4xMjUtMTAuMDggMi42MjUtMi44MDUgNS43Ni00Ljk1NSA5LjMzLTYuNDggMy42MS0xLjUzIDcuNTg1LTIuMjU1IDExLjg4NS0yLjI1NSA0LjMwNSAwIDguMjc1Ljc2IDExLjkyIDIuMjU1IDMuNjUgMS41MjUgNi43ODYgMy42NzUgOS4zMzYgNi40OCAyLjU4NCAyLjggNC41OSA2LjE1IDYuMDUgMTAuMDggMS41MyAzLjkzIDIuMjk1IDguNTU1IDIuMjk1IDEzLjM2aC0uMDAxem0tMTA3LjI4NCAwYzAgNS45NjUgMS4zMSAxMi41OSAzLjkzNSAxNS4zNTUgMi42MjUgMi43NyA2LjAxNCA0LjE1IDEwLjE3NSA0LjE1IDIuMjYgMCA0LjQxLS4zMjUgNi40MTQtLjk0NSAyLjAwNS0uNjIgMy42MDYtMS4zNSA0Ljg4Ni0yLjIydi0zNS4zNGMtMS4wMi0uMjItNS4yODYtMS4wOTUtOS40MS0xLjItNS4xNzUtLjE1LTkuMTEgMS45NjUtMTEuODggNS4zNDUtMi43MzYgMy4zOS00LjEyIDkuMzItNC4xMiAxNC44NTV6bTM5LjYyNSAyOC4wOTVjMCA5LjcyLTIuNDggMTYuODE1LTcuNDc2IDIxLjMzLTQuOTkgNC41MS0xMi42MSA2Ljc3LTIyLjg5IDYuNzctMy43NTUgMC0xMS41NTUtLjczLTE3Ljc5LTIuMTFsMi4yOTUtMTEuMjg1YzUuMjE1IDEuMDkgMTIuMTA1IDEuMzg1IDE1LjcxNSAxLjM4NSA1LjcyIDAgOS44MDUtMS4xNjUgMTIuMjQ1LTMuNDk1IDIuNDQ1LTIuMzMgMy42NDUtNS43ODUgMy42NDUtMTAuMzc1di0yLjMzYy0xLjQyLjY5LTMuMjggMS4zODUtNS41NzUgMi4xMTUtMi4yOTUuNjktNC45NTUgMS4wNTUtNy45NSAxLjA1NS0zLjkzNSAwLTcuNTEtLjYyLTEwLjc1LTEuODYtMy4yNDUtMS4yMzUtNi4wNTUtMy4wNTUtOC4zNS01LjQ2LTIuMjk1LTIuNC00LjEyLTUuNDItNS4zOTUtOS4wMjUtMS4yNzUtMy42MDUtMS45MzUtMTAuMDQ1LTEuOTM1LTE0Ljc3NSAwLTQuNDQuNjk1LTEwLjAxIDIuMDQ2LTEzLjcyNSAxLjM4NC0zLjcxIDMuMzUtNi45MTUgNi4wMTQtOS41NyAyLjYyNi0yLjY1NSA1LjgzNS00LjY5NSA5LjU5LTYuMTkgMy43NTUtMS40OSA4LjE2LTIuNDM1IDEyLjkzNS0yLjQzNSA0LjYzNSAwIDguOS41OCAxMy4wNTUgMS4yNzUgNC4xNTUuNjkgNy42OSAxLjQxNSAxMC41NyAyLjIxNXY1Ni40OWguMDAxeiIvPjwvZz48L3N2Zz4=); - background-repeat: no-repeat; - background-size: contain; - vertical-align: middle; +a { + color: #9058b5; } -.aa-powered-by { - text-align: right; - font-size: 12px; - color: #969faf; - padding: 8px 8px 4px 0; - font-weight: normal; +a:hover, +a:focus { + text-decoration-color: #e1d6eb; } - -/*# sourceMappingURL=algoliasearchNetlify.css.map*/ - -.h ighlight { - width: 100%; - overflow: auto; - background: #ffffff; -} -.highlight .c { - color: #999988; - font-style: italic; -} /* Comment */ -.highlight .err { - color: #a61717; - background-color: #e3d2d2; -} /* Error */ -.highlight .k { - font-weight: bold; -} /* Keyword */ -.highlight .o { - font-weight: bold; -} /* Operator */ -.highlight .cm { - color: #999988; - font-style: italic; -} /* Comment.Multiline */ -.highlight .cp { - color: #999999; - font-weight: bold; -} /* Comment.Preproc */ -.highlight .c1 { - color: #999988; - font-style: italic; -} /* Comment.Single */ -.highlight .cs { - color: #999999; - font-weight: bold; - font-style: italic; -} /* Comment.Special */ -.highlight .gd { - color: #000000; - background-color: #ffdddd; -} /* Generic.Deleted */ -.highlight .gd .x { - color: #000000; - background-color: #ffaaaa; -} /* Generic.Deleted.Specific */ -.highlight .ge { - font-style: italic; -} /* Generic.Emph */ -.highlight .gr { - color: #aa0000; -} /* Generic.Error */ -.highlight .gh { - color: #999999; -} /* Generic.Heading */ -.highlight .gi { - color: #000000; - background-color: #ddffdd; -} /* Generic.Inserted */ -.highlight .gi .x { - color: #000000; - background-color: #aaffaa; -} /* Generic.Inserted.Specific */ -.highlight .go { - color: #888888; -} /* Generic.Output */ -.highlight .gp { - color: #555555; -} /* Generic.Prompt */ -.highlight .gs { - font-weight: bold; -} /* Generic.Strong */ -.highlight .gu { - color: #aaaaaa; -} /* Generic.Subheading */ -.highlight .gt { - color: #aa0000; -} /* Generic.Traceback */ -.highlight .kc { - font-weight: bold; -} /* Keyword.Constant */ -.highlight .kd { - font-weight: bold; -} /* Keyword.Declaration */ -.highlight .kp { - font-weight: bold; -} /* Keyword.Pseudo */ -.highlight .kr { - font-weight: bold; -} /* Keyword.Reserved */ -.highlight .kt { - color: #445588; - font-weight: bold; -} /* Keyword.Type */ -.highlight .m { - color: #009999; -} /* Literal.Number */ -.highlight .s { - color: #d14; -} /* Literal.String */ -.highlight .na { - color: #008080; -} /* Name.Attribute */ -.highlight .nb { - color: #0086b3; -} /* Name.Builtin */ -.highlight .nc { - color: #445588; - font-weight: bold; -} /* Name.Class */ -.highlight .no { - color: #008080; -} /* Name.Constant */ -.highlight .ni { - color: #800080; -} /* Name.Entity */ -.highlight .ne { - color: #990000; - font-weight: bold; -} /* Name.Exception */ -.highlight .nf { - color: #990000; - font-weight: bold; -} /* Name.Function */ -.highlight .nn { - color: #555555; -} /* Name.Namespace */ -.highlight .nt { - color: #000080; -} /* Name.Tag */ -.highlight .nv { - color: #008080; -} /* Name.Variable */ -.highlight .ow { - font-weight: bold; -} /* Operator.Word */ -.highlight .w { - color: #bbbbbb; -} /* Text.Whitespace */ -.highlight .mf { - color: #009999; -} /* Literal.Number.Float */ -.highlight .mh { - color: #009999; -} /* Literal.Number.Hex */ -.highlight .mi { - color: #009999; -} /* Literal.Number.Integer */ -.highlight .mo { - color: #009999; -} /* Literal.Number.Oct */ -.highlight .sb { - color: #d14; -} /* Literal.String.Backtick */ -.highlight .sc { - color: #d14; -} /* Literal.String.Char */ -.highlight .sd { - color: #d14; -} /* Literal.String.Doc */ -.highlight .s2 { - color: #d14; -} /* Literal.String.Double */ -.highlight .se { - color: #d14; -} /* Literal.String.Escape */ -.highlight .sh { - color: #d14; -} /* Literal.String.Heredoc */ -.highlight .si { - color: #d14; -} /* Literal.String.Interpol */ -.highlight .sx { - color: #d14; -} /* Literal.String.Other */ -.highlight .sr { - color: #009926; -} /* Literal.String.Regex */ -.highlight .s1 { - color: #d14; -} /* Literal.String.Single */ -.highlight .ss { - color: #990073; -} /* Literal.String.Symbol */ -.highlight .bp { - color: #999999; -} /* Name.Builtin.Pseudo */ -.highlight .vc { - color: #008080; -} /* Name.Variable.Class */ -.highlight .vg { - color: #008080; -} /* Name.Variable.Global */ -.highlight .vi { - color: #008080; -} /* Name.Variable.Instance */ -.highlight .il { - color: #009999; -} /* Literal.Number.Integer.Long */ - -/* Make line numbers unselectable: excludes line numbers from copy-paste user ops */ -.highlight .lineno { - -webkit-user-select: none; - -moz-user-select: none; - -o-user-select: none; -} -.lineno::-moz-selection { - background-color: transparent; -} /* Mozilla specific */ -.lineno::selection { - background-color: transparent; -} /* Other major browsers */ diff --git a/src/sass/imports/_header.scss b/src/sass/imports/_header.scss index b0ea2dba68..713dbca6e7 100644 --- a/src/sass/imports/_header.scss +++ b/src/sass/imports/_header.scss @@ -1,370 +1,374 @@ .site-header { - background: black; - background-image: url('https://i.imgur.com/CEYEZp8.jpeg'); - padding-bottom: 0.4em; - padding-top: 0.2em; + background: black; + background-image: url('https://i.imgur.com/CEYEZp8.jpeg'); + padding-bottom: 0.4em; + padding-top: 0.2em; } .site-header-inside { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; } .site-branding { - -ms-flex: 0 1 auto; - flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; } .site-title { - color: $gray-700; - font-size: 1.5em; - font-weight: bold; - line-height: 1.2; - margin: 0; + color: $gray-700; + font-size: 1.5em; + font-weight: bold; + line-height: 1.2; + margin: 0; } .site-logo { - margin: 0; + margin: 0; - img { - max-height: 65px; - } + img { + max-height: 65px; + } } .menu, .submenu { - list-style: none; - margin: 0; - padding: 0; + list-style: none; + margin: 0; + padding: 0; } .menu-item { - position: relative; + position: relative; - &.current { - color: $color-primary; - } + &.current { + color: $color-primary; + } - a { - &:not(.button) { - display: inline-block; - font-size: 1.1em; - line-height: 1.5; - } + a { + &:not(.button) { + display: inline-block; + font-size: 1.1em; + line-height: 1.5; } + } } #masthead { - a { - &:not(.button) { - color: inherit; - display: inline-block; - text-decoration: none; - - &:hover { - color: $color-primary; - } - } - } + a { + &:not(.button) { + color: inherit; + display: inline-block; + text-decoration: none; - .site-branding { - a { - &:hover { - color: inherit; - } - } + &:hover { + color: $color-primary; + } + } + } + + .site-branding { + a { + &:hover { + color: inherit; + } } + } } @media only screen and (min-width: 801px) { - #menu-open, - #menu-close { - display: none; - } + #menu-open, + #menu-close { + display: none; + } - .site-navigation { - margin-left: auto; - } + .site-navigation { + margin-left: auto; + } - .menu { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; - } + .menu { + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + } - .menu-item { - display: inline-block; - margin: 0 0 0 1.25em; - padding-bottom: 0.1875em; - padding-top: 0.1875em; - - a { - padding-bottom: 0.5em; - padding-top: 0.5em; - - &.button:not(.button-icon) { - padding-left: 1.25em; - padding-right: 1.25em; - } - } + .menu-item { + display: inline-block; + margin: 0 0 0 1.25em; + padding-bottom: 0.1875em; + padding-top: 0.1875em; - &.has-children > a { - padding-right: 18px; - position: relative; - - &:after { - background: 0; - border-color: currentColor; - border-style: solid; - border-width: 1px 1px 0 0; - box-sizing: border-box; - content: ''; - height: 6px; - position: absolute; - right: 0; - top: 50%; - width: 6px; - -webkit-transform: translateY(-50%) rotate(135deg); - transform: translateY(-50%) rotate(135deg); - } - - &.button:not(.button-icon) { - padding-right: 2.25em; - - &:after { - right: 1.25em; - } - } - } + a { + padding-bottom: 0.5em; + padding-top: 0.5em; + + &.button:not(.button-icon) { + padding-left: 1.25em; + padding-right: 1.25em; + } + } + + &.has-children>a { + padding-right: 18px; + position: relative; + + &:after { + background: 0; + border-color: currentColor; + border-style: solid; + border-width: 1px 1px 0 0; + box-sizing: border-box; + content: ''; + height: 6px; + position: absolute; + right: 0; + top: 50%; + width: 6px; + -webkit-transform: translateY(-50%) rotate(135deg); + transform: translateY(-50%) rotate(135deg); + } - .submenu-toggle { - display: none; - } + &.button:not(.button-icon) { + padding-right: 2.25em; - &.has-children:hover > .submenu { - opacity: 1; - -webkit-transition: margin 0.3s, opacity 0.2s; - transition: margin 0.3s, opacity 0.2s; - visibility: visible; + &:after { + right: 1.25em; + } } + } + + .submenu-toggle { + display: none; } - .submenu { - background: #fff; - border: 4px solid $gray-300; - border-radius: $border-radius-sm; - box-shadow: $box-shadow; - left: 0; - min-width: 180px; - opacity: 0; - padding: 0.5em 0; - position: absolute; - text-align: left; - top: 100%; - -webkit-transition: opacity 0.2s, visibility 0s 0.2s; - transition: opacity 0.2s, visibility 0s 0.2s; - visibility: hidden; - width: 100%; - z-index: 99; - - .menu-item { - display: block; - margin: 0; - padding: 0 1em; - } + &.has-children:hover>.submenu { + opacity: 1; + -webkit-transition: margin 0.3s, opacity 0.2s; + transition: margin 0.3s, opacity 0.2s; + visibility: visible; + } + } - a { - &:not(.button-icon) { - display: block; - } + .submenu { + background: #fff; + border: 4px solid $gray-300; + border-radius: $border-radius-sm; + box-shadow: $box-shadow; + left: 0; + min-width: 180px; + opacity: 0; + padding: 0.5em 0; + position: absolute; + text-align: left; + top: 100%; + -webkit-transition: opacity 0.2s, visibility 0s 0.2s; + transition: opacity 0.2s, visibility 0s 0.2s; + visibility: hidden; + width: 100%; + z-index: 99; - &.button:not(.button-icon) { - margin: 0.5em 0; - } - } + .menu-item { + display: block; + margin: 0; + padding: 0 1em; } + + a { + &:not(.button-icon) { + display: block; + } + + &.button:not(.button-icon) { + margin: 0.5em 0; + } + } + } } @media only screen and (max-width: 800px) { - .site { - overflow: hidden; - position: relative; + .site { + overflow: hidden; + position: relative; + } + + .site-branding { + margin-right: 0.625em; + } + + .site-header { + &:after { + background: rgba($gray-600, 0.6); + content: ''; + height: 100vh; + left: 0; + opacity: 0; + position: absolute; + top: 0; + -webkit-transition: opacity 0.15s ease-in-out, visibility 0s ease-in-out 0.15s; + transition: opacity 0.15s ease-in-out, visibility 0s ease-in-out 0.15s; + visibility: hidden; + width: 100%; + z-index: 998; } + } - .site-branding { - margin-right: 0.625em; - } + .site-navigation { + background: #fff; + box-sizing: border-box; + height: 100vh; + margin: 0; + max-width: 360px; + -webkit-overflow-scrolling: touch; + position: absolute; + right: -100%; + top: 0; + -webkit-transition: right 0.3s ease-in-out, visibility 0s 0.3s ease-in-out; + transition: right 0.3s ease-in-out, visibility 0s 0.3s ease-in-out; + visibility: hidden; + width: 100%; + z-index: 999; + } + + .site-nav-inside { + height: 100%; + overflow: auto; + -webkit-overflow-scrolling: touch; + position: relative; + } - .site-header { - &:after { - background: rgba($gray-600, 0.6); - content: ''; - height: 100vh; - left: 0; - opacity: 0; - position: absolute; - top: 0; - -webkit-transition: opacity 0.15s ease-in-out, visibility 0s ease-in-out 0.15s; - transition: opacity 0.15s ease-in-out, visibility 0s ease-in-out 0.15s; - visibility: hidden; - width: 100%; - z-index: 998; - } + .menu--opened { + .site { + height: 100%; + left: 0; + overflow: hidden; + position: fixed; + top: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + width: 100%; + z-index: 997; } .site-navigation { - background: #fff; - box-sizing: border-box; - height: 100vh; - margin: 0; - max-width: 360px; - -webkit-overflow-scrolling: touch; - position: absolute; - right: -100%; - top: 0; - -webkit-transition: right 0.3s ease-in-out, visibility 0s 0.3s ease-in-out; - transition: right 0.3s ease-in-out, visibility 0s 0.3s ease-in-out; - visibility: hidden; - width: 100%; - z-index: 999; + right: 0; + -webkit-transition: right 0.3s ease-in-out; + transition: right 0.3s ease-in-out; + visibility: visible; } - .site-nav-inside { - height: 100%; - overflow: auto; - -webkit-overflow-scrolling: touch; - position: relative; + .site-header { + &:after { + opacity: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + visibility: visible; + } } - - .menu--opened { - .site { - height: 100%; - left: 0; - overflow: hidden; - position: fixed; - top: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - width: 100%; - z-index: 997; - } - - .site-navigation { - right: 0; - -webkit-transition: right 0.3s ease-in-out; - transition: right 0.3s ease-in-out; - visibility: visible; - } - - .site-header { - &:after { - opacity: 1; - -webkit-transition-delay: 0s; - transition-delay: 0s; - visibility: visible; - } - } } - .menu { - padding: calc(3vw + 2.8125em) $container-padding 3em; - } + .menu { + padding: calc(3vw + 2.8125em) $container-padding 3em; + } - .submenu { - border-top: 1px solid $gray-300; - display: none; - padding-left: 1em; - } + .submenu { + border-top: 1px solid $gray-300; + display: none; + padding-left: 1em; + } - .menu-item { - display: block; - margin: 0; + .menu-item { + display: block; + margin: 0; - &:not(.menu-button) { - border-bottom: 1px solid $gray-300; + &:not(.menu-button) { + border-bottom: 1px solid $gray-300; - &:first-child { - border-top: 1px solid $gray-300; - } - } + &:first-child { + border-top: 1px solid $gray-300; + } + } - a { - &:not(.button), - &.button-icon { - padding: 0.75em 0; - } - - &:not(.button) { - display: block; - } - - &.button { - &:not(.button-icon) { - width: 100%; - } - } - } + a { - &.has-children > a { - margin-right: 2em; - } + &:not(.button), + &.button-icon { + padding: 0.75em 0; + } - .menu-item { - &:first-child { - border-top: 0; - } + &:not(.button) { + display: block; + } - &:last-child { - border-bottom: 0; - } + &.button { + &:not(.button-icon) { + width: 100%; } + } + } - .submenu-toggle { - color: $gray-500; - height: 2.8125em; - position: absolute; - right: 0; - top: 0; - } + &.has-children>a { + margin-right: 2em; + } - &.active { - .submenu-toggle { - .icon-angle-right { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - } - - .submenu { - display: block; - } - } + .menu-item { + &:first-child { + border-top: 0; + } + + &:last-child { + border-bottom: 0; + } + } + + .submenu-toggle { + color: $gray-500; + height: 2.8125em; + position: absolute; + right: 0; + top: 0; } - .menu-button { - & > .button:not(.button-icon) { - margin-bottom: 1.25em; - margin-top: 1.25em; + &.active { + .submenu-toggle { + .icon-angle-right { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + } - & + .menu-button { - & > .button:not(.button-icon) { - margin-top: 0; - } - } + .submenu { + display: block; + } + } + } + + .menu-button { + &>.button:not(.button-icon) { + margin-bottom: 1.25em; + margin-top: 1.25em; } - #menu-open { - margin-left: auto; + &+.menu-button { + &>.button:not(.button-icon) { + margin-top: 0; + } } - - #menu-close { - display: block; - position: absolute; - right: $container-padding; - top: $container-padding; } + + #menu-open { + margin-left: auto; + } + + #menu-close { + display: block; + position: absolute; + right: $container-padding; + top: $container-padding; + } } +.palette-navy .button, .palette-navy .line-left:after{ + background: #000000; +} \ No newline at end of file diff --git a/src/sass/imports/_helpers.scss b/src/sass/imports/_helpers.scss index 2d07226953..7a0e03546f 100644 --- a/src/sass/imports/_helpers.scss +++ b/src/sass/imports/_helpers.scss @@ -1,186 +1,189 @@ // Text for screen readers .screen-reader-text { - clip: rect(1px, 1px, 1px, 1px); - clip-path: polygon(0px 0px, 0px 0px, 0px 0px, 0px 0px); - height: 1px; - overflow: hidden; - position: absolute !important; - width: 1px; - word-wrap: normal !important; + clip: rect(1px, 1px, 1px, 1px); + clip-path: polygon(0px 0px, 0px 0px, 0px 0px, 0px 0px); + height: 1px; + overflow: hidden; + position: absolute !important; + width: 1px; + word-wrap: normal !important; } // Heading decorations .line-left { - position: relative; + position: relative; - &:after { - background: $color-primary; - display: block; - content: ''; - height: 100%; - left: -1px; - position: absolute; - top: 0; - width: 5px; - } + &:after { + background: $color-primary; + display: block; + content: ''; + height: 100%; + left: -1px; + position: absolute; + top: 0; + width: 5px; + } } // Responsive video wrappers .js-reframe { - margin: 1.875em 0; + margin: 1.875em 0; - &:first-child { - margin-top: 0; - } + &:first-child { + margin-top: 0; + } } // Notifications, allerts .note, .important { - border-radius: $border-radius; - color: $gray-700; - margin: 1.875em 0; - padding: 1em 1.125em; + border-radius: $border-radius; + color: $gray-700; + margin: 1.875em 0; + padding: 1em 1.125em; - &:first-child { - margin-top: 0; - } + &:first-child { + margin-top: 0; + } } .note { - background: $yellow-pale; - border-left: 5px solid $yellow; + background: $yellow-pale; + border-left: 5px solid $yellow; } .important { - background: $red-pale; - border-left: 5px solid $red; + background: $red-pale; + border-left: 5px solid $red; } // Background gradients .has-gradient { - background: $color-primary; - background: -webkit-gradient(linear, left top, right top, from($color-secondary), to($color-primary)); - background: linear-gradient(to right, $color-secondary, $color-primary); - color: #fff; + background: $color-primary; + background: -webkit-gradient(linear, left top, right top, from($color-secondary), to($color-primary)); + background: linear-gradient(to right, $color-secondary, $color-primary); + color: #fff; + position: relative; + + h1, + h2, + h3, + h4, + h5, + h6 { + color: inherit !important; + } + + a { + &:not(.button) { + color: inherit !important; + + &:hover { + opacity: 0.8; + } + } + } + + .button { + &:not(.button-secondary) { + background-color: #fff; + color: $color-primary; + + &:hover, + &:focus, + &:active { + opacity: 0.85; + } + } + } + + .button-secondary { + color: #fff !important; + } + + .inner-sm { position: relative; - - h1, - h2, - h3, - h4, - h5, - h6 { - color: inherit !important; - } - - a { - &:not(.button) { - color: inherit !important; - - &:hover { - opacity: 0.8; - } - } - } - - .button { - &:not(.button-secondary) { - background-color: #fff; - color: $color-primary; - - &:hover, - &:focus, - &:active { - opacity: 0.85; - } - } - } - - .button-secondary { - color: #fff !important; - } - - .inner-sm { - position: relative; - } + } } // Background image .bg-img { - -webkit-animation: fadeIn20 0.75s ease-in-out; - animation: fadeIn20 0.75s ease-in-out; - background-position: center; - background-size: cover; - bottom: 0; - left: 0; - opacity: 0.2; - position: absolute; - right: 0; - top: 0; + -webkit-animation: fadeIn20 0.75s ease-in-out; + animation: fadeIn20 0.75s ease-in-out; + background-position: center; + background-size: cover; + bottom: 0; + left: 0; + opacity: 0.2; + position: absolute; + right: 0; + top: 0; } // Grid .grid { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-left: -$grid-gap / 2; - margin-right: -$grid-gap / 2; + display: -ms-flexbox; + // box-shadow: inset 0px 11px 8px -10px black, inset 0px -11px 8px -10px black; margin: 0 auto !important; + display: flex; + border-radius: 5px; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-left: -$grid-gap / 2; + margin-right: -$grid-gap / 2; } .grid-item { - box-sizing: border-box; - padding-left: $grid-gap / 2; - padding-right: $grid-gap / 2; - position: relative; - width: 100%; + box-sizing: border-box; + // box-shadow: inset 0px 11px 8px -10px black, inset 0px -11px 8px -10px black; margin: 0 auto !important; + padding-left: $grid-gap / 2; + padding-right: $grid-gap / 2; + position: relative; + width: 100%; } .grid-center { - -ms-flex-pack: center; - justify-content: center; + -ms-flex-pack: center; + justify-content: center; } .grid-swap { - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } .grid-middle { - -ms-flex-align: center; - align-items: center; + -ms-flex-align: center; + align-items: center; } @media only screen and (min-width: 641px) { - .grid-col-2 { - .grid-item { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } + .grid-col-2 { + .grid-item { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + } } @media only screen and (min-width: 761px) { - .grid-col-3 { - .grid-item { - -ms-flex: 0 0 33.333%; - flex: 0 0 33.333%; - max-width: 33.333%; - } + .grid-col-3 { + .grid-item { + -ms-flex: 0 0 33.333%; + flex: 0 0 33.333%; + max-width: 33.333%; } + } } @media only screen and (max-width: 600px) { - .grid { - margin-left: -$container-padding / 2; - margin-right: -$container-padding / 2; - } - - .grid-item { - padding-left: $container-padding / 2; - padding-right: $container-padding / 2; - } + .grid { + margin-left: -$container-padding / 2; + margin-right: -$container-padding / 2; + } + + .grid-item { + padding-left: $container-padding / 2; + padding-right: $container-padding / 2; + } } diff --git a/src/sass/imports/_icons.scss b/src/sass/imports/_icons.scss index 8ac942182e..4e36651076 100644 --- a/src/sass/imports/_icons.scss +++ b/src/sass/imports/_icons.scss @@ -1,101 +1,101 @@ // SVG icons .icon { - color: white; - fill: currentColor; - flex-shrink: 0; - height: 1em; - line-height: 1; - width: 1em; + color: inherit; + fill: white; + flex-shrink: 0; + height: 1em; + line-height: 1; + width: 1em; } // CSS icons .icon-menu, .icon-close { - background: currentColor; - border-radius: 2px; - color: inherit; - height: 2px; - left: 50%; - margin-top: -1px; - margin-left: -12px; - position: absolute; - top: 50%; - width: 24px; + background: white; + border-radius: 1px; + color: inherit; + height: 2px; + left: 50%; + margin-top: -1px; + margin-left: -12px; + position: absolute; + top: 50%; + width: 24px; - &:before, - &:after { - background: currentColor; - border-radius: 1px; - content: ''; - height: 100%; - left: 0; - position: absolute; - width: 100%; - } + &:before, + &:after { + background: white; + border-radius: 1px; + content: ''; + height: 100%; + left: 0; + position: absolute; + width: 100%; + } } .icon-menu { - &:before { - top: -6px; - } + &:before { + top: -6px; + } - &:after { - bottom: -6px; - } + &:after { + bottom: -6px; + } } .icon-close { - background: 0; - margin-left: -14px; - width: 28px; + background: 0; + margin-left: -14px; + width: 28px; - &:before { - top: 0; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); - } + &:before { + top: 0; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } - &:after { - top: 0; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } + &:after { + top: 0; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } } .icon-angle-right { - background: 0; - border-color: currentColor; - border-style: solid; - border-width: 1px 1px 0 0; - box-sizing: border-box; - height: 8px; - left: 50%; - margin-left: -4px; - margin-top: -4px; - position: absolute; - top: 50%; - width: 8px; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); + background: 0; + border-color: rgb(0, 0, 0); + border-style: dashed; + border-width: 2px 1px 0 0; + box-sizing: border-box; + height: 6px; + left: 70%; + margin-left: -2px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 6px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } .docs-nav-toggle { - .icon-angle-right { - height: 12px; - left: auto; - margin-left: 0; - margin-right: 9px; - margin-top: -6px; - right: 0; - width: 12px; - } + .icon-angle-right { + height: 12px; + left: auto; + margin-left: 0; + margin-right: 9px; + margin-top: -6px; + right: 0; + width: 12px; + } } .docs-section-item { - .icon-angle-right { - left: auto; - margin-left: 0; - margin-right: 15px; - right: 0; - } + .icon-angle-right { + left: auto; + margin-left: 0; + margin-right: 15px; + right: 0; + } } diff --git a/src/sass/imports/_palettes.scss b/src/sass/imports/_palettes.scss index ac2cc9874b..4571d18d0a 100644 --- a/src/sass/imports/_palettes.scss +++ b/src/sass/imports/_palettes.scss @@ -1,57 +1,57 @@ @each $palette in map-keys($theme-palettes) { - $palette-suffix: '#{$palette}'; - $color-primary: map-deep-get($theme-palettes, $palette, 'primary'); - $color-secondary: map-deep-get($theme-palettes, $palette, 'secondary'); + $palette-suffix: '#{$palette}'; + $color-primary: map-deep-get($theme-palettes, $palette, 'primary'); + $color-secondary: map-deep-get($theme-palettes, $palette, 'secondary'); - .palette-#{$palette-suffix} { - a:not(.button) { - color: $color-primary; + .palette-#{$palette-suffix} { + a:not(.button) { + color: $color-primary; - &:hover { - color: $gray-600; - } - } + &:hover { + color: $gray-600; + } + } - blockquote { - border-color: $color-primary; - } + blockquote { + border-color: $color-primary; + } - .line-left:after, - .button { - background: $color-primary; - } + .line-left:after, + .button { + background: $color-primary; + } - .has-gradient { - background: $color-primary; - background: -webkit-gradient(linear, left top, right top, from($color-secondary), to($color-primary)); - background: linear-gradient(to right, $color-secondary, $color-primary); - } + .has-gradient { + background: $color-primary; + background: -webkit-gradient(linear, left top, right top, from($color-secondary), to($color-primary)); + background: linear-gradient(to right, $color-secondary, $color-primary); + } - .button-secondary, - .button-icon:hover, - .button-icon:focus, - .button-icon:active, - .has-gradient .button:not(.button-secondary), - .menu-item.current, - #masthead a:not(.button):hover, - #colophon a:not(.button):hover, - .post.type-docs .hash-link:hover, - .post.type-docs .hash-link:focus, - #docs-menu a:hover, - #docs-menu .current, - #docs-menu .current-parent, - #page-nav li.active > a, - #page-nav a:hover { - color: $color-primary; - } + .button-secondary, + .button-icon:hover, + .button-icon:focus, + .button-icon:active, + .has-gradient .button:not(.button-secondary), + .menu-item.current, + #masthead a:not(.button):hover, + #colophon a:not(.button):hover, + .post.type-docs .hash-link:hover, + .post.type-docs .hash-link:focus, + #docs-menu a:hover, + #docs-menu .current, + #docs-menu .current-parent, + #page-nav li.active>a, + #page-nav a:hover { + color: $color-primary; + } - #docs-section-items { - .docs-item-link { - &:hover { - border-color: $color-primary; - color: $color-primary; - } - } + #docs-section-items { + .docs-item-link { + &:hover { + border-color: $color-primary; + color: $color-primary; } + } + } } } diff --git a/src/sass/imports/_posts.scss b/src/sass/imports/_posts.scss index 257760b344..96c55ba953 100644 --- a/src/sass/imports/_posts.scss +++ b/src/sass/imports/_posts.scss @@ -1,166 +1,166 @@ .post { - margin-bottom: 2.5em; + margin-bottom: 2.5em; } .post-full, .post-feed { - &:last-child { - margin-bottom: 5em; - } + &:last-child { + margin-bottom: 5em; + } } .has-gradient { - &.page-header, - &.post-header { - padding-bottom: 9.5em; - padding-top: 3.75em; - text-align: center; - } - - .page-title, - .post-title { - color: inherit; - font-size: 2.25em; - margin: 0; - } + &.page-header, + &.post-header { + padding-bottom: 9.5em; + padding-top: 3.75em; + text-align: center; + } + + .page-title, + .post-title { + color: inherit; + font-size: 2.25em; + margin: 0; + } } .page-subtitle, .post-subtitle { - font-size: 1.125em; - line-height: 1.5; - margin: 0.5em 0 0; - position: relative; + font-size: 1.125em; + line-height: 1.5; + margin: 0.5em 0 0; + position: relative; } .post-title { - a { - color: inherit !important; - text-decoration: none; - } + a { + color: inherit !important; + text-decoration: none; + } } .post-thumbnail { - border: 0; - border-radius: $border-radius $border-radius 0 0; - display: block; - margin: 0; + border: 0; + border-radius: $border-radius $border-radius 0 0; + display: block; + margin: 0; - img { - border-radius: $border-radius $border-radius 0 0; - width: 100%; - } + img { + border-radius: $border-radius $border-radius 0 0; + width: 100%; + } } .post-full .post-content, .post-feed { - margin-top: -5em; - position: relative; + margin-top: -5em; + position: relative; } .post-full .post-content, .post-feed .post { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius; - box-shadow: $box-shadow; + background: #fff; + border: 1px solid $gray-300; + border-radius: $border-radius; + box-shadow: $box-shadow; } .post-full { - .post-content { - padding: 2.5em 1.5em; - } + .post-content { + padding: 2.5em 1.5em; + } - .post-meta { - margin: 0 0 0.5em; - } + .post-meta { + margin: 0 0 0.5em; + } } .post-feed { - .post { - padding: 0 0 2.5em; - } - - .post-meta { - color: $gray-500; - font-size: 0.875em; - margin: 0 0 0.5em; - padding-left: 1.71428em; - padding-right: 1.71428em; - } + .post { + padding: 0 0 2.5em; + } + + .post-meta { + color: $gray-500; + font-size: 0.875em; + margin: 0 0 0.5em; + padding-left: 1.71428em; + padding-right: 1.71428em; + } + + .post-header { + margin: 0 0 1.25em; + padding-top: 1.875em; + } + + .post-title { + font-size: 1.5em; + margin: 0; + padding-left: 1em; + padding-right: 1em; + } - .post-header { - margin: 0 0 1.25em; - padding-top: 1.875em; - } + .post-excerpt { + margin-bottom: 1.25em; + padding-left: 1.5em; + padding-right: 1.5em; + } - .post-title { - font-size: 1.5em; - margin: 0; - padding-left: 1em; - padding-right: 1em; - } + .read-more { + margin: 0; + padding-left: 1.5em; + padding-right: 1.5em; + } - .post-excerpt { - margin-bottom: 1.25em; - padding-left: 1.5em; - padding-right: 1.5em; - } + .read-more-link { + font-weight: bold; + text-decoration: none; - .read-more { - margin: 0; - padding-left: 1.5em; - padding-right: 1.5em; + &:after { + font-size: 1.125em; + content: "\2192"; + line-height: 1.5; + margin-left: 5px; } - .read-more-link { - font-weight: bold; - text-decoration: none; - - &:after { - font-size: 1.125em; - content: '\2192'; - line-height: 1.5; - margin-left: 5px; - } - - &:hover { - color: $gray-600; - } + &:hover { + color: $gray-600; } + } } @media only screen and (min-width: 641px) { - .has-gradient { - .page-title, - .post-title { - font-size: 3em; - } - } - - .page-subtitle, - .post-subtitle { - font-size: 1.25em; + .has-gradient { + .page-title, + .post-title { + font-size: 3em; } + } - .post-full { - .post-meta { - font-size: 1.125em; - } - } + .page-subtitle, + .post-subtitle { + font-size: 1.25em; + } - .post-full .post-content, - .post-feed .post-meta, - .post-feed .post-title, - .post-feed .post-excerpt, - .post-feed .read-more { - padding-left: 7%; - padding-right: 7%; - } + .post-full { + .post-meta { + font-size: 1.125em; + } + } + + .post-full .post-content, + .post-feed .post-meta, + .post-feed .post-title, + .post-feed .post-excerpt, + .post-feed .read-more { + padding-left: 7%; + padding-right: 7%; + } } @media only screen and (max-width: 1000px) { - .post { - margin-bottom: 4vw; - } + .post { + margin-bottom: 4vw; + } } diff --git a/src/sass/imports/_prism.scss b/src/sass/imports/_prism.scss index ca8230b323..796b0f3c06 100644 --- a/src/sass/imports/_prism.scss +++ b/src/sass/imports/_prism.scss @@ -8,33 +8,33 @@ https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javasc code[class*='language-'], pre[class*='language-'] { - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; } -:not(pre) > code[class*='language-'] { - background: $gray-700; - color: $gray-100; +:not(pre)>code[class*='language-'] { + background: $gray-700; + color: $gray-100; } .token.comment, .token.prolog, .token.doctype, .token.cdata { - color: #8292a2; + color: #8292a2; } .token.punctuation { - color: #f8f8f2; + color: #f8f8f2; } .token.namespace { - opacity: 0.7; + opacity: 0.7; } .token.property, @@ -42,12 +42,12 @@ pre[class*='language-'] { .token.constant, .token.symbol, .token.deleted { - color: #f92672; + color: #f92672; } .token.boolean, .token.number { - color: #ae81ff; + color: #ae81ff; } .token.selector, @@ -56,7 +56,7 @@ pre[class*='language-'] { .token.char, .token.builtin, .token.inserted { - color: #a6e22e; + color: #a6e22e; } .token.operator, @@ -65,79 +65,80 @@ pre[class*='language-'] { .language-css .token.string, .style .token.string, .token.variable { - color: #f8f8f2; + color: #f8f8f2; } .token.atrule, .token.attr-value, .token.function, .token.class-name { - color: #e6db74; + color: #e6db74; } .token.keyword { - color: #66d9ef; + color: #66d9ef; } .token.regex, .token.important { - color: #fd971f; + color: #fd971f; } .token.important, .token.bold { - font-weight: bold; + font-weight: bold; } .token.italic { - font-style: italic; + font-style: italic; } .token.entity { - cursor: help; + cursor: help; } div.code-toolbar { - position: relative; -} - -div.code-toolbar > .toolbar { - position: absolute; - top: 0; - right: 0; -} - -div.code-toolbar > .toolbar .toolbar-item { - display: block; -} - -div.code-toolbar > .toolbar a { - border: 0; - cursor: pointer; -} - -div.code-toolbar > .toolbar button { - background: none; - border: 0; - border-radius: 0; - box-shadow: none; - color: inherit; - font: inherit; - line-height: normal; - overflow: visible; - padding: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; -} - -div.code-toolbar > .toolbar a, -div.code-toolbar > .toolbar button, -div.code-toolbar > .toolbar span { - background: $gray-600; - color: $gray-300 !important; - display: block; - font-size: 0.75em; - line-height: 1.5; - padding: 0.25em 0.5em; - text-decoration: none; + position: relative; +} + +div.code-toolbar>.toolbar { + position: absolute; + top: 0; + right: 0; +} + +div.code-toolbar>.toolbar .toolbar-item { + display: block; +} + +div.code-toolbar>.toolbar a { + border: 0; + cursor: pointer; +} + +div.code-toolbar>.toolbar button { + background: none; + border: 0; + border-radius: 0; + box-shadow: none; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +div.code-toolbar>.toolbar a, +div.code-toolbar>.toolbar button, +div.code-toolbar>.toolbar span { + background: $gray-600; + color: $gray-300 !important; + display: block; + font-size: 0.75em; + line-height: 1.5; + padding: 0.25em 0.5em; + text-decoration: none; } diff --git a/src/sass/imports/_reset.scss b/src/sass/imports/_reset.scss index 7ea3d17976..9e5e3d04e7 100644 --- a/src/sass/imports/_reset.scss +++ b/src/sass/imports/_reset.scss @@ -1,82 +1,82 @@ // normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css html { - line-height: 1.15; - -webkit-text-size-adjust: 100%; + line-height: 1.15; + -webkit-text-size-adjust: 100%; } body { - margin: 0; + margin: 0; } main { - display: block; + display: block; } hr { - box-sizing: content-box; - height: 0; - overflow: visible; + box-sizing: content-box; + height: 0; + overflow: visible; } a { - background-color: transparent; + background-color: transparent; } a:focus { - outline: thin dotted; + outline: thin dotted; } a:active, a:hover { - outline: 0; + outline: 0; } abbr[title] { - border-bottom: none; - text-decoration: underline; - text-decoration: underline dotted; + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; } b, strong { - font-weight: bold; + font-weight: bold; - .font-fira-sans & { - font-weight: 600; - } + .font-fira-sans & { + font-weight: 600; + } } pre, code, kbd, samp { - font-family: $font-monospace; - font-size: 1em; + font-family: $font-monospace; + font-size: 1em; } small { - font-size: 80%; + font-size: 80%; } sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; } sub { - bottom: -0.25em; + bottom: -0.25em; } sup { - top: -0.5em; + top: -0.5em; } img { - border-style: none; - vertical-align: middle; + border-style: none; + vertical-align: middle; } button, @@ -84,102 +84,102 @@ input, optgroup, select, textarea { - font-family: inherit; - font-size: 100%; - line-height: 1.15; - margin: 0; + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; } button, input { - overflow: visible; + overflow: visible; } button, select { - text-transform: none; + text-transform: none; } button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; } button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; } fieldset { - padding: 0.35em 0.75em 0.625em; + padding: 0.35em 0.75em 0.625em; } legend { - box-sizing: border-box; - color: inherit; - display: table; - max-width: 100%; - padding: 0; - white-space: normal; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; } progress { - vertical-align: baseline; + vertical-align: baseline; } textarea { - overflow: auto; + overflow: auto; } -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; - padding: 0; +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + padding: 0; } -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; } -[type='search'] { - -webkit-appearance: textfield; - outline-offset: -2px; +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; } -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } ::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit; + -webkit-appearance: button; + font: inherit; } details { - display: block; + display: block; } summary { - display: list-item; + display: list-item; } template { - display: none; + display: none; } [hidden] { - display: none; -} + display: none; +} \ No newline at end of file diff --git a/src/sass/imports/_sections.scss b/src/sass/imports/_sections.scss index bf9d393492..a5417e67c2 100644 --- a/src/sass/imports/_sections.scss +++ b/src/sass/imports/_sections.scss @@ -1,337 +1,337 @@ .block { - padding-top: 3.75em; + padding-top: 3.75em; - &:not(.block-hero) { - background: $gray-100; - } + &:not(.block-hero) { + background: $gray-100; + } - &:last-child { - padding-bottom: 3.75em; - } + &:last-child { + padding-bottom: 3.75em; + } } .block-image { - margin-bottom: 1.5em; + margin-bottom: 1.5em; } .block-header { - margin-bottom: 1.5em; + margin-bottom: 1.5em; } .block-title { - margin: 0; + margin: 0; } .block-subtitle { - color: $gray-500; - line-height: 1.5; - margin-bottom: 0; + color: $gray-500; + line-height: 1.5; + margin-bottom: 0; - &:not(:first-child) { - margin-top: 0.5em; - } + &:not(:first-child) { + margin-top: 0.5em; + } } .block-buttons, .grid-item-buttons { - -ms-flex-align: center; - align-items: center; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-bottom: 0.9375em; - - a { - font-weight: bold; - text-decoration: none; - } + -ms-flex-align: center; + align-items: center; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-bottom: 0.9375em; + + a { + font-weight: bold; + text-decoration: none; + } } .block-buttons { - -ms-flex-pack: center; - justify-content: center; + -ms-flex-pack: center; + justify-content: center; - a { - margin: 0 0.375em 0.75em; - } + a { + margin: 0 0.375em 0.75em; + } } .grid-item-buttons { - a { - margin: 0 0.75em 0.75em 0; - } + a { + margin: 0 0.75em 0.75em 0; + } } .has-gradient { - .block-subtitle { - color: inherit; - } + .block-subtitle { + color: inherit; + } } .block-text, .block-hero { - .block-buttons { - &:not(:first-child) { - margin-top: 1.875em; - } + .block-buttons { + &:not(:first-child) { + margin-top: 1.875em; } + } } // Content section .block-text { - .grid-item { - max-width: $container-sm; - text-align: center; - } + .grid-item { + max-width: $container-sm; + text-align: center; + } - .block-title { - font-size: 1.875em; - } + .block-title { + font-size: 1.875em; + } } @media only screen and (min-width: 641px) { - .block-text { - .block-content { - font-size: 1.125em; - } + .block-text { + .block-content { + font-size: 1.125em; + } - .block-title { - font-size: 2.125em; - } + .block-title { + font-size: 2.125em; } + } } @media only screen and (min-width: 801px) { - .block-text { - .grid-item { - &:not(:only-child) { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - } + .block-text { + .grid-item { + &:not(:only-child) { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } } + } - .block-body { - &:not(:only-child) { - text-align: left; + .block-body { + &:not(:only-child) { + text-align: left; - .block-buttons { - -ms-flex-pack: start; - justify-content: flex-start; + .block-buttons { + -ms-flex-pack: start; + justify-content: flex-start; - a { - margin-left: 0; - margin-right: 0.75em; - } - } + a { + margin-left: 0; + margin-right: 0.75em; } + } } + } } @media only screen and (min-width: 1001px) { - .block-image { - &:not(:only-child) { - padding-right: 2.5em; - } + .block-image { + &:not(:only-child) { + padding-right: 2.5em; } + } - .grid-swap { - .block-image { - &:not(:only-child) { - padding-left: 2.5em; - padding-right: 0.9375em; - } - } + .grid-swap { + .block-image { + &:not(:only-child) { + padding-left: 2.5em; + padding-right: 0.9375em; + } } + } } // CTA section .block-cta { - .has-gradient { - border-radius: $border-radius; - margin-bottom: 1.875em; - padding: 3.75em 3vw 1.875em; - } - - .block-header { - max-width: $container-sm; - text-align: center; - } + .has-gradient { + border-radius: $border-radius; + margin-bottom: 1.875em; + padding: 3.75em 3vw 1.875em; + } + + .block-header { + max-width: $container-sm; + text-align: center; + } - .block-title { - font-size: 1.875em; - } + .block-title { + font-size: 1.875em; + } - .block-subtitle { - font-size: 1.125em; - } + .block-subtitle { + font-size: 1.125em; + } } @media only screen and (min-width: 641px) { - .block-title { - font-size: 2.125em; - } + .block-title { + font-size: 2.125em; + } } @media only screen and (min-width: 801px) { - .block-cta { - .has-gradient { - padding-left: 7%; - padding-right: 7%; - } + .block-cta { + .has-gradient { + padding-left: 7%; + padding-right: 7%; + } - .block-header { - -ms-flex: 0 0 66.666%; - flex: 0 0 66.666%; - max-width: 66.666%; - text-align: left; - } + .block-header { + -ms-flex: 0 0 66.666%; + flex: 0 0 66.666%; + max-width: 66.666%; + text-align: left; + } - .block-buttons { - -ms-flex: 0 0 33.333%; - flex: 0 0 33.333%; - margin-top: 0; - max-width: 33.333%; - } + .block-buttons { + -ms-flex: 0 0 33.333%; + flex: 0 0 33.333%; + margin-top: 0; + max-width: 33.333%; } + } } // Grid section .block-grid { - .block-hero + & { - &:not(.has-header) { - background: 0; - padding-top: 0; - } + .block-hero + & { + &:not(.has-header) { + background: 0; + padding-top: 0; } + } - .block-header { - margin-bottom: 2em; - text-align: center; - } + .block-header { + margin-bottom: 2em; + text-align: center; + } - .block-title { - font-size: 1.875em; - } + .block-title { + font-size: 1.875em; + } - .grid-item { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - margin-bottom: 1.875em; - } + .grid-item { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.875em; + } } .grid-item-inside { - background: #fff; - border: 1px solid $gray-300; - border-radius: $border-radius-sm; - box-shadow: $box-shadow; - box-sizing: border-box; - -ms-flex-positive: 1; - flex-grow: 1; - padding-bottom: 0.75em; + background: #fff; + border: 1px solid $gray-300; + border-radius: $border-radius-sm; + box-shadow: $box-shadow; + box-sizing: border-box; + -ms-flex-positive: 1; + flex-grow: 1; + padding-bottom: 0.75em; } .grid-item-image { - border-radius: $border-radius-sm $border-radius-sm 0 0; - display: block; - width: 100%; + border-radius: $border-radius-sm $border-radius-sm 0 0; + display: block; + width: 100%; - img { - border-radius: $border-radius-sm $border-radius-sm 0 0; - } + img { + border-radius: $border-radius-sm $border-radius-sm 0 0; + } } .grid-item-title { - font-size: 1.5em; - margin: 1em 0 0.5em; - padding-left: 1em; - padding-right: 1em; - - &:first-child { - margin-top: 1.25em; - } - - a { - color: inherit !important; - text-decoration: none; - } + font-size: 1.5em; + margin: 1em 0 0.5em; + padding-left: 1em; + padding-right: 1em; + + &:first-child { + margin-top: 1.25em; + } + + a { + color: inherit !important; + text-decoration: none; + } } .grid-item-content, .grid-item-buttons { - padding-left: 1.5em; - padding-right: 1.5em; + padding-left: 1.5em; + padding-right: 1.5em; } .grid-item-content { - margin-bottom: 1.25em; + margin-bottom: 1.25em; } .grid-item-buttons { - a { - &:not(.button) { - &:after { - font-size: 1.125em; - content: '\2192'; - line-height: 1.5; - margin-left: 5px; - } - } + a { + &:not(.button) { + &:after { + font-size: 1.125em; + content: "\2192"; + line-height: 1.5; + margin-left: 5px; + } } + } } @media only screen and (max-width: 1000px) { - .block-grid { - .grid-item { - margin-bottom: 4vw; - } + .block-grid { + .grid-item { + margin-bottom: 4vw; } + } } // Hero section .block-hero { - padding-bottom: 7.5em; - position: relative; - text-align: center; + padding-bottom: 7.5em; + position: relative; + text-align: center; - .block-header { - margin-bottom: 0.75em; - } + .block-header { + margin-bottom: 0.75em; + } - .block-title { - font-size: 2.25em; - } + .block-title { + font-size: 2.25em; + } - .block-content { - font-size: 1.125em; - line-height: 1.5; - } + .block-content { + font-size: 1.125em; + line-height: 1.5; + } - & + .block { - margin-top: -5em; - position: relative; - } + & + .block { + margin-top: -5em; + position: relative; + } } @media only screen and (min-width: 641px) { - .block-hero { - .block-title { - font-size: 3em; - } + .block-hero { + .block-title { + font-size: 3em; + } - .block-content { - font-size: 1.25em; - } + .block-content { + font-size: 1.25em; + } - .block-buttons { - a { - font-size: 1em; - } - } + .block-buttons { + a { + font-size: 1em; + } } + } } diff --git a/src/sass/imports/_structure.scss b/src/sass/imports/_structure.scss index b742fe5515..a58a170946 100644 --- a/src/sass/imports/_structure.scss +++ b/src/sass/imports/_structure.scss @@ -1,38 +1,38 @@ .site { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - min-height: 100vh; - position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100vh; + position: relative; } .site-content { - box-sizing: border-box; - -ms-flex-positive: 1; - flex-grow: 1; - width: 100%; + box-sizing: border-box; + -ms-flex-positive: 1; + flex-grow: 1; + width: 100%; } .outer { - padding-left: 150px; - padding-right: 150px; + padding-left: $container-padding; + padding-right: $container-padding; } .inner { - margin-left: auto; - margin-right: auto; - max-width: 95%; + margin-left: auto; + margin-right: auto; + max-width: $container; } .inner-md { - margin-left: auto; - margin-right: auto; - max-width: 95%; + margin-left: auto; + margin-right: auto; + max-width: $container-md; } .inner-sm { - margin-left: auto; - margin-right: auto; - max-width: 95%; + margin-left: auto; + margin-right: auto; + max-width: $container-sm; } diff --git a/src/sass/imports/_tables.scss b/src/sass/imports/_tables.scss index 39fe6e9c5c..2f63c36b96 100644 --- a/src/sass/imports/_tables.scss +++ b/src/sass/imports/_tables.scss @@ -1,63 +1,63 @@ table { - border-collapse: collapse; - border-spacing: 0; - line-height: 1.5; - margin: 0; - max-width: 100%; - text-align: left; - width: 100%; + border-collapse: collapse; + border-spacing: 0; + line-height: 1.5; + margin: 0; + max-width: 100%; + text-align: left; + width: 100%; } caption { - color: $gray-500; - font-size: 0.875em; - font-style: normal; - margin-bottom: 1em; - text-align: left; + color: $gray-500; + font-size: 0.875em; + font-style: normal; + margin-bottom: 1em; + text-align: left; } th, td { - border-bottom: 1px solid $gray-300; - padding: 0.5em 5px; + border-bottom: 1px solid $gray-300; + padding: 0.5em 5px; } th { - color: $gray-700; - font-weight: bold; + color: $gray-700; + font-weight: bold; } :not(.responsive-table) > table { - display: block; - margin: 1.875em 0; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - - &:first-child { - margin-top: 0; - } - - tbody, - thead { - width: 100%; - } - - tr { - width: 100%; - } - - td { - min-width: 10em; - } -} + display: block; + margin: 1.875em 0; + overflow-x: auto; + -webkit-overflow-scrolling: touch; -.responsive-table { - display: block; - margin: 1.875em 0; - overflow-x: auto; + &:first-child { + margin-top: 0; + } + + tbody, + thead { width: 100%; + } - &:first-child { - margin-top: 0; - } + tr { + width: 100%; + } + + td { + min-width: 10em; + } +} + +.responsive-table { + display: block; + margin: 1.875em 0; + overflow-x: auto; + width: 100%; + + &:first-child { + margin-top: 0; + } } diff --git a/src/sass/imports/_variables.scss b/src/sass/imports/_variables.scss index 3219e73757..7b7cb50513 100644 --- a/src/sass/imports/_variables.scss +++ b/src/sass/imports/_variables.scss @@ -1,23 +1,23 @@ // Fonts -$font-primary: 'Lato', Helvetica, Arial, sans-serif !default; -$font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace !default; +$font-primary: "Lato", Helvetica, Arial, sans-serif !default; +$font-monospace: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !default; // Colors -$color-primary: #00c6ff !default; +$color-primary: #00c6ff !default; $color-secondary: #0072ff !default; -$gray-100: #f8f8fa !default; -$gray-200: #ecedf2 !default; -$gray-300: #dde0e7 !default; -$gray-400: #9aa4b9 !default; -$gray-500: #67758d !default; -$gray-600: #424b5f !default; -$gray-700: #283040 !default; +$gray-100: #f8f8fa !default; +$gray-200: #ecedf2 !default; +$gray-300: #dde0e7 !default; +$gray-400: #9aa4b9 !default; +$gray-500: #67758d !default; +$gray-600: #424b5f !default; +$gray-700: #283040 !default; -$red: #fc381d !default; -$red-pale: #ffe9e6 !default; -$yellow: #fcb41d !default; -$yellow-pale: #fff7e6 !default; +$red: #fc381d !default; +$red-pale: #ffe9e6 !default; +$yellow: #fcb41d !default; +$yellow-pale: #fff7e6 !default; // Border radius $border-radius: 5px; @@ -27,7 +27,7 @@ $border-radius-sm: 3px; $box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.08); // Container max width -$container: 1200px !default; +$container: 1200px !default; $container-sm: 680px !default; $container-md: 800px !default; @@ -39,16 +39,16 @@ $grid-gap: 1.875em !default; // Alternative theme palettes $theme-palettes: ( - green: ( - primary: #20c86e, - secondary: #1ba65b - ), - navy: ( - primary: #004e92, - secondary: #000428 - ), - violet: ( - primary: #8e2de2, - secondary: #4a00e0 - ) + green: ( + primary: #20c86e, + secondary: #1ba65b + ), + navy: ( + primary: #004e92, + secondary: #000428 + ), + violet: ( + primary: #8e2de2, + secondary: #4a00e0 + ) ); diff --git a/src/sass/main.scss b/src/sass/main.scss index 41d54cf8c3..bcee2222de 100644 --- a/src/sass/main.scss +++ b/src/sass/main.scss @@ -15,4 +15,4 @@ @import 'imports/sections'; @import 'imports/footer'; @import 'imports/palettes'; -//@import "imports/prism"; +@import "imports/prism"; diff --git a/src/templates/404.js b/src/templates/404.js deleted file mode 100644 index 6f0c280774..0000000000 --- a/src/templates/404.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; - -const NotFoundPage = () => ( -
      -

      NOT FOUND

      -

      You just hit a route that doesn't exist... the sadness.

      -
      -); - -export default NotFoundPage; diff --git a/src/templates/advanced.js b/src/templates/advanced.js index 676280576e..55902a24b6 100644 --- a/src/templates/advanced.js +++ b/src/templates/advanced.js @@ -1,27 +1,29 @@ import React from 'react'; import _ from 'lodash'; -import { graphql } from 'gatsby'; -import components, { Layout } from '../components/index'; +import {graphql} from 'gatsby'; +import components, {Layout} from '../components/index'; // this minimal GraphQL query ensures that when 'gatsby develop' is running, // any changes to content files are reflected in browser export const query = graphql` - query ($url: String) { - sitePage(path: { eq: $url }) { - id - } + query($url: String) { + sitePage(path: {eq: $url}) { + id } + } `; export default class Advanced extends React.Component { render() { return ( - {_.map(_.get(this.props, 'pageContext.frontmatter.sections', null), (section, section_idx) => { - let component = _.upperFirst(_.camelCase(_.get(section, 'type', null))); - let Component = components[component]; - return ; - })} + {_.map(_.get(this.props, 'pageContext.frontmatter.sections', null), (section, section_idx) => { + let component = _.upperFirst(_.camelCase(_.get(section, 'type', null))); + let Component = components[component]; + return ( + + ) + })} ); } diff --git a/src/templates/blog.js b/src/templates/blog.js index 0935cd88ac..0cb288fe44 100644 --- a/src/templates/blog.js +++ b/src/templates/blog.js @@ -1,19 +1,19 @@ import React from 'react'; import _ from 'lodash'; import moment from 'moment-strftime'; -import { graphql } from 'gatsby'; +import {graphql} from 'gatsby'; import { Disqus, CommentCount } from 'gatsby-plugin-disqus'; -import { Layout } from '../components/index'; -import { toStyleObj, withPrefix, getPages, Link } from '../utils'; +import {Layout} from '../components/index'; +import {toStyleObj, withPrefix, getPages, Link} from '../utils'; // this minimal GraphQL query ensures that when 'gatsby develop' is running, // any changes to content files are reflected in browser export const query = graphql` - query ($url: String) { - sitePage(path: { eq: $url }) { - id - } + query($url: String) { + sitePage(path: {eq: $url}) { + id } + } `; export default class Blog extends React.Component { @@ -21,61 +21,42 @@ export default class Blog extends React.Component { let display_posts = _.orderBy(getPages(this.props.pageContext.pages, '/blog'), 'frontmatter.date', 'desc'); return ( -
      - {_.get(this.props, 'pageContext.frontmatter.image', null) && ( -
      +
      + {_.get(this.props, 'pageContext.frontmatter.image', null) && ( +
      + )} +
      +

      {_.get(this.props, 'pageContext.frontmatter.title', null)}

      + {_.get(this.props, 'pageContext.frontmatter.subtitle', null) && ( +

      {_.get(this.props, 'pageContext.frontmatter.subtitle', null)}

      + )} +
      +
      +
      +
      + {_.map(display_posts, (post, post_idx) => ( +
      + {_.get(post, 'frontmatter.thumb_image', null) && ( + {_.get(this.props, )} -
      -

      {_.get(this.props, 'pageContext.frontmatter.title', null)}

      - {_.get(this.props, 'pageContext.frontmatter.subtitle', null) && ( -

      {_.get(this.props, 'pageContext.frontmatter.subtitle', null)}

      +
      +
      + +
      +

      {_.get(post, 'frontmatter.title', null)}

      +
      + {_.get(post, 'frontmatter.excerpt', null) && ( +

      {_.get(post, 'frontmatter.excerpt', null)}

      + {((_.get(this.props, 'pageContext.frontmatter.has_more_link', null) === true) && _.get(this.props, 'pageContext.frontmatter.more_link_text', null)) && ( +

      + {_.get(this.props, 'pageContext.frontmatter.more_link_text', null)} +

      )} -
      -
      -
      -
      - {_.map(display_posts, (post, post_idx) => ( -
      - {_.get(post, 'frontmatter.thumb_image', null) && ( - - {_.get(this.props, - - )} -
      -
      - -
      -

      - - {_.get(post, 'frontmatter.title', null)} - -

      -
      - {_.get(post, 'frontmatter.excerpt', null) && ( - -

      {_.get(post, 'frontmatter.excerpt', null)}

      - {_.get(this.props, 'pageContext.frontmatter.has_more_link', null) === true && - _.get(this.props, 'pageContext.frontmatter.more_link_text', null) && ( -

      - - {_.get(this.props, 'pageContext.frontmatter.more_link_text', null)} - -

      - )} -
      - )} -
      - ))} -
      + )} + + ))}
      +
      ); } diff --git a/src/templates/docs.js b/src/templates/docs.js index 70a1869f54..4babada448 100644 --- a/src/templates/docs.js +++ b/src/templates/docs.js @@ -1,73 +1,116 @@ -import React from 'react'; -import _ from 'lodash'; -import { graphql } from 'gatsby'; -import { Disqus, CommentCount } from 'gatsby-plugin-disqus'; -import { Layout } from '../components/index'; -import DocsMenu from '../components/DocsMenu'; -import { htmlToReact, getPages, Link, withPrefix } from '../utils'; +import React from "react"; +import _ from "lodash"; +import { graphql } from "gatsby"; +import { Disqus, CommentCount } from "gatsby-plugin-disqus"; +import { Layout } from "../components/index"; +import DocsMenu from "../components/DocsMenu"; +import { htmlToReact, getPages, Link, withPrefix } from "../utils"; // this minimal GraphQL query ensures that when 'gatsby develop' is running, // any changes to content files are reflected in browser export const query = graphql` - query ($url: String) { - sitePage(path: { eq: $url }) { - id - } + query ($url: String) { + sitePage(path: { eq: $url }) { + id } + } `; export default class Docs extends React.Component { - render() { - let root_docs_path = _.trim(_.get(this.props, 'pageContext.site.data.doc_sections.root_docs_path', null), '/'); - let current_page_url = _.trim(_.get(this.props, 'pageContext.url', null), '/'); - return ( - -
      -
      - -
      -
      -
      -

      {_.get(this.props, 'pageContext.frontmatter.title', null)}

      -
      -
      - {htmlToReact(_.get(this.props, 'pageContext.html', null))} - {root_docs_path !== current_page_url && - (() => { - let child_pages = _.orderBy(getPages(this.props.pageContext.pages, current_page_url), 'frontmatter.weight'); - let child_count = _.size(child_pages); - let has_children = child_count > 0 ? true : false; - return ( - - {has_children && ( -
        - {_.map(child_pages, (child_page, child_page_idx) => ( -
      • - - {_.get(child_page, 'frontmatter.title', null)} -
      • - ))} -
      - )} -
      - ); - })()} -
      -
      -
      - -
      - -
      + render() { + let root_docs_path = _.trim( + _.get( + this.props, + "pageContext.site.data.doc_sections.root_docs_path", + null + ), + "/" + ); + let current_page_url = _.trim( + _.get(this.props, "pageContext.url", null), + "/" + ); + return ( + +
      +
      + +
      +
      +
      +

      + {_.get(this.props, "pageContext.frontmatter.title", null)} +

      +
      +
      + {htmlToReact(_.get(this.props, "pageContext.html", null))} + {root_docs_path !== current_page_url && + (() => { + let child_pages = _.orderBy( + getPages( + this.props.pageContext.pages, + current_page_url + ), + "frontmatter.weight" + ); + let child_count = _.size(child_pages); + let has_children = child_count > 0 ? true : false; + return ( + + {has_children && ( +
        + {_.map( + child_pages, + (child_page, child_page_idx) => ( +
      • + + {_.get( + child_page, + "frontmatter.title", + null + )} +
      • + ) + )} +
      + )} +
      + ); + })()}
      - - ); - } +
      +
      + +
      + +
      +
      +
      + ); + } } diff --git a/src/templates/page.js b/src/templates/page.js index 7c782f18e6..e5a08535e3 100644 --- a/src/templates/page.js +++ b/src/templates/page.js @@ -8,11 +8,11 @@ import { toStyleObj, withPrefix, htmlToReact } from '../utils'; // this minimal GraphQL query ensures that when 'gatsby develop' is running, // any changes to content files are reflected in browser export const query = graphql` - query ($url: String) { - sitePage(path: { eq: $url }) { - id - } + query($url: String) { + sitePage(path: {eq: $url}) { + id } + } `; export default class Page extends React.Component { @@ -22,20 +22,21 @@ export default class Page extends React.Component {
      {_.get(this.props, 'pageContext.frontmatter.image', null) && ( -
      +
      )}

      {_.get(this.props, 'pageContext.frontmatter.title', null)}

      {_.get(this.props, 'pageContext.frontmatter.subtitle', null) && ( -
      {htmlToReact(_.get(this.props, 'pageContext.frontmatter.subtitle', null))}
      +
      + {htmlToReact(_.get(this.props, 'pageContext.frontmatter.subtitle', null))} +
      )}
      -
      {htmlToReact(_.get(this.props, 'pageContext.html', null))}
      +
      + {htmlToReact(_.get(this.props, 'pageContext.html', null))} +
      diff --git a/src/templates/post.js b/src/templates/post.js index 605c74a413..88386eeca5 100644 --- a/src/templates/post.js +++ b/src/templates/post.js @@ -9,11 +9,11 @@ import { toStyleObj, withPrefix, htmlToReact } from '../utils'; // this minimal GraphQL query ensures that when 'gatsby develop' is running, // any changes to content files are reflected in browser export const query = graphql` - query ($url: String) { - sitePage(path: { eq: $url }) { - id - } + query($url: String) { + sitePage(path: {eq: $url}) { + id } + } `; export default class Post extends React.Component { @@ -23,28 +23,24 @@ export default class Post extends React.Component {
      {_.get(this.props, 'pageContext.frontmatter.image', null) && ( -
      +
      )}
      - +

      {_.get(this.props, 'pageContext.frontmatter.title', null)}

      {_.get(this.props, 'pageContext.frontmatter.subtitle', null) && ( -
      {htmlToReact(_.get(this.props, 'pageContext.frontmatter.subtitle', null))}
      +
      + {htmlToReact(_.get(this.props, 'pageContext.frontmatter.subtitle', null))} +
      )}
      -
      {htmlToReact(_.get(this.props, 'pageContext.html', null))}
      +
      + {htmlToReact(_.get(this.props, 'pageContext.html', null))} +
      diff --git a/src/utils/attribute.js b/src/utils/attribute.js index cece0e47dc..40942764b4 100644 --- a/src/utils/attribute.js +++ b/src/utils/attribute.js @@ -1,11 +1,13 @@ export default function attribute(name, value, condition) { + if (typeof condition === 'undefined') { + condition = true; + } - return condition - ? { - [name]: value - } - : null; -} + return condition ? { + [name]: value + } : null; + +} \ No newline at end of file diff --git a/src/utils/blm-badge.js b/src/utils/blm-badge.js index db4add90ea..787b400a54 100644 --- a/src/utils/blm-badge.js +++ b/src/utils/blm-badge.js @@ -1,181 +1,327 @@ function MakerBadge(t) { + (this.userId = ''), - (this.position = 'left'), - (this.layout = 1), - (this.coffee = !1), - (this.customHTML = ''), - (this.mounted = !1), - (this.imageAlt = ''), - (this.theme = ''), - (this.title = '#BlackLivesMatter'), - (this.message = 'To be silent is to be complicit. Black lives matter.'), - (this.pic = ''), - (this.promoLink = 'https://minnesotafreedomfund.org/'), - (this.promoText = 'Send a donation ' + String.fromCodePoint(8594)); + + (this.position = 'left'), + + (this.layout = 1), + + (this.coffee = !1), + + (this.customHTML = ''), + + (this.mounted = !1), + + (this.imageAlt = ''), + + (this.theme = ''), + + (this.title = '#BlackLivesMatter'), + + (this.message = 'To be silent is to be complicit. Black lives matter.'), + + (this.pic = ''), + + (this.promoLink = 'https://minnesotafreedomfund.org/'), + + (this.promoText = 'Send a donation ' + String.fromCodePoint(8594)); + } MakerBadge.prototype = { + constructor: MakerBadge, - init: function (t, e) { + init: function(t, e) { + t.id && (this.userId = t.id), + t.position && (this.position = t.position), + t.layout && (this.layout = t.layout), + t.promoText && (this.promoText = t.promoText), + t.promoLink && (this.promoLink = t.promoLink), + t.imageAlt && (this.imageAlt = t.imageAlt), + t.theme && (this.theme = t.theme), + t.title && (this.title = t.title), + t.message && (this.message = t.message), + t.customHTML && (this.customHTML = t.customHTML), + this.layout && - t.pic && - (this.pic = - '' +
-                    (t.imageAlt ? t.imageAlt : 'Black Lives Matter Badge') +
-                    '  '), + + t.pic && + + (this.pic = + + '' +
+
+                (t.imageAlt ? t.imageAlt : 'Black Lives Matter Badge') +
+
+                '  '), + (this.mounted = !0), + this.run(e); + }, - run: function (t) { + run: function(t) { + const e = document.querySelector('html'), + i = document.createElement('div'), + a = document.createElement('div'), + o = document.createElement('div'), + n = document.createElement('div'), + s = document.createElement('div'), + r = document.createElement('a'), + d = document.createElement('a'), + l = document.createElement('a'); (l.style = 'display:block;margin: 0.5rem 0;font-size:10px;color:#718096;text-decoration:none;font-weight:400;'), - (l.innerHTML = 'Add this to your website'), - (l.target = '_blank'), - (l.href = 'http://blmbadge.unicornplatform.com'); + + (l.innerHTML = 'Add this to your website'), + + (l.target = '_blank'), + + (l.href = 'http://blmbadge.unicornplatform.com'); const m = document.createElement('div'); (m.innerHTML = this.customHTML), - this.setStyle(), + + this.setStyle(), + document.getElementsByTagName('head')[0].appendChild(this.style), + (o.innerHTML = 'Maker'), + (r.innerHTML = 'P'), + (r.target = '_blank'), + (r.classList = 'ph-btn'), + (i.classList = 'maker-badge'), + (o.classList = 'maker-badge__btn'), + (a.classList = 'maker-badge__content'), + (n.classList = 'maker-badge__stats'), + (s.style = 'text-align:center;margin:.5rem 0;font-weight:800;'), + (o.innerHTML = 'Maker'), + i.appendChild(o), + i.appendChild(a); let p = 0; var b = this, + g = 'https://tinify-bucket.s3-us-west-1.amazonaws.com/blm-blue-round.png', + c = ''; 'dark' == b.theme - ? (g = 'https://tinify-bucket.s3-us-west-1.amazonaws.com/blm-blue-round.png') - : 'light' == b.theme && - ((g = 'https://tinify-bucket.s3-us-west-1.amazonaws.com/blm-white-round.png'), 2 == b.layout && (c = 'border:1px solid #cbd5e0;')); + + ? + (g = 'https://tinify-bucket.s3-us-west-1.amazonaws.com/blm-blue-round.png') + + : + 'light' == b.theme && + + ((g = 'https://tinify-bucket.s3-us-west-1.amazonaws.com/blm-white-round.png'), 2 == b.layout && (c = 'border:1px solid #cbd5e0;')); const h = b.pic ? b.pic : g, + u = - '' +
-                (b.imageAlt ? b.imageAlt : 'Black Lives Matter Badge') +
-                '  ', + + '' +
+
+            (b.imageAlt ? b.imageAlt : 'Black Lives Matter Badge') +
+
+            '  ', + x = b.title ? b.title : '#BlackLivesMatter'; 1 === b.layout ? (o.innerHTML = u + x) : 2 === b.layout ? (o.innerHTML = u) : (o.innerHTML = u + x), + (n.innerHTML = ''), + 2 === b.layout && (a.innerHTML += '
      ' + x + '
      '), + (a.innerHTML += '
      ' + b.message + '
      '), + (n.innerHTML += + '
      '), + a.appendChild(n), + b.twitter && a.appendChild(d), + b.customHTML && a.appendChild(m), + a.appendChild(l), + e.appendChild(i), + (p = i.clientHeight), + 2 === b.layout ? (i.style.bottom = 'calc(-' + p + 'px + 76px)') : (i.style.bottom = 'calc(-' + p + 'px + 50px)'), + i.classList.add('transition'), + (i.style.visibility = 'visible'), + t && t(), + o.addEventListener('click', () => { + i.classList.contains('isOpen') - ? (2 === b.layout - ? i.setAttribute('style', 'visibility:visible;bottom:calc(-' + p + 'px + 76px)') - : i.setAttribute('style', 'visibility:visible;bottom:calc(-' + p + 'px + 50px)'), - i.classList.remove('isOpen')) - : (i.setAttribute('style', 'visibility:visible;'), i.classList.add('isOpen')); + + ? + (2 === b.layout + + ? + i.setAttribute('style', 'visibility:visible;bottom:calc(-' + p + 'px + 76px)') + + : + i.setAttribute('style', 'visibility:visible;bottom:calc(-' + p + 'px + 50px)'), + + i.classList.remove('isOpen')) + + : + (i.setAttribute('style', 'visibility:visible;'), i.classList.add('isOpen')); + }); + }, - setStyle: function () { + setStyle: function() { + let t = '.isOpen{bottom: 0;}'; if (((this.style = document.createElement('style')), (this.style.type = 'text/css'), 1 === this.layout)) { + var e = + '.ph-btn{margin: 0 auto; height: 30px; width: 30px; text-align: left; line-height: 30px; background: #da552f; display: block; border-radius: 50%; font-size: 1rem; color: #fff; text-decoration: none; font-weight: 800;}'; const i = '.maker-badge, .maker-badge *,.maker-badge *:before,.maker-badge *:after{box-sizing: border-box;}', + a = - '.maker-badge{z-index:99;max-width:200px;color:#2b2b2b;font-size:16px;font-family:helvetica;text-align:right;height:auto;min-width:160px;position:fixed;bottom:-100%;' + - this.position + - ':0;border-top-left-radius:6px;}', + + '.maker-badge{z-index:99;max-width:200px;color:#2b2b2b;font-size:16px;font-family:helvetica;text-align:right;height:auto;min-width:160px;position:fixed;bottom:-100%;' + + + this.position + + + ':0;border-top-left-radius:6px;}', + o = '.maker-badge__content{text-align:left;font-size:.9rem;border: 1px solid #cbd5e0;padding:.5rem;display:block;background:#fff;height:100%;}', + n = - '.maker-badge__btn{display:flex;align-items:center;height:50px;line-height:50px;padding: 0 .5rem;cursor:pointer;border:1px solid #cbd5e0;border-bottom:0;background:#fff;border-top-left-radius:6px;color:#2d3748;}', + + '.maker-badge__btn{display:flex;align-items:center;height:50px;line-height:50px;padding: 0 .5rem;cursor:pointer;border:1px solid #cbd5e0;border-bottom:0;background:#fff;border-top-left-radius:6px;color:#2d3748;}', + s = '.maker-badge__stats{list-style: none;padding: 0;margin: .3rem 0;} .maker-badge__stats li {margin: .3rem 0}', + r = '.maker-badge__btn-img {border-radius: 50%;}'; this.style.innerHTML = '.transition {transition: all .3s ease}' + r + s + i + a + o + n + e + t; + } if (2 === this.layout) { + t = + '.isOpen{ bottom: 0;} .isOpen .maker-badge__btn { margin-bottom: -20px; z-index: 99;} .isOpen .maker-badge__content{ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); }'; e = + '.ph-btn{margin: 0 auto; height: 30px; width: 30px; text-align: left; line-height: 30px; background: #da552f; display: block; border-radius: 50%; font-size: 1rem; color: #fff; text-decoration: none; font-weight: 800;}'; const i = '.maker-badge, .maker-badge *,.maker-badge *:before,.maker-badge *:after{box-sizing: border-box;}', + a = - '.maker-badge{z-index:99;visibility:hidden;color:#2b2b2b;font-size:16px;font-family:helvetica;text-align:' + - this.position + - ';height:auto;min-width:160px;position:fixed;bottom:-100%;' + - this.position + - ':0;border-top-left-radius:6px;}', + + '.maker-badge{z-index:99;visibility:hidden;color:#2b2b2b;font-size:16px;font-family:helvetica;text-align:' + + + this.position + + + ';height:auto;min-width:160px;position:fixed;bottom:-100%;' + + + this.position + + + ':0;border-top-left-radius:6px;}', + o = - '.maker-badge__content{ position:relative; text-align:left; font-size:.9rem; border: 1px solid #cbd5e0; padding:1rem; border-top-left-radius:.5rem; border-top-right-radius:.5rem; display:block; background:#fff; height:100%;} .maker-badge__content::before{ content:""; display: block; position: absolute; top: -10px; ' + - this.position + - ': 25px; width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #fff;', + + '.maker-badge__content{ position:relative; text-align:left; font-size:.9rem; border: 1px solid #cbd5e0; padding:1rem; border-top-left-radius:.5rem; border-top-right-radius:.5rem; display:block; background:#fff; height:100%;} .maker-badge__content::before{ content:""; display: block; position: absolute; top: -10px; ' + + + this.position + + + ': 25px; width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #fff;', + n = - '.maker-badge__btn{ transition: all .3s ease; display: inline-flex; justify-content: right; align-items: center; cursor: pointer; position: relative; text-align: center; width: 44px; height: 44px; z-index: 99; margin: 20px 10px; border-radius: 50%;} .maker-badge__btn:hover .maker-badge__btn-img {transform:scale(1.1);box-shadow:0px 0px 10px rgba(0,0,0,0.5);} .isOpen .maker-badge__btn-img {top:15px;}', + + '.maker-badge__btn{ transition: all .3s ease; display: inline-flex; justify-content: right; align-items: center; cursor: pointer; position: relative; text-align: center; width: 44px; height: 44px; z-index: 99; margin: 20px 10px; border-radius: 50%;} .maker-badge__btn:hover .maker-badge__btn-img {transform:scale(1.1);box-shadow:0px 0px 10px rgba(0,0,0,0.5);} .isOpen .maker-badge__btn-img {top:15px;}', + s = '.maker-badge__stats{list-style: none;padding: 0;margin: .3rem 0;} .maker-badge__stats li {margin: .3rem 0}', + r = - '.maker-badge__btn-img { border-radius: 50%; width: 44px; position: absolute; top: 0; right: 0; left: 0; bottom: 0; transition: all .3s ease; margin: auto;}'; + + '.maker-badge__btn-img { border-radius: 50%; width: 44px; position: absolute; top: 0; right: 0; left: 0; bottom: 0; transition: all .3s ease; margin: auto;}'; this.style.innerHTML = '.transition {transition: all .3s ease}' + r + s + i + a + n + e + t + o; + } + } + }; -var BLMBadge = new MakerBadge(); +var BLMBadge = new MakerBadge(); \ No newline at end of file diff --git a/src/utils/classNames.js b/src/utils/classNames.js index eb5527bab7..99ce85f4ba 100644 --- a/src/utils/classNames.js +++ b/src/utils/classNames.js @@ -1,9 +1,13 @@ import classnames from 'classnames'; + + // A simple wrapper around classNames to return null, if no classes were generated // Otherwise, original classNames returns empty string which causes class="" to be generated export default function classNames(...args) { + return classnames.call(this, ...args) || null; -} + +} \ No newline at end of file diff --git a/src/utils/cycler.js b/src/utils/cycler.js index cd73e90ebf..70a412a2d5 100644 --- a/src/utils/cycler.js +++ b/src/utils/cycler.js @@ -1,9 +1,13 @@ export default function cycler() { + const args = Array.prototype.slice.call(arguments); let index = 0; return { + next: () => args[index++ % args.length] + }; -} + +} \ No newline at end of file diff --git a/src/utils/getData.js b/src/utils/getData.js index cf8af607fb..7a5378c1d4 100644 --- a/src/utils/getData.js +++ b/src/utils/getData.js @@ -1,10 +1,15 @@ import _ from 'lodash'; + + export default function getData(siteData, dataPath) { + dataPath = _.trim(dataPath, '/'); if (_.startsWith(dataPath, 'src/data/')) { + dataPath = dataPath.replace('src/data/', ''); + } // remove extension @@ -14,4 +19,5 @@ export default function getData(siteData, dataPath) { const path = dataPath.split('/'); return _.get(siteData, path); -} + +} \ No newline at end of file diff --git a/src/utils/getPage.js b/src/utils/getPage.js index d2ee2677aa..d29c51eae0 100644 --- a/src/utils/getPage.js +++ b/src/utils/getPage.js @@ -1,5 +1,7 @@ import _ from 'lodash'; + + /** * Get the page at the provided `urlPath`. @@ -15,13 +17,19 @@ import _ from 'lodash'; */ export default function getPage(pages, urlPath) { + urlPath = _.trim(urlPath, '/'); urlPath = urlPath.replace(/^src\/pages\//, ''); + + return _.find(pages, (page) => { + const pageUrlPath = _.trim(_.get(page, 'url'), '/'); return urlPath === pageUrlPath; + }); -} + +} \ No newline at end of file diff --git a/src/utils/getPageByFilePath.js b/src/utils/getPageByFilePath.js index 015e9ecc22..b34707f08e 100644 --- a/src/utils/getPageByFilePath.js +++ b/src/utils/getPageByFilePath.js @@ -1,5 +1,7 @@ import _ from 'lodash'; + + /** * Get the page at the provided `filePath`. @@ -15,13 +17,19 @@ import _ from 'lodash'; */ export default function getPageByFilePath(pages, filePath) { + filePath = _.trim(filePath, '.md'); const urlPath = filePath.replace(/^\/?src\/pages\//, ''); + + return _.find(pages, (page) => { + const pageUrlPath = _.trim(_.get(page, 'url'), '/'); return urlPath === pageUrlPath; + }); -} + +} \ No newline at end of file diff --git a/src/utils/getPages.js b/src/utils/getPages.js index 5a52b7d560..6989c4975e 100644 --- a/src/utils/getPages.js +++ b/src/utils/getPages.js @@ -1,5 +1,7 @@ import _ from 'lodash'; + + /** * Get all the pages located under the provided `urlPath`, not including the @@ -51,15 +53,19 @@ import _ from 'lodash'; */ export default function getPages(pages, urlPath) { + urlPath = _.trim(urlPath, '/'); const urlPathParts = _.split(urlPath, '/'); return _.filter(pages, (page) => { + const pageUrlPath = _.trim(page.url, '/'); const pageUrlParts = _.split(pageUrlPath, '/'); return pageUrlParts.length > urlPathParts.length && _.isEqual(pageUrlParts.slice(0, urlPathParts.length), urlPathParts); + }); -} + +} \ No newline at end of file diff --git a/src/utils/htmlToReact.js b/src/utils/htmlToReact.js index 5d9307cd1f..6745230034 100644 --- a/src/utils/htmlToReact.js +++ b/src/utils/htmlToReact.js @@ -1,6 +1,8 @@ import React from 'react'; -import ReactHtmlParser, { convertNodeToElement } from 'react-html-parser'; +import ReactHtmlParser, { + convertNodeToElement +} from 'react-html-parser'; import ScriptTag from 'react-script-tag'; @@ -8,26 +10,58 @@ import Link from './link'; import _ from 'lodash'; + + const convertChildren = (children, index) => _.map(children, (childNode) => convertNodeToElement(childNode, index, _.noop())); + + export default function htmlToReact(html) { + if (!html) { + return null; + } return ReactHtmlParser(html, { + transform: (node, index) => { + if (node.type === 'script') { + if (!_.isEmpty(node.children)) { + return ( - - {convertChildren(node.children, index)} - + + < + ScriptTag key = { + index + } { + ...node.attribs + } > + + { + convertChildren(node.children, index) + } + + + ); + } else { - return ; + + return ; + } + } else if (node.type === 'tag' && node.name === 'a') { + const href = node.attribs.href; const props = _.omit(node.attribs, 'href'); @@ -35,13 +69,33 @@ export default function htmlToReact(html) { // use Link only if there are no custom attributes like style, class, and what's not that might break react if (_.isEmpty(props)) { + return ( - - {convertChildren(node.children, index)} - + + < + Link key = { + index + } + to = { + href + } { + ...props + } > + + { + convertChildren(node.children, index) + } + + + ); + } + } + } + }); -} + +} \ No newline at end of file diff --git a/src/utils/index.js b/src/utils/index.js index 288d7c4411..3f477e671c 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,27 +1,69 @@ -export { default as attribute } from './attribute'; +export { + default as attribute +} +from './attribute'; -export { default as classNames } from './classNames'; +export { + default as classNames +} +from './classNames'; -export { default as cycler } from './cycler'; +export { + default as cycler +} +from './cycler'; -export { default as getPage } from './getPage'; +export { + default as getPage +} +from './getPage'; -export { default as getPageByFilePath } from './getPageByFilePath'; +export { + default as getPageByFilePath +} +from './getPageByFilePath'; -export { default as getPages } from './getPages'; +export { + default as getPages +} +from './getPages'; -export { default as getData } from './getData'; +export { + default as getData +} +from './getData'; -export { default as htmlToReact } from './htmlToReact'; +export { + default as htmlToReact +} +from './htmlToReact'; -export { default as toUrl } from './toUrl'; +export { + default as toUrl +} +from './toUrl'; -export { default as pathJoin } from './pathJoin'; +export { + default as pathJoin +} +from './pathJoin'; -export { default as markdownify } from './markdownify'; +export { + default as markdownify +} +from './markdownify'; -export { default as withPrefix } from './withPrefix'; +export { + default as withPrefix +} +from './withPrefix'; -export { default as toStyleObj } from './toStyleObj'; +export { + default as toStyleObj +} +from './toStyleObj'; -export { default as Link } from './link'; +export { + default as Link +} +from './link'; \ No newline at end of file diff --git a/src/utils/link.js b/src/utils/link.js index ae5b782522..02a5666632 100644 --- a/src/utils/link.js +++ b/src/utils/link.js @@ -1,6 +1,10 @@ import React from 'react'; -import { Link as GatsbyLink } from 'gatsby'; +import { + Link as GatsbyLink +} from 'gatsby'; + + // Since DOM elements cannot receive activeClassName @@ -8,7 +12,14 @@ import { Link as GatsbyLink } from 'gatsby'; // pass it only to GatsbyLink -export default function Link({ children, to, activeClassName, partiallyActive, ...other }) { +export default function Link({ + children, + to, + activeClassName, + partiallyActive, + ...other +}) { + // Tailor the following test to your environment. // This example assumes that any internal link (intended for Gatsby) @@ -17,19 +28,54 @@ export default function Link({ children, to, activeClassName, partiallyActive, . const internal = /^\/(?!\/)/.test(to); + + // Use Gatsby Link for internal links, and for others if (internal) { + return ( - - {children} - - ); - } - - return ( - - {children} - - ); -} + + < + GatsbyLink to={ + to + } + activeClassName={ + activeClassName + } + partiallyActive={ + partiallyActive + } { + ...other + } > + + { + children + } + + < + /GatsbyLink> + + ); + + } + + return ( + + < + a href={ + to + } { + ...other + } > + + { + children + } + + < + /a> + + ); + +} \ No newline at end of file diff --git a/src/utils/markdownify.js b/src/utils/markdownify.js index b0ed2736e6..a54c05f896 100644 --- a/src/utils/markdownify.js +++ b/src/utils/markdownify.js @@ -2,10 +2,16 @@ import marked from 'marked'; import htmlToReact from './htmlToReact'; + + export default function markdownify(markdown) { + if (!markdown) { + return null; + } return htmlToReact(marked(markdown)); -} + +} \ No newline at end of file diff --git a/src/utils/pathJoin.js b/src/utils/pathJoin.js index cfdc3355c0..c00dc4d542 100644 --- a/src/utils/pathJoin.js +++ b/src/utils/pathJoin.js @@ -1,6 +1,9 @@ import _ from 'lodash'; + + export default function pathJoin(...pathParts) { + const result = _.compact(pathParts) .join('/') @@ -8,4 +11,5 @@ export default function pathJoin(...pathParts) { .replace(/\/{2,}/g, '/'); return result || '.'; -} + +} \ No newline at end of file diff --git a/src/utils/toStyleObj.js b/src/utils/toStyleObj.js index 1b8f2620bc..6481b0c52e 100644 --- a/src/utils/toStyleObj.js +++ b/src/utils/toStyleObj.js @@ -1,17 +1,25 @@ import _ from 'lodash'; + + export default function toStyleObj(styleAttr) { + return styleAttr.split(';').reduce((accumulator, pair) => { + pair = pair.trim(); if (_.isEmpty(pair)) { + return accumulator; + } let index = pair.indexOf(':'); if (index === -1) { + throw new Error('Could not split style attribute into names and values'); + } let name = _.camelCase(pair.substring(0, index).trim()); @@ -19,5 +27,7 @@ export default function toStyleObj(styleAttr) { accumulator[name] = pair.substring(index + 1).trim(); return accumulator; + }, {}); -} + +} \ No newline at end of file diff --git a/src/utils/toUrl.js b/src/utils/toUrl.js index 4b4ae1455d..5e15126e36 100644 --- a/src/utils/toUrl.js +++ b/src/utils/toUrl.js @@ -2,10 +2,16 @@ import _ from 'lodash'; import getPage from './getPage'; + + export default function toUrl(pages, pagePath) { + if (_.startsWith(pagePath, '#')) { + return pagePath; + } else { + // remove extension pagePath = pagePath.replace(/\.\w+$/, ''); @@ -13,9 +19,13 @@ export default function toUrl(pages, pagePath) { const page = getPage(pages, pagePath); if (!page) { + throw new Error('could not find page with path: ' + pagePath); + } return page.url; + } -} + +} \ No newline at end of file diff --git a/src/utils/withPrefix.js b/src/utils/withPrefix.js index 0d77fa5a75..26316f04ef 100644 --- a/src/utils/withPrefix.js +++ b/src/utils/withPrefix.js @@ -1,15 +1,27 @@ -const { withPrefix: gatsbyWithPrefix } = require('gatsby'); +const { + withPrefix: gatsbyWithPrefix +} = require('gatsby'); const _ = require('lodash'); + + export default function withPrefix(url) { + if (!url) { + return url; + } + + if (_.startsWith(url, '#') || _.startsWith(url, 'http://') || _.startsWith(url, 'https://')) { + return url; + } return gatsbyWithPrefix(url); -} + +} \ No newline at end of file From 8580d93c42c1b187ab70a0ac49d4731d24acddd1 Mon Sep 17 00:00:00 2001 From: Bryan Guner Date: Wed, 2 Mar 2022 03:59:04 -0500 Subject: [PATCH 3/6] notes --- .vscode/settings.json | 13 +- .../2015-12-29-insert-item-inside-an-array.md | 179 + .../2016-01-03-improve-nested-conditionals.md | 97 + ...orting-strings-with-accented-characters.md | 62 + ...-differences-between-undefined-and-null.md | 43 + ...-method-for-arrays-and-a-single-element.md | 31 + .../2016-01-07-use-strict-and-get-lazy.md | 59 + ...1-08-converting-a-node-list-to-an-array.md | 53 + docs/content/2016-01-09-template-strings.md | 41 + ...1-10-check-if-a-property-is-in-a-object.md | 55 + docs/content/2016-01-11-hoisting.md | 44 + ...domandatory-parameters-in-es6-functions.md | 22 + ...asure-performance-of-a-javascript-block.md | 30 + .../content/2016-01-14-fat-arrow-functions.md | 101 + ...y-of-using-indexof-as-a-contains-clause.md | 74 + ...passing-arguments-to-callback-functions.md | 49 + ...dejs-run-a-module-if-it-is-not-required.md | 23 + .../2016-01-18-rounding-the-fast-way.md | 117 + .../2016-01-19-safe-string-concatenation.md | 31 + ...objects-to-enable-chaining-of-functions.md | 28 + docs/content/2016-01-21-shuffle-an-array.md | 31 + .../2016-01-22-two-ways-to-empty-an-array.md | 57 + ...016-01-23-converting-to-number-fast-way.md | 23 + .../2016-01-24-use_===_instead_of_==.md | 24 + ...immediately-invoked-function-expression.md | 38 + ...filtering-and-sorting-a-list-of-strings.md | 237 + ...16-01-27-short-circuit-evaluation-in-js.md | 75 + ...2016-01-28-curry-vs-partial-application.md | 106 + ...up-recursive-functions-with-memoization.md | 85 + ...nverting-truthy-falsy-values-to-boolean.md | 22 + ...tions\342\200\224it-kills-optimization.md" | 38 + ...escue-adding-order-to-object-properties.md | 70 + ...reate-range-0...n-easily-using-one-line.md | 61 + ...6-02-03-implementing-asynchronous-loops.md | 92 + .../2016-02-04-assignment-shorthands.md | 120 + .../content/2016-02-05-observe-dom-changes.md | 59 + .../2016-02-06-deduplicate-an-array.md | 126 + ...g-multidimensional-arrays-in-javascript.md | 75 + .../content/2016-02-08-advanced-properties.md | 111 + .../2016-02-09-using-json-stringify.md | 57 + .../2016-02-10-array-average-and-median.md | 59 + .../2016-02-11-preventing-unapply-attacks.md | 50 + ...se-destructuring-in-function-parameters.md | 93 + .../2016-02-13-know-the-passing-mechanism.md | 57 + ...lculate-the-max-min-value-from-an-array.md | 37 + ...-02-15-detect-document-ready-in-pure-js.md | 39 + .../content/2016-02-16-basics-declarations.md | 81 + ...7-reminders-about-reduce-function-usage.md | 113 + ...016-02-26-extract-unix-timestamp-easily.md | 50 + .../2016-03-03-helpful-console-log-hacks.md | 27 + ...016-03-16-DOM-event-listening-made-easy.md | 70 + ...-05-return-values-with-the-new-operator.md | 83 + docs/content/2016-04-21-get-file-extension.md | 80 + .../2016-05-06-use-optional-arguments.md | 88 + .../2016-05-12-make-easy-loop-on-array.md | 105 + docs/content/2016-08-02-copy-to-clipboard.md | 29 + .../2016-08-10-comma-operaton-in-js.md | 71 + ...16-08-17-break-continue-loop-functional.md | 84 + docs/content/2016-08-25-keyword-var-vs-let.md | 100 + docs/content/2016-10-28-three-useful-hacks.md | 58 + ...2017-01-19-binding-objects-to-functions.md | 64 + ...17-03-09-working-with-websocket-timeout.md | 32 + docs/content/2017-03-12-3-array-hacks.md | 67 + .../2017-03-16-tapping-for-quick-debugging.md | 76 + ...ecursion-iteration-and-tail-calls-in-js.md | 152 + ...-use-Object.is()-in-equality-comparison.md | 42 + ...picking-and-rejecting-object-properties.md | 56 + .../2017-04-11-protocols-for-the-brave.md | 90 + ...ng-your-async-functions-with-webworkers.md | 73 + .../2017-06-14-closures-inside-loops.md | 64 + ...-06-14-immutable-structures-and-cloning.md | 64 + .../content/2017-06-15-looping-over-arrays.md | 117 + ...17-09-01-hash-maps-without-side-effects.md | 50 + ...-immutable-objects-in-native-javascript.md | 85 + ...-10-13-what-is-a-functional-inheritance.md | 38 + .../2020-10-15-what-is-a-currying-function.md | 39 + ...20-10-20-what-is-the-temporal-dead-zone.md | 31 + ...erence-between-target-and-currentTarget.md | 28 + .../2020-10-27-what-is-a-spread-operator.md | 44 + .../2020-11-04-what-is-a-void-operator.md | 26 + ...2020-11-17-what-is-the-promise-executor.md | 26 + ...what-is-the-javascript-ternary-operator.md | 34 + docs/content/cheat-sheets/CHEATSHEET.md | 2638 ++- docs/content/cheat-sheets/Theme.css | 348 +- docs/content/cheat-sheets/Theme.html | 42 +- docs/content/cheat-sheets/emmet.md | 135 +- docs/content/cheat-sheets/react.js | 4 +- docs/content/cheat-sheets/vscode.md | 74 +- .../Add-site-search-w-algolia.md.md | 81 +- .../Adding-search-2-gatsby-site.md.md | 60 +- .../BasicWebDevelopmentEnvironmentSetup.md.md | 5 +- notes/BGOONZ_BLOG_2.0.wiki/DOM-standard.md.md | 5380 +++--- .../Data-Structures.md.md | 448 +- notes/BGOONZ_BLOG_2.0.wiki/Home.md | 18 +- .../Netlify-Injected-Content.md | 14265 ++++++++-------- notes/BGOONZ_BLOG_2.0.wiki/SEO.md.md | 858 +- .../add-copy-to-code-blocks.md.md | 144 +- .../adding-mailing-list.md.md | 41 +- notes/BGOONZ_BLOG_2.0.wiki/ajax-starter.md.md | 11 +- notes/BGOONZ_BLOG_2.0.wiki/analytics.md.md | 3 +- .../anatomy-of-search-engine.md.md | 113 +- notes/BGOONZ_BLOG_2.0.wiki/awesome.md.md | 1258 +- notes/BGOONZ_BLOG_2.0.wiki/bookmarks.md.md | 5744 +++---- notes/BGOONZ_BLOG_2.0.wiki/broken-links.md.md | 404 +- notes/BGOONZ_BLOG_2.0.wiki/config-info.md.md | 10 +- .../configure-custom-domain.md.md | 52 +- .../contentauthoring.md.md | 77 +- .../custom-search-bar.md.md | 175 +- .../dependency-graph.md.md | 59 +- .../full-text-search-w-lunar.md.md | 82 +- .../github-actions-full-doc.md.md | 113 +- .../google-custom-search.md.md | 180 +- .../google-search-algo.md.md | 16 +- .../google-webmaster-guidelines.md.md | 40 +- notes/BGOONZ_BLOG_2.0.wiki/inject-4.md.md | 73 +- notes/BGOONZ_BLOG_2.0.wiki/inject3.md.md | 32 +- notes/BGOONZ_BLOG_2.0.wiki/inject4.md.md | 58 +- .../injected-content-part2.md.md | 257 +- .../injected-js-part4.md.md | 57 +- .../BGOONZ_BLOG_2.0.wiki/injected-part3.md.md | 48 +- notes/BGOONZ_BLOG_2.0.wiki/js-notes.md.md | 4628 ++--- .../BGOONZ_BLOG_2.0.wiki/links-2-embed.md.md | 299 +- .../BGOONZ_BLOG_2.0.wiki/links-to-remember.md | 397 +- .../BGOONZ_BLOG_2.0.wiki/list-of-links.md.md | 523 - notes/BGOONZ_BLOG_2.0.wiki/netlify-tips.md.md | 88 +- notes/BGOONZ_BLOG_2.0.wiki/node-guide.md.md | 462 +- .../old-version-of-index.md.md | 580 +- .../optimize-vscode.md.md | 39 +- .../possibly-useful-snippets.md.md | 66 +- .../BGOONZ_BLOG_2.0.wiki/privacy-policy.md.md | 101 +- notes/BGOONZ_BLOG_2.0.wiki/random-stuff.md.md | 10 +- notes/BGOONZ_BLOG_2.0.wiki/random.md.md | 9 +- .../BGOONZ_BLOG_2.0.wiki/readfile-guide.md.md | 29 +- notes/BGOONZ_BLOG_2.0.wiki/ref-type.md | 50 +- .../search-engine-simulation.md.md | 264 +- notes/BGOONZ_BLOG_2.0.wiki/sourcecode.md.md | 647 +- notes/Combined_____-_____Doc.md | 5378 +++--- ...L--PostgreSQL-and-Sequelize-To-Build-.html | 1807 ++ ...Penultimate-Web-Developer-s-Cheat-Sheet.md | 4 +- .../The-Penultimate-Web-Developer-s-Cheat.md | 4 +- ...tion--and-Sorting-Algorithms-by-Example.md | 305 + ...Personal-Arsenal-Of-Convenience-Scripts.md | 2 +- ...Study-Guide-for-a-JavaScript-Programmer.md | 8 +- .../gatsby-plugin-disqus.wiki/Configure.md | 28 + .../gatsby-plugin-disqus.wiki/Contributing.md | 17 + .../gatsby-plugin-disqus.wiki/Home.md | 21 + .../gatsby-plugin-disqus.wiki/Usage.md | 27 + notes/scrap/scrap.css | 46 + 148 files changed, 30663 insertions(+), 23910 deletions(-) create mode 100644 docs/content/2015-12-29-insert-item-inside-an-array.md create mode 100644 docs/content/2016-01-03-improve-nested-conditionals.md create mode 100644 docs/content/2016-01-04-sorting-strings-with-accented-characters.md create mode 100644 docs/content/2016-01-05-differences-between-undefined-and-null.md create mode 100644 docs/content/2016-01-06-writing-a-single-method-for-arrays-and-a-single-element.md create mode 100644 docs/content/2016-01-07-use-strict-and-get-lazy.md create mode 100644 docs/content/2016-01-08-converting-a-node-list-to-an-array.md create mode 100644 docs/content/2016-01-09-template-strings.md create mode 100644 docs/content/2016-01-10-check-if-a-property-is-in-a-object.md create mode 100644 docs/content/2016-01-11-hoisting.md create mode 100644 docs/content/2016-01-12-pseudomandatory-parameters-in-es6-functions.md create mode 100644 docs/content/2016-01-13-tip-to-measure-performance-of-a-javascript-block.md create mode 100644 docs/content/2016-01-14-fat-arrow-functions.md create mode 100644 docs/content/2016-01-15-even-simpler-way-of-using-indexof-as-a-contains-clause.md create mode 100644 docs/content/2016-01-16-passing-arguments-to-callback-functions.md create mode 100644 docs/content/2016-01-17-nodejs-run-a-module-if-it-is-not-required.md create mode 100644 docs/content/2016-01-18-rounding-the-fast-way.md create mode 100644 docs/content/2016-01-19-safe-string-concatenation.md create mode 100644 docs/content/2016-01-20-return-objects-to-enable-chaining-of-functions.md create mode 100644 docs/content/2016-01-21-shuffle-an-array.md create mode 100644 docs/content/2016-01-22-two-ways-to-empty-an-array.md create mode 100644 docs/content/2016-01-23-converting-to-number-fast-way.md create mode 100644 docs/content/2016-01-24-use_===_instead_of_==.md create mode 100644 docs/content/2016-01-25-Using-immediately-invoked-function-expression.md create mode 100644 docs/content/2016-01-26-filtering-and-sorting-a-list-of-strings.md create mode 100644 docs/content/2016-01-27-short-circuit-evaluation-in-js.md create mode 100644 docs/content/2016-01-28-curry-vs-partial-application.md create mode 100644 docs/content/2016-01-29-speed-up-recursive-functions-with-memoization.md create mode 100644 docs/content/2016-01-30-converting-truthy-falsy-values-to-boolean.md create mode 100644 "docs/content/2016-01-31-avoid-modifying-or-passing-arguments-into-other-functions\342\200\224it-kills-optimization.md" create mode 100644 docs/content/2016-02-01-map-to-the-rescue-adding-order-to-object-properties.md create mode 100644 docs/content/2016-02-02-create-range-0...n-easily-using-one-line.md create mode 100644 docs/content/2016-02-03-implementing-asynchronous-loops.md create mode 100644 docs/content/2016-02-04-assignment-shorthands.md create mode 100644 docs/content/2016-02-05-observe-dom-changes.md create mode 100644 docs/content/2016-02-06-deduplicate-an-array.md create mode 100644 docs/content/2016-02-07-flattening-multidimensional-arrays-in-javascript.md create mode 100644 docs/content/2016-02-08-advanced-properties.md create mode 100644 docs/content/2016-02-09-using-json-stringify.md create mode 100644 docs/content/2016-02-10-array-average-and-median.md create mode 100644 docs/content/2016-02-11-preventing-unapply-attacks.md create mode 100644 docs/content/2016-02-12-use-destructuring-in-function-parameters.md create mode 100644 docs/content/2016-02-13-know-the-passing-mechanism.md create mode 100644 docs/content/2016-02-14-calculate-the-max-min-value-from-an-array.md create mode 100644 docs/content/2016-02-15-detect-document-ready-in-pure-js.md create mode 100644 docs/content/2016-02-16-basics-declarations.md create mode 100644 docs/content/2016-02-17-reminders-about-reduce-function-usage.md create mode 100644 docs/content/2016-02-26-extract-unix-timestamp-easily.md create mode 100644 docs/content/2016-03-03-helpful-console-log-hacks.md create mode 100644 docs/content/2016-03-16-DOM-event-listening-made-easy.md create mode 100644 docs/content/2016-04-05-return-values-with-the-new-operator.md create mode 100644 docs/content/2016-04-21-get-file-extension.md create mode 100644 docs/content/2016-05-06-use-optional-arguments.md create mode 100644 docs/content/2016-05-12-make-easy-loop-on-array.md create mode 100644 docs/content/2016-08-02-copy-to-clipboard.md create mode 100644 docs/content/2016-08-10-comma-operaton-in-js.md create mode 100644 docs/content/2016-08-17-break-continue-loop-functional.md create mode 100644 docs/content/2016-08-25-keyword-var-vs-let.md create mode 100644 docs/content/2016-10-28-three-useful-hacks.md create mode 100644 docs/content/2017-01-19-binding-objects-to-functions.md create mode 100644 docs/content/2017-03-09-working-with-websocket-timeout.md create mode 100644 docs/content/2017-03-12-3-array-hacks.md create mode 100644 docs/content/2017-03-16-tapping-for-quick-debugging.md create mode 100644 docs/content/2017-03-29-recursion-iteration-and-tail-calls-in-js.md create mode 100644 docs/content/2017-04-03-why-you-should-use-Object.is()-in-equality-comparison.md create mode 100644 docs/content/2017-04-05-picking-and-rejecting-object-properties.md create mode 100644 docs/content/2017-04-11-protocols-for-the-brave.md create mode 100644 docs/content/2017-04-24-improving-your-async-functions-with-webworkers.md create mode 100644 docs/content/2017-06-14-closures-inside-loops.md create mode 100644 docs/content/2017-06-14-immutable-structures-and-cloning.md create mode 100644 docs/content/2017-06-15-looping-over-arrays.md create mode 100644 docs/content/2017-09-01-hash-maps-without-side-effects.md create mode 100644 docs/content/2018-11-25-creating-immutable-objects-in-native-javascript.md create mode 100644 docs/content/2020-10-13-what-is-a-functional-inheritance.md create mode 100644 docs/content/2020-10-15-what-is-a-currying-function.md create mode 100644 docs/content/2020-10-20-what-is-the-temporal-dead-zone.md create mode 100644 docs/content/2020-10-22-difference-between-target-and-currentTarget.md create mode 100644 docs/content/2020-10-27-what-is-a-spread-operator.md create mode 100644 docs/content/2020-11-04-what-is-a-void-operator.md create mode 100644 docs/content/2020-11-17-what-is-the-promise-executor.md create mode 100644 docs/content/2021-02-02-what-is-the-javascript-ternary-operator.md create mode 100644 notes/articles/medium/Everything-You-Need-To-Know-About-Relational-Databases--SQL--PostgreSQL-and-Sequelize-To-Build-.html create mode 100644 notes/articles/medium/markdown/A-Quick-Guide-to-Big-O-Notation--Memoization--Tabulation--and-Sorting-Algorithms-by-Example.md create mode 100644 notes/experiments/gatsby-plugin-disqus.wiki/Configure.md create mode 100644 notes/experiments/gatsby-plugin-disqus.wiki/Contributing.md create mode 100644 notes/experiments/gatsby-plugin-disqus.wiki/Home.md create mode 100644 notes/experiments/gatsby-plugin-disqus.wiki/Usage.md create mode 100644 notes/scrap/scrap.css diff --git a/.vscode/settings.json b/.vscode/settings.json index 44240550c7..f51825fe31 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,10 +1,9 @@ { - "files.exclude": { - "**/.git": false - }, - "search.useGlobalIgnoreFiles": true, - "search.useIgnoreFiles": false, + "files.exclude": { + "**/.git": false + }, + "search.useGlobalIgnoreFiles": true, + "search.useIgnoreFiles": false, "python.pythonPath": "/bin/python3", -"liveServer.settings.port": 5501, -"git.ignoreLimitWarning": true + "liveServer.settings.port": 5501 } diff --git a/docs/content/2015-12-29-insert-item-inside-an-array.md b/docs/content/2015-12-29-insert-item-inside-an-array.md new file mode 100644 index 0000000000..f114387259 --- /dev/null +++ b/docs/content/2015-12-29-insert-item-inside-an-array.md @@ -0,0 +1,179 @@ +title: Insert item inside an Array + +tip-number: 00 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: Inserting an item into an existing array is a daily common task. You can add elements to the end of an array using push, to the beginning using unshift, or to the middle using splice. +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/insert-item-inside-an-array/ + +# Inserting an item into an existing array + +Inserting an item into an existing array is a daily common task. You can add elements to the end of an array using push, to the beginning using unshift, or to the middle using splice. + +Those are known methods, but it doesn't mean there isn't a more performant way. Here we go: + +## Adding an element at the end + +Adding an element at the end of the array is easy with push(), but it can be done in different ways. + +```javascript +var arr = [1, 2, 3, 4, 5]; +var arr2 = []; + +arr.push(6); +arr[arr.length] = 6; +arr2 = arr.concat([6]); +``` + +Both first methods modify the original array. Don't believe me? Check the [jsperf](http://jsperf.com/push-item-inside-an-array) + +### Performance on mobile : + +#### Android (v4.2.2) + +1. _arr.push(6);_ and _arr[arr.length] = 6;_ have the same performance // 3 319 694 ops/sec +2. _arr2 = arr.concat([6]);_ 50.61 % slower than the other two methods + +#### Chrome Mobile (v33.0.0) + +1. _arr[arr.length] = 6;_ // 6 125 975 ops/sec +2. _arr.push(6);_ 66.74 % slower +3. _arr2 = arr.concat([6]);_ 87.63 % slower + +#### Safari Mobile (v9) + +1. _arr[arr.length] = 6;_ // 7 452 898 ops/sec +2. _arr.push(6);_ 40.19 % slower +3. _arr2 = arr.concat([6]);_ 49.78 % slower + +```javascript +Final victor + +1. arr[arr.length] = 6; // with an average of 5 632 856 ops/sec +2. arr.push(6); // 35.64 % slower +3. arr2 = arr.concat([6]); // 62.67 % slower +``` + +### Performance on desktop + +#### Chrome (v48.0.2564) + +1. _arr[arr.length] = 6;_ // 21 602 722 ops/sec +2. _arr.push(6);_ 61.94 % slower +3. _arr2 = arr.concat([6]);_ 87.45 % slower + +#### Firefox (v44) + +1. _arr.push(6);_ // 56 032 805 ops/sec +2. _arr[arr.length] = 6;_ 0.52 % slower +3. _arr2 = arr.concat([6]);_ 87.36 % slower + +#### IE (v11) + +1. _arr[arr.length] = 6;_ // 67 197 046 ops/sec +2. _arr.push(6);_ 39.61 % slower +3. _arr2 = arr.concat([6]);_ 93.41 % slower + +#### Opera (v35.0.2066.68) + +1. _arr[arr.length] = 6;_ // 30 775 071 ops/sec +2. _arr.push(6);_ 71.60 % slower +3. _arr2 = arr.concat([6]);_ 83.70 % slower + +#### Safari (v9.0.3) + +1. _arr.push(6);_ // 42 670 978 ops/sec +2. _arr[arr.length] = 6;_ 0.80 % slower +3. _arr2 = arr.concat([6]);_ 76.07 % slower + +```javascript +Final victor + +1. arr[arr.length] = 6; // with an average of 42 345 449 ops/sec +2. arr.push(6); // 34.66 % slower +3. arr2 = arr.concat([6]); // 85.79 % slower +``` + +## Add an element at the beginning + +Now if we are trying to add an item to the beginning of the array: + +```javascript +var arr = [1, 2, 3, 4, 5]; + +arr.unshift(0); +[0].concat(arr); +``` + +Here is a little more detail: unshift edits the original array; concat returns a new array. [jsperf](http://jsperf.com/unshift-item-inside-an-array) + +### Performance on mobile : + +#### Android (v4.2.2) + +1. _[0].concat(arr);_ // 1 808 717 ops/sec +2. _arr.unshift(0);_ 97.85 % slower + +#### Chrome Mobile (v33.0.0) + +1. _[0].concat(arr);_ // 1 269 498 ops/sec +2. _arr.unshift(0);_ 99.86 % slower + +#### Safari Mobile (v9) + +1. _arr.unshift(0);_ // 3 250 184 ops/sec +2. _[0].concat(arr);_ 33.67 % slower + +```javascript +Final victor + +1. [0].concat(arr); // with an average of 4 972 622 ops/sec +2. arr.unshift(0); // 64.70 % slower +``` + +### Performance on desktop + +#### Chrome (v48.0.2564) + +1. _[0].concat(arr);_ // 2 656 685 ops/sec +2. _arr.unshift(0);_ 96.77 % slower + +#### Firefox (v44) + +1. _[0].concat(arr);_ // 8 039 759 ops/sec +2. _arr.unshift(0);_ 99.72 % slower + +#### IE (v11) + +1. _[0].concat(arr);_ // 3 604 226 ops/sec +2. _arr.unshift(0);_ 98.31 % slower + +#### Opera (v35.0.2066.68) + +1. _[0].concat(arr);_ // 4 102 128 ops/sec +2. _arr.unshift(0);_ 97.44 % slower + +#### Safari (v9.0.3) + +1. _arr.unshift(0);_ // 12 356 477 ops/sec +2. _[0].concat(arr);_ 15.17 % slower + +```javascript +Final victor + +1. [0].concat(arr); // with an average of 6 032 573 ops/sec +2. arr.unshift(0); // 78.65 % slower +``` + +## Add an element in the middle + +Adding items in the middle of an array is easy with splice, and it's the most performant way to do it. + +```javascript +var items = ['one', 'two', 'three', 'four']; +items.splice(items.length / 2, 0, 'hello'); +``` + +I tried to run these tests in various Browsers and OS and the results were similar. I hope these tips will be useful for you and encourage to perform your own tests! diff --git a/docs/content/2016-01-03-improve-nested-conditionals.md b/docs/content/2016-01-03-improve-nested-conditionals.md new file mode 100644 index 0000000000..c963d32834 --- /dev/null +++ b/docs/content/2016-01-03-improve-nested-conditionals.md @@ -0,0 +1,97 @@ +title: Improve Nested Conditionals +tip-number: 03 +tip-username: AlbertoFuente +tip-username-profile: https://github.com/AlbertoFuente +tip-tldr: How can we improve and make a more efficient nested `if` statement in javascript? + +- /en/improve-nested-conditionals/ + +How can we improve and make a more efficient nested `if` statement in javascript? + +```javascript +if (color) { + if (color === 'black') { + printBlackBackground(); + } else if (color === 'red') { + printRedBackground(); + } else if (color === 'blue') { + printBlueBackground(); + } else if (color === 'green') { + printGreenBackground(); + } else { + printYellowBackground(); + } +} +``` + +One way to improve the nested `if` statement would be using the `switch` statement. Although it is less verbose and is more ordered, it's not recommended to use it because it's so difficult to debug errors. Here's [why](https://toddmotto.com/deprecating-the-switch-statement-for-object-literals). + +```javascript +switch (color) { + case 'black': + printBlackBackground(); + break; + case 'red': + printRedBackground(); + break; + case 'blue': + printBlueBackground(); + break; + case 'green': + printGreenBackground(); + break; + default: + printYellowBackground(); +} +``` + +But what if we have a conditional with several checks in each statement? In this case, if we want it less verbose and more ordered, we can use the conditional `switch`. +If we pass `true` as a parameter to the `switch` statement, it allows us to put a conditional in each case. + +```javascript +switch (true) { + case typeof color === 'string' && color === 'black': + printBlackBackground(); + break; + case typeof color === 'string' && color === 'red': + printRedBackground(); + break; + case typeof color === 'string' && color === 'blue': + printBlueBackground(); + break; + case typeof color === 'string' && color === 'green': + printGreenBackground(); + break; + case typeof color === 'string' && color === 'yellow': + printYellowBackground(); + break; +} +``` + +If refactoring is an option, we can try to simplify the functions themselves. For example instead of having a function for each background color we could have an function that takes the color as an argument. + +```javascript +function printBackground(color) { + if (!color || typeof color !== 'string') { + return; // Invalid color, return immediately + } +} +``` + +But if refactoring is not an option, we must always avoid having several checks in every condition and avoid using `switch` as much as possible. We also must take into account that the most efficient way to do this is through an `object`. + +```javascript +var colorObj = { + black: printBlackBackground, + red: printRedBackground, + blue: printBlueBackground, + green: printGreenBackground, + yellow: printYellowBackground +}; + +if (color in colorObj) { + colorObj[color](); +} +``` + +Here you can find more information about [this](http://www.nicoespeon.com/en/2015/01/oop-revisited-switch-in-js/). diff --git a/docs/content/2016-01-04-sorting-strings-with-accented-characters.md b/docs/content/2016-01-04-sorting-strings-with-accented-characters.md new file mode 100644 index 0000000000..a8f2010ae9 --- /dev/null +++ b/docs/content/2016-01-04-sorting-strings-with-accented-characters.md @@ -0,0 +1,62 @@ +title: Sorting strings with accented characters +tip-number: 04 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: Javascript has a native method **sort** that allows sorting arrays. Doing a simple `array.sort()` will treat each array entry as a string and sort it alphabetically. But when you try order an array of non ASCII characters you will obtain a strange result. +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/sorting-strings-with-accented-characters/ + +Javascript has a native method **[sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)** that allows sorting arrays. Doing a simple `array.sort()` will treat each array entry as a string and sort it alphabetically. Also you can provide your [own custom sorting](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters) function. + +```javascript +['Shanghai', 'New York', 'Mumbai', 'Buenos Aires'].sort(); +// ["Buenos Aires", "Mumbai", "New York", "Shanghai"] +``` + +But when you try order an array of non ASCII characters like this `['é', 'a', 'ú', 'c']`, you will obtain a strange result `['c', 'e', 'á', 'ú']`. That happens because sort works only with the English language. + +See the next example: + +```javascript +// Spanish +['único', 'árbol', 'cosas', 'fútbol'].sort(); +// ["cosas", "fútbol", "árbol", "único"] // bad order + +// German +['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(); +// ["Wann", "Woche", "wäre", "wöchentlich"] // bad order +``` + +Fortunately, there are two ways to overcome this behavior [localeCompare](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare) and [Intl.Collator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator) provided by ECMAScript Internationalization API. + +> Both methods have their own custom parameters in order to configure it to work adequately. + +### Using `localeCompare()` + +```javascript +['único', 'árbol', 'cosas', 'fútbol'].sort(function (a, b) { + return a.localeCompare(b); +}); +// ["árbol", "cosas", "fútbol", "único"] + +['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(function (a, b) { + return a.localeCompare(b); +}); +// ["Wann", "wäre", "Woche", "wöchentlich"] +``` + +### Using `Intl.Collator()` + +```javascript +['único', 'árbol', 'cosas', 'fútbol'].sort(Intl.Collator().compare); +// ["árbol", "cosas", "fútbol", "único"] + +['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(Intl.Collator().compare); +// ["Wann", "wäre", "Woche", "wöchentlich"] +``` + +- For each method you can customize the location. +- According to [Firefox](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare#Performance) Intl.Collator is faster when comparing large numbers of strings. + +So when you are working with arrays of strings in a language other than English, remember to use this method to avoid unexpected sorting. diff --git a/docs/content/2016-01-05-differences-between-undefined-and-null.md b/docs/content/2016-01-05-differences-between-undefined-and-null.md new file mode 100644 index 0000000000..e1d03cc7f6 --- /dev/null +++ b/docs/content/2016-01-05-differences-between-undefined-and-null.md @@ -0,0 +1,43 @@ +title: Differences between `undefined` and `null` +tip-number: 05 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: Understanding the differences between `undefined` and `null`. +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/differences-between-undefined-and-null/ + +- `undefined` means a variable has not been declared, or has been declared but has not yet been assigned a value +- `null` is an assignment value that means "no value" +- Javascript sets unassigned variables with a default value of `undefined` +- Javascript never sets a value to `null`. It is used by programmers to indicate that a `var` has no value. +- `undefined` is not valid in JSON while `null` is +- `undefined` typeof is `undefined` +- `null` typeof is an `object`. [Why?](http://www.2ality.com/2013/10/typeof-null.html) +- Both are primitives +- Both are [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) + (`Boolean(undefined) // false`, `Boolean(null) // false`) +- You can know if a variable is [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined) + + ```javascript + typeof variable === 'undefined'; + ``` + +```` +- You can check if a variable is [null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null) + + ```javascript + variable === null +```` + +- The **equality** operator considers them equal, but the **identity** doesn't + + ```javascript + null == undefined; // true + + null === undefined; // false + ``` + +``` + +``` diff --git a/docs/content/2016-01-06-writing-a-single-method-for-arrays-and-a-single-element.md b/docs/content/2016-01-06-writing-a-single-method-for-arrays-and-a-single-element.md new file mode 100644 index 0000000000..36b719fa3b --- /dev/null +++ b/docs/content/2016-01-06-writing-a-single-method-for-arrays-and-a-single-element.md @@ -0,0 +1,31 @@ +title: Writing a single method for arrays and a single element +tip-number: 06 +tip-username: mattfxyz +tip-username-profile: https://twitter.com/mattfxyz +tip-tldr: Rather than writing separate methods to handle an array and a single element parameter, write your functions so they can handle both. This is similar to how some of jQuery's functions work (`css` will modify everything matched by the selector). + +- /en/writing-a-single-method-for-arrays-and-a-single-element/ + +Rather than writing separate methods to handle an array and a single element parameter, write your functions so they can handle both. This is similar to how some of jQuery's functions work (`css` will modify everything matched by the selector). + +You just have to concat everything into an array first. `Array.concat` will accept an array or a single element. + +```javascript +function printUpperCase(words) { + var elements = [].concat(words || []); + for (var i = 0; i < elements.length; i++) { + console.log(elements[i].toUpperCase()); + } +} +``` + +`printUpperCase` is now ready to accept a single node or an array of nodes as its parameter. It also avoids the potential `TypeError` that would be thrown if no parameter was passed. + +```javascript +printUpperCase('cactus'); +// => CACTUS +printUpperCase(['cactus', 'bear', 'potato']); +// => CACTUS +// BEAR +// POTATO +``` diff --git a/docs/content/2016-01-07-use-strict-and-get-lazy.md b/docs/content/2016-01-07-use-strict-and-get-lazy.md new file mode 100644 index 0000000000..2d31058101 --- /dev/null +++ b/docs/content/2016-01-07-use-strict-and-get-lazy.md @@ -0,0 +1,59 @@ +title: use strict and get lazy +tip-number: 07 +tip-username: nainslie +tip-username-profile: https://twitter.com/nat5an +tip-tldr: Strict-mode JavaScript makes it easier for the developer to write "secure" JavaScript. + +- /en/use-strict-and-get-lazy/ + +Strict-mode JavaScript makes it easier for the developer to write "secure" JavaScript. + +By default, JavaScript allows the programmer to be pretty careless, for example, by not requiring us to declare our variables with "var" when we first introduce them. While this may seem like a convenience to the unseasoned developer, it's also the source of many errors when a variable name is misspelled or accidentally referred to out of its scope. + +Programmers like to make the computer do the boring stuff for us, and automatically check our work for mistakes. That's what the JavaScript "use strict" directive allows us to do, by turning our mistakes into JavaScript errors. + +We add this directive either by adding it at the top of a js file: + +```javascript +// Whole-script strict mode syntax +'use strict'; +var v = "Hi! I'm a strict mode script!"; +``` + +or inside a function: + +```javascript +function f() { + // Function-level strict mode syntax + 'use strict'; + function nested() { + return 'And so am I!'; + } + return "Hi! I'm a strict mode function! " + nested(); +} +function f2() { + return "I'm not strict."; +} +``` + +By including this directive in a JavaScript file or function, we will direct the JavaScript engine to execute in strict mode which disables a bunch of behaviors that are usually undesirable in larger JavaScript projects. Among other things, strict mode changes the following behaviors: + +- Variables can only be introduced when they are preceded with "var" +- Attempting to write to read-only properties generates a noisy error +- You have to call constructors with the "new" keyword +- "this" is not implicitly bound to the global object +- Very limited use of eval() allowed +- Protects you from using reserved words or future reserved words as variable names + +Strict mode is great for new projects, but can be challenging to introduce into older projects that don't already use it in most places. It also can be problematic if your build chain concatenates all your js files into one big file, as this may cause all files to execute in strict mode. + +It is not a statement, but a literal expression, ignored by earlier versions of JavaScript. +Strict mode is supported in: + +- Internet Explorer from version 10. +- Firefox from version 4. +- Chrome from version 13. +- Safari from version 5.1. +- Opera from version 12. + +[See MDN for a fuller description of strict mode](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode). diff --git a/docs/content/2016-01-08-converting-a-node-list-to-an-array.md b/docs/content/2016-01-08-converting-a-node-list-to-an-array.md new file mode 100644 index 0000000000..e62197a713 --- /dev/null +++ b/docs/content/2016-01-08-converting-a-node-list-to-an-array.md @@ -0,0 +1,53 @@ +title: Converting a Node List to an Array +tip-number: 08 +tip-username: Tevko +tip-username-profile: https://twitter.com/tevko +tip-tldr: Here's a quick, safe, and reusable way to convert a node list into an array of DOM elements. + +- /en/converting-a-node-list-to-an-array/ + +The `querySelectorAll` method returns an array-like object called a node list. These data structures are referred to as "Array-like", because they appear as an array, but can not be used with array methods like `map` and `forEach`. Here's a quick, safe, and reusable way to convert a node list into an array of DOM elements: + +```javascript +const nodelist = document.querySelectorAll('div'); +const nodelistToArray = Array.apply(null, nodelist); + +//later on .. + +nodelistToArray.forEach(...); +nodelistToArray.map(...); +nodelistToArray.slice(...); + +//etc... +``` + +The `apply` method is used to pass an array of arguments to a function with a given `this` value. [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) states that `apply` will take an array-like object, which is exactly what `querySelectorAll` returns. Since we don't need to specify a value for `this` in the context of the function, we pass in `null` or `0`. The result is an actual array of DOM elements which contains all of the available array methods. + +Alternatively you can use `Array.prototype.slice` combined with `Function.prototype.call` or `Function.prototype.apply` passing the array-like object as the value of `this`: + +```javascript +const nodelist = document.querySelectorAll('div'); +const nodelistToArray = Array.prototype.slice.call(nodelist); // or equivalently Array.prototype.slice.apply(nodelist); + +//later on .. + +nodelistToArray.forEach(...); +nodelistToArray.map(...); +nodelistToArray.slice(...); + +//etc... +``` + +Or if you are using ES2015 you can use the [spread operator `...`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator) + +```js +const nodelist = [...document.querySelectorAll('div')]; // returns a real array + +//later on .. + +nodelist.forEach(...); +nodelist.map(...); +nodelist.slice(...); + +//etc... +``` diff --git a/docs/content/2016-01-09-template-strings.md b/docs/content/2016-01-09-template-strings.md new file mode 100644 index 0000000000..f706518154 --- /dev/null +++ b/docs/content/2016-01-09-template-strings.md @@ -0,0 +1,41 @@ +title: Template Strings +tip-number: 09 +tip-username: JakeRawr +tip-username-profile: https://github.com/JakeRawr +tip-tldr: As of ES6, JS now has template strings as an alternative to the classic end quotes strings. + +- /en/template-strings/ + +As of ES6, JS now has template strings as an alternative to the classic end quotes strings. + +Ex: +Normal string + +```javascript +var firstName = 'Jake'; +var lastName = 'Rawr'; +console.log('My name is ' + firstName + ' ' + lastName); +// My name is Jake Rawr +``` + +Template String + +```javascript +var firstName = 'Jake'; +var lastName = 'Rawr'; +console.log(`My name is ${firstName} ${lastName}`); +// My name is Jake Rawr +``` + +You can do multi-line strings without `\n`, perform simple logic (ie 2+3) or even use the [ternary operator](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) inside `${}` in template strings. + +```javascript +var val1 = 1, + val2 = 2; +console.log(`${val1} is ${val1 < val2 ? 'less than' : 'greater than'} ${val2}`); +// 1 is less than 2 +``` + +You are also able to modify the output of template strings using a function; they are called [tagged template strings](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings#Tagged_template_strings) for example usages of tagged template strings. + +You may also want to [read](https://hacks.mozilla.org/2015/05/es6-in-depth-template-strings-2) to understand template strings more. diff --git a/docs/content/2016-01-10-check-if-a-property-is-in-a-object.md b/docs/content/2016-01-10-check-if-a-property-is-in-a-object.md new file mode 100644 index 0000000000..f72a373afd --- /dev/null +++ b/docs/content/2016-01-10-check-if-a-property-is-in-a-object.md @@ -0,0 +1,55 @@ +title: Check if a property is in a Object +tip-number: 10 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: These are ways to check if a property is present in an object. +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/check-if-a-property-is-in-a-object/ + +When you have to check if a property is present in an [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects), you probably are doing something like this: + +```javascript +var myObject = { + name: '@tips_js' +}; + +if (myObject.name) { ... } + +``` + +That's ok, but you have to know that there are two native ways for this kind of thing, the [`in` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in) and [`Object.hasOwnProperty`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty). Every object descended from `Object`, has both ways available. + +### See the big Difference + +```javascript +var myObject = { + name: '@tips_js' +}; + +myObject.hasOwnProperty('name'); // true +'name' in myObject; // true + +myObject.hasOwnProperty('valueOf'); // false, valueOf is inherited from the prototype chain +'valueOf' in myObject; // true +``` + +Both differ in the depth at which they check the properties. In other words, `hasOwnProperty` will only return true if key is available on that object directly. However, the `in` operator doesn't discriminate between properties created on an object and properties inherited from the prototype chain. + +Here's another example: + +```javascript +var myFunc = function () { + this.name = '@tips_js'; +}; +myFunc.prototype.age = '10 days'; + +var user = new myFunc(); + +user.hasOwnProperty('name'); // true +user.hasOwnProperty('age'); // false, because age is from the prototype chain +``` + +Check the [live examples here](https://jsbin.com/tecoqa/edit?js,console)! + +I also recommend reading [this discussion](https://github.com/loverajoel/jstips/issues/62) about common mistakes made when checking a property's existence in objects. diff --git a/docs/content/2016-01-11-hoisting.md b/docs/content/2016-01-11-hoisting.md new file mode 100644 index 0000000000..737b277693 --- /dev/null +++ b/docs/content/2016-01-11-hoisting.md @@ -0,0 +1,44 @@ +title: Hoisting +tip-number: 11 +tip-username: squizzleflip +tip-username-profile: https://twitter.com/squizzleflip +tip-tldr: Understanding hoisting will help you organize your function scope. + +Understanding [hoisting](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting) will help you organize your function scope. Just remember, variable declarations and function definitions are hoisted to the top. Variable definitions are not, even if you declare and define a variable on the same line. Also, a variable **declaration** lets the system know that the variable exists while **definition** assigns it a value. + +```javascript +function doTheThing() { + // ReferenceError: notDeclared is not defined + console.log(notDeclared); + + // Outputs: undefined + console.log(definedLater); + var definedLater; + + definedLater = 'I am defined!'; + // Outputs: 'I am defined!' + console.log(definedLater); + + // Outputs: undefined + console.log(definedSimulateneously); + var definedSimulateneously = 'I am defined!'; + // Outputs: 'I am defined!' + console.log(definedSimulateneously); + + // Outputs: 'I did it!' + doSomethingElse(); + + function doSomethingElse() { + console.log('I did it!'); + } + + // TypeError: undefined is not a function + functionVar(); + + var functionVar = function () { + console.log('I did it!'); + }; +} +``` + +To make things easier to read, declare all of your variables at the top of your function scope so it is clear which scope the variables are coming from. Define your variables before you need to use them. Define your functions at the bottom of your scope to keep them out of your way. diff --git a/docs/content/2016-01-12-pseudomandatory-parameters-in-es6-functions.md b/docs/content/2016-01-12-pseudomandatory-parameters-in-es6-functions.md new file mode 100644 index 0000000000..6f060f28f1 --- /dev/null +++ b/docs/content/2016-01-12-pseudomandatory-parameters-in-es6-functions.md @@ -0,0 +1,22 @@ +title: Pseudomandatory parameters in ES6 functions +tip-number: 12 +tip-username: Avraam Mavridis +tip-username-profile: https://github.com/AvraamMavridis +tip-tldr: In many programming languages the parameters of a function are by default mandatory and the developer has to explicitly define that a parameter is optional. + +- /en/pseudomandatory-parameters-in-es6-functions/ + +In many programming languages the parameters of a function are by default mandatory and the developer has to explicitly define that a parameter is optional. In Javascript, every parameter is optional, but we can enforce this behavior without messing with the actual body of a function, taking advantage of [**es6's default values for parameters**] (http://exploringjs.com/es6/ch_parameter-handling.html#sec_parameter-default-values) feature. + +```javascript +const _err = function (message) { + throw new Error(message); +}; + +const getSum = (a = _err('a is not defined'), b = _err('b is not defined')) => a + b; + +getSum(10); // throws Error, b is not defined +getSum(undefined, 10); // throws Error, a is not defined +``` + +`_err` is a function that immediately throws an Error. If no value is passed for one of the parameters, the default value is going to be used, `_err` will be called and an Error will be thrown. You can see more examples for the **default parameters feature** on [Mozilla's Developer Network ](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/default_parameters) diff --git a/docs/content/2016-01-13-tip-to-measure-performance-of-a-javascript-block.md b/docs/content/2016-01-13-tip-to-measure-performance-of-a-javascript-block.md new file mode 100644 index 0000000000..bc00e07607 --- /dev/null +++ b/docs/content/2016-01-13-tip-to-measure-performance-of-a-javascript-block.md @@ -0,0 +1,30 @@ +title: Tip to measure performance of a javascript block +tip-number: 13 +tip-username: manmadareddy +tip-username-profile: https://twitter.com/manmadareddy +tip-tldr: For quickly measuring performance of a javascript block, we can use the console functions like `console.time(label)` and `console.timeEnd(label)` + +- /en/tip-to-measure-performance-of-a-javascript-block/ + +For quickly measuring performance of a javascript block, we can use the console functions like +[`console.time(label)`](https://developer.chrome.com/devtools/docs/console-api#consoletimelabel) and [`console.timeEnd(label)`](https://developer.chrome.com/devtools/docs/console-api#consoletimeendlabel) + +```javascript +console.time('Array initialize'); +var arr = new Array(100), + len = arr.length, + i; + +for (i = 0; i < len; i++) { + arr[i] = new Object(); +} +console.timeEnd('Array initialize'); // Outputs: Array initialize: 0.711ms +``` + +More info: +[Console object](https://github.com/DeveloperToolsWG/console-object), +[Javascript benchmarking](https://mathiasbynens.be/notes/javascript-benchmarking) + +Demo: [jsfiddle](https://jsfiddle.net/meottb62/) - [codepen](http://codepen.io/anon/pen/JGJPoa) (outputs in browser console) + +> Note: As [Mozilla](https://developer.mozilla.org/en-US/docs/Web/API/Console/time) suggested don't use this for production sites, use it for development purposes only. diff --git a/docs/content/2016-01-14-fat-arrow-functions.md b/docs/content/2016-01-14-fat-arrow-functions.md new file mode 100644 index 0000000000..338de10a6f --- /dev/null +++ b/docs/content/2016-01-14-fat-arrow-functions.md @@ -0,0 +1,101 @@ +title: Fat Arrow Functions +tip-number: 14 +tip-username: pklinger +tip-username-profile: https://github.com/pklinger/ +tip-tldr: Introduced as a new feature in ES6, fat arrow functions may come as a handy tool to write more code in fewer lines + +- /en/fat-arrow-functions/ + +Introduced as a new feature in ES6, fat arrow functions may come as a handy tool to write more code in fewer lines. The name comes from its syntax, `=>`, which is a 'fat arrow', as compared to a thin arrow `->`. Some programmers might already know this type of function from different languages such as Haskell, as 'lambda expressions', or as 'anonymous functions'. It is called anonymous, as these arrow functions do not have a descriptive function name. + +### What are the benefits? + +- Syntax: fewer LOC; no more typing `function` keyword over and over again +- Semantics: capturing the keyword `this` from the surrounding context + +### Simple syntax example + +Have a look at these two code snippets, which do the exact same job, and you will quickly understand what fat arrow functions do: + +```javascript +// general syntax for fat arrow functions +param => expression + +// may also be written with parentheses +// parentheses are required on multiple params +(param1 [, param2]) => expression + + +// using functions +var arr = [5,3,2,9,1]; +var arrFunc = arr.map(function(x) { + return x * x; +}); +console.log(arr) + +// using fat arrow +var arr = [5,3,2,9,1]; +var arrFunc = arr.map((x) => x*x); +console.log(arr) +``` + +As you can see, the fat arrow function in this case can save you time typing out the parentheses as well as the function and return keywords. I would advise you to always write parentheses around the parameter inputs, as the parentheses will be needed for multiple input parameters, such as in `(x,y) => x+y`. It is just a way to cope with forgetting them in different use cases. But the code above would also work like this: `x => x*x`. So far, these are only syntactical improvements, which lead to fewer LOC and better readability. + +### Lexically binding `this` + +There is another good reason to use fat arrow functions. There is the issue with the context of `this`. With arrow functions, you don't need to worry about `.bind(this)` or setting `that = this` anymore, as fat arrow functions pick the context of `this` from the lexical surrounding. Have a look at the next [example] (https://jsfiddle.net/pklinger/rw94oc11/): + +```javascript +// globally defined this.i +this.i = 100; + +var counterA = new CounterA(); +var counterB = new CounterB(); +var counterC = new CounterC(); +var counterD = new CounterD(); + +// bad example +function CounterA() { + // CounterA's `this` instance (!! gets ignored here) + this.i = 0; + setInterval(function () { + // `this` refers to global object, not to CounterA's `this` + // therefore starts counting with 100, not with 0 (local this.i) + this.i++; + document.getElementById('counterA').innerHTML = this.i; + }, 500); +} + +// manually binding that = this +function CounterB() { + this.i = 0; + var that = this; + setInterval(function () { + that.i++; + document.getElementById('counterB').innerHTML = that.i; + }, 500); +} + +// using .bind(this) +function CounterC() { + this.i = 0; + setInterval( + function () { + this.i++; + document.getElementById('counterC').innerHTML = this.i; + }.bind(this), + 500 + ); +} + +// fat arrow function +function CounterD() { + this.i = 0; + setInterval(() => { + this.i++; + document.getElementById('counterD').innerHTML = this.i; + }, 500); +} +``` + +Further information about fat arrow functions may be found at [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions). To see different syntax options visit [this site] (http://jsrocks.org/2014/10/arrow-functions-and-their-scope/). diff --git a/docs/content/2016-01-15-even-simpler-way-of-using-indexof-as-a-contains-clause.md b/docs/content/2016-01-15-even-simpler-way-of-using-indexof-as-a-contains-clause.md new file mode 100644 index 0000000000..875c68f922 --- /dev/null +++ b/docs/content/2016-01-15-even-simpler-way-of-using-indexof-as-a-contains-clause.md @@ -0,0 +1,74 @@ +title: Even simpler way of using `indexOf` as a contains clause +tip-number: 15 +tip-username: jhogoforbroke +tip-username-profile: https://twitter.com/jhogoforbroke +tip-tldr: JavaScript by default does not have a contains method. And for checking existence of a substring in a string or an item in an array you may do this. + +- /en/even-simpler-way-of-using-indexof-as-a-contains-clause/ + +JavaScript by default does not have a contains method. And for checking existence of a substring in a string or an item in an array you may do this: + +```javascript +var someText = 'javascript rules'; +if (someText.indexOf('javascript') !== -1) { +} + +// or +if (someText.indexOf('javascript') >= 0) { +} +``` + +But let's look at these [Expressjs](https://github.com/strongloop/express) code snippets. + +[examples/mvc/lib/boot.js](https://github.com/strongloop/express/blob/2f8ac6726fa20ab5b4a05c112c886752868ac8ce/examples/mvc/lib/boot.js#L26) + +```javascript +for (var key in obj) { + // "reserved" exports + if (~['name', 'prefix', 'engine', 'before'].indexOf(key)) continue; +``` + +[lib/utils.js](https://github.com/strongloop/express/blob/2f8ac6726fa20ab5b4a05c112c886752868ac8ce/lib/utils.js#L93) + +```javascript +exports.normalizeType = function (type) { + return ~type.indexOf('/') ? acceptParams(type) : { value: mime.lookup(type), params: {} }; +}; +``` + +[examples/web-service/index.js](https://github.com/strongloop/express/blob/2f8ac6726fa20ab5b4a05c112c886752868ac8ce/examples/web-service/index.js#L35) + +```javascript +// key is invalid +if (!~apiKeys.indexOf(key)) return next(error(401, 'invalid api key')); +``` + +The gotcha is the [bitwise operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) **~**, "Bitwise operators perform their operations on binary representations, but they return standard JavaScript numerical values." + +It transforms `-1` into `0`, and `0` evaluates to `false` in JavaScript: + +```javascript +var someText = 'text'; +!!~someText.indexOf('tex'); // someText contains "tex" - true +!~someText.indexOf('tex'); // someText NOT contains "tex" - false +~someText.indexOf('asd'); // someText doesn't contain "asd" - false +~someText.indexOf('ext'); // someText contains "ext" - true +``` + +### String.prototype.includes() + +ES6 introduced the [includes() method](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes) and you can use it to determine whether or not a string includes another string: + +```javascript +'something'.includes('thing'); // true +``` + +With ECMAScript 2016 (ES7) it is even possible to use these techniques with Arrays: + +```javascript +!!~[1, 2, 3].indexOf(1); // true +[1, 2, 3].includes(1); // true +``` + +**Unfortunately, it is only supported in Chrome, Firefox, Safari 9 or above and Edge; not IE11 or lower.** +**It's better used in controlled environments.** diff --git a/docs/content/2016-01-16-passing-arguments-to-callback-functions.md b/docs/content/2016-01-16-passing-arguments-to-callback-functions.md new file mode 100644 index 0000000000..ae1f865872 --- /dev/null +++ b/docs/content/2016-01-16-passing-arguments-to-callback-functions.md @@ -0,0 +1,49 @@ +title: Passing arguments to callback functions +tip-number: 16 +tip-username: minhazav +tip-username-profile: https://twitter.com/minhazav +tip-tldr: By default you cannot pass arguments to a callback function, but you can take advantage of the closure scope in Javascript to pass arguments to callback functions. + +- /en/passing-arguments-to-callback-functions/ + +By default you cannot pass arguments to a callback function. For example: + +```js +function callback() { + console.log('Hi human'); +} + +document.getElementById('someelem').addEventListener('click', callback); +``` + +You can take advantage of the closure scope in Javascript to pass arguments to callback functions. Check this example: + +```js +function callback(a, b) { + return function () { + console.log('sum = ', a + b); + }; +} + +var x = 1, + y = 2; +document.getElementById('someelem').addEventListener('click', callback(x, y)); +``` + +### What are closures? + +Closures are functions that refer to independent (free) variables. In other words, the function defined in the closure 'remembers' the environment in which it was created. [Check MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) to learn more. + +So this way the arguments `x` and `y` are in scope of the callback function when it is called. + +Another method to do this is using the `bind` method. For example: + +```js +var alertText = function (text) { + alert(text); +}; + +document.getElementById('someelem').addEventListener('click', alertText.bind(this, 'hello')); +``` + +There is a very slight difference in performance of both methods, checkout [jsperf](http://jsperf.com/bind-vs-closure-23). diff --git a/docs/content/2016-01-17-nodejs-run-a-module-if-it-is-not-required.md b/docs/content/2016-01-17-nodejs-run-a-module-if-it-is-not-required.md new file mode 100644 index 0000000000..a535b35df0 --- /dev/null +++ b/docs/content/2016-01-17-nodejs-run-a-module-if-it-is-not-required.md @@ -0,0 +1,23 @@ +title: Node.js - Run a module if it is not `required` +tip-number: 17 +tip-username: odsdq +tip-username-profile: https://twitter.com/odsdq +tip-tldr: In node, you can tell your program to do two different things depending on whether the code is run from `require('./something.js')` or `node something.js`. This is useful if you want to interact with one of your modules independently. + +- /en/nodejs-run-a-module-if-it-is-not-required/ + +In node, you can tell your program to do two different things depending on whether the code is run from `require('./something.js')` or `node something.js`. This is useful if you want to interact with one of your modules independently. + +```js +if (!module.parent) { + // ran with `node something.js` + app.listen(8088, function () { + console.log('app listening on port 8088'); + }); +} else { + // used with `require('/.something.js')` + module.exports = app; +} +``` + +See [the documentation for modules](https://nodejs.org/api/modules.html#modules_module_parent) for more info. diff --git a/docs/content/2016-01-18-rounding-the-fast-way.md b/docs/content/2016-01-18-rounding-the-fast-way.md new file mode 100644 index 0000000000..b40b4c5da5 --- /dev/null +++ b/docs/content/2016-01-18-rounding-the-fast-way.md @@ -0,0 +1,117 @@ +title: Truncating the fast (but risky) way +tip-number: 18 +tip-username: pklinger +tip-username-profile: https://github.com/pklinger +tip-tldr: .`~~X` is usually a faster `Math.trunc(X)`, but can also make your code do nasty things. + +- /en/rounding-the-fast-way/ + +This tip is about performance...with a hidden price tag. + +Have you ever come across the [double tilde `~~` operator](http://stackoverflow.com/questions/5971645/what-is-the-double-tilde-operator-in-javascript)? It's also often called the "double bitwise NOT" operator. You can often use it as a faster substitute for `Math.trunc()`. Why is that? + +One bitwise shift `~` first truncates `input` to 32 bits, then transforms it into `-(input+1)`. The double bitwise shift therefore transforms the input into `-(-(input + 1)+1)` making it a great tool to round towards zero. For numeric input, it therefore mimics `Math.trunc()`. On failure, `0` is returned, which might come in handy sometimes instead of `Math.trunc()`, which returns `NaN` on failure. + +```js +// single ~ +console.log(~1337); // -1338 + +// numeric input +console.log(~~47.11); // -> 47 +console.log(~~1.9999); // -> 1 +console.log(~~3); // -> 3 +``` + +However, while `~~` is probably a better performer, experienced programmers often stick with `Math.trunc()` instead. To understand why, here's a clinical view on this operator. + +### INDICATIONS + +##### When every CPU cycle counts + +`~~` is probably faster than `Math.trunc()` across the board, though you should [test that assumption](https://jsperf.com/jsfvsbitnot/10) on whichever platforms matter to you. Also, you'd generally have to perform millions of such operations to have any visible impact at run time. + +##### When code clarity is not a concern + +If you're trying to confuse others, or get maximum utility from your minifier/uglifier, this is a relatively cheap way to do it. + +### CONTRAINDICATIONS + +##### When your code needs to be maintained + +Code clarity is of great importance in the long term, whether you work in a team, contribute to public code repos, or fly solo. As [the oft-quoted saying](http://c2.com/cgi/wiki?CodeForTheMaintainer) goes: + +> Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live. + +For a solo programmer, that psychopath is inevitably "you in six months". + +##### When you forget that `~~` always rounds to zero + +Newbie programmers may fixate on the cleverness of `~~`, forgetting the significance of "just drop the fractional portion of this number". This can easily lead to **fencepost errors** (a.k.a. "off-by-one") when transforming floats to array indices or related ordinal values, where a different kind of fractional rounding may actually be called for. (Lack of code clarity usually contributes to this problem.) + +For instance, if you're counting numbers on a "nearest integer" basis, you should use `Math.round()` instead of `~~`, but programmer laziness and the impact of **_10 whole characters saved per use_** on human fingers often triumph over cold logic, leading to incorrect results. + +In contrast, the very names of the `Math.xyz()` functions clearly communicate their effect, reducing the probability of accidental errors. + +##### When dealing with large-magnitude numbers + +Because `~` first does a 32-bit conversion, `~~` results in bogus values around ±2.15 billion. If you don't properly range-check your input, a user could trigger unexpected behavior when the transformed value ends up being a great distance from the original: + +```js +a = 2147483647.123; // maximum positive 32-bit integer, plus a bit more +console.log(~~a); // -> 2147483647 (ok) +a += 10000; // -> 2147493647.123 (ok) +console.log(~~a); // -> -2147483648 (huh?) +``` + +One particularly vulnerable area involves dealing with Unix epoch timestamps (measured in seconds from 1 Jan 1970 00:00:00 UTC). A quick way to get such values is: + +```js +epoch_int = ~~(+new Date() / 1000); // Date() epochs in milliseconds, so we scale accordingly +``` + +However, when dealing with timestamps after 19 Jan 2038 03:14:07 UTC (sometimes called the **Y2038 limit**), this breaks horribly: + +```js +// epoch timestamp for 1 Jan 2040 00:00:00.123 UTC +epoch = +new Date('2040-01-01') / 1000 + 0.123; // -> 2208988800.123 + +// back to the future! +epoch_int = ~~epoch; // -> -2085978496 +console.log(new Date(epoch_int * 1000)); // -> Wed Nov 25 1903 17:31:44 UTC + +// that was fun, now let's get real +epoch_flr = Math.floor(epoch); // -> 2208988800 +console.log(new Date(epoch_flr * 1000)); // -> Sun Jan 01 2040 00:00:00 UTC +``` + +##### When the original input wasn't sanitized + +Because `~~` transforms every non-number into `0`: + +```js +console.log(~~[]); // -> 0 +console.log(~~NaN); // -> 0 +console.log(~~null); // -> 0 +``` + +some programmers treat it as alternative to proper input validation. However, this can lead to strange logic bugs down the line, since you're no longer distinguishing between invalid inputs and actual `0` values. This is therefore _not_ a recommended practice. + +##### When so many people think `~~X == Math.floor(X)` + +Most people who write about "double bitwise NOT" incorrectly equate it with `Math.floor()` for some reason. If you can't write about it accurately, odds are good you'll eventually misuse it. + +Others are more careful to mention `Math.floor()` for positive inputs and `Math.ceil()` for negative ones, but that forces you to stop and think about the values you're dealing with. This defeats the purpose of `~~` as a handy no-gotchas shortcut. + +### DOSAGE + +Avoid where possible. Use sparingly otherwise. + +### ADMINISTRATION + +1. Apply cautiously. +2. Sanitize values before applying. +3. Carefully document relevant assumptions about the values being transformed. +4. Review code to deal with, at minimum: + - logic bugs where invalid inputs are instead passed to other code modules as valid `0` values + - range errors on transformed inputs + - fencepost errors due to incorrect rounding direction diff --git a/docs/content/2016-01-19-safe-string-concatenation.md b/docs/content/2016-01-19-safe-string-concatenation.md new file mode 100644 index 0000000000..d67b7cce09 --- /dev/null +++ b/docs/content/2016-01-19-safe-string-concatenation.md @@ -0,0 +1,31 @@ +title: Safe string concatenation +tip-number: 19 +tip-username: gogainda +tip-username-profile: https://twitter.com/gogainda +tip-tldr: Suppose you have a couple of variables with unknown types and you want to concatenate them in a string. To be sure that the arithmetical operation is not be applied during concatenation, use concat + +- /en/safe-string-concatenation/ + +Suppose you have a couple of variables with unknown types and you want to concatenate them in a string. To be sure that the arithmetical operation is not be applied during concatenation, use `concat`: + +```javascript +var one = 1; +var two = 2; +var three = '3'; + +var result = ''.concat(one, two, three); //"123" +``` + +This way of concatenting does exactly what you'd expect. In contrast, concatenation with pluses might lead to unexpected results: + +```javascript +var one = 1; +var two = 2; +var three = '3'; + +var result = one + two + three; //"33" instead of "123" +``` + +Speaking about performance, compared to the `join` [type](http://www.sitepoint.com/javascript-fast-string-concatenation/) of concatenation, the speed of `concat` is pretty much the same. + +You can read more about the `concat` function on MDN [page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat). diff --git a/docs/content/2016-01-20-return-objects-to-enable-chaining-of-functions.md b/docs/content/2016-01-20-return-objects-to-enable-chaining-of-functions.md new file mode 100644 index 0000000000..539483edf2 --- /dev/null +++ b/docs/content/2016-01-20-return-objects-to-enable-chaining-of-functions.md @@ -0,0 +1,28 @@ +title: Return objects to enable chaining of functions +tip-number: 20 +tip-username: WakeskaterX +tip-username-profile: https://twitter.com/WakeStudio +tip-tldr: When creating functions on an object in Object Oriented Javascript, returning the object in the function will enable you to chain functions together. + +- /en/return-objects-to-enable-chaining-of-functions/ + +When creating functions on an object in Object Oriented Javascript, returning the object in the function will enable you to chain functions together. + +```js +function Person(name) { + this.name = name; + + this.sayName = function () { + console.log('Hello my name is: ', this.name); + return this; + }; + + this.changeName = function (name) { + this.name = name; + return this; + }; +} + +var person = new Person('John'); +person.sayName().changeName('Timmy').sayName(); +``` diff --git a/docs/content/2016-01-21-shuffle-an-array.md b/docs/content/2016-01-21-shuffle-an-array.md new file mode 100644 index 0000000000..b72d8fcde9 --- /dev/null +++ b/docs/content/2016-01-21-shuffle-an-array.md @@ -0,0 +1,31 @@ +title: Shuffle an Array +tip-number: 21 +tip-username: 0xmtn +tip-username-profile: https://github.com/0xmtn/ +tip-tldr: Fisher-Yates Shuffling it's an algorithm to shuffle an array. + +- /en/shuffle-an-array/ + +This snippet here uses [Fisher-Yates Shuffling](https://www.wikiwand.com/en/Fisher%E2%80%93Yates_shuffle) Algorithm to shuffle a given array. + +```javascript +function shuffle(arr) { + var i, j, temp; + for (i = arr.length - 1; i > 0; i--) { + j = Math.floor(Math.random() * (i + 1)); + temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } + return arr; +} +``` + +An example: + +```javascript +var a = [1, 2, 3, 4, 5, 6, 7, 8]; +var b = shuffle(a); +console.log(b); +// [2, 7, 8, 6, 5, 3, 1, 4] +``` diff --git a/docs/content/2016-01-22-two-ways-to-empty-an-array.md b/docs/content/2016-01-22-two-ways-to-empty-an-array.md new file mode 100644 index 0000000000..f71b0e7d35 --- /dev/null +++ b/docs/content/2016-01-22-two-ways-to-empty-an-array.md @@ -0,0 +1,57 @@ +title: Two ways to empty an array +tip-number: 22 +tip-username: microlv +tip-username-profile: https://github.com/microlv +tip-tldr: In JavaScript when you want to empty an array, there are a lot ways, but this is the most performant. + +- /en/two-ways-to-empty-an-array/ + +You define an array and want to empty its contents. +Usually, you would do it like this: + +```javascript +// define Array +var list = [1, 2, 3, 4]; +function empty() { + //empty your array + list = []; +} +empty(); +``` + +But there is another way to empty an array that is more performant. + +You should use code like this: + +```javascript +var list = [1, 2, 3, 4]; +function empty() { + //empty your array + list.length = 0; +} +empty(); +``` + +- `list = []` assigns a reference to a new array to a variable, while any other references are unaffected. + which means that references to the contents of the previous array are still kept in memory, leading to memory leaks. + +- `list.length = 0` deletes everything in the array, which does hit other references. + +In other words, if you have two references to the same array (`a = [1,2,3]; a2 = a;`), and you delete the array's contents using `list.length = 0`, both references (a and a2) will now point to the same empty array. (So don't use this technique if you don't want a2 to hold an empty array!) + +Think about what this will output: + +```js +var foo = [1, 2, 3]; +var bar = [1, 2, 3]; +var foo2 = foo; +var bar2 = bar; +foo = []; +bar.length = 0; +console.log(foo, bar, foo2, bar2); + +// [] [] [1, 2, 3] [] +``` + +Stackoverflow more detail: +[difference-between-array-length-0-and-array](http://stackoverflow.com/questions/4804235/difference-between-array-length-0-and-array) diff --git a/docs/content/2016-01-23-converting-to-number-fast-way.md b/docs/content/2016-01-23-converting-to-number-fast-way.md new file mode 100644 index 0000000000..3869ef88bb --- /dev/null +++ b/docs/content/2016-01-23-converting-to-number-fast-way.md @@ -0,0 +1,23 @@ +title: Converting to number fast way +tip-number: 23 +tip-username: sonnyt +tip-username-profile: http://twitter.com/sonnyt +tip-tldr: Converting strings to numbers is extremely common. The easiest and fastest way to achieve that would be using the + operator. + +- /en/converting-to-number-fast-way/ + +Converting strings to numbers is extremely common. The easiest and fastest ([jsPerf](https://jsperf.com/number-vs-parseint-vs-plus/29)) way to achieve that would be using the `+` (plus) operator. + +```javascript +var one = '1'; + +var numberOne = +one; // Number 1 +``` + +You can also use the `-` (minus) operator which type-converts the value into number but also negates it. + +```javascript +var one = '1'; + +var negativeNumberOne = -one; // Number -1 +``` diff --git a/docs/content/2016-01-24-use_===_instead_of_==.md b/docs/content/2016-01-24-use_===_instead_of_==.md new file mode 100644 index 0000000000..92b00d16d1 --- /dev/null +++ b/docs/content/2016-01-24-use_===_instead_of_==.md @@ -0,0 +1,24 @@ +title: Use === instead of == +tip-number: 24 +tip-username: bhaskarmelkani +tip-username-profile: https://www.twitter.com/bhaskarmelkani +tip-tldr: The `==` (or `!=`) operator performs an automatic type conversion if needed. The `===` (or `!==`) operator will not perform any conversion. It compares the value and the type, which could be considered faster ([jsPref](http://jsperf.com/strictcompare)) than `==`. + +- /en/use*===\_instead_of*==/ + +The `==` (or `!=`) operator performs an automatic type conversion if needed. The `===` (or `!==`) operator will not perform any conversion. It compares the value and the type, which could be considered faster ([jsPref](http://jsperf.com/strictcompare)) than `==`. + +```js +[10] == 10 // is true +[10] === 10 // is false + +'10' == 10 // is true +'10' === 10 // is false + + [] == 0 // is true + [] === 0 // is false + + '' == false // is true but true == "a" is false + '' === false // is false + +``` diff --git a/docs/content/2016-01-25-Using-immediately-invoked-function-expression.md b/docs/content/2016-01-25-Using-immediately-invoked-function-expression.md new file mode 100644 index 0000000000..da10b0c05c --- /dev/null +++ b/docs/content/2016-01-25-Using-immediately-invoked-function-expression.md @@ -0,0 +1,38 @@ +title: Using immediately invoked function expression +tip-number: 25 +tip-username: rishantagarwal +tip-username-profile: https://github.com/rishantagarwal +tip-tldr: Called as "Iffy" ( IIFE - immediately invoked function expression) is an anonymous function expression that is immediately invoked and has some important uses in Javascript. + +- /en/Using-immediately-invoked-function-expression/ + +Called as "Iffy" ( IIFE - immediately invoked function expression) is an anonymous function expression that is immediately invoked and has some important uses in Javascript. + +```javascript +(function () { + // Do something​ +})(); +``` + +It is an anonymous function expression that is immediately invoked, and it has some particularly important uses in JavaScript. + +The pair of parenthesis surrounding the anonymous function turns the anonymous function into a function expression or variable expression. So instead of a simple anonymous function in the global scope, or wherever it was defined, we now have an unnamed function expression. + +Similarly, we can even create a named, immediately invoked function expression: + +```javascript +(someNamedFunction = function(msg) { + console.log(msg || "Nothing for today !!") + }) (); // Output --> Nothing for today !!​ +​ +someNamedFunction("Javascript rocks !!"); // Output --> Javascript rocks !! +someNamedFunction(); // Output --> Nothing for today !!​ +``` + +For more details, check the following URL's - + +1. [Link 1](https://blog.mariusschulz.com/2016/01/13/disassembling-javascripts-iife-syntax) +2. [Link 2](http://javascriptissexy.com/12-simple-yet-powerful-javascript-tips/) + +Performance: +[jsPerf](http://jsperf.com/iife-with-call) diff --git a/docs/content/2016-01-26-filtering-and-sorting-a-list-of-strings.md b/docs/content/2016-01-26-filtering-and-sorting-a-list-of-strings.md new file mode 100644 index 0000000000..5c27d040bd --- /dev/null +++ b/docs/content/2016-01-26-filtering-and-sorting-a-list-of-strings.md @@ -0,0 +1,237 @@ +title: Filtering and Sorting a List of Strings +tip-number: 26 +tip-username: davegomez +tip-username-profile: https://github.com/davegomez +tip-tldr: You may have a big list of names you need to filter in order to remove duplicates and sort them alphabetically. + +c + +- /en/filtering-and-sorting-a-list-of-strings/ + +You may have a big list of names you need to filter in order to remove duplicates and sort them alphabetically. + +In our example we are going to use the list of **JavaScript reserved keywords** we can find across the different versions of the language, but as you can notice, there is a lot of duplicated keywords and they are not alphabetically organized. So this is a perfect list ([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)) of strings to test out this JavaScript tip. + +```js +var keywords = [ + 'do', + 'if', + 'in', + 'for', + 'new', + 'try', + 'var', + 'case', + 'else', + 'enum', + 'null', + 'this', + 'true', + 'void', + 'with', + 'break', + 'catch', + 'class', + 'const', + 'false', + 'super', + 'throw', + 'while', + 'delete', + 'export', + 'import', + 'return', + 'switch', + 'typeof', + 'default', + 'extends', + 'finally', + 'continue', + 'debugger', + 'function', + 'do', + 'if', + 'in', + 'for', + 'int', + 'new', + 'try', + 'var', + 'byte', + 'case', + 'char', + 'else', + 'enum', + 'goto', + 'long', + 'null', + 'this', + 'true', + 'void', + 'with', + 'break', + 'catch', + 'class', + 'const', + 'false', + 'final', + 'float', + 'short', + 'super', + 'throw', + 'while', + 'delete', + 'double', + 'export', + 'import', + 'native', + 'public', + 'return', + 'static', + 'switch', + 'throws', + 'typeof', + 'boolean', + 'default', + 'extends', + 'finally', + 'package', + 'private', + 'abstract', + 'continue', + 'debugger', + 'function', + 'volatile', + 'interface', + 'protected', + 'transient', + 'implements', + 'instanceof', + 'synchronized', + 'do', + 'if', + 'in', + 'for', + 'let', + 'new', + 'try', + 'var', + 'case', + 'else', + 'enum', + 'eval', + 'null', + 'this', + 'true', + 'void', + 'with', + 'break', + 'catch', + 'class', + 'const', + 'false', + 'super', + 'throw', + 'while', + 'yield', + 'delete', + 'export', + 'import', + 'public', + 'return', + 'static', + 'switch', + 'typeof', + 'default', + 'extends', + 'finally', + 'package', + 'private', + 'continue', + 'debugger', + 'function', + 'arguments', + 'interface', + 'protected', + 'implements', + 'instanceof', + 'do', + 'if', + 'in', + 'for', + 'let', + 'new', + 'try', + 'var', + 'case', + 'else', + 'enum', + 'eval', + 'null', + 'this', + 'true', + 'void', + 'with', + 'await', + 'break', + 'catch', + 'class', + 'const', + 'false', + 'super', + 'throw', + 'while', + 'yield', + 'delete', + 'export', + 'import', + 'public', + 'return', + 'static', + 'switch', + 'typeof', + 'default', + 'extends', + 'finally', + 'package', + 'private', + 'continue', + 'debugger', + 'function', + 'arguments', + 'interface', + 'protected', + 'implements', + 'instanceof' +]; +``` + +Since we don't want to change our original list, we are going to use a high order function named [`filter`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), which will return a new filter array based in a predicate (_function_) we pass to it. The predicate will compare the index of the current keyword in the original list with its `index` in the new list and will push it to the new array only if the indexes match. + +Finally we are going to sort the filtered list using the [`sort`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) function which takes a comparison function as the only argument, returning a alphabetically sorted list. + +```js +var filteredAndSortedKeywords = keywords + .filter(function (keyword, index) { + return keywords.lastIndexOf(keyword) === index; + }) + .sort(function (a, b) { + return a < b ? -1 : 1; + }); +``` + +The **ES6** (ECMAScript 2015) version using [arrow functions](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions) looks a little simpler: + +```js +const filteredAndSortedKeywords = keywords.filter((keyword, index) => keywords.lastIndexOf(keyword) === index).sort((a, b) => (a < b ? -1 : 1)); +``` + +And this is the final filtered and sorted list of JavaScript reserved keywords: + +```js +console.log(filteredAndSortedKeywords); + +// ['abstract', 'arguments', 'await', 'boolean', 'break', 'byte', 'case', 'catch', 'char', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'double', 'else', 'enum', 'eval', 'export', 'extends', 'false', 'final', 'finally', 'float', 'for', 'function', 'goto', 'if', 'implements', 'import', 'in', 'instanceof', 'int', 'interface', 'let', 'long', 'native', 'new', 'null', 'package', 'private', 'protected', 'public', 'return', 'short', 'static', 'super', 'switch', 'synchronized', 'this', 'throw', 'throws', 'transient', 'true', 'try', 'typeof', 'var', 'void', 'volatile', 'while', 'with', 'yield'] +``` + +_Thanks to [@nikshulipa](https://github.com/nikshulipa), [@kirilloid](https://twitter.com/kirilloid), [@lesterzone](https://twitter.com/lesterzone), [@tracker1](https://twitter.com/tracker1), [@manuel_del_pozo](https://twitter.com/manuel_del_pozo) for all the comments and suggestions!_ diff --git a/docs/content/2016-01-27-short-circuit-evaluation-in-js.md b/docs/content/2016-01-27-short-circuit-evaluation-in-js.md new file mode 100644 index 0000000000..328cb0f46f --- /dev/null +++ b/docs/content/2016-01-27-short-circuit-evaluation-in-js.md @@ -0,0 +1,75 @@ +title: Short circuit evaluation in JS. +tip-number: 27 +tip-username: bhaskarmelkani +tip-username-profile: https://www.twitter.com/bhaskarmelkani +tip-tldr: Short-circuit evaluation says, the second argument is executed or evaluated only if the first argument does not suffice to determine the value of the expression, when the first argument of the AND `&&` function evaluates to false, the overall value must be false, and when the first argument of the OR `||` function evaluates to true, the overall value must be true. + +- /en/short-circuit-evaluation-in-js/ + +[Short-circuit evaluation](https://en.wikipedia.org/wiki/Short-circuit_evaluation) says, the second argument is executed or evaluated only if the first argument does not suffice to determine the value of the expression: when the first argument of the AND (`&&`) function evaluates to false, the overall value must be false; and when the first argument of the OR (`||`) function evaluates to true, the overall value must be true. + +For the following `test` condition and `isTrue` and `isFalse` function. + +```js +var test = true; +var isTrue = function () { + console.log('Test is true.'); +}; +var isFalse = function () { + console.log('Test is false.'); +}; +``` + +Using logical AND - `&&`. + +```js +// A normal if statement. +if (test) { + isTrue(); // Test is true +} + +// Above can be done using '&&' as - + +test && isTrue(); // Test is true +``` + +Using logical OR - `||`. + +```js +test = false; +if (!test) { + isFalse(); // Test is false. +} + +test || isFalse(); // Test is false. +``` + +The logical OR could also be used to set a default value for function argument. + +```js +function theSameOldFoo(name) { + name = name || 'Bar'; + console.log("My best friend's name is " + name); +} +theSameOldFoo(); // My best friend's name is Bar +theSameOldFoo('Bhaskar'); // My best friend's name is Bhaskar +``` + +The logical AND could be used to avoid exceptions when using properties of undefined. +Example: + +```js +var dog = { + bark: function () { + console.log('Woof Woof'); + } +}; + +// Calling dog.bark(); +dog.bark(); // Woof Woof. + +// But if dog is not defined, dog.bark() will raise an error "Cannot read property 'bark' of undefined." +// To prevent this, we can use &&. + +dog && dog.bark(); // This will only call dog.bark(), if dog is defined. +``` diff --git a/docs/content/2016-01-28-curry-vs-partial-application.md b/docs/content/2016-01-28-curry-vs-partial-application.md new file mode 100644 index 0000000000..ba90c44cdf --- /dev/null +++ b/docs/content/2016-01-28-curry-vs-partial-application.md @@ -0,0 +1,106 @@ +title: Currying vs partial application +tip-number: 28 +tip-username: bhaskarmelkani +tip-username-profile: https://www.twitter.com/bhaskarmelkani +tip-tldr: Currying and partial application are two ways of transforming a function into another function with a generally smaller arity. + +- /en/curry-vs-partial-application/ + +**Currying** + +Currying takes a function + +f: X \* Y -> R + +and turns it into a function + +f': X -> (Y -> R) + +Instead of calling f with two arguments, we invoke f' with the first argument. The result is a function that we then call with the second argument to produce the result. + +Thus, if the uncurried f is invoked as + +f(3,5) + +then the curried f' is invoked as + +f(3)(5) + +For example: +Uncurried add() + +```javascript +function add(x, y) { + return x + y; +} + +add(3, 5); // returns 8 +``` + +Curried add() + +```javascript +function addC(x) { + return function (y) { + return x + y; + }; +} + +addC(3)(5); // returns 8 +``` + +**The algorithm for currying.** + +Curry takes a binary function and returns a unary function that returns a unary function. + +curry: (X × Y → R) → (X → (Y → R)) + +Javascript Code: + +```javascript +function curry(f) { + return function (x) { + return function (y) { + return f(x, y); + }; + }; +} +``` + +**Partial application** + +Partial application takes a function + +f: X \* Y -> R + +and a fixed value for the first argument to produce a new function + +f`: Y -> R + +f' does the same as f, but only has to fill in the second parameter which is why its arity is one less than the arity of f. + +For example: Binding the first argument of function add to 5 produces the function plus5. + +```javascript +function plus5(y) { + return 5 + y; +} + +plus5(3); // returns 8 +``` + +**The algorithm of partial application.\*** + +partApply takes a binary function and a value and produces a unary function. + +partApply : ((X × Y → R) × X) → (Y → R) + +Javascript Code: + +```javascript +function partApply(f, x) { + return function (y) { + return f(x, y); + }; +} +``` diff --git a/docs/content/2016-01-29-speed-up-recursive-functions-with-memoization.md b/docs/content/2016-01-29-speed-up-recursive-functions-with-memoization.md new file mode 100644 index 0000000000..1b14211d56 --- /dev/null +++ b/docs/content/2016-01-29-speed-up-recursive-functions-with-memoization.md @@ -0,0 +1,85 @@ +title: Speed up recursive functions with memoization +tip-number: 29 +tip-username: hingsir +tip-username-profile: https://github.com/hingsir +tip-tldr: Fibonacci sequence is very familiar to everybody. we can write the following function in 20 seconds.it works, but not efficient. it did lots of duplicate computing works, we can cache its previously computed results to speed it up. + +- /en/speed-up-recursive-functions-with-memoization/ + +Fibonacci sequence is very familiar to everybody. We can write the following function in 20 seconds. + +```js +var fibonacci = function (n) { + return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); +}; +``` + +It works, but is not efficient. It did lots of duplicate computing works, we can cache its previously computed results to speed it up. + +```js +var fibonacci = (function () { + var cache = [0, 1]; // cache the value at the n index + return function (n) { + if (cache[n] === undefined) { + for (var i = cache.length; i <= n; ++i) { + cache[i] = cache[i - 1] + cache[i - 2]; + } + } + return cache[n]; + }; +})(); +``` + +Also, we can define a higher-order function that accepts a function as its argument and returns a memoized version of the function. + +```js +var memoize = function (func) { + var cache = {}; + return function () { + var key = JSON.stringify(Array.prototype.slice.call(arguments)); + return key in cache ? cache[key] : (cache[key] = func.apply(this, arguments)); + }; +}; +fibonacci = memoize(fibonacci); +``` + +And this is an ES6 version of the memoize function. + +```js +var memoize = function (func) { + const cache = {}; + return (...args) => { + const key = JSON.stringify(args); + return key in cache ? cache[key] : (cache[key] = func(...args)); + }; +}; +fibonacci = memoize(fibonacci); +``` + +we can use `memoize()` in many other situations + +- GCD(Greatest Common Divisor) + +```js +var gcd = memoize(function (a, b) { + var t; + if (a < b) (t = b), (b = a), (a = t); + while (b != 0) (t = b), (b = a % b), (a = t); + return a; +}); +gcd(27, 183); //=> 3 +``` + +- Factorial calculation + +```js +var factorial = memoize(function (n) { + return n <= 1 ? 1 : n * factorial(n - 1); +}); +factorial(5); //=> 120 +``` + +Learn more about memoization: + +- [Memoization - Wikipedia](https://en.wikipedia.org/wiki/Memoization) +- [Implementing Memoization in JavaScript](https://www.sitepoint.com/implementing-memoization-in-javascript/) diff --git a/docs/content/2016-01-30-converting-truthy-falsy-values-to-boolean.md b/docs/content/2016-01-30-converting-truthy-falsy-values-to-boolean.md new file mode 100644 index 0000000000..15a9c8912f --- /dev/null +++ b/docs/content/2016-01-30-converting-truthy-falsy-values-to-boolean.md @@ -0,0 +1,22 @@ +title: Converting truthy/falsy values to boolean +tip-number: 30 +tip-username: hakhag +tip-username-profile: https://github.com/hakhag +tip-tldr: Logical operators are a core part of JavaScript, here you can see a a way you always get a true or false no matter what was given to it. + +- /en/converting-truthy-falsy-values-to-boolean/ + +You can convert a [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) or [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) value to true boolean with the `!!` operator. + +```js +!!''; // false +!!0; // false +!!null; // false +!!undefined; // false +!!NaN; // false + +!!'hello'; // true +!!1; // true +!!{}; // true +!![]; // true +``` diff --git "a/docs/content/2016-01-31-avoid-modifying-or-passing-arguments-into-other-functions\342\200\224it-kills-optimization.md" "b/docs/content/2016-01-31-avoid-modifying-or-passing-arguments-into-other-functions\342\200\224it-kills-optimization.md" new file mode 100644 index 0000000000..413143ca34 --- /dev/null +++ "b/docs/content/2016-01-31-avoid-modifying-or-passing-arguments-into-other-functions\342\200\224it-kills-optimization.md" @@ -0,0 +1,38 @@ +title: Avoid modifying or passing `arguments` into other functions — it kills optimization +tip-number: 31 +tip-username: berkana +tip-username-profile: https://github.com/berkana +tip-tldr: Within JavaScript functions, the variable name `arguments` lets you access all of the arguments passed to the function. `arguments` is an _array-like object_; `arguments` can be accessed using array notation, and it has the _length_ property, but it doesn't have many of the built-in methods that arrays have such as `filter` and `map` and `forEach`. Because of this, it is a fairly common practice to convert `arguments` into an array using the following snipet + +- /en/avoid-modifying-or-passing-arguments-into-other-functions-it-kills-optimization/ + +###Background + +Within JavaScript functions, the variable name [`arguments`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments) lets you access all of the arguments passed to the function. `arguments` is an _array-like object_; `arguments` can be accessed using array notation, and it has the _length_ property, but it doesn't have many of the built-in methods that arrays have such as `filter` and `map` and `forEach`. Because of this, it is a fairly common practice to convert `arguments` into an array using the following: + +```js +var args = Array.prototype.slice.call(arguments); +``` + +This calls the `slice` method from the `Array` prototype, passing it `arguments`; the `slice` method returns a shallow copy of `arguments` as a new array object. A common shorthand for this is : + +```js +var args = [].slice.call(arguments); +``` + +In this case, instead of calling `slice` from the `Array` prototype, it is simply being called from an empty array literal. + +###Optimization + +Unfortunately, passing `arguments` into any function call will cause the V8 JavaScript engine used in Chrome and Node to skip optimization on the function that does this, which can result in considerably slower performance. See this article on [optimization killers](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers). Passing `arguments` to any other function is known as _leaking `arguments`_. + +Instead, if you want an array of the arguments that lets you use you need to resort to this: + +```js +var args = new Array(arguments.length); +for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; +} +``` + +Yes it is more verbose, but in production code, it is worth it for the performance optimization. diff --git a/docs/content/2016-02-01-map-to-the-rescue-adding-order-to-object-properties.md b/docs/content/2016-02-01-map-to-the-rescue-adding-order-to-object-properties.md new file mode 100644 index 0000000000..38eaf54e1f --- /dev/null +++ b/docs/content/2016-02-01-map-to-the-rescue-adding-order-to-object-properties.md @@ -0,0 +1,70 @@ +title: Map() to the rescue; adding order to Object properties +tip-number: 32 +tip-username: loverajoel +tip-username-profile: https://twitter.com/loverajoel +tip-tldr: An Object it is an unordered collection of properties... that means that if you are trying to save ordered data inside an Object, you have to review it because properties order in objects are not guaranteed. +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/map-to-the-rescue-adding-order-to-object-properties/ + +## Object properties order + +> An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive value, object, or function. A function stored in a property of an object is called a method. [ECMAScript](http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf) + +Take a look in action + +```js +var myObject = { + z: 1, + '@': 2, + b: 3, + 1: 4, + 5: 5 +}; +console.log(myObject) // Object {1: 4, 5: 5, z: 1, @: 2, b: 3} + +for (item in myObject) {... +// 1 +// 5 +// z +// @ +// b +``` + +Each browser have his own rules about the order in objects bebause technically, order is unspecified. + +## How to solve this? + +### Map + +Using a new ES6 feature called Map. A [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object iterates its elements in insertion order — a `for...of` loop returns an array of [key, value] for each iteration. + +```js +var myObject = new Map(); +myObject.set('z', 1); +myObject.set('@', 2); +myObject.set('b', 3); +for (var [key, value] of myObject) { + console.log(key, value); +... +// z 1 +// @ 2 +// b 3 +``` + +### Hack for old browsers + +Mozilla suggest: + +> So, if you want to simulate an ordered associative array in a cross-browser environment, you are forced to either use two separate arrays (one for the keys and the other for the values), or build an array of single-property objects, etc. + +```js +// Using two separate arrays +var objectKeys = [z, @, b, 1, 5]; +for (item in objectKeys) { + myObject[item] +... + +// Build an array of single-property objects +var myData = [{z: 1}, {'@': 2}, {b: 3}, {1: 4}, {5: 5}]; +``` diff --git a/docs/content/2016-02-02-create-range-0...n-easily-using-one-line.md b/docs/content/2016-02-02-create-range-0...n-easily-using-one-line.md new file mode 100644 index 0000000000..bf8142d775 --- /dev/null +++ b/docs/content/2016-02-02-create-range-0...n-easily-using-one-line.md @@ -0,0 +1,61 @@ +title: Create array sequence `[0, 1, ..., N-1]` in one line +tip-number: 33 +tip-username: SarjuHansaliya +tip-username-profile: https://github.com/SarjuHansaliya +tip-tldr: Compact one-liners that generate ordinal sequence arrays + +- /en/create-range-0...n-easily-using-one-line/ + +Here are two compact code sequences to generate the `N`-element array `[0, 1, ..., N-1]`: + +### Solution 1 (requires ES5) + +```js +Array.apply(null, { length: N }).map(Function.call, Number); +``` + +#### Brief explanation + +1. `Array.apply(null, {length: N})` returns an `N`-element array filled with `undefined` (i.e. `A = [undefined, undefined, ...]`). +2. `A.map(Function.call, Number)` returns an `N`-element array, whose index `I` gets the result of `Function.call.call(Number, undefined, I, A)` +3. `Function.call.call(Number, undefined, I, A)` collapses into `Number(I)`, which is naturally `I`. +4. Result: `[0, 1, ..., N-1]`. + +For a more thorough explanation, go [here](https://github.com/gromgit/jstips-xe/blob/master/tips/33.md). + +### Solution 2 (requires ES6) + +It uses `Array.from` [https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from) + +```js +Array.from(new Array(N), (val, index) => index); +``` + +### Solution 3 (requires ES6) + +```js +Array.from(Array(N).keys()); +``` + +#### Brief explanation + +1. `A = new Array(N)` returns an array with `N` _holes_ (i.e. `A = [,,,...]`, but `A[x] = undefined` for `x` in `0...N-1`). +2. `F = (val,index)=>index` is simply `function F (val, index) { return index; }` +3. `Array.from(A, F)` returns an `N`-element array, whose index `I` gets the results of `F(A[I], I)`, which is simply `I`. +4. Result: `[0, 1, ..., N-1]`. + +### One More Thing + +If you actually want the sequence [1, 2, ..., N], **Solution 1** becomes: + +```js +Array.apply(null, { length: N }).map(function (value, index) { + return index + 1; +}); +``` + +and **Solution 2**: + +```js +Array.from(new Array(N), (val, index) => index + 1); +``` diff --git a/docs/content/2016-02-03-implementing-asynchronous-loops.md b/docs/content/2016-02-03-implementing-asynchronous-loops.md new file mode 100644 index 0000000000..e88949de05 --- /dev/null +++ b/docs/content/2016-02-03-implementing-asynchronous-loops.md @@ -0,0 +1,92 @@ +title: Implementing asynchronous loop +tip-number: 34 +tip-username: madmantalking +tip-username-profile: https://github.com/madmantalking +tip-tldr: You may run into problems while implementing asynchronous loops. + +- /en/implementing-asynchronous-loops/ + +Let's try out writing an asynchronous function which prints the value of the loop index every second. + +```js +for (var i = 0; i < 5; i++) { + setTimeout(function () { + console.log(i); + }, 1000 * (i + 1)); +} +``` + +The output of the above programs turns out to be + +```js +> 5 +> 5 +> 5 +> 5 +> 5 +``` + +So this definitely doesn't work. + +**Reason** + +Each timeout refers to the original `i`, not a copy. So the for loop increments `i` until it gets to 5, then the timeouts run and use the current value of `i` (which is 5). + +Well , this problem seems easy. An immediate solution that strikes is to cache the loop index in a temporary variable. + +```js +for (var i = 0; i < 5; i++) { + var temp = i; + setTimeout(function () { + console.log(temp); + }, 1000 * (i + 1)); +} +``` + +But again the output of the above programs turns out to be + +```js +> 4 +> 4 +> 4 +> 4 +> 4 +``` + +So , that doesn't work either , because blocks don't create a scope and variables initializers are hoisted to the top of the scope. In fact, the previous block is the same as: + +```js +var temp; +for (var i = 0; i < 5; i++) { + temp = i; + setTimeout(function () { + console.log(temp); + }, 1000 * (i + 1)); +} +``` + +**Solution** + +There are a few different ways to copy `i`. The most common way is creating a closure by declaring a function and passing `i` as an argument. Here we do this as a self-calling function. + +```js +for (var i = 0; i < 5; i++) { + (function (num) { + setTimeout(function () { + console.log(num); + }, 1000 * (i + 1)); + })(i); +} +``` + +In JavaScript, arguments are passed by value to a function. So primitive types like numbers, dates, and strings are basically copied. If you change them inside the function, it does not affect the outside scope. Objects are special: if the inside function changes a property, the change is reflected in all scopes. + +Another approach for this would be with using `let`. With ES6 the `let` keyword is useful since it's block scoped unlike `var` + +```js +for (let i = 0; i < 5; i++) { + setTimeout(function () { + console.log(i); + }, 1000 * (i + 1)); +} +``` diff --git a/docs/content/2016-02-04-assignment-shorthands.md b/docs/content/2016-02-04-assignment-shorthands.md new file mode 100644 index 0000000000..78438234c8 --- /dev/null +++ b/docs/content/2016-02-04-assignment-shorthands.md @@ -0,0 +1,120 @@ +title: Assignment Operators +tip-number: 35 +tip-username: hsleonis +tip-username-profile: https://github.com/hsleonis +tip-tldr: Assigning is very common. Sometimes typing becomes time consuming for us 'Lazy programmers'. So, we can use some tricks to help us and make our code cleaner and simpler. + +- /en/assignment-shorthands/ + +Assigning is very common. Sometimes typing becomes time consuming for us 'Lazy programmers'. +So, we can use some tricks to help us and make our code cleaner and simpler. + +This is the similar use of + +```javascript +x += 23; // x = x + 23; +y -= 15; // y = y - 15; +z *= 10; // z = z * 10; +k /= 7; // k = k / 7; +p %= 3; // p = p % 3; +d **= 2; // d = d ** 2; +m >>= 2; // m = m >> 2; +n <<= 2; // n = n << 2; +n++; // n = n + 1; +n--; +n = n - 1; +``` + +### `++` and `--` operators + +There is a special `++` operator. It's best to explain it with an example: + +```javascript +var a = 2; +var b = a++; +// Now a is 3 and b is 2 +``` + +The `a++` statement does this: + +1. return the value of `a` +2. increment `a` by 1 + +But what if we wanted to increment the value first? It's simple: + +```javascript +var a = 2; +var b = ++a; +// Now both a and b are 3 +``` + +See? I put the operator _before_ the variable. + +The `--` operator is similar, except it decrements the value. + +### If-else (Using ternary operator) + +This is what we write on regular basis. + +```javascript +var newValue; +if (value > 10) newValue = 5; +else newValue = 2; +``` + +We can user ternary operator to make it awesome: + +```javascript +var newValue = value > 10 ? 5 : 2; +``` + +### Null, Undefined, Empty Checks + +```javascript +if (variable1 !== null || variable1 !== undefined || variable1 !== '') { + var variable2 = variable1; +} +``` + +Shorthand here: + +```javascript +var variable2 = variable1 || ''; +``` + +P.S.: If variable1 is a number, then first check if it is 0. + +### Object Array Notation + +Instead of using: + +```javascript +var a = new Array(); +a[0] = 'myString1'; +a[1] = 'myString2'; +``` + +Use this: + +```javascript +var a = ['myString1', 'myString2']; +``` + +### Associative array + +Instead of using: + +```javascript +var skillSet = new Array(); +skillSet['Document language'] = 'HTML5'; +skillSet['Styling language'] = 'CSS3'; +``` + +Use this: + +```javascript +var skillSet = { + 'Document language': 'HTML5', + 'Styling language': 'CSS3' +}; +``` diff --git a/docs/content/2016-02-05-observe-dom-changes.md b/docs/content/2016-02-05-observe-dom-changes.md new file mode 100644 index 0000000000..91b8caf052 --- /dev/null +++ b/docs/content/2016-02-05-observe-dom-changes.md @@ -0,0 +1,59 @@ +title: Observe DOM changes in extensions +tip-number: 36 +tip-username: beyondns +tip-username-profile: https://github.com/beyondns +tip-tldr: When you develop extensions to existent sites it's not so easy to play with DOM 'cause of modern dynamic javascript. + +- /en/observe-dom-changes/ + +[MutationObserver](https://developer.mozilla.org/en/docs/Web/API/MutationObserver) is a solution to listen DOM changes and do what you want to do with elements when they changed. In following example there is some emulation of dynamic content loading with help of timers, after first "target" element creation goes "subTarget". +In extension code firstly rootObserver works till targetElement appearance then elementObserver starts. This cascading observing helps finally get moment when subTargetElement found. +This useful to develop extensions to complex sites with dynamic content loading. + +```js +const observeConfig = { + attributes: true, + childList: true, + characterData: true, + subtree: true +}; + +function initExtension(rootElement, targetSelector, subTargetSelector) { + var rootObserver = new MutationObserver(function (mutations) { + console.log('Inside root observer'); + targetElement = rootElement.querySelector(targetSelector); + if (targetElement) { + rootObserver.disconnect(); + var elementObserver = new MutationObserver(function (mutations) { + console.log('Inside element observer'); + subTargetElement = targetElement.querySelector(subTargetSelector); + if (subTargetElement) { + elementObserver.disconnect(); + console.log('subTargetElement found!'); + } + }); + elementObserver.observe(targetElement, observeConfig); + } + }); + rootObserver.observe(rootElement, observeConfig); +} + +(function () { + initExtension(document.body, 'div.target', 'div.subtarget'); + + setTimeout(function () { + del = document.createElement('div'); + del.innerHTML = "
      target
      "; + document.body.appendChild(del); + }, 3000); + + setTimeout(function () { + var el = document.body.querySelector('div.target'); + if (el) { + del = document.createElement('div'); + del.innerHTML = "
      subtarget
      "; + el.appendChild(del); + } + }, 5000); +})(); +``` diff --git a/docs/content/2016-02-06-deduplicate-an-array.md b/docs/content/2016-02-06-deduplicate-an-array.md new file mode 100644 index 0000000000..e4b2daf075 --- /dev/null +++ b/docs/content/2016-02-06-deduplicate-an-array.md @@ -0,0 +1,126 @@ +title: Deduplicate an Array +tip-number: 37 +tip-username: danillouz +tip-username-profile: https://www.twitter.com/danillouz +tip-tldr: How to remove duplicate elements, of different data types, from an Array. + +- /en/deduplicate-an-array/ + +# Primitives + +If an Array only contains primitive values, we can deduplicate it by +only using the [`filter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) and [`indexOf`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) methods. + +```javascript +var deduped = [1, 1, 'a', 'a'].filter(function (el, i, arr) { + return arr.indexOf(el) === i; +}); + +console.log(deduped); // [ 1, 'a' ] +``` + +## ES2015 + +We can write this in a more compact way using an [arrow function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions). + +```javascript +var deduped = [1, 1, 'a', 'a'].filter((el, i, arr) => arr.indexOf(el) === i); + +console.log(deduped); // [ 1, 'a' ] +``` + +But with the introduction of [Sets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) and the [`from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from) method, we can achieve the same +result in a more concise way. + +```javascript +var deduped = Array.from(new Set([1, 1, 'a', 'a'])); + +console.log(deduped); // [ 1, 'a' ] +``` + +# Objects + +We can't use the same approach when the elements are Objects, +because Objects are stored by reference and primitives are stored +by value. + +```javascript +1 === 1 // true + +'a' === 'a' // true + +{ a: 1 } === { a: 1 } // false +``` + +Therefore we need to change our approach and use a hash table. + +```javascript +function dedup(arr) { + var hashTable = {}; + + return arr.filter(function (el) { + var key = JSON.stringify(el); + var match = Boolean(hashTable[key]); + + return match ? false : (hashTable[key] = true); + }); +} + +var deduped = dedup([{ a: 1 }, { a: 1 }, [1, 2], [1, 2]]); + +console.log(deduped); // [ {a: 1}, [1, 2] ] +``` + +Because a hash table in javascript is simply an `Object`, the keys +will always be of the type `String`. This means that normally we can't +distinguish between strings and numbers of the same value, i.e. `1` and +`'1'`. + +```javascript +var hashTable = {}; + +hashTable[1] = true; +hashTable['1'] = true; + +console.log(hashTable); // { '1': true } +``` + +However, because we're using [`JSON.stringify`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), keys that are of the +type `String`, will be stored as an escaped string value, giving us unique +keys in our `hashTable`. + +```javascript +var hashTable = {}; + +hashTable[JSON.stringify(1)] = true; +hashTable[JSON.stringify('1')] = true; + +console.log(hashTable); // { '1': true, '\'1\'': true } +``` + +This means duplicate elements of the same value, but of a different type, +will still be deduplicated using the same implementation. + +```javascript +var deduped = dedup([{ a: 1 }, { a: 1 }, [1, 2], [1, 2], 1, 1, '1', '1']); + +console.log(deduped); // [ {a: 1}, [1, 2], 1, '1' ] +``` + +# Resources + +## Methods + +- [`filter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) +- [`indexOf`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) +- [`from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from) +- [`JSON.stringify`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) + +## ES2015 + +- [arrow functions](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions) +- [Sets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) + +## Stack overflow + +- [remove duplicates from array](http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array/9229821#9229821) diff --git a/docs/content/2016-02-07-flattening-multidimensional-arrays-in-javascript.md b/docs/content/2016-02-07-flattening-multidimensional-arrays-in-javascript.md new file mode 100644 index 0000000000..9bb3d460fc --- /dev/null +++ b/docs/content/2016-02-07-flattening-multidimensional-arrays-in-javascript.md @@ -0,0 +1,75 @@ +title: Flattening multidimensional Arrays in JavaScript +tip-number: 38 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: Three different solutions to merge multidimensional array into a single array. +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/flattening-multidimensional-arrays-in-javascript/ + +These are the three known ways to merge multidimensional array into a single array. + +Given this array: + +```js +var myArray = [ + [1, 2], + [3, 4, 5], + [6, 7, 8, 9] +]; +``` + +We wanna have this result: + +```js +[1, 2, 3, 4, 5, 6, 7, 8, 9]; +``` + +### Solution 1: Using [`concat()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) and [`apply()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) + +```js +var myNewArray = [].concat.apply([], myArray); +// [1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +### Solution 2: Using [`reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Flatten_an_array_of_arrays) + +```js +var myNewArray = myArray.reduce(function (prev, curr) { + return prev.concat(curr); +}); +// [1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +### Solution 3: + +```js +var myNewArray3 = []; +for (var i = 0; i < myArray.length; ++i) { + for (var j = 0; j < myArray[i].length; ++j) myNewArray3.push(myArray[i][j]); +} +console.log(myNewArray3); +// [1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +### Solution 4: Using [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator) in ES6 + +```js +var myNewArray4 = [].concat(...myArray); +console.log(myNewArray4); +// [1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +### Solution 5: Using [`flat()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat) in ES10 + +```js +var myNewArray5 = myArray.flat(); +console.log(myNewArray5); +// [1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +Take a look [here](https://jsbin.com/janana/edit?js,console) these 4 algorithms in action. + +For infinitely nested array try Lodash [flattenDeep()](https://lodash.com/docs#flattenDeep). + +If you are curious about performance, [here](http://jsperf.com/flatten-an-array-loop-vs-reduce/6) a test for check how it works. diff --git a/docs/content/2016-02-08-advanced-properties.md b/docs/content/2016-02-08-advanced-properties.md new file mode 100644 index 0000000000..4278b6197c --- /dev/null +++ b/docs/content/2016-02-08-advanced-properties.md @@ -0,0 +1,111 @@ +title: Advanced Javascript Properties +tip-number: 39 +tip-username: mallowigi +tip-username-profile: https://github.com/mallowigi +tip-tldr: How to add private properties, getters and setters to objects. + +- /en/advanced-properties/ + +It is possible to configure object properties in Javascript for example to set properties to be pseudo-private or readonly. This feature is available since ECMAScript 5.1, therefore supported by all recent browsers. + +To do so, you need to use the method `defineProperty` of the `Object` prototype like so: + +```js +var a = {}; +Object.defineProperty(a, 'readonly', { + value: 15, + writable: false +}); + +a.readonly = 20; +console.log(a.readonly); // 15 +``` + +The syntax is as follows: + +```js +Object.defineProperty(dest, propName, options); +``` + +or for multiple definitions: + +```js +Object.defineProperties(dest, { + propA: optionsA, + propB: optionsB //... +}); +``` + +where options include the following attributes: + +- _value_: if the property is not a getter (see below), value is a mandatory attribute. `{a: 12}` === `Object.defineProperty(obj, 'a', {value: 12})` +- _writable_: set the property as readonly. Note that if the property is a nested objects, its properties are still editable. +- _enumerable_: set the property as hidden. That means that `for ... of` loops and `stringify` will not include the property in their result, but the property is still there. Note: That doesn't mean that the property is private! It can still be accessible from the outside, it just means that it won't be printed. +- _configurable_: set the property as non modifiable, e.g. protected from deletion or redefinition. Again, if the property is a nested object, its properties are still configurable. + +So in order to create a private constant property, you can define it like so: + +```js +Object.defineProperty(obj, 'myPrivateProp', { value: val, enumerable: false, writable: false, configurable: false }); +``` + +Besides configuring properties, `defineProperty` allows us to define _dynamic properties_, thanks to the second parameter being a string. For instance, let's say that I want to create properties according to some external configuration: + +```js + +var obj = { + getTypeFromExternal(): true // illegal in ES5.1 +} + +Object.defineProperty(obj, getTypeFromExternal(), {value: true}); // ok + +// For the example sake, ES6 introduced a new syntax: +var obj = { + [getTypeFromExternal()]: true +} +``` + +But that's not all! Advanced properties allows us to create **getters** and **setters**, just like other OOP languages! In that case, one cannot use the `writable`, `enumerable` and `configurable` properties, but instead: + +```js +function Foobar () { + var _foo; // true private property + + Object.defineProperty(obj, 'foo', { + get: function () { return _foo; } + set: function (value) { _foo = value } + }); + +} + +var foobar = new Foobar(); +foobar.foo; // 15 +foobar.foo = 20; // _foo = 20 +``` + +Aside for the obvious advantage of encapsulation and advanced accessors, you will notice that we didn't "call" the getter, instead we just "get" the property without parentheses! This is awesome! For instance, let's imagine that we have an object with long nested properties, like so: + +```js +var obj = { a: { b: { c: [{ d: 10 }, { d: 20 }] } } }; +``` + +Now instead of doing `a.b.c[0].d` (where one of the properties can resolve to `undefined` and throw an error), we can instead create an alias: + +```js +Object.defineProperty(obj, 'firstD', { + get: function () { + return a && a.b && a.b.c && a.b.c[0] && a.b.c[0].d; + } +}); + +console.log(obj.firstD); // 10 +``` + +### Note + +If you define a getter without a setter and still try to set a value, you will get an error! This is particularly important when using helper functions such as `$.extend` or `_.merge`. Be careful! + +### Links + +- [defineProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) +- [Defining properties in JavaScript](http://bdadam.com/blog/defining-properties-in-javascript.html) diff --git a/docs/content/2016-02-09-using-json-stringify.md b/docs/content/2016-02-09-using-json-stringify.md new file mode 100644 index 0000000000..8af697e160 --- /dev/null +++ b/docs/content/2016-02-09-using-json-stringify.md @@ -0,0 +1,57 @@ +title: Using JSON.Stringify +tip-number: 40 +tip-username: vamshisuram +tip-username-profile: https://github.com/vamshisuram +tip-tldr: Create string from selected properties of JSON object. + +- /en/using-json-stringify/ + +Let's say there is an object with properties "prop1", "prop2", "prop3". +We can pass **additional params** to **JSON.stringify** to selectively write properties of the object to string like: + +```javascript +var obj = { + prop1: 'value1', + prop2: 'value2', + prop3: 'value3' +}; + +var selectedProperties = ['prop1', 'prop2']; + +var str = JSON.stringify(obj, selectedProperties); + +// str +// {"prop1":"value1","prop2":"value2"} +``` + +The **"str"** will contain only info on selected properties only. + +Instead of array we can pass a function also. + +```javascript +function selectedProperties(key, val) { + // the first val will be the entire object, key is empty string + if (!key) { + return val; + } + + if (key === 'prop1' || key === 'prop2') { + return val; + } + + return; +} +``` + +The last optional param it takes is to modify the way it writes the object to string. + +```javascript +var str = JSON.stringify(obj, selectedProperties, '\t\t'); + +/* str output with double tabs in every line. +{ + "prop1": "value1", + "prop2": "value2" +} +*/ +``` diff --git a/docs/content/2016-02-10-array-average-and-median.md b/docs/content/2016-02-10-array-average-and-median.md new file mode 100644 index 0000000000..3c0684f4b1 --- /dev/null +++ b/docs/content/2016-02-10-array-average-and-median.md @@ -0,0 +1,59 @@ +title: Array average and median +tip-number: 41 +tip-username: soyuka +tip-username-profile: https://github.com/soyuka +tip-tldr: Calculate the average and median from array values + +- /en/array-average-and-median/ + +The following examples will be based on the following array: + +```javascript +let values = [2, 56, 3, 41, 0, 4, 100, 23]; +``` + +To get the average, we have to sum up numbers and then divide by the number of values. Steps are: + +- get the array length +- sum up values +- get the average (`sum/length`) + +```javascript +let values = [2, 56, 3, 41, 0, 4, 100, 23]; +let sum = values.reduce((previous, current) => (current += previous)); +let avg = sum / values.length; +// avg = 28 +``` + +Or: + +```javascript +let values = [2, 56, 3, 41, 0, 4, 100, 23]; +let count = values.length; +values = values.reduce((previous, current) => (current += previous)); +values /= count; +// avg = 28 +``` + +Now, to get the median steps are: + +- sort the array +- get the arethmic mean of the middle values + +```javascript +let values = [2, 56, 3, 41, 0, 4, 100, 23]; +values.sort((a, b) => a - b); +let lowMiddle = Math.floor((values.length - 1) / 2); +let highMiddle = Math.ceil((values.length - 1) / 2); +let median = (values[lowMiddle] + values[highMiddle]) / 2; +// median = 13,5 +``` + +With a bitwise operator: + +```javascript +let values = [2, 56, 3, 41, 0, 4, 100, 23]; +values.sort((a, b) => a - b); +let median = (values[(values.length - 1) >> 1] + values[values.length >> 1]) / 2; +// median = 13,5 +``` diff --git a/docs/content/2016-02-11-preventing-unapply-attacks.md b/docs/content/2016-02-11-preventing-unapply-attacks.md new file mode 100644 index 0000000000..33b31154b3 --- /dev/null +++ b/docs/content/2016-02-11-preventing-unapply-attacks.md @@ -0,0 +1,50 @@ +title: Preventing Unapply Attacks +tip-number: 42 +tip-username: emars +tip-username-profile: https://twitter.com/marseltov +tip-tldr: Freeze the builtin prototypes. + +- /en/preventing-unapply-attacks/ + +By overriding the builtin prototypes, external code can cause code to break by rewriting code to expose and change bound arguments. This can be an issue that seriously breaks applications that works by using polyfill es5 methods. + +```js +// example bind polyfill +function bind(fn) { + var prev = Array.prototype.slice.call(arguments, 1); + return function bound() { + var curr = Array.prototype.slice.call(arguments, 0); + var args = Array.prototype.concat.apply(prev, curr); + return fn.apply(null, args); + }; +} + +// unapply-attack +function unapplyAttack() { + var concat = Array.prototype.concat; + Array.prototype.concat = function replaceAll() { + Array.prototype.concat = concat; // restore the correct version + var curr = Array.prototype.slice.call(arguments, 0); + var result = concat.apply([], curr); + return result; + }; +} +``` + +The above function discards the `prev` array from the bind meaning that any `.concat` the first concat call following using the unapply attack will throw an error. + +By using [Object.freeze](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze), making an object immutable, you prevent any overriding of the builtin object prototypes. + +```js +(function freezePrototypes() { + if (typeof Object.freeze !== 'function') { + throw new Error('Missing Object.freeze'); + } + Object.freeze(Object.prototype); + Object.freeze(Array.prototype); + Object.freeze(Function.prototype); +})(); +``` + +You can read more about unapply attacks [here](https://glebbahmutov.com/blog/unapply-attack/). +Although this concept is called an 'unapply attack' due to some code being able to access closures that normally wouldn't be in scope, it is mostly wrong to consider this a security feature due to it not preventing an attacker with code execution from extending prototypes before the freezing happens and also still having the potential to read all scopes using various language features. ECMA modules would give realm based isolation which is much stronger than this solution however still doesn't fix the issues of third party scripts. diff --git a/docs/content/2016-02-12-use-destructuring-in-function-parameters.md b/docs/content/2016-02-12-use-destructuring-in-function-parameters.md new file mode 100644 index 0000000000..397cd9bcb5 --- /dev/null +++ b/docs/content/2016-02-12-use-destructuring-in-function-parameters.md @@ -0,0 +1,93 @@ +title: Use destructuring in function parameters +tip-number: 43 +tip-username: dislick +tip-username-profile: https://github.com/dislick +tip-tldr: Did you know that you can use destructuring in function parameters? + +- /en/use-destructuring-in-function-parameters/ + +I am sure many of you are already familiar with the [ES6 Destructuring Assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment). Did you know that you can also use it in function parameters? + +```js +var sayHello = function ({ name, surname }) { + console.log(`Hello ${name} ${surname}! How are you?`); +}; + +sayHello({ name: 'John', surname: 'Smith' }); +// -> Hello John Smith! How are you? +``` + +This is great for functions which accept an options object. For this use case, you can also add [default parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters) to fill in whatever values the caller leaves out, or if the caller forgets to pass one at all: + +```js +var sayHello2 = function ({ name = 'Anony', surname = 'Moose' } = {}) { + console.log(`Hello ${name} ${surname}! How are you?`); +}; +``` + +The `= {}` says that the default object to be destructured for this parameter is `{}`, in case the caller forgets to pass the parameter, or passes one of the wrong type (more on this below). + +```js +sayHello2(); +// -> Hello Anony Moose! How are you? +sayHello2({ name: 'Bull' }); +// -> Hello Bull Moose! How are you? +``` + +##### Argument Handling + +With plain destructuring assignment, if the the input parameter can't be matched with the function's specified object arguments, all the unmatched arguments are `undefined`, so you need to add code that handles this properly: + +```js +var sayHelloTimes = function ({ name, surname }, times) { + console.log(`Hello ${name} ${surname}! I've seen you ${times} times before.`); +}; + +sayHelloTimes({ name: 'Pam' }, 5678); +// -> Hello Pam undefined! I've seen you 5678 times before. +sayHelloTimes(5678); +// -> Hello undefined undefined! I've seen you undefined times before. +``` + +Worse, if the parameter to be destructured is missing, an exception is thrown, probably bringing your app to a screeching halt: + +```js +sayHelloTimes(); +// -> Uncaught TypeError: Cannot match against 'undefined' or 'null'... +``` + +It's conceptually similar to accessing a property of an undefined object, just with a different exception type. + +Destructuring assignment with default parameters hides all the above to a certain extent: + +```js +var sayHelloTimes2 = function ({ name = 'Anony', surname = 'Moose' } = {}, times) { + console.log(`Hello ${name} ${surname}! I've seen you ${times} times before.`); +}; + +sayHelloTimes2({ name: 'Pam' }, 5678); +// -> Hello Pam Moose! I've seen you 5678 times before. +sayHelloTimes2(5678); +// -> Hello Anony Moose! I've seen you undefined times before. +sayHelloTimes2(); +// -> Hello Anony Moose! I've seen you undefined times before. +``` + +As for `= {}`, it covers the case of a missing _object_, for which individual property defaults won't help at all: + +```js +var sayHelloTimes2a = function ({ name = 'Anony', surname = 'Moose' }, times) { + console.log(`Hello ${name} ${surname}! I've seen you ${times} times before.`); +}; + +sayHelloTimes2a({ name: 'Pam' }, 5678); +// -> Hello Pam Moose! I've seen you 5678 times before. +sayHelloTimes2a(5678); +// -> Hello Anony Moose! I've seen you undefined times before. +sayHelloTimes2a(); +// -> Uncaught TypeError: Cannot match against 'undefined' or 'null'. +``` + +##### Availability + +Note that destructuring assignment may not yet be available by default, in the version of Node.js or browser that you're using. For Node.js, you can try using the `--harmony-destructuring` flag on startup to activate this feature. diff --git a/docs/content/2016-02-13-know-the-passing-mechanism.md b/docs/content/2016-02-13-know-the-passing-mechanism.md new file mode 100644 index 0000000000..7f2c4ea70d --- /dev/null +++ b/docs/content/2016-02-13-know-the-passing-mechanism.md @@ -0,0 +1,57 @@ +title: Know the passing mechanism +tip-number: 44 +tip-username: bmkmanoj +tip-username-profile: https://github.com/bmkmanoj +tip-tldr: JavaScript technically only passes by value for both primitives and object (or reference) types. In case of reference types the reference value itself is passed by value. + +- /en/know-the-passing-mechanism/ + +JavaScript is pass-by-value, technically. It is neither pass-by-value nor pass-by-reference, going by the truest sense of these terms. To understand this passing mechanism, take a look at the following two example code snippets and the explanations. + +### Example 1 + +```js +var me = { + // 1 + partOf: 'A Team' +}; + +function myTeam(me) { + // 2 + + me = { + // 3 + belongsTo: 'A Group' + }; +} + +myTeam(me); +console.log(me); // 4 : {'partOf' : 'A Team'} +``` + +In above example, when the `myTeam` gets invoked, JavaScript is _passing the reference to_ `me` _object as value, as it is an object_ and invocation itself creates two independent references to the same object, (though the name being same here i.e. `me`, is misleading and gives us an impression that it is the single reference) and hence, the reference variable themselves are independent. + +When we assigned a new object at #`3`, we are changing this reference value entirely within the `myTeam` function, and it will not have any impact on the original object outside this function scope, from where it was passed and the reference in the outside scope is going to retain the original object and hence the output from #`4`. + +### Example 2 + +```js +var me = { + // 1 + partOf: 'A Team' +}; + +function myGroup(me) { + // 2 + me.partOf = 'A Group'; // 3 +} + +myGroup(me); +console.log(me); // 4 : {'partOf' : 'A Group'} +``` + +In the case of `myGroup` invocation, we are passing the object `me`. But unlike the example 1 scenario, we are not assigning this `me` variable to any new object, effectively meaning the object reference value within the `myGroup` function scope still is the original object's reference value and when we are modifying the property within this scope, it is effectively modifying the original object's property. Hence, you get the output from #`4`. + +So does this later case not prove that javascript is pass-by-reference? No, it does not. Remember, _JavaScript passes the reference as value, in case of objects_. The confusion arises as we tend not to understand fully what pass by reference is. This is the exact reason, some prefer to call this as _call-by-sharing_. + +_Initially posted by the author on [js-by-examples](https://github.com/bmkmanoj/js-by-examples/blob/master/examples/js_pass_by_value_or_reference.md)_ diff --git a/docs/content/2016-02-14-calculate-the-max-min-value-from-an-array.md b/docs/content/2016-02-14-calculate-the-max-min-value-from-an-array.md new file mode 100644 index 0000000000..e46f50b311 --- /dev/null +++ b/docs/content/2016-02-14-calculate-the-max-min-value-from-an-array.md @@ -0,0 +1,37 @@ +title: Calculate the Max/Min value from an array +tip-number: 45 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: Ways to use the built-in functions Math.max() and Math.min() with arrays of numbers +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/calculate-the-max-min-value-from-an-array/ + +The built-in functions [Math.max()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max) and [Math.min()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min) find the maximum and minimum value of the arguments, respectively. + +```js +Math.max(1, 2, 3, 4); // 4 +Math.min(1, 2, 3, 4); // 1 +``` + +These functions will not work as-is with arrays of numbers. However, there are some ways around this. + +[`Function.prototype.apply()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) allows you to call a function with a given `this` value and an _array_ of arguments. + +```js +var numbers = [1, 2, 3, 4]; +Math.max.apply(null, numbers); // 4 +Math.min.apply(null, numbers); // 1 +``` + +Passing the `numbers` array as the second argument of `apply()` results in the function being called with all values in the array as parameters. + +A simpler, ES2015 way of accomplishing this is with the new [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator). + +```js +var numbers = [1, 2, 3, 4]; +Math.max(...numbers); // 4 +Math.min(...numbers); // 1 +``` + +This operator causes the values in the array to be expanded, or "spread", into the function's arguments. diff --git a/docs/content/2016-02-15-detect-document-ready-in-pure-js.md b/docs/content/2016-02-15-detect-document-ready-in-pure-js.md new file mode 100644 index 0000000000..4c30225648 --- /dev/null +++ b/docs/content/2016-02-15-detect-document-ready-in-pure-js.md @@ -0,0 +1,39 @@ +title: Detect document ready in pure JS +tip-number: 46 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: The cross-browser way to check if the document has loaded in pure JavaScript +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/detect-document-ready-in-pure-js/ + +The cross-browser way to check if the document has loaded in pure JavaScript is using [`readyState`](https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState). + +```js +if (document.readyState === 'complete') { + // The page is fully loaded +} +``` + +You can detect when the document is ready... + +```js +let stateCheck = setInterval(() => { + if (document.readyState === 'complete') { + clearInterval(stateCheck); + // document ready + } +}, 100); +``` + +or with [onreadystatechange](https://developer.mozilla.org/en-US/docs/Web/Events/readystatechange)... + +```js +document.onreadystatechange = () => { + if (document.readyState === 'complete') { + // document ready + } +}; +``` + +Use `document.readyState === 'interactive'` to detect when the DOM is ready. diff --git a/docs/content/2016-02-16-basics-declarations.md b/docs/content/2016-02-16-basics-declarations.md new file mode 100644 index 0000000000..ccb0df9f6b --- /dev/null +++ b/docs/content/2016-02-16-basics-declarations.md @@ -0,0 +1,81 @@ +title: Basics declarations +tip-number: 47 +tip-username: adaniloff +tip-username-profile: https://github.com/adaniloff +tip-tldr: Understand and work with declarations. + +- /en/basics-declarations/ + +Below, different ways to declare variables in JavaScript. +Comments and console.log should be enough to explain what's happening here: + +```js +var y, + x = (y = 1); //== var x; var y; x = y = 1 +console.log('--> 1:', `x = ${x}, y = ${y}`); + +// Will print +//--> 1: x = 1, y = 1 +``` + +First, we just set two variables. Nothing much here. + +```js +(() => { + var x = (y = 2); // == var x; x = y = 2; + console.log('2.0:', `x = ${x}, y = ${y}`); +})(); +console.log('--> 2.1:', `x = ${x}, y = ${y}`); + +// Will print +//2.0: x = 2, y = 2 +//--> 2.1: x = 1, y = 2 +``` + +As you can see, the code has only changed the global y, as we haven't declared the variable in the closure. + +```js +(() => { + var x, + y = 3; // == var x; var y = 3; + console.log('3.0:', `x = ${x}, y = ${y}`); +})(); +console.log('--> 3.1:', `x = ${x}, y = ${y}`); + +// Will print +//3.0: x = undefined, y = 3 +//--> 3.1: x = 1, y = 2 +``` + +Now we declare both variables through var. Meaning they only live in the context of the closure. + +```js +(() => { + var y, + x = (y = 4); // == var x; var y; x = y = 4 + console.log('4.0:', `x = ${x}, y = ${y}`); +})(); +console.log('--> 4.1:', `x = ${x}, y = ${y}`); + +// Will print +//4.0: x = 4, y = 4 +//--> 4.1: x = 1, y = 2 +``` + +Both variables have been declared using var and only after that we've set their values. As local > global, x and y are local in the closure, meaning the global x and y are untouched. + +```js +x = 5; // == x = 5 +console.log('--> 5:', `x = ${x}, y = ${y}`); + +// Will print +//--> 5: x = 5, y = 2 +``` + +This last line is explicit by itself. + +You can test this and see the result [thanks to babel](). + +More informations available on the [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var). + +Special thanks to @kurtextrem for his collaboration :)! diff --git a/docs/content/2016-02-17-reminders-about-reduce-function-usage.md b/docs/content/2016-02-17-reminders-about-reduce-function-usage.md new file mode 100644 index 0000000000..e4694c306e --- /dev/null +++ b/docs/content/2016-02-17-reminders-about-reduce-function-usage.md @@ -0,0 +1,113 @@ +title: How to `reduce()` arrays +tip-number: 48 +tip-username: darul75 +tip-username-profile: https://twitter.com/darul75 +tip-tldr: Some reminders about using `reduce()` + +- /en/reminders-about-reduce-function-usage/ + +As written in documentation the `reduce()` method applies a function against an accumulator and each value of the array (from left-to-right) to reduce it to a single value. + +### Signature + +[reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) function accepts 2 parameters (M: mandatory, O: optional): + +- (M) a callback **reducer function** to be applied that deals with a pair of previous (result of previous computation) and next element until end of the list. +- (O) an **initial value** to be used as the first argument to the first call of the callback. + +So let's see a common usage and later a more sophisticated one. + +### Common usage (accumulation, concatenation) + +We are on Amazon website (prices in $) and our caddy is quite full, let's compute total. + +```javascript +// my current amazon caddy purchases +var items = [{ price: 10 }, { price: 120 }, { price: 1000 }]; + +// our reducer function +var reducer = function add(sumSoFar, item) { + return sumSoFar + item.price; +}; + +// do the job +var total = items.reduce(reducer, 0); + +console.log(total); // 1130 +``` + +Optional reduce function parameter was primitive integer type 0 in that first case, but it could have been an Object, an Array...instead of a primitive type, +but we will see that later. + +Now, cool I received a discount coupon of 20$. + +```javascript +var total = items.reduce(reducer, -20); + +console.log(total); // 1110 +``` + +### Advanced usage (combination) + +This second usage example is inspired by Redux [combineReducers](http://redux.js.org/docs/api/combineReducers.html) function [source](https://github.com/reactjs/redux/blob/master/src/combineReducers.js#L93). + +Idea behind is to separate reducer function into separate individual functions and at the end compute a new _single big reducer function_. + +To illustrate this, let's create a single object literal with some reducers function able to compute total prices in different currency $, €... + +```javascript +var reducers = { + totalInDollar: function (state, item) { + // specific statements... + return (state.dollars += item.price); + }, + totalInEuros: function (state, item) { + return (state.euros += item.price * 0.897424392); + }, + totalInPounds: function (state, item) { + return (state.pounds += item.price * 0.692688671); + }, + totalInYen: function (state, item) { + return (state.yens += item.price * 113.852); + } + // more... +}; +``` + +Then, we create a new swiss knife function + +- responsible for applying each partial reduce functions. +- that will return a new callback reducer function + +```javascript +var combineTotalPriceReducers = function (reducers) { + return function (state, item) { + return Object.keys(reducers).reduce(function (nextState, key) { + reducers[key](state, item); + return state; + }, {}); + }; +}; +``` + +Now let's see how using it. + +```javascript +var bigTotalPriceReducer = combineTotalPriceReducers(reducers); + +var initialState = { dollars: 0, euros: 0, yens: 0, pounds: 0 }; + +var totals = items.reduce(bigTotalPriceReducer, initialState); + +console.log(totals); + +/* +Object {dollars: 1130, euros: 1015.11531904, yens: 127524.24, pounds: 785.81131152} +*/ +``` + +I hope this approach can give you another idea of using reduce() function for your own needs. + +Your reduce function could handle an history of each computation by instance as it is done in Ramdajs with [scan](http://ramdajs.com/docs/#scan) function + +[JSFiddle to play with](https://jsfiddle.net/darul75/81tgt0cd/) diff --git a/docs/content/2016-02-26-extract-unix-timestamp-easily.md b/docs/content/2016-02-26-extract-unix-timestamp-easily.md new file mode 100644 index 0000000000..6b457bd503 --- /dev/null +++ b/docs/content/2016-02-26-extract-unix-timestamp-easily.md @@ -0,0 +1,50 @@ +title: Easiest way to extract unix timestamp in JS +tip-number: 49 +tip-username: nmrony +tip-username-profile: https://github.com/nmrony +tip-tldr: In Javascript you can easily get the unix timestamp + +- /en/extract-unix-timestamp-easily/ + +We frequently need to calculate with unix timestamp. There are several ways to grab the timestamp. For current unix timestamp easiest and fastest way is + +```js +const dateTime = Date.now(); +const timestamp = Math.floor(dateTime / 1000); +``` + +or + +```js +const dateTime = new Date().getTime(); +const timestamp = Math.floor(dateTime / 1000); +``` + +To get unix timestamp of a specific date pass `YYYY-MM-DD` or `YYYY-MM-DDT00:00:00Z` as parameter of `Date` constructor. For example + +```js +const dateTime = new Date('2012-06-08').getTime(); +const timestamp = Math.floor(dateTime / 1000); +``` + +You can just add a `+` sign also when declaring a `Date` object like below + +```js +const dateTime = +new Date(); +const timestamp = Math.floor(dateTime / 1000); +``` + +or for specific date + +```js +const dateTime = +new Date('2012-06-08'); +const timestamp = Math.floor(dateTime / 1000); +``` + +Under the hood the runtime calls `valueOf` method of the `Date` object. Then the unary `+` operator calls `toNumber()` with that returned value. For detailed explanation please check the following links + +- [Date.prototype.valueOf](http://es5.github.io/#x15.9.5.8) +- [Unary + operator](http://es5.github.io/#x11.4.6) +- [toNumber()](http://es5.github.io/#x9.3) +- [Date Javascript MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) +- [Date.parse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) diff --git a/docs/content/2016-03-03-helpful-console-log-hacks.md b/docs/content/2016-03-03-helpful-console-log-hacks.md new file mode 100644 index 0000000000..5b46cf6fe6 --- /dev/null +++ b/docs/content/2016-03-03-helpful-console-log-hacks.md @@ -0,0 +1,27 @@ +title: Helpful Console Logging Tricks +tip-number: 50 +tip-username: zackhall +tip-username-profile: https://twitter.com/zthall +tip-tldr: Helpful logging techniques using coercion and conditonal breakpoints. + +- /en/helpful-console-log-hacks/ + +## Using conditional breakpoints to log data + +If you wanted to log to the console a value each time a function is called, you can use conditional break points to do this. Open up your dev tools, find the function where you'd like to log data to the console and set a breakpoint with the following condition: + +```js +console.log(data.value) && false; +``` + +A conditional breakpoint pauses the page thread only if the condition for the breakpoint evaluates to true. So by using a condition like console.log('foo') && false it's guaranteed to evaluate to false since you're putting the literal false in the AND condition. So this will not pause the page thread when it's hit, but it will log data to the console. This can also be used to count how many times a function or callback is called. + +Here's how you can set a conditional breakpoint in [Edge](https://dev.windows.com/en-us/microsoft-edge/platform/documentation/f12-devtools-guide/debugger/#setting-and-managing-breakpoints 'Managing Breakpoints in Edge'), [Chrome](https://developer.chrome.com/devtools/docs/javascript-debugging#breakpoints 'Managing Breakpoints in Chrome'), [Firefox](https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Set_a_conditional_breakpoint 'Managing Breakpoints in Firefox') and [Safari](https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/Debugger/Debugger.html 'Managing Breakpoints in Safari'). + +## Printing a function variable to console + +Have you ever logged a function variable to the console and weren't able to just view the function's code? The quickest way to see the function's code is to coerce it to a string using concatenation with an empty string. + +```js +console.log(funcVariable + ''); +``` diff --git a/docs/content/2016-03-16-DOM-event-listening-made-easy.md b/docs/content/2016-03-16-DOM-event-listening-made-easy.md new file mode 100644 index 0000000000..d88695e584 --- /dev/null +++ b/docs/content/2016-03-16-DOM-event-listening-made-easy.md @@ -0,0 +1,70 @@ +title: DOM event listening made easy +tip-number: 51 +tip-username: octopitus +tip-username-profile: https://github.com/octopitus +tip-tldr: An elegant and easy way to handle DOM events + +- /en/DOM-event-listening-made-easy/ + +Many of us are still doing these things: + +- `element.addEventListener('type', obj.method.bind(obj))` +- `element.addEventListener('type', function (event) {})` +- `element.addEventListener('type', (event) => {})` + +The above examples all create new anonymous event handlers that can't be removed when no longer needed. This may cause performance problems or unexpected logic bugs, when handlers that you no longer need still get accidentally triggered through unexpected user interactions or [event bubbling](http://www.javascripter.net/faq/eventbubbling.htm). + +Safer event-handling patterns include the following: + +Use a reference: + +```js +const handler = function () { + console.log('Tada!'); +}; +element.addEventListener('click', handler); +// Later on +element.removeEventListener('click', handler); +``` + +Named function that removes itself: + +```js +element.addEventListener('click', function click(e) { + if (someCondition) { + return e.currentTarget.removeEventListener('click', click); + } +}); +``` + +A better approach: + +```js +function handleEvent(eventName, { onElement, withCallback, useCapture = false } = {}, thisArg) { + const element = onElement || document.documentElement; + + function handler(event) { + if (typeof withCallback === 'function') { + withCallback.call(thisArg, event); + } + } + + handler.destroy = function () { + return element.removeEventListener(eventName, handler, useCapture); + }; + + element.addEventListener(eventName, handler, useCapture); + return handler; +} + +// Anytime you need +const handleClick = handleEvent('click', { + onElement: element, + withCallback: (event) => { + console.log('Tada!'); + } +}); + +// And anytime you want to remove it +handleClick.destroy(); +``` diff --git a/docs/content/2016-04-05-return-values-with-the-new-operator.md b/docs/content/2016-04-05-return-values-with-the-new-operator.md new file mode 100644 index 0000000000..250de56361 --- /dev/null +++ b/docs/content/2016-04-05-return-values-with-the-new-operator.md @@ -0,0 +1,83 @@ +title: Return Values with the 'new' Operator +tip-number: 52 +tip-username: Morklympious +tip-username-profile: https://github.com/morklympious +tip-tldr: Understand what gets returned when using new vs. not using new. + +- /en/return-values-with-the-new-operator/ + +You're going to run into some instances where you'll be using `new` to allocate new objects in JavaScript. It's going to blow your mind unless you read this tip to understand what's happening behind the scenes. + +The `new` operator in JavaScript is an operator that, under reasonable circumstances, returns a new instance of an object. Let's say we have a constructor function: + +```js +function Thing() { + this.one = 1; + this.two = 2; +} + +var myThing = new Thing(); + +myThing.one; // 1 +myThing.two; // 2 +``` + +**Note**: `this` refers to the new object created by `new`. Otherwise if `Thing()` is called without `new`, **no object is created**, and `this` is going to point to the global object, which is `window`. This means that: + +1. You'll suddenly have two new global variables named `one` and `two`. +2. `myThing` is now undefined, since nothing is returned in `Thing()`. + +Now that you get that example, here's where things get a little bit wonky. Let's say I add something to the constructor function, a little SPICE: + +```js +function Thing() { + this.one = 1; + this.two = 2; + + return 5; +} + +var myThing = new Thing(); +``` + +Now, what does myThing equal? Is it 5? is it an object? Is it my crippled sense of self-worth? The world may never know! + +Except the world does know: + +```js +myThing.one; // 1 +myThing.two; // 2 +``` + +Interestingly enough, we never actually see the five that we supposedly 'returned' from our constructor. That's weird, isn't it? What are you doing function? WHERE'S THE FIVE? Let's try it with something else. + +Let's return a non-primitive type instead, something like an object. + +```js +function Thing() { + this.one = 1; + this.two = 2; + + return { + three: 3, + four: 4 + }; +} + +var myThing = new Thing(); +``` + +Let's check it out. A quick console.log reveals all: + +```js +console.log(myThing); +/* + Object {three: 3, four: 4} + What happened to this.one and this.two!? + They've been stomped, my friend. +*/ +``` + +**Here's where we learn:** When you invoke a function with the `new` keyword, you can set properties on it using the keyword `this` (but you probably already knew that). Returning a primitive value from a function you called with the `new` keyword will not return the value you specified, but instead will return the `this` instance of the function (the one you put properties on, like `this.one = 1;`). + +However, returning a non-primitive, like an `object`, `array`, or `function` will stomp on the `this` instance, and return that non-primitive instead, effectively ruining all the hard work you did assigning everything to `this`. diff --git a/docs/content/2016-04-21-get-file-extension.md b/docs/content/2016-04-21-get-file-extension.md new file mode 100644 index 0000000000..9a5c5e7e4c --- /dev/null +++ b/docs/content/2016-04-21-get-file-extension.md @@ -0,0 +1,80 @@ +title: Get File Extension +tip-number: 53 +tip-username: richzw +tip-username-profile: https://github.com/richzw +tip-tldr: How to get the file extension more efficiently? + +- /en/get-file-extension/ + +categories: - en - javascript + +--- + +### Question: How to get the file extension? + +```javascript +var file1 = '50.xsl'; +var file2 = '30.doc'; +getFileExtension(file1); //returs xsl +getFileExtension(file2); //returs doc + +function getFileExtension(filename) { + /*TODO*/ +} +``` + +### Solution 1: Regular Expression + +```js +function getFileExtension1(filename) { + return /[.]/.exec(filename) ? /[^.]+$/.exec(filename)[0] : undefined; +} +``` + +### Solution 2: String `split` method + +```js +function getFileExtension2(filename) { + return filename.split('.').pop(); +} +``` + +Those two solutions couldnot handle some edge cases, here is another more robust solution. + +### Solution3: String `slice`, `lastIndexOf` methods + +```js +function getFileExtension3(filename) { + return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2); +} + +console.log(getFileExtension3('')); // '' +console.log(getFileExtension3('filename')); // '' +console.log(getFileExtension3('filename.txt')); // 'txt' +console.log(getFileExtension3('.hiddenfile')); // '' +console.log(getFileExtension3('filename.with.many.dots.ext')); // 'ext' +``` + +_How does it works?_ + +- [String.lastIndexOf()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf) method returns the last occurrence of the specified value (`'.'` in this case). Returns `-1` if the value is not found. +- The return values of `lastIndexOf` for parameter `'filename'` and `'.hiddenfile'` are `-1` and `0` respectively. [Zero-fill right shift operator (>>>)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#%3E%3E%3E_%28Zero-fill_right_shift%29) will transform `-1` to `4294967295` and `-2` to `4294967294`, here is one trick to insure the filename unchanged in those edge cases. +- [String.prototype.slice()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice) extracts file extension from the index that was calculated above. If the index is more than the length of the filename, the result is `""`. + +### Comparison + +| Solution | Paramters | Results | +| ----------------------------------------- | :-----------------------------------------------------------------------------------------: | :-------------------------------------------------------------------: | +| Solution 1: Regular Expression | ''
      'filename'
      'filename.txt'
      '.hiddenfile'
      'filename.with.many.dots.ext' | undefined
      undefined
      'txt'
      'hiddenfile'
      'ext'
      | +| Solution 2: String `split` | ''
      'filename'
      'filename.txt'
      '.hiddenfile'
      'filename.with.many.dots.ext' | ''
      'filename'
      'txt'
      'hiddenfile'
      'ext'
      | +| Solution 3: String `slice`, `lastIndexOf` | ''
      'filename'
      'filename.txt'
      '.hiddenfile'
      'filename.with.many.dots.ext' | ''
      ''
      'txt'
      ''
      'ext'
      | + +### Live Demo and Performance + +[Here](https://jsbin.com/tipofu/edit?js,console) is the live demo of the above codes. + +[Here](http://jsperf.com/extract-file-extension) is the performance test of those 3 solutions. + +### Source + +[How can I get file extensions with JavaScript](http://stackoverflow.com/questions/190852/how-can-i-get-file-extensions-with-javascript) diff --git a/docs/content/2016-05-06-use-optional-arguments.md b/docs/content/2016-05-06-use-optional-arguments.md new file mode 100644 index 0000000000..ee1a423c41 --- /dev/null +++ b/docs/content/2016-05-06-use-optional-arguments.md @@ -0,0 +1,88 @@ +title: How to use optional arguments in functions (with optional callback) +tip-number: 54 +tip-username: alphashuro +tip-username-profile: https://github.com/alphashuro +tip-tldr: You can make function arguments and callback optional + +- /en/use-optional-arguments/ + +categories: - en - javascript + +--- + +Example function where arguments 2 and 3 are optional + +```javascript +function example(err, optionalA, optionalB, callback) { + // retrieve arguments as array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + // first argument is the error object + // shift() removes the first item from the + // array and returns it + err = args.shift(); + + // if last argument is a function then its the callback function. + // pop() removes the last item in the array + // and returns it + if (typeof args[args.length - 1] === 'function') { + callback = args.pop(); + } + + // if args still holds items, these are + // your optional items which you could + // retrieve one by one like this: + if (args.length > 0) optionalA = args.shift(); + else optionalA = null; + if (args.length > 0) optionalB = args.shift(); + else optionalB = null; + + // continue as usual: check for errors + if (err) { + return callback && callback(err); + } + + // for tutorial purposes, log the optional parameters + console.log('optionalA:', optionalA); + console.log('optionalB:', optionalB); + console.log('callback:', callback); + + /* do your thing */ +} + +// ES6 with shorter, more terse code +function example(...args) { + // first argument is the error object + const err = args.shift(); + // if last argument is a function then its the callback function + const callback = typeof args[args.length - 1] === 'function' ? args.pop() : null; + + // if args still holds items, these are your optional items which you could retrieve one by one like this: + const optionalA = args.length > 0 ? args.shift() : null; + const optionalB = args.length > 0 ? args.shift() : null; + // ... repeat for more items + + if (err && callback) return callback(err); + + /* do your thing */ +} + +// invoke example function with and without optional arguments + +example(null, 'AA'); + +example(null, function (err) { + /* do something */ +}); + +example(null, 'AA', function (err) {}); + +example(null, 'AAAA', 'BBBB', function (err) {}); +``` + +### How do you determine if optionalA or optionalB is intended? + +Design your function to require optionalA in order to accept optionalB diff --git a/docs/content/2016-05-12-make-easy-loop-on-array.md b/docs/content/2016-05-12-make-easy-loop-on-array.md new file mode 100644 index 0000000000..b4877633b3 --- /dev/null +++ b/docs/content/2016-05-12-make-easy-loop-on-array.md @@ -0,0 +1,105 @@ +title: Create an easy loop using an array +tip-number: 55 +tip-username: jamet-julien +tip-username-profile: https://github.com/jamet-julien +tip-tldr: Sometimes, we need to loop endlessly over an array of items, like a carousel of images or an audio playlist. Here's how to take an array and give it "looping powers” + +- /en/make-easy-loop-on-array/ + +categories: - en - javascript + +--- + +Sometimes, we need to loop endlessly over an array of items, like a carousel of images or an audio playlist. Here's how to take an array and give it "looping powers": + +```js +var aList = ['A', 'B', 'C', 'D', 'E']; + +function make_looper(arr) { + arr.loop_idx = 0; + + // return current item + arr.current = function () { + if (this.loop_idx < 0) { + // First verification + this.loop_idx = this.length - 1; // update loop_idx + } + + if (this.loop_idx >= this.length) { + // second verification + this.loop_idx = 0; // update loop_idx + } + + return arr[this.loop_idx]; //return item + }; + + // increment loop_idx AND return new current + arr.next = function () { + this.loop_idx++; + return this.current(); + }; + // decrement loop_idx AND return new current + arr.prev = function () { + this.loop_idx--; + return this.current(); + }; +} + +make_looper(aList); + +aList.current(); // -> A +aList.next(); // -> B +aList.next(); // -> C +aList.next(); // -> D +aList.next(); // -> E +aList.next(); // -> A +aList.pop(); // -> E +aList.prev(); // -> D +aList.prev(); // -> C +aList.prev(); // -> B +aList.prev(); // -> A +aList.prev(); // -> D +``` + +Using the `%` ( Modulus ) operator is prettier.The modulus return division's rest ( ` 2 % 5 = 1` and ` 5 % 5 = 0`): + +```js +var aList = ['A', 'B', 'C', 'D', 'E']; + +function make_looper(arr) { + arr.loop_idx = 0; + + // return current item + arr.current = function () { + this.loop_idx = this.loop_idx % this.length; // no verification !! + return arr[this.loop_idx]; + }; + + // increment loop_idx AND return new current + arr.next = function () { + this.loop_idx++; + return this.current(); + }; + + // decrement loop_idx AND return new current + arr.prev = function () { + this.loop_idx += this.length - 1; + return this.current(); + }; +} + +make_looper(aList); + +aList.current(); // -> A +aList.next(); // -> B +aList.next(); // -> C +aList.next(); // -> D +aList.next(); // -> E +aList.next(); // -> A +aList.pop(); // -> E +aList.prev(); // -> D +aList.prev(); // -> C +aList.prev(); // -> B +aList.prev(); // -> A +aList.prev(); // -> D +``` diff --git a/docs/content/2016-08-02-copy-to-clipboard.md b/docs/content/2016-08-02-copy-to-clipboard.md new file mode 100644 index 0000000000..c05a9c9f2a --- /dev/null +++ b/docs/content/2016-08-02-copy-to-clipboard.md @@ -0,0 +1,29 @@ +title: Copy to Clipboard +tip-number: 56 +tip-username: loverajoel +tip-username-profile: https://twitter.com/loverajoel +tip-tldr: This week I had to create a common "Copy to Clipboard" button, I've never created one before and I want to share how I made it. +tip-writer-support: https://www.coinbase.com/loverajoel + +- /en/copy-to-clipboard/ + +categories: - en - javascript + +--- + +This is a simple tip, this week I had to create a common "Copy to Clipboard" button, I've never created one before and I want to share how I made it. +It's easy, the bad thing is that we must add an `` with the text to be copied to the DOM. Then, we selected the content and execute the copy command with [execCommand](https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand). +`execCommand('copy')` will copy the actual selected content. + +Also, this command that now is [supported](http://caniuse.com/#search=execCommand) by all the latest version of browsers, allows us to execute another system commands like `copy`, `cut`, `paste`, and make changes like fonts color, size, and much more. + +```js +document.querySelector('#input').select(); +document.execCommand('copy'); +``` + +##### Playground + + diff --git a/docs/content/2016-08-10-comma-operaton-in-js.md b/docs/content/2016-08-10-comma-operaton-in-js.md new file mode 100644 index 0000000000..c485db4f96 --- /dev/null +++ b/docs/content/2016-08-10-comma-operaton-in-js.md @@ -0,0 +1,71 @@ +title: Comma operator in JS +tip-number: 57 +tip-username: bhaskarmelkani +tip-username-profile: https://www.twitter.com/bhaskarmelkani +tip-tldr: When placed in an expression, it evaluates every expression from left to right and returns the last one. + +- /en/comma-operaton-in-js/ + +categories: - en - javascript + +--- + +Apart from being just a delimiter, the comma operator allows you to put multiple statements in a place where one statement is expected. +Eg:- + +```js +for (var i = 0, j = 0; i < 5; i++, j++, j++) { + console.log('i:' + i + ', j:' + j); +} +``` + +Output:- + +```js +i:0, j:0 +i:1, j:2 +i:2, j:4 +i:3, j:6 +i:4, j:8 +``` + +When placed in an expression, it evaluates every expression from left to right and returns the right most expression. + +Eg:- + +```js +function a() { + console.log('a'); + return 'a'; +} +function b() { + console.log('b'); + return 'b'; +} +function c() { + console.log('c'); + return 'c'; +} + +var x = (a(), b(), c()); + +console.log(x); // Outputs "c" +``` + +Output:- + +```js +'a'; +'b'; +'c'; + +'c'; +``` + +- Note: The comma(`,`) operator has the lowest priority of all javascript operators, so without the parenthesis the expression would become: `(x = a()), b(), c();`. + +##### Playground + + diff --git a/docs/content/2016-08-17-break-continue-loop-functional.md b/docs/content/2016-08-17-break-continue-loop-functional.md new file mode 100644 index 0000000000..b103739814 --- /dev/null +++ b/docs/content/2016-08-17-break-continue-loop-functional.md @@ -0,0 +1,84 @@ +title: Breaking or continuing loop in functional programming +tip-number: 58 +tip-username: vamshisuram +tip-username-profile: https://github.com/vamshisuram +tip-tldr: A common task for us is iterate over a list looking for a value or values, but we can't return from inside a loop so we will have to iterate the whole array, even if the item we search is the first in the list, in this tip we will see how to short circuit with `.some` and `.every`. + +- /en/break-continue-loop-functional/ + +categories: - en - javascript + +--- + +A common requirement of iteration is cancelation. Using `for` loops we can `break` to end iteration early. + +```javascript +const a = [0, 1, 2, 3, 4]; +for (var i = 0; i < a.length; i++) { + if (a[i] === 2) { + break; // stop the loop + } + console.log(a[i]); +} +//> 0, 1 +``` + +Another common requirement is to close over our variables. + +A quick approach is to use `.forEach` but +then we lack the ability to `break`. In this situation the closest we get is `continue` functionality through `return`. + +```javascript +[0, 1, 2, 3, 4].forEach(function (val, i) { + if (val === 2) { + // how do we stop? + return true; + } + console.log(val); // your code +}); +//> 0, 1, 3, 4 +``` + +The `.some` is a method on Array prototype. It tests whether some element in the array passes the test implemented by the provided function. If any value is returning true, then it stops executing. Here is a [MDN link](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some) for more details. + +An example quoted from that link + +```javascript +const isBiggerThan10 = (numb) => numb > 10; + +[2, 5, 8, 1, 4].some(isBiggerThan10); // false +[12, 5, 8, 1, 4].some(isBiggerThan10); // true +``` + +Using `.some` we get iteration functionally similar to `.forEach` but with the ability to `break` through `return` instead. + +```javascript +[0, 1, 2, 3, 4].some(function (val, i) { + if (val === 2) { + return true; + } + console.log(val); // your code +}); +//> 0, 1 +``` + +You keep returning `false` to make it `continue` to next item. When you return `true`, the loop will `break` and `a.some(..)` will `return` `true`. + +```javascript +// Array contains 2 +const isTwoPresent = [0, 1, 2, 3, 4].some(function (val, i) { + if (val === 2) { + return true; // break + } +}); +console.log(isTwoPresent); +//> true +``` + +Also there is `.every`, which can be used. We have to return the opposite boolean compared to `.some`. + +##### Playground + + diff --git a/docs/content/2016-08-25-keyword-var-vs-let.md b/docs/content/2016-08-25-keyword-var-vs-let.md new file mode 100644 index 0000000000..6d37ccbb61 --- /dev/null +++ b/docs/content/2016-08-25-keyword-var-vs-let.md @@ -0,0 +1,100 @@ +title: ES6, var vs let +tip-number: 59 +tip-username: richzw +tip-username-profile: https://github.com/richzw +tip-tldr: In this tip, I will introduce the block-scope difference between keyword var and let. Should I replace var by let? let's take a look + +- /en/keyword-var-vs-let/ + +categories: - en - javascript + +--- + +### Overview + +- The scope of a variable defined with `var` is function scope or declared outside any function, global. +- The scope of a variable defined with `let` is block scope. + +```js +function varvslet() { + console.log(i); // i is undefined due to hoisting + // console.log(j); // ReferenceError: j is not defined + + for (var i = 0; i < 3; i++) { + console.log(i); // 0, 1, 2 + } + + console.log(i); // 3 + // console.log(j); // ReferenceError: j is not defined + + for (let j = 0; j < 3; j++) { + console.log(j); + } + + console.log(i); // 3 + // console.log(j); // ReferenceError: j is not defined +} +``` + +### Difference Details + +- Variable Hoisting + + `let` will not hoist to the entire scope of the block they appear in. By contrast, `var` could hoist as below. + +```js +{ + console.log(c); // undefined. Due to hoisting + var c = 2; +} + +{ + console.log(b); // ReferenceError: b is not defined + let b = 3; +} +``` + +- Closure in Loop + + `let` in the loop can re-binds it to each iteration of the loop, making sure to re-assign it the value from the end of the previous loop iteration, so it can be used to avoid issue with closures. + +```js +for (var i = 0; i < 5; ++i) { + setTimeout(function () { + console.log(i); // output '5' 5 times + }, 100); +} +``` + +After replacing `var` with `let` + +```js +// print 1, 2, 3, 4, 5 +for (let i = 0; i < 5; ++i) { + setTimeout(function () { + console.log(i); // output 0, 1, 2, 3, 4 + }, 100); +} +``` + +### Should I replace `var` with `let`? + +> NO, `let` is the new block scoping `var`. That statement emphasizes that `let` should replace `var` only when `var` was already signaling +> block scoping stylistically. Otherwise, leave `var` alone. `let` improves scoping options in JS, not replaces. `var` is still a useful signal for variables that are used throughout the function. + +### `let` compatibility + +- In server side, such as Node.js, you can safely use the `let` statement now. +- In client side, through a transpiler (like [Traceur](https://github.com/google/traceur-compiler)), you can safely use the `let` statement. Otherwise, please consider the browser support [here](http://caniuse.com/#search=let) + +### Playground + + + +### More info + +- [Let keyword vs var keyword](http://stackoverflow.com/questions/762011/let-keyword-vs-var-keyword) +- [For and against let](https://davidwalsh.name/for-and-against-let) +- [Explanation of `let` and block scoping with for loops](http://stackoverflow.com/questions/30899612/explanation-of-let-and-block-scoping-with-for-loops/30900289#30900289). diff --git a/docs/content/2016-10-28-three-useful-hacks.md b/docs/content/2016-10-28-three-useful-hacks.md new file mode 100644 index 0000000000..a94f0ee889 --- /dev/null +++ b/docs/content/2016-10-28-three-useful-hacks.md @@ -0,0 +1,58 @@ +title: Three useful hacks +tip-number: 60 +tip-username: leandrosimoes +tip-username-profile: https://github.com/leandrosimoes +tip-tldr: Three very useful and syntax sugar hacks to speed up your development. + +- /en/three-useful-hacks/ + +categories: - en - javascript + +--- + +#### Getting array items from behind to front + +If you want to get the array items from behind to front, just do this: + +```javascript +var newArray = [1, 2, 3, 4]; + +console.log(newArray.slice(-1)); // [4] +console.log(newArray.slice(-2)); // [3, 4] +console.log(newArray.slice(-3)); // [2, 3, 4] +console.log(newArray.slice(-4)); // [1, 2, 3, 4] +``` + +#### Short-circuits conditionals + +If you have to execute a function just if a condition is `true`, like this: + +```javascript +if (condition) { + dosomething(); +} +``` + +You can use a short-circuit just like this: + +```javascript +condition && dosomething(); +``` + +#### Set variable default values using "||" + +If you have to set a default value to variables, you can simple do this: + +```javascript +var a; + +console.log(a); //undefined + +a = a || 'default value'; + +console.log(a); //default value + +a = a || 'new value'; + +console.log(a); //default value +``` diff --git a/docs/content/2017-01-19-binding-objects-to-functions.md b/docs/content/2017-01-19-binding-objects-to-functions.md new file mode 100644 index 0000000000..04216960d9 --- /dev/null +++ b/docs/content/2017-01-19-binding-objects-to-functions.md @@ -0,0 +1,64 @@ +title: Binding objects to functions +tip-number: 61 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: Understanding how to use `Bind` method with objects and functions in JavaScript + +- /en/binding-objects-to-functions/ + +categories: - en - javascript + +--- + +More than often, we need to bind an object to a function's this object. JS uses the bind method when this is specified explicitly and we need to invoke desired method. + +### Bind syntax + +```js +fun.bind(thisArg[, arg1[, arg2[, ...]]]) +``` + +## Parameters + +**thisArg** + +`this` parameter value to be passed to target function while calling the `bound` function. + +**arg1, arg2, ...** + +Prepended arguments to be passed to the `bound` function while invoking the target function. + +**Return value** + +A copy of the given function along with the specified `this` value and initial arguments. + +### Bind method in action in JS + +```js +const myCar = { + brand: 'Ford', + type: 'Sedan', + color: 'Red' +}; + +const getBrand = function () { + console.log(this.brand); +}; + +const getType = function () { + console.log(this.type); +}; + +const getColor = function () { + console.log(this.color); +}; + +getBrand(); // object not bind,undefined + +getBrand(myCar); // object not bind,undefined + +getType.bind(myCar)(); // Sedan + +let boundGetColor = getColor.bind(myCar); +boundGetColor(); // Red +``` diff --git a/docs/content/2017-03-09-working-with-websocket-timeout.md b/docs/content/2017-03-09-working-with-websocket-timeout.md new file mode 100644 index 0000000000..6226bfaa40 --- /dev/null +++ b/docs/content/2017-03-09-working-with-websocket-timeout.md @@ -0,0 +1,32 @@ +title: Working With Websocket Timeout +tip-number: 63 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: A trick to control the timeout + +categories: - en - javascript + +--- + +In case of established websocket connection, server or firewall could timeout and terminate the connection after a period of inactivity. To deal with this situation, we send periodic message to the server. To control the timeout we will add two functions in our code : one to make sure connection keep alive and another one to cancel the keep alive. Also we need a common `timerID` variable. +Let's have a look on implementation- + +```js +var timerID = 0; +function keepAlive() { + var timeout = 20000; + if (webSocket.readyState == webSocket.OPEN) { + webSocket.send(''); + } + timerId = setTimeout(keepAlive, timeout); +} +function cancelKeepAlive() { + if (timerId) { + clearTimeout(timerId); + } +} +``` + +Now as we have both of our desired function for the task, we will place `keepAlive()` function at the end of `onOpen()` method of websocket connection and `cancelKeepAlive()` function at the end of `onClose()` method of websocket connection. + +Yes! We have perfectly implemented hack for websocket timeout problem. diff --git a/docs/content/2017-03-12-3-array-hacks.md b/docs/content/2017-03-12-3-array-hacks.md new file mode 100644 index 0000000000..87ce12892b --- /dev/null +++ b/docs/content/2017-03-12-3-array-hacks.md @@ -0,0 +1,67 @@ +title: 3 Array Hacks +tip-number: 64 +tip-username: hassanhelfi +tip-username-profile: https://twitter.com/hassanhelfi +tip-tldr: Arrays are everywhere and with the new spread operators introduced in ECMAScript 6, you can do awesome things with them. In this post I will show you 3 useful tricks you can use when programming. + +categories: - en - javascript + +--- + +Arrays are everywhere in JavaScript and with the new [spread operators](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator) introduced in ECMAScript 6, you can do awesome things with them. In this post I will show you 3 useful tricks you can use when programming. + +### 1. Iterating through an empty array + +JavaScript arrays are sparse in nature in that there are a lot of holes in them. Try creating an array using the Array's constructor and you will see what I mean. + +```javascript +> const arr = new Array(4); +[undefined, undefined, undefined, undefined] +``` + +You may find that iterating over a sparse array to apply a certain transformation is hard. + +```javascript +> const arr = new Array(4); +> arr.map((elem, index) => index); +[undefined, undefined, undefined, undefined] +``` + +To solve this, you can use `Array.apply` when creating the array. + +```javascript +> const arr = Array.apply(null, new Array(4)); +> arr.map((elem, index) => index); +[0, 1, 2, 3] +``` + +### 2. Passing an empty parameter to a method + +If you want to call a method and ignore one of its parameters, then JavaScript will complain if you keep it empty. + +```javascript +> method('parameter1', , 'parameter3'); +Uncaught SyntaxError: Unexpected token , +``` + +A workaround that people usually resort to is to pass either `null` or `undefined`. + +```javascript +> method('parameter1', null, 'parameter3') // or +> method('parameter1', undefined, 'parameter3'); +``` + +I personally don't like using `null` since JavaScript treats it as an object and that's just weird. With the introduction of spread operators in ES6, there is a neater way of passing empty parameters to a method. As previously mentioned, arrays are sparse in nature and so passing empty values to it is totally okay. We'll use this to our advantage. + +```javascript +> method(...['parameter1', , 'parameter3']); // works! +``` + +### 3. Unique array values + +I always wonder why the Array constructor does not have a designated method to facilitate the use of unique array values. Spread operators are here for the rescue. Use spread operators with the `Set` constructor to generate unique array values. + +```javascript +> const arr = [...new Set([1, 2, 3, 3])]; +[1, 2, 3] +``` diff --git a/docs/content/2017-03-16-tapping-for-quick-debugging.md b/docs/content/2017-03-16-tapping-for-quick-debugging.md new file mode 100644 index 0000000000..5c41392c8a --- /dev/null +++ b/docs/content/2017-03-16-tapping-for-quick-debugging.md @@ -0,0 +1,76 @@ +title: Tapping for quick debugging +tip-number: 65 +tip-username: loverajoel +tip-username-profile: https://twitter.com/loverajoel +tip-tldr: This little beastie here is tap. A really useful function for quick-debugging chains of function calls, anonymous functions and, actually, whatever you just want to print. +tip-md-link: https://github.com/loverajoel/jstips/blob/master/_posts/en/javascript/2017-03-16-tapping-for-quick-debugging.md + +categories: - en - javascript + +--- + +This little beastie here is tap. A really useful function for quick-debugging +chains of function calls, anonymous functions and, actually, whatever you just +want to print. + +```javascript +function tap(x) { + console.log(x); + return x; +} +``` + +Why would you use instead of good old `console.log`? Let me show you an example: + +```javascript +bank_totals_by_client(bank_info(1, banks), table) + .filter((c) => c.balance > 25000) + .sort((c1, c2) => (c1.balance <= c2.balance ? 1 : -1)) + .map((c) => console.log(`${c.id} | ${c.tax_number} (${c.name}) => ${c.balance}`)); +``` + +Now, suppose you're getting nothing from this chain (possibly an error). +Where is it failing? Maybe `bank_info` isn't returning anything, so we'll tap it: + +```javascript +bank_totals_by_client(tap(bank_info(1, banks)), table); +``` + +Depending on our particular implementation, it might print something or not. +I'll assume the information that we got from our tapping was correct and +therefore, bank_info isn't causing anything. + +We must then move on to the next chain, filter. + +```javascript + .filter(c => tap(c).balance > 25000) +``` + +Are we receiving any c's (clients actually)? If so, then bank_totals_by_client +works alright. Maybe it's the condition within the filter? + +```javascript + .filter(c => tap(c.balance > 25000)) +``` + +Ah! Sweet, we see nothing but `false` printed, so there's no client with >25000, +that's why the function was returning nothing. + +## (Bonus) A more advanced tap. + +```javascript +function tap(x, fn = (x) => x) { + console.log(fn(x)); + return x; +} +``` + +Now we're talking about a more advanced beast, what if we wanted to perform a +certain operation _prior_ to tapping? i.e, we want to access a certain object +property, perform a logical operation, etc. with our tapped object? Then we +call old good tap with an extra argument, a function to be applied at the moment +of tapping. + +```javascript +tap(3, (x) => x + 2) === 3; // prints 5, but expression evaluates to true, why :-)? +``` diff --git a/docs/content/2017-03-29-recursion-iteration-and-tail-calls-in-js.md b/docs/content/2017-03-29-recursion-iteration-and-tail-calls-in-js.md new file mode 100644 index 0000000000..dd755026bd --- /dev/null +++ b/docs/content/2017-03-29-recursion-iteration-and-tail-calls-in-js.md @@ -0,0 +1,152 @@ +title: Recursion, iteration and tail calls in JS +tip-number: 67 +tip-username: loverajoel +tip-username-profile: https://twitter.com/loverajoel +tip-tldr: If you've been on the business for some time, you have, most likely, come across the definition of recursion, for which the factorial of a given number `n! = n * n - 1 * ... * 1` is a standard example... +tip-md-link: https://github.com/loverajoel/jstips/blob/master/_posts/en/javascript/2017-03-29-recursion-iteration-and-tail-calls-in-js.md + +categories: - en - javascript + +--- + +If you've been on the business for some time, you have, most likely, +come across the definition of recursion, for which the factorial of +a given number `n! = n * (n - 1) * ... * 1` is a standard example. + +```javascript +function factorial(n) { + if (n === 0) { + return 1; + } + return n * factorial(n - 1); +} +``` + +The example shown above is but the most naive implementation of the +factorial function. + +For the sake of completeness, let's look at how this executes for +`n = 6`: + +- factorial(6) + - 6 \* factorial(5) + - 5 \* factorial (4) + - 4 \* factorial(3) + - 3 \* factorial(2) + - 2 \* factorial(1) + - 1 \* factorial(0) + - 1 + - (resuming previous execution) 1 \* 1 = 1 + - (resuming...) 2 \* 1 = 2 + - (...) 3 \* 2 = 6 + - ... 4 \* 6 = 24 + - 5 \* 24 = 120 + - 6 \* 120 = 720 +- factorial(6) = 720 + +Now, we must be very cautious as to what's happening so we can understand +what is to come next. + +When we invoke a function, several things happen at once. The location to +which we must return to after calling the function is saved, along with +the information of the current frame (i.e, the value of n). Then space is +allocated for the new function and a new frame is born. + +This goes on and on, we keep stacking these frames and then we unwind that +stack, replacing function calls with values returned by them. + +Another thing to notice is the shape of the process generated by our function. +You might not be surprised if I call this shape _recursive_. We have, thus, a +_recursive process_. + +Let's take a look at a second implementation of this function. + +```javascript +function factorial(n, res) { + if (n === 0) { + return res; + } + return factorial(n - 1, res * n); +} +``` + +We can encapsulate functionality a bit further by defining an inner function. + +```javascript +function factorial(n) { + function inner_factorial(n, res) { + if (n === 0) { + return res; + } + return inner_factorial(n - 1, res * n); + } + return inner_factorial(n, 1); +} +``` + +Let's take a look at how this gets executed: + +- factorial(6) + - inner anonymous function (iaf) gets called with (n = 6, res = 1) + - iaf(5, 1 \* 6) + - iaf(4, 6 \* 5) + - iaf(3, 30 \* 4) + - iaf(2, 120 \* 3) + - iaf(1, 360 \* 2) + - iaf(0, 720) + - 720 + - 720 + - 720 + - 720 + - 720 + - 720 + - 720 + - iaf (6, 1) = 720 +- factorial(6) = 720 + +You might notice that we didn't need to perform any calculation after unwinding +the stack. We just returned a value. But, according to our rules, we had to save +the state as a stack frame, even if it weren't of any use later in the chain. + +Our rules, however, are not applied to every language out there. In fact, in +Scheme it's mandatory for such chains to be optimized with tail call +optimization. This ensures that our stack is not filled with unnecessary frames. +Our previous calculation would look, thus, this way: + +- factorial(6) +- iaf(6, 1) +- iaf(5, 6) +- iaf(4, 30) +- iaf(3, 120) +- iaf(2, 360) +- iaf(1, 720) +- iaf(0, 720) +- 720 + +Which in turns, looks an awfully lot like + +```javascript +res = 1; +n = 6; + +while (n > 1) { + res = res * n; + n--; +} +``` + +This means, we actually have an _iterative process_, even if we're using +recursion. How cool is that? + +The good news is, this is a feature in ES6. As long as your recursive call +is in tail position and your function has strict mode, tail call optimization +will kick in and save you from having a `maximum stack size exceeded` error. + +UPDATE Dec 1, 2017: +The only major browser with tail call optimization is Safari.1 V8 has an implentation2 but has not shipped it yet3 for the reasons listed. + +1: https://kangax.github.io/compat-table/es6/#test-proper_tail_calls_(tail_call_optimisation) + +2: https://bugs.chromium.org/p/v8/issues/detail?id=4698 + +3: https://v8project.blogspot.com/2016/04/es6-es7-and-beyond.html diff --git a/docs/content/2017-04-03-why-you-should-use-Object.is()-in-equality-comparison.md b/docs/content/2017-04-03-why-you-should-use-Object.is()-in-equality-comparison.md new file mode 100644 index 0000000000..df3fa21895 --- /dev/null +++ b/docs/content/2017-04-03-why-you-should-use-Object.is()-in-equality-comparison.md @@ -0,0 +1,42 @@ +title: Why you should use Object.is() in equality comparison +tip-number: 68 +tip-username: TarekAlQaddy +tip-username-profile: https://github.com/TarekAlQaddy +tip-tldr: A good solution for the looseness of equality comparisons in javascript + +categories: - en - javascript + +--- + +We all know that JavaScript is loosely typed and in some cases it fall behind specially when it comes to quality comparison with '==', comparing with '==' gives unexpected results due to whats called coercion or casting "converting one of the 2 operands to the other's type then compare". + +```javascript +0 == ' '; //true +(null == undefined[1]) == //true + true; //true +``` + +So they provided us with the triple equal operator '===' which is more strict and does not coerce operands, However comparing with '===' is not the best solution you can get: + +```javascript +NaN === NaN; //false +``` + +The great news that in ES6 there is the new 'Object.is()' which is better and more precise it has the same features as '===' and moreover it behaves well in some special cases: + +```javascript +Object.is(0, ' '); //false +Object.is(null, undefined); //false +Object.is([1], true); //false +Object.is(NaN, NaN); //true +``` + +Mozilla team doesn't think that Object.is is "stricter" than '===', they say that we should think of how this method deal with NaN, -0 and +0 but overall I think it is now a good practice in real applications. + +Now this table illustrates.. + +![differences of operators in equality comparisons javascript](http://i.imgur.com/pCyqkLc.png) + +## References: + +[Equality comparisons and sameness](http://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness) diff --git a/docs/content/2017-04-05-picking-and-rejecting-object-properties.md b/docs/content/2017-04-05-picking-and-rejecting-object-properties.md new file mode 100644 index 0000000000..9936a3db75 --- /dev/null +++ b/docs/content/2017-04-05-picking-and-rejecting-object-properties.md @@ -0,0 +1,56 @@ +title: Picking and rejecting object properties +tip-number: 70 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: Sometimes we need to whitelist certain attributes from an object, say we've got an array representation of a database table and we need to `select` just a few fields for some function. + +categories: - en - javascript + +--- + +Sometimes we need to whitelist certain attributes from an object, say we've +got an array representation of a database table and we need to `select` just +a few fields for some function: + +```javascript +function pick(obj, keys) { + return keys.map((k) => (k in obj ? { [k]: obj[k] } : {})).reduce((res, o) => Object.assign(res, o), {}); +} + +const row = { + 'accounts.id': 1, + 'client.name': 'John Doe', + 'bank.code': 'MDAKW213' +}; + +const table = [row, { 'accounts.id': 3, 'client.name': 'Steve Doe', 'bank.code': 'STV12JB' }]; + +pick(row, ['client.name']); // Get client name + +table.map((row) => pick(row, ['client.name'])); // Get a list of client names +``` + +There's a bit of skulduggery going on in pick. First, we `map` a function over +the keys that will return, each time, an object with only the attribute pointed +by the current key (or an empty object if there's no such attribute in the +object). Then, we `reduce` this collection of single-attribute objects by +merging the objects. + +But what if we want to `reject` the attributes? Well, the function changes a bit + +```javascript +function reject(obj, keys) { + return Object.keys(obj) + .filter((k) => !keys.includes(k)) + .map((k) => Object.assign({}, { [k]: obj[k] })) + .reduce((res, o) => Object.assign(res, o), {}); +} + +// or, reusing pick +function reject(obj, keys) { + const vkeys = Object.keys(obj).filter((k) => !keys.includes(k)); + return pick(obj, vkeys); +} + +reject({ a: 2, b: 3, c: 4 }, ['a', 'b']); // => {c: 4} +``` diff --git a/docs/content/2017-04-11-protocols-for-the-brave.md b/docs/content/2017-04-11-protocols-for-the-brave.md new file mode 100644 index 0000000000..47bdc21c34 --- /dev/null +++ b/docs/content/2017-04-11-protocols-for-the-brave.md @@ -0,0 +1,90 @@ +title: Protocols for the Brave +tip-number: 73 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: You might have heard about the old ways gaining hype recently, and we don't mean praying to the gods of the north. Today we're introducing a feature found in Clojure which allows you to define interfaces for your classes. + +categories: - en - javascript + +--- + +You might have heard about the old ways gaining hype recently, and we don't +mean praying to the gods of the north. + +Functional programming is the rediscovered toy which is bringing some sanity +to the world of mutable state and global bindings. + +Today we're introducing a feature found in Clojure which allows you to define +interfaces for your classes. Let's look at one-off implementation: + +```javascript +const protocols = (...ps) => ps.reduce((c, p) => p(c), Object); + +const Mappable = (klass) => { + return class extends klass { + map() { + throw 'Not implemented'; + } + }; +}; + +const Foldable = (klass) => { + return class extends klass { + fold() { + throw 'Not implemented'; + } + }; +}; + +class NaturalNumbers extends protocols(Mappable, Foldable) { + constructor() { + super(); + this.elements = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + } + + map(f) { + return this.elements.map(f); + } + + fold(f) { + return this.elements.reduce(f, this.elements, 0); + } +} +``` + +Yes, we're building a chain of class inheritance up there with that reduce boy. +It's pretty cool. We're doing it dynamically! You see, each protocol receives +a base class (Object) and extends it somehow returning the new class. The idea +is similar to that of interfaces. + +We supply method signatures for the protocol and make sure we provide +implementations for it on our base classes. + +What's so cool about it? We get to write things like these: + +```javascript +const map = (f) => (o) => o.map(f); +const fold = (f) => (o) => o.fold(f); +const compose = (...fns) => fns.reduce((acc, f) => (x) => acc(f(x)), id); +``` + +Ok, maybe we could have written those two functions without the above fuzz but, +now that we know `NaturalNumbers` are `Mappable`, we can call `map` on them +and trust it will return the right result. Furthermore, with our third function, +we can _compose_ any number of operations defined in protocols cleanly: + +```javascript +const plus1 = (x) => x + 1; +const div5 = (x) => x / 5; +const plus_then_div = compose(map(div5), map(plus1)); +console.log(plus_then_div(new NaturalNumbers())); +// => [ 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2 ] +``` + +More important, if we know that an object of ours is `Mappable`, we know `map` +will work on it. Protocols gives us an idea of what we can do with an object and +help us abstract common operations between data types, thus reducing the +overhead of dealing with a hundred functions. + +What is easier? To have a hundred functions for every different object or ten +functions that work on a hundred objects? diff --git a/docs/content/2017-04-24-improving-your-async-functions-with-webworkers.md b/docs/content/2017-04-24-improving-your-async-functions-with-webworkers.md new file mode 100644 index 0000000000..6b71b50e63 --- /dev/null +++ b/docs/content/2017-04-24-improving-your-async-functions-with-webworkers.md @@ -0,0 +1,73 @@ +title: Improving your Async functions with WebWorkers +tip-number: 74 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: JS runs in a single thread in the browser, this is the truth. In this tip I'll show you how to unleash the full power of asynchronous processing with Web Workers. + +categories: - en - javascript + +--- + +> JS shall have but one Thread (in the browser at least) +> +> -- Thus spoke the master programmer. + +JS runs in a single thread in the browser, this is the truth. + +Somewhere in its own universe, there exists a Queue which holds messages +and functions associated with them. + +Every time an event (i.e, a user clicks a button) is registered, there's +a runtime check to see whether there's any listener attached to that event. +If there's one, it will enqueue the message. Otherwise, it will be lost +forever. + +Now, our event loop processes one message at a time, meaning that if you +do some CPU intensive operation (i.e, number crunching) this will indeed +'block' the one Thread, rendering our application useless. + +This is true even for `async` functions, which will be queued as soon as +invoked and executed as soon as possible (immediately given the queue is +empty). + +I/O such as requests to external resources are non-blocking though, so you +can request a file as large as you want without fear. The associated +callback, however, will show the same characteristics of an `async` function. + +Strategies for processing lots of data vary a lot. You could partition data +and set timeouts for processing bits of it a time for example. But to unleash +the full power of asynchronous processing, you should use Web Workers. + +To do so, you separate the processing part in a different file (possibly +'my_worker.js'), create a worker with `newWorker = new Worker('my_worker.js');` +and offload the processing to it. + +```javascript +// my_worker.js +const do_a_lot_of_processing = (data) => { + .... +} + +onmessage = (e) => { + postMessage(do_a_lot_of_processing(e.data)); +} + +// main.js +const myWorker = new Worker('my_worker.js'); + +async function get_useful_data() { + const raw_data = await request(some_url); + myWorker.postmessage(raw_data); +} + +const show_data => (e) { + const data = e.data; + ... +} + +myWorker.onmessage(show_data); +get_useful_data(); +``` + +Your mileage may vary of course, and there are many abstractions that can be +built upon this model. diff --git a/docs/content/2017-06-14-closures-inside-loops.md b/docs/content/2017-06-14-closures-inside-loops.md new file mode 100644 index 0000000000..894431ce9a --- /dev/null +++ b/docs/content/2017-06-14-closures-inside-loops.md @@ -0,0 +1,64 @@ +title: Closures inside loops +tip-number: 76 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: Closure in a loop is an interesting topic and this is the tip to be a master of it + +categories: - en - javascript + +--- + +If you ever come across the likes of + +```javascript +var funcs = []; +for (var i = 0; i < 3; i++) { + funcs[i] = function () { + console.log('i value is ' + i); + }; +} + +for (var k = 0; k < 3; k++) { + funcs[k](); +} +``` + +You will notice that the expected output of + +``` +i value is 0 +i value is 1 +i value is 2 +``` + +Doesn't match the actual output which will resemble + +``` +i value is 3 +i value is 3 +i value is 3 +``` + +This is because of how the capturing mechanism of closures work and how `i` is represented internally. + +To solve this situation you can do as follows: + +```javascript +for (var i = 0; i < 3; i++) { + funcs[i] = (function (value) { + console.log('i value is ' + i); + })(i); +} +``` + +Which effectively copies i by value by handing it to our closure or + +```javascript +for (let i = 0; i < 3; i++) { + funcs[i] = function () { + console.log('i value is ' + i); + }; +} +``` + +Where `let` scopes the variable to our `for` loop and produces a new value each iteration, thus `i` will be bound to different values on our closures as expected. diff --git a/docs/content/2017-06-14-immutable-structures-and-cloning.md b/docs/content/2017-06-14-immutable-structures-and-cloning.md new file mode 100644 index 0000000000..63a8c1e7d5 --- /dev/null +++ b/docs/content/2017-06-14-immutable-structures-and-cloning.md @@ -0,0 +1,64 @@ +title: Immutable structures and cloning +tip-number: 78 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: Object cloning is a tricky, full of edge-cases, endeavor. The reason is simple enough. Objects maintain internal state, and that is much abused. There are countless techniques, or better phrased, countless derivations of the same technique. + +categories: - en - javascript + +--- + +Object cloning is a tricky, full of edge-cases, endeavor. The reason is simple +enough. Objects maintain internal state, and that is much abused. There are +countless techniques, or better phrased, countless derivations of the same +technique. + +Cloning an object is an indicator that your application is growing, and that +you've got a complex object which you'd want to treat as an immutable value, i.e +operate on it while maintaining a previous state. + +If the object is in your control, you're lucky. A bit of refactoring here and +there might lead you to a point where you avoid the problem entirely by +rethinking your object's structure and behavior. + +With the rediscovering of functional programming techniques, a myriad of debates +have been held about immutable structures and how they offer exactly what you +seek for. Mutable state is the root of all evil, some might argue. + +We encourage to reach **ImmutableJS** by Facebook which provides a nice set of +immutable structures free for use. By rethinking your object's inner workings +and separating state from behavior, making each function consume a state to +produce a new one - much like the Haskell's **State** monad - you will +reduce many nuisances. + +If the object is outside your control, you're partly out of luck. This can be +circumvented by creating convoluted computations where you solve for yourself +circular references and reach enlightenment. However, as you're using external +objects anyways, and they must come, as their name says, from external sources, +then you might be more comfortable handling the matter to yet another external +library and focus on what matters the most, i.e, your application itself. + +One such library is [pvorb/clone](https://github.com/pvorb/clone), which has a +very simple API. To clone an object you only have to + +```javascript +var clone = require('clone'); + +var a = { foo: { bar: 'baz' } }; +var b = clone(a); +a.foo.bar = 'foo'; +console.log(a); // {foo: {bar: 'foo'}} +console.log(b); // {foo: {bar: 'baz'}} +``` + +There are, of course, many more libraries that allow you to do the same such as +[Ramda](http://ramdajs.com/docs/#clone), [lodash.clonedeep](https://www.npmjs.com/package/lodash.clonedeep) +and [lodash.clone](https://www.npmjs.com/package/lodash.clone). + +As an end note, if you are serious about dealing with immutable structures, you +might want to check **ClojureScript** or (for those that feel that Haskell's +worth a shot) **PureScript**. + +We neither encourage, nor condemn, the use of self made cloning mechanisms. Only +noting that considerable work has been done on the area and that you'd probably +be better of reusing than reinventing the wheel. diff --git a/docs/content/2017-06-15-looping-over-arrays.md b/docs/content/2017-06-15-looping-over-arrays.md new file mode 100644 index 0000000000..3b0ab7a1aa --- /dev/null +++ b/docs/content/2017-06-15-looping-over-arrays.md @@ -0,0 +1,117 @@ +title: Looping over arrays +tip-number: 79 +tip-username: loverajoel +tip-username-profile: https://github.com/loverajoel +tip-tldr: There's a few methods for looping over arrays in Javascript. We'll start with the classical ones and move towards additions made to the standard. + +categories: - en - javascript + +--- + +# Looping over arrays + +There's a few methods for looping over arrays in Javascript. We'll start +with the classical ones and move towards additions made to the standard. + +## while + +```javascript +let index = 0; +const array = [1, 2, 3, 4, 5, 6]; + +while (index < array.length) { + console.log(array[index]); + index++; +} +``` + +## for (classical) + +```javascript +const array = [1, 2, 3, 4, 5, 6]; +for (let index = 0; index < array.length; index++) { + console.log(array[index]); +} +``` + +## forEach + +```javascript +const array = [1, 2, 3, 4, 5, 6]; + +array.forEach(function (current_value, index, array) { + console.log(`At index ${index} in array ${array} the value is ${current_value}`); +}); +// => undefined +``` + +## map + +The last construct was useful, however, it doesn't return a new array which might +be undesirable for your specific case. `map` solves this by applying a function +over every element and then returning the new array. + +```javascript +const array = [1, 2, 3, 4, 5, 6]; +const square = (x) => Math.pow(x, 2); +const squares = array.map(square); +console.log(`Original array: ${array}`); +console.log(`Squared array: ${squares}`); +``` + +The full signature for `map` is `.map(current_value, index, array)`. + +## reduce + +From MDN: + +> The reduce() method applies a function against an accumulator and each element +> in the array (from left to right) to reduce it to a single value. + +```javascript +const array = [1, 2, 3, 4, 5, 6]; +const sum = (x, y) => x + y; +const array_sum = array.reduce(sum, 0); +console.log(`The sum of array: ${array} is ${array_sum}`); +``` + +## filter + +Filters elements on an array based on a boolean function. + +```javascript +const array = [1, 2, 3, 4, 5, 6]; +const even = (x) => x % 2 === 0; +const even_array = array.filter(even); +console.log(`Even numbers in array ${array}: ${even_array}`); +``` + +## every + +Got an array and want to test if a given condition is met in every element? + +```javascript +const array = [1, 2, 3, 4, 5, 6]; +const under_seven = (x) => x < 7; + +if (array.every(under_seven)) { + console.log('Every element in the array is less than 7'); +} else { + console.log('At least one element in the array was bigger than 7'); +} +``` + +## some + +Test if at least one element matches our boolean function. + +```javascript +const array = [1, 2, 3, 9, 5, 6, 4]; +const over_seven = (x) => x > 7; + +if (array.some(over_seven)) { + console.log('At least one element bigger than 7 was found'); +} else { + console.log('No element bigger than 7 was found'); +} +``` diff --git a/docs/content/2017-09-01-hash-maps-without-side-effects.md b/docs/content/2017-09-01-hash-maps-without-side-effects.md new file mode 100644 index 0000000000..ae3b7085fd --- /dev/null +++ b/docs/content/2017-09-01-hash-maps-without-side-effects.md @@ -0,0 +1,50 @@ +title: Hash maps without side effects +tip-number: 73 +tip-username: bhaskarmelkani +tip-username-profile: https://www.twitter.com/bhaskarmelkani +tip-tldr: Create hash maps(without side effects) using `Object.create(null)`. + +categories: - en - javascript + +--- + +# Hash maps without side effects + +When you want to use javascript object as a hash map(purely for storing data), you might want to create it as follows. + +```javascript +const map = Object.create(null); +``` + +When creating a map using object literal(`const map = {}`), the map inherits properties from Object by default. It is equivalent to `Object.create(Object.prototype)`. + +But by doing `Object.create(null)`, we explicitly specify `null` as its prototype. So it have absolutely no properties, not even constructor, toString, hasOwnProperty, etc. so you're free to use those keys in your data structure if you need to. + +## Rationale: + +```javascript +const dirtyMap = {}; +const cleanMap = Object.create(null); + +dirtyMap.constructor // function Object() { [native code] } + +cleanMap.constructor // undefined + +// Iterating maps + +const key; +for(key in dirtyMap){ + if (dirtyMap.hasOwnProperty(key)) { // Check to avoid iterating over inherited properties. + console.log(key + " -> " + dirtyMap[key]); + } +} + +for(key in cleanMap){ + console.log(key + " -> " + cleanMap[key]); // No need to add extra checks, as the object will always be clean +} +``` + +## Notes: + +- Object.create() was introduced in ES5: [Compatibility](http://kangax.github.io/compat-table/es5/) +- ES6 introduced some new structures: [Map](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map), [WeakMap](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap), [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) and [Weak Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) diff --git a/docs/content/2018-11-25-creating-immutable-objects-in-native-javascript.md b/docs/content/2018-11-25-creating-immutable-objects-in-native-javascript.md new file mode 100644 index 0000000000..6fb4a0f700 --- /dev/null +++ b/docs/content/2018-11-25-creating-immutable-objects-in-native-javascript.md @@ -0,0 +1,85 @@ +title: Creating immutable objects in native JavaScript +tip-number: 74 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: With the latest versions of JavaScript it's possible to create immutable objects. I'll walk you through how to do it in three different ways. + +categories: - en - javascript + +--- + +# Creating immutable objects in native JavaScript + +Javascript it's a flexible language, you can redefine anything. But when projects get complex we find problems with mutable data structures. +With the latest versions of JavaScript this situation changed. Now it's possible to create immutable objects. I'll walk you through how to do it in three different ways. + +### Wait, what means immutable? + +> Immutability in object means we don't want our objects to change in any ways once we create them i.e make them read-only type. + +Let's suppose we need to define a car [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) and use its properties to perform operations throughout our entire project. +We can't allow modifying by mistake any data. + +``` +const myTesla = { + maxSpeed: 250, + batteryLife: 300, + weight: 023 +}; +``` + +## [Object.preventExtensions()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions) + +This method prevents the addition of new properties to our existing object. +`preventExtensions()` is a irreversible operation. We can never add extra properties to the object again. + +``` +Object.isExtensible(myTesla); // true +Object.preventExtensions(myTesla); +Object.isExtensible(myTesla); // false +myTesla.color = 'blue'; +console.log(myTesla.color) // undefined +``` + +## [Object.seal()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal) + +It prevents additions or deletion of properties. `seal()` also prevents the modification of property descriptors. + +``` +Object.isSealed(myTesla); // false +Object.seal(myTesla); +Object.isSealed(myTesla); // true + +myTesla.color = 'blue'; +console.log(myTesla.color); // undefined + +delete myTesla.batteryLife; // false +console.log(myTesla.batteryLife); // 300 + +Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife +``` + +## [Object.freeze()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) + +It does the same that `Object.seal()` plus it makes the properties non-writable. + +``` +Object.isFrozen(myTesla); // false +Object.freeze(myTesla); +Object.isFrozen(myTesla); // true + +myTesla.color = 'blue'; +console.log(myTesla.color); // undefined + +delete myTesla.batteryLife; +console.log(myTesla.batteryLife); // 300 + +Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife + +myTesla.batteryLife = 400; +console.log(myTesla.batteryLife); // 300 +``` + +## Extra + +Use `strict mode` if you want to throw an error when trying to modify an immutable object. diff --git a/docs/content/2020-10-13-what-is-a-functional-inheritance.md b/docs/content/2020-10-13-what-is-a-functional-inheritance.md new file mode 100644 index 0000000000..518cd04367 --- /dev/null +++ b/docs/content/2020-10-13-what-is-a-functional-inheritance.md @@ -0,0 +1,38 @@ +title: What is Functional Inheritance? +tip-number: 75 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: Functional inheritance is the process of inheriting features by applying an augmenting function to an object instance. + +categories: - en - javascript + +--- + +Functional inheritance is the process of inheriting features by applying an augmenting function to an object instance. The function supplies a closure scope which you can use to keep some data private. The augmenting function uses dynamic object extension to extend the object instance with new properties and methods. + +Functional mixins are composable factory functions that add properties and behaviors to objects like stations in an assembly line. + +```javascript +// Base object constructor function +function Animal(data) { + var that = {}; // Create an empty object + that.name = data.name; // Add it a "name" property + return that; // Return the object +} + +// Create achild object, inheriting from the base Animal +function Cat(data) { + // Create the Animal object + var that = Animal(data); + // Extend base object + that.sayHello = function () { + return "Hello, I'm " + that.name; + }; + return that; +} + +// Usage +var myCat = Cat({ name: 'Rufi' }); +console.log(myCat.sayHello()); +// Output: "Hello, I'm Rufi" +``` diff --git a/docs/content/2020-10-15-what-is-a-currying-function.md b/docs/content/2020-10-15-what-is-a-currying-function.md new file mode 100644 index 0000000000..7f7222be41 --- /dev/null +++ b/docs/content/2020-10-15-what-is-a-currying-function.md @@ -0,0 +1,39 @@ +title: What is a currying function? +tip-number: 75 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: A currying function is a function that takes multiple arguments and turns it into a sequence of functions having only one argument at a time. + +categories: - en - javascript + +--- + +A currying function is a function that takes multiple arguments and turns it into a sequence of functions having only one argument at a time. + +In this way, an n-ary function becomes a unary function, and the last function returns the result of all the arguments together in a function. + +```javascript +// Normal definition +function multiply(a, b, c) { + return a * b * c; +} +console.log(multiply(1, 2, 3)); +// Output: 6 + +// Simple curry function definition +function multiply(a) { + return (b) => { + return (c) => { + return a * b * c; + }; + }; +} +console.log(multiply(1)(2)(3)); +// Output: 6 +``` + +### Further readings: + +- [Currying in JavaScript](https://dev.to/suprabhasupi/currying-in-javascript-1k3l) +- [Lodash curry](https://lodash.com/docs/#curry) +- [JavaScript currying](http://zetcode.com/javascript/currying/) diff --git a/docs/content/2020-10-20-what-is-the-temporal-dead-zone.md b/docs/content/2020-10-20-what-is-the-temporal-dead-zone.md new file mode 100644 index 0000000000..2b4689327b --- /dev/null +++ b/docs/content/2020-10-20-what-is-the-temporal-dead-zone.md @@ -0,0 +1,31 @@ +title: What is the Temporal Dead Zone? +tip-number: 76 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: Temporal Dead Zone is a JavaScript behavior while using variables declared using `let` and `const` keywords. + +categories: - en - javascript + +--- + +Temporal Dead Zone is a JavaScript behavior while using variables declared using `let` and `const` keywords. Since the keywords are block-scoped, the variables declared these keywords could not be accessed before the declaration, and then you will have to witness where variables will be said to be `undefined`. + +```javascript +function myFunc() { + console.log(greeting); + var greeting = 'Hello World!'; +} +myFunc(); // Output: undefined + +function myFunc() { + console.log(greeting); + let greeting = 'Hello World!'; +} +myFunc(); // Output: ReferenceError: greeting is not defined + +function myFunc() { + console.log(greeting); + const greeting = 'Hello World!'; +} +myFunc(); // Output: ReferenceError: greeting is not defined +``` diff --git a/docs/content/2020-10-22-difference-between-target-and-currentTarget.md b/docs/content/2020-10-22-difference-between-target-and-currentTarget.md new file mode 100644 index 0000000000..0f080ae708 --- /dev/null +++ b/docs/content/2020-10-22-difference-between-target-and-currentTarget.md @@ -0,0 +1,28 @@ +title: What is the difference between Target and currentTarget in the event context? +tip-number: 77 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: target refers to the element that triggers an event. currentTarget to the element that the event listener is listening on. + +categories: - en - javascript + +--- + +`target` refers to the DOM element that triggers an event. Otherwise, `currentTarget` refers to the DOM element that the event listener is listening on. + +```html +
        +
      • Walk your dog
      • +
      +``` + +```js +const list = document.querySelector('.todo-list'); + +list.addEventListener('click', (e) => { + console.log(e.target); + // Output:
    • Walk your dog
    • + console.log(e.currentTarget); + // Output:
        +}); +``` diff --git a/docs/content/2020-10-27-what-is-a-spread-operator.md b/docs/content/2020-10-27-what-is-a-spread-operator.md new file mode 100644 index 0000000000..8db1a3e16c --- /dev/null +++ b/docs/content/2020-10-27-what-is-a-spread-operator.md @@ -0,0 +1,44 @@ +title: What is a spread operator? +tip-number: 78 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: The spread operator is a useful syntax for manipulating arrays and objects. + +categories: - en - javascript + +--- + +The spread operator in JavaScript is a useful syntax for adding elements to an array, combining arrays into one larger one, spreading an array inside the arguments of a function, and more. + +```js +// Concatenating arrays and objects +let arr1 = [1, 2, 3]; +let arr2 = [4, 5]; +let newArray = [...arr1, ...arr2]; +console.log(newArray); +// Output: [ 1, 2, 3, 4, 5 ] + +// Copying array elements +let arr = ['a', 'b', 'c']; +let newArray = [...arr]; +console.log(newArray); +// Output: ["a", "b", "c"] + +// Expanding arrays +let arr = ['a', 'b']; +let newArray = [...arr, 'c', 'd']; +console.log(newArray); +// Output: ["a", "b", "c", "d"] + +// Merging objects +const userBasic = { + name: 'Jen', + age: 22 +}; +const userMoreInfo = { + country: 'Argentina', + city: 'Córdoba' +}; +const user = { ...userBasic, ...userMoreInfo }; +// Output: { name: "Jen", age: 22, country: "Argentina", city: "Córdoba" } +``` diff --git a/docs/content/2020-11-04-what-is-a-void-operator.md b/docs/content/2020-11-04-what-is-a-void-operator.md new file mode 100644 index 0000000000..764fac714a --- /dev/null +++ b/docs/content/2020-11-04-what-is-a-void-operator.md @@ -0,0 +1,26 @@ +title: What is a void operator? +tip-number: 79 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: The void operator returns an undefined value from an evaluated expression + +categories: - en - javascript + +--- + +The `void` operator returns an `undefined` value from an evaluated expression, or in other words; the `void` operator specifies an expression to be evaluated without returning a value. It is commonly used in client-side JavaScript, where the browser should not display the value. + +```js +function getYear() { + return 2020; +} + +console.log(getYear()); +// Output: 2020 + +console.log(void getYear()); +// Output: undefined + +// Useful use case +button.onclick = () => void getYear(); +``` diff --git a/docs/content/2020-11-17-what-is-the-promise-executor.md b/docs/content/2020-11-17-what-is-the-promise-executor.md new file mode 100644 index 0000000000..68f37ebc6b --- /dev/null +++ b/docs/content/2020-11-17-what-is-the-promise-executor.md @@ -0,0 +1,26 @@ +--- +layout: post + +title: What is the promise executor? +tip-number: 80 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: The method received as an argument for the promise. + +categories: + - en + - javascript +--- + +All `Promise` instances accept a method as an argument called the executor. This executor takes two methods as arguments: resolve and reject. Within the executor, if resolve is called, the `Promise` instance becomes fulfilled. If an exception is thrown, reject is called instead, and the `Promise` instance becomes rejected. + +```js +const executor = (resolve, reject) => { + setTimeout(() => resolve("I'm done"), 1000); +}; + +new Promise(executor).then((result) => { + console.log(result); + // Output after 1000ms: I'm done +}); +``` diff --git a/docs/content/2021-02-02-what-is-the-javascript-ternary-operator.md b/docs/content/2021-02-02-what-is-the-javascript-ternary-operator.md new file mode 100644 index 0000000000..b5137cf9b0 --- /dev/null +++ b/docs/content/2021-02-02-what-is-the-javascript-ternary-operator.md @@ -0,0 +1,34 @@ +--- +layout: post + +title: What is the JavaScript ternary operator? +tip-number: 81 +tip-username: loverajoel +tip-username-profile: https://www.twitter.com/loverajoel +tip-tldr: The ternary operator is a shortcut for the if statement. + +categories: + - en + - javascript +--- + +The ternary operator is a shortcut for the `if` statement. It consists of three operands; a question mark, a condition, and an expression to execute if the condition is true, followed by a colon and another expression to execute if it's false. + +```js +let age = 26; + +// condition ? expression if true : expression if false +let drink = age >= 21 ? 'Beer' : 'Juice'; + +console.log(drink); // "Beer" + +// Equivalent to: +let drink; +if (age >= 21) { + drink = 'Beer'; +} else { + drink = 'Juice'; +} + +console.log(drink); // "Beer" +``` diff --git a/docs/content/cheat-sheets/CHEATSHEET.md b/docs/content/cheat-sheets/CHEATSHEET.md index 96440a016e..88990c84d8 100644 --- a/docs/content/cheat-sheets/CHEATSHEET.md +++ b/docs/content/cheat-sheets/CHEATSHEET.md @@ -2,135 +2,218 @@ > Global object: properties + ```js -Object.length(obj); + +Object.length(obj) + ``` > length is a property of a function object, and indicates how many arguments the function expects, i.e. the number of formal parameters. This number does not include the rest parameter. Has a value of 1. + + ```js -Object.prototype; + +Object.prototype + ``` > Represents the Object prototype object and allows to add new properties and methods to all objects of type Object. > Methods of the Object constructor ```js -Object.assign(target, ...sources); + +Object.assign(target, ...sources) + ``` > Copies the values of all enumerable own properties from one or more source objects to a target object. method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object ```js -Object.create(MyObject); + +Object.create(MyObject) + ``` > Creates a new object with the specified prototype object and properties. The object which should be the prototype of the newly-created object. + + ```js -Object.defineProperty(obj, prop, descriptor); + +Object.defineProperty(obj, prop, descriptor) + ``` > Adds the named property described by a given descriptor to an object. + + ```js -Object.defineProperties(obj, props); + +Object.defineProperties(obj, props) + ``` > Adds the named properties described by the given descriptors to an object. + + ```js -Object.entries(obj); + +Object.entries(obj) + ``` > Returns an array containing all of the [key, value] pairs of a given object's own enumerable string properties. + + ```js -Object.freeze(obj); + +Object.freeze(obj) + ``` > Freezes an object: other code can't delete or change any properties. + + ```js -Object.getOwnPropertyDescriptor(obj, prop); + +Object.getOwnPropertyDescriptor(obj, prop) + ``` > Returns a property descriptor for a named property on an object. + + ```js -Object.getOwnPropertyDescriptors(obj); + +Object.getOwnPropertyDescriptors(obj) + ``` > Returns an object containing all own property descriptors for an object. + + ```js -Object.getOwnPropertyNames(obj); + +Object.getOwnPropertyNames(obj) + ``` > Returns an array containing the names of all of the given object's own enumerable and non-enumerable properties. + + ```js -Object.getOwnPropertySymbols(obj); + +Object.getOwnPropertySymbols(obj) + ``` > Returns an array of all symbol properties found directly upon a given object. + + ```js -Object.getPrototypeOf(obj); + +Object.getPrototypeOf(obj) + ``` > Returns the prototype of the specified object. + + ```js + Object.is(value1, value2); + ``` > Compares if two values are the same value. Equates all NaN values (which differs from both Abstract Equality Comparison and Strict Equality Comparison). + + ```js -Object.isExtensible(obj); + +Object.isExtensible(obj) + ``` > Determines if extending of an object is allowed. + + ```js -Object.isFrozen(obj); + +Object.isFrozen(obj) + ``` > Determines if an object was frozen. + + ```js -Object.isSealed(obj); + +Object.isSealed(obj) + ``` > Determines if an object is sealed. + + ```js -Object.keys(obj); + +Object.keys(obj) + ``` > Returns an array containing the names of all of the given object's own enumerable string properties. + + ```js -Object.preventExtensions(obj); + +Object.preventExtensions(obj) + ``` > Prevents any extensions of an object. + + ```js -Object.seal(obj); + +Object.seal(obj) + ``` > Prevents other code from deleting properties of an object. + + ```js -Object.setPrototypeOf(obj, prototype); + +Object.setPrototypeOf(obj, prototype) + ``` > Sets the prototype (i.e., the internal [[Prototype]] property). + + ```js -Object.values(obj); + +Object.values(obj) + ``` > Returns an array containing the values that correspond to all of a given object's own enumerable string properties. @@ -138,68 +221,100 @@ Object.values(obj); > Properties ```js -obj.constructor; + +obj.constructor + ``` > Specifies the function that creates an object's prototype. + + ```js -obj.__proto__; + +obj.__proto__ + ``` > Points to the object which was used as prototype when the object was instantiated. > Methods ```js -obj.hasOwnProperty(prop); + +obj.hasOwnProperty(prop) + ``` > Returns a boolean indicating whether an object contains the specified property as a direct property of that object and not inherited through the prototype chain. + + ```js -prototypeObj.isPrototypeOf(object); + +prototypeObj.isPrototypeOf(object) + ``` > Returns a boolean indicating whether the object this method is called upon is in the prototype chain of the specified object. + + ```js -obj.propertyIsEnumerable(prop); + +obj.propertyIsEnumerable(prop) + ``` > Returns a boolean indicating if the internal ECMAScript [[Enumerable]] attribute is set. + + ```js -obj.toLocaleString(); + +obj.toLocaleString() + ``` > Calls toString(). + + ```js -obj.toString(); + +obj.toString() + ``` > Returns a string representation of the object. + + ```js -object.valueOf(); + +object.valueOf() + ``` > Returns the primitive value of the specified object. - ## Global object: properties ```js -Array.length; + +Array.length + ``` > Reflects the number of elements in an array. + + ```js -Array.prototype; + +Array.prototype + ``` > Represents the prototype for the Array constructor and allows to add new properties and methods to all Array objects. - ## Global object: methods ```js @@ -209,12 +324,18 @@ Array.from(arrayLike[, mapFn[, thisArg]]) > Creates a new Array instance from an array-like or iterable object. + + ```js -Array.isArray(obj); + +Array.isArray(obj) + ``` > Returns true if a variable is an array, if not false. + + ```js Array.of(element0[, element1[, ...[, elementN]]]); @@ -225,30 +346,44 @@ Array.of(element0[, element1[, ...[, elementN]]]); > Instance: properties ```js -arr.length; + +arr.length + ``` > Reflects the number of elements in an array. > Instance: mutator methods ```js -arr.copyWithin(target, start, end); + +arr.copyWithin(target, start, end) + ``` > Copies a sequence of array elements within the array. + + ```js -arr.fill(value, start, end); + +arr.fill(value, start, end) + ``` > Fills all the elements of an array from a start index to an end index with a static value. + + ```js -arr.pop(); + +arr.pop() + ``` > Removes the last element from an array and returns that element. + + ```js arr.push([element1[, ...[, elementN]]]) @@ -257,24 +392,38 @@ arr.push([element1[, ...[, elementN]]]) > Adds one or more elements to the end of an array and returns the new length of the array. + + ```js -arr.reverse(); + +arr.reverse() + ``` > Reverses the order of the elements of an array in place — the first becomes the last, and the last becomes the first. + + ```js -arr.shift(); + +arr.shift() + ``` > Removes the first element from an array and returns that element. + + ```js -arr.sort(); + +arr.sort() + ``` > Sorts the elements of an array in place and returns the array. + + ```js array.splice(start, deleteCount, item1, item2, ...) @@ -283,6 +432,8 @@ array.splice(start, deleteCount, item1, item2, ...) > Adds and/or removes elements from an array. + + ```js arr.unshift([element1[, ...[, elementN]]]) @@ -300,12 +451,18 @@ arr.concat(value1[, value2[, ...[, valueN]]]) > Returns a new array comprised of this array joined with other array(s) and/or value(s). + + ```js -arr.includes(searchElement, fromIndex); + +arr.includes(searchElement, fromIndex) + ``` > Determines whether an array contains a certain element, returning true or false as appropriate. + + ```js arr.indexOf(searchElement[, fromIndex]) @@ -314,43 +471,67 @@ arr.indexOf(searchElement[, fromIndex]) > Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. + + ```js -arr.join(separator); + +arr.join(separator) + ``` > Joins all elements of an array into a string. + + ```js -arr.lastIndexOf(searchElement, fromIndex); + +arr.lastIndexOf(searchElement, fromIndex) + ``` > Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. + + ```js -arr.slice(begin, end); + +arr.slice(begin, end) + ``` > Extracts a section of an array and returns a new array. + + ```js -arr.toString(); + +arr.toString() + ``` > Returns a string representing the array and its elements. Overrides the Object.prototype.toString() method. + + ```js -arr.toLocaleString(locales, options); + +arr.toLocaleString(locales, options) + ``` > Returns a localized string representing the array and its elements. Overrides the Object.prototype.toLocaleString() method. > Instance: iteration methods ```js -arr.entries(); + +arr.entries() + ``` > Returns a new Array Iterator object that contains the key/value pairs for each index in the array. + + ```js arr.every(callback[, thisArg]) @@ -359,6 +540,8 @@ arr.every(callback[, thisArg]) > Returns true if every element in this array satisfies the provided testing function. + + ```js arr.filter(callback[, thisArg]) @@ -367,6 +550,8 @@ arr.filter(callback[, thisArg]) > Creates a new array with all of the elements of this array for which the provided filtering function returns true. + + ```js arr.find(callback[, thisArg]) @@ -375,6 +560,8 @@ arr.find(callback[, thisArg]) > Returns the found value in the array, if an element in the array satisfies the provided testing function or undefined if not found. + + ```js arr.findIndex(callback[, thisArg]) @@ -383,6 +570,8 @@ arr.findIndex(callback[, thisArg]) > Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. + + ```js arr.forEach(callback[, thisArg]) @@ -391,12 +580,18 @@ arr.forEach(callback[, thisArg]) > Calls a function for each element in the array. + + ```js -arr.keys(); + +arr.keys() + ``` > Returns a new Array Iterator that contains the keys for each index in the array. + + ```js arr.map(callback[, initialValue]) @@ -405,6 +600,8 @@ arr.map(callback[, initialValue]) > Creates a new array with the results of calling a provided function on every element in this array. + + ```js arr.reduce(callback[, initialValue]) @@ -413,6 +610,8 @@ arr.reduce(callback[, initialValue]) > Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. + + ```js arr.reduceRight(callback[, initialValue]) @@ -421,6 +620,8 @@ arr.reduceRight(callback[, initialValue]) > Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. + + ```js arr.some(callback[, initialValue]) @@ -429,82 +630,89 @@ arr.some(callback[, initialValue]) > Returns true if at least one element in this array satisfies the provided testing function. + + ```js -arr.values(); + +arr.values() + ``` > Returns a new Array Iterator object that contains the values for each index in the array. - --- - # NodeJS - --- ```js + let http = require('http'); + ``` -> An example of a web server written with Node which responds with 'Hello World'. -> To run the server, put the code into a file called example.js and execute it with the node program. +> An example of a web server written with Node which responds with 'Hello World'. + > To run the server, put the code into a file called example.js and execute it with the node program. + + ```js + http.createServer(function (request, response) { - response.writeHead(200, { 'Content-Type': 'text/plain' }); - response.end('Hello World\n'); +response.writeHead(200, {'Content-Type': 'text/plain'}); +response.end('Hello World\n'); }).listen(8124); console.log('Server running at http://127.0.0.1:8124/'); ``` - ## GLOBAL OBJECTS +### In browsers, the top-level scope is the global scope. + > That means that in browsers if you're in the global scope let something will define a global variable. + > In Node this is different. The top-level scope is not the global scope; let something inside a Node module will be local to that module. -### In browsers, the top-level scope is the global scope. -> That means that in browsers if you're in the global scope let something will define a global variable. -> In Node this is different. The top-level scope is not the global scope; let something inside a Node module will be local to that module. ```js -__filename; -``` +__filename; +``` --- - -> The filename of the code being executed. (absolute path) -> \_\_dirname; +> The filename of the code being executed. (absolute path) +__dirname; ``` > The name of the directory that the currently executing script resides in. (absolute path) -module; +module; ``` - --- +> A reference to the current module. In particular module.exports is used for defining what a module exports and makes available through require(). + -> A reference to the current module. In particular module.exports is used for defining what a module exports and makes available through require(). ```js -exports; -``` +exports; +``` --- +> A reference to the module.exports that is shorter to type. + -> A reference to the module.exports that is shorter to type. ```js -process; -``` +process; +``` --- +> The process object is a global object and can be accessed from anywhere. It is an instance of EventEmitter. + -> The process object is a global object and can be accessed from anywhere. It is an instance of EventEmitter. ```js -Buffer; -``` +Buffer; +``` --- +> The Buffer class is a global type for dealing with binary data directly. + -> The Buffer class is a global type for dealing with binary data directly. ```js @@ -513,8 +721,9 @@ console.log([data], [...]); ``` --- +> Prints to stdout with newline. + -> Prints to stdout with newline. ```js @@ -523,16 +732,18 @@ console.info([data], [...]); ``` -> Same as console.log. +> Same as console.log. + + ```js console.error([data], [...]); ``` - --- +> Same as console.log but prints to stderr. + -> Same as console.log but prints to stderr. ```js @@ -541,73 +752,95 @@ console.warn([data], [...]); ``` --- +> Same as console.error. -> Same as console.error. - -```js -console.dir(obj); -``` -> Uses util.inspect on obj and prints resulting string to stdout. ```js -console.time(label); -``` - ---- -> Mark a time. +console.dir(obj); -```js -console.timeEnd(label); ``` -> Finish timer, record output. +> Uses util.inspect on obj and prints resulting string to stdout. -```js -console.trace(label); -``` - ---- -> Print a stack trace to stderr of the current position. ```js -console.assert(expression, [message]); -``` +console.time(label); +``` --- +> Mark a time. + -> Same as assert.ok() where if the expression evaluates as false throw an AssertionError with message. ```js -setTimeout(callback, delay, [arg], [...]); +console.timeEnd(label); ``` -> To schedule execution of a one-time callback after delay milliseconds. Optionally you can also pass arguments to the callback. +> Finish timer, record output. -```js -clearTimeout(t); -``` -> Stop a timer that was previously created with setTimeout(). ```js -setInterval(callback, delay, [arg], [...]); +console.trace(label); ``` - --- +> Print a stack trace to stderr of the current position. + -> To schedule the repeated execution of callback every delay milliseconds. Optionally you can also pass arguments to the callback. ```js -clearInterval(t); -``` -> Stop a timer that was previously created with setInterval(). +console.assert(expression, [message]); +``` +--- +> Same as assert.ok() where if the expression evaluates as false throw an AssertionError with message. + + + +```js + +setTimeout(callback, delay, [arg], [...]); + +``` + +> To schedule execution of a one-time callback after delay milliseconds. Optionally you can also pass arguments to the callback. + + + +```js + +clearTimeout(t); + +``` + +> Stop a timer that was previously created with setTimeout(). + + + +```js + +setInterval(callback, delay, [arg], [...]); +``` +--- +> To schedule the repeated execution of callback every delay milliseconds. Optionally you can also pass arguments to the callback. + + + +```js + +clearInterval(t); + +``` + +> Stop a timer that was previously created with setInterval(). + + ```js @@ -615,24 +848,37 @@ setImmediate(callback, [arg], [...]); ``` -> To schedule the "immediate" execution of callback after I/O events callbacks and before setTimeout and setInterval. +> To schedule the "immediate" execution of callback after I/O events callbacks and before setTimeout and setInterval. + + ```js -clearImmediate(immediateObject); + +clearImmediate(immediateObject); + ``` -> Stop a timer that was previously created with setImmediate(). +> Stop a timer that was previously created with setImmediate(). + + ```js -unref(); + +unref(); + ``` -> Allow you to create a timer that is active but if it is the only item left in the event loop, node won't keep the program running. +> Allow you to create a timer that is active but if it is the only item left in the event loop, node won't keep the program running. + + ```js + ref(); + ``` + ``` > If you had previously unref()d a timer you can call ref() to explicitly request the timer hold the program open. @@ -641,35 +887,46 @@ let module = require('./module.js'); ``` -> Loads the module module.js in the same directory. +> Loads the module module.js in the same directory. + + ```js -module.require('./another_module.js'); -``` +module.require('./another_module.js'); +``` --- +> load another_module as if require() was called from the module itself. + -> load another_module as if require() was called from the module itself. ```js -module.id; + +module.id; + ``` -> The identifier for the module. Typically this is the fully resolved filename. +> The identifier for the module. Typically this is the fully resolved filename. + + ```js -module.filename; -``` +module.filename; +``` --- +> The fully resolved filename to the module. + -> The fully resolved filename to the module. ```js + module.loaded; + ``` -```` + +``` > Whether or not the module is done loading, or is in the process of loading. @@ -679,9 +936,10 @@ module.loaded; module.parent; -```` +``` + -```` +``` > The module that required this one. @@ -689,22 +947,26 @@ module.parent; ```js -module.children; -```` - +module.children; +``` --- +> The module objects required by this one. + -> The module objects required by this one. ```js + exports.area = function (r) { - return Math.PI * r * r; +return Math.PI * r * r; }; + ``` -> If you want the root of your module's export to be a function (such as a constructor) -> or if you want to export a complete object in one assignment instead of building it one property at a time, -> assign it to module.exports instead of exports. +> If you want the root of your module's export to be a function (such as a constructor) +> or if you want to export a complete object in one assignment instead of building it one property at a time, +> assign it to module.exports instead of exports. + + ```js @@ -720,211 +982,269 @@ return { * http://nodejs.org/api/process.html */ > ---------------------------------------------------------------------------\\ -process.on('exit', function(code) {}); +process.on('exit', function(code) {}); ``` -> Emitted when the process is about to exit -> process.on('uncaughtException', function(err) {}); - +> Emitted when the process is about to exit +process.on('uncaughtException', function(err) {}); ``` --- > Emitted when an exception bubbles all the way back to the event loop. (should not be used) -process.stdout; +process.stdout; ``` -> A writable stream to stdout. +> A writable stream to stdout. + + ```js -process.stderr; + +process.stderr; + ``` -> A writable stream to stderr. +> A writable stream to stderr. + + ```js -process.stdin; -``` +process.stdin; +``` --- +> A readable stream for stdin. + -> A readable stream for stdin. -````js +```js -process.argv; +process.argv; > An array containing the command line arguments. ```js -process.env; +process.env; + +``` + +> An object containing the user environment. -```` -> An object containing the user environment. ```js -process.execPath; + +process.execPath; + ``` -> This is the absolute pathname of the executable that started the process. +> This is the absolute pathname of the executable that started the process. + + ```js -process.execArgv; + +process.execArgv; + ``` -> This is the set of node-specific command line options from the executable that started the process. +> This is the set of node-specific command line options from the executable that started the process. + + -````js +```js -process.arch; +process.arch; > What processor architecture you're running on: 'arm', 'ia32', or 'x64'. ```js -process.config; +process.config; + +``` + +> An Object containing the JavaScript representation of the configure options that were used to compile the current node executable. -```` -> An Object containing the JavaScript representation of the configure options that were used to compile the current node executable. ```js -process.pid; + +process.pid; + ``` -> The PID of the process. +> The PID of the process. + + ```js -process.platform; + +process.platform; + ``` -> What platform you're running on: 'darwin', 'freebsd', 'linux', 'sunos' or 'win32'. +> What platform you're running on: 'darwin', 'freebsd', 'linux', 'sunos' or 'win32'. + + ```js -process.title; -``` +process.title; +``` --- +> Getter/setter to set what is displayed in 'ps'. + -> Getter/setter to set what is displayed in 'ps'. ```js -process.version; + +process.version; + ``` -> A compiled-in property t +> A compiled-in property t > hat exposes NODE_VERSION. + + ```js -process.versions; + +process.versions; + ``` -> A property exposing version strings of node and its dependencies. +> A property exposing version strings of node and its dependencies. + + ```js -> process.abort(); +> process.abort(); ``` -> This causes node to emit an abort. This will cause node to exit and generate a core file. +> This causes node to emit an abort. This will cause node to exit and generate a core file. + -````js -process.chdir(dir); +```js + +process.chdir(dir); > Changes the current working directory of the process or throws an exception if that fails. ```js -process.cwd(); -```` - +process.cwd(); +``` --- - -> Returns the current working directory of the process. -> ?process.exit([code]); +> Returns the current working directory of the process. + >?process.exit([code]); > Ends the process with the specified code. If omitted, exit uses the 'success' code 0. + + ```js -process.getgid(); + +process.getgid(); + ``` -> Gets the group identity of the process. +> Gets the group identity of the process. + -````js -process.setgid(id); +```js + +process.setgid(id); > Sets the group identity of the process. ```js -process.getuid(); +process.getuid(); -```` +``` + +> Gets the user identity of the process. -> Gets the user identity of the process. -````js -process.setuid(id); +```js + +process.setuid(id); > Sets the user identity of the process. ```js -process.getgroups(); -```` - +process.getgroups(); +``` --- +> Returns an array with the supplementary group IDs. + -> Returns an array with the supplementary group IDs. ```js -process.setgroups(grps); -``` +process.setgroups(grps); +``` --- +> Sets the supplementary group IDs. + -> Sets the supplementary group IDs. ```js -process.initgroups(user, extra_grp); -``` +process.initgroups(user, extra_grp); +``` --- +> Reads /etc/group and initializes the group access list, using all groups of which the user is a member. + -> Reads /etc/group and initializes the group access list, using all groups of which the user is a member. ```js + process.kill(pid, [signal]); + + ``` -> Send a signal to a process. pid is the process id and signal is the string describing the signal to send. +> Send a signal to a process. pid is the process id and signal is the string describing the signal to send. + + ```js + process.memoryUsage(); + ``` -> Returns an object describing the memory usage of the Node process measured in bytes. +> Returns an object describing the memory usage of the Node process measured in bytes. + + ```js -process.nextTick(callback); + +process.nextTick(callback); + ``` -> On the next loop around the event loop call this callback. +> On the next loop around the event loop call this callback. -````js -process.maxTickDepth; + +```js + +process.maxTickDepth; > Callbacks passed to process.nextTick will usually be called at the end of the current flow of execution, and are thus approximately as fast as calling a function synchronously. @@ -933,23 +1253,35 @@ process.maxTickDepth; process.umask([mask]); -```` +``` + +> Sets or reads the process's file mode creation mask. + -> Sets or reads the process's file mode creation mask. ```js + process.uptime(); + + ``` -> Number of seconds Node has been running. +> Number of seconds Node has been running. + + ```js + process.hrtime(); + + ``` -> Returns the current high-resolution real time in a [seconds, nanoseconds] tuple Array. +> Returns the current high-resolution real time in a [seconds, nanoseconds] tuple Array. + + -````js +```js //************** // * CHILD PROCESS @@ -963,36 +1295,36 @@ process.hrtime(); ```js -ChildProcess; +ChildProcess; > Class. ChildProcess is an EventEmitter. ```js -child.stdin; +child.stdin; > A Writable Stream that represents the child process's stdin -child.stdout; +child.stdout; > A Readable Stream that represents the child process's stdout -child.stderr; +child.stderr; > A Readable Stream that represents the child process's stderr. ```js -child.pid; +child.pid; > The PID of the child process -child.connected; +child.connected; > If .connected is false, it is no longer possible to send messages child.kill([signal]); -```` +``` -> Send a signal to the child process -> child.send(message, [sendHandle]); +> Send a signal to the child process +child.send(message, [sendHandle]); -```` +``` > When using child_process.fork() you can write to the child using child.send(message, [sendHandle]) and messages are received by a 'message' event on the child. @@ -1002,41 +1334,51 @@ child.kill([signal]); child.disconnect(); -```` +``` + +> Close the IPC channel between parent and child, allowing the child to exit gracefully once there are no other connections keeping it alive. + -> Close the IPC channel between parent and child, allowing the child to exit gracefully once there are no other connections keeping it alive. ```js + child_process.spawn(command, [args], [options]); + + ``` -> Launches a new process with the given command, with command line arguments in args. If omitted, args defaults to an empty Array. +> Launches a new process with the given command, with command line arguments in args. If omitted, args defaults to an empty Array. + -````js -child_process.exec(command, [options], callback); +```js + +child_process.exec(command, [options], callback); > Runs a command in a shell and buffers the output. ```js -child_process.execFile(file, [args], [options], [callback]); -```` - +child_process.execFile(file, [args], [options], [callback]); +``` --- +> Runs a command in a shell and buffers the output. + -> Runs a command in a shell and buffers the output. ```js + child_process.fork(modulePath, [args], [options]); + ``` --- +> This is a special case of the spawn() functionality for spawning Node processes. In addition to having all the methods in a normal ChildProcess instance, the returned object has a communication channel built-in. -> This is a special case of the spawn() functionality for spawning Node processes. In addition to having all the methods in a normal ChildProcess instance, the returned object has a communication channel built-in. -````js + +```js //************** // * UTIL @@ -1052,12 +1394,11 @@ child_process.fork(modulePath, [args], [options]); util.format(format, [...]); -```` - -> Returns a formatted string using the first argument as a printf-like format. (%s, %d, %j) -> util.debug(string); +``` -```` +> Returns a formatted string using the first argument as a printf-like format. (%s, %d, %j) +util.debug(string); +``` --- > A synchronous output function. Will block the process and output string immediately to stderr. @@ -1067,9 +1408,11 @@ util.format(format, [...]); util.error([...]); -```` +``` + +> Same as util.debug() except this will output all arguments immediately to stderr. + -> Same as util.debug() except this will output all arguments immediately to stderr. ```js @@ -1078,7 +1421,9 @@ util.puts([...]); ``` -> A synchronous output function. Will block the process and output all arguments to stdout with newlines after each argument. +> A synchronous output function. Will block the process and output all arguments to stdout with newlines after each argument. + + ```js @@ -1086,10 +1431,10 @@ util.print([...]); ``` -> A synchronous output function. Will block the process, cast each argument to a string then output to stdout. (no newlines) -> util.log(string); +> A synchronous output function. Will block the process, cast each argument to a string then output to stdout. (no newlines) +util.log(string); -```` +``` > Output with timestamp on stdout. @@ -1097,15 +1442,13 @@ util.print([...]); ```js -util.inspect(object, [opts]); -```` - +util.inspect(object, [opts]); +``` --- +> Return a string representation of object, which is useful for debugging. (options: showHidden, depth, colors, customInspect) +util.isArray(object); -> Return a string representation of object, which is useful for debugging. (options: showHidden, depth, colors, customInspect) -> util.isArray(object); - -```` +``` > Returns true if the given "object" is an Array. false otherwise. @@ -1113,39 +1456,49 @@ util.inspect(object, [opts]); ```js -util.isRegExp(object); +util.isRegExp(object); + +``` + +> Returns true if the given "object" is a RegExp. false otherwise. -```` -> Returns true if the given "object" is a RegExp. false otherwise. ```js -util.isDate(object); + +util.isDate(object); + ``` -> Returns true if the given "object" is a Date. false otherwise. +> Returns true if the given "object" is a Date. false otherwise. + + ```js -util.isError(object); + +util.isError(object); + ``` -> Returns true if the given "object" is an Error. false otherwise. +> Returns true if the given "object" is an Error. false otherwise. + + -````js +```js -util.promisify(fn) +util.promisify(fn) > Takes a function whose last argument is a callback and returns a version that returns promises. ```js -util.inherits(constructor, superConstructor); -```` - +util.inherits(constructor, superConstructor); +``` --- +> Inherit the prototype methods from one constructor into another. + -> Inherit the prototype methods from one constructor into another. ```js @@ -1157,19 +1510,24 @@ util.inherits(constructor, superConstructor); > All objects which emit events are instances of events.EventEmitter. You can access this module by doing: require("events"); ``` +> To access the EventEmitter class, require('events').EventEmitter. + > All EventEmitters emit the event 'newListener' when new listeners are added and 'removeListener' when a listener is removed. + -> To access the EventEmitter class, require('events').EventEmitter. -> All EventEmitters emit the event 'newListener' when new listeners are added and 'removeListener' when a listener is removed. ```js -emitter.addListener(event, listener); + +emitter.addListener(event, listener); + ``` -> Adds a listener to the end of the listeners array for the specified event. +> Adds a listener to the end of the listeners array for the specified event. + -````js -emitter.on(event, listener); +```js + +emitter.on(event, listener); > Same as emitter.addListener(). @@ -1179,13 +1537,15 @@ emitter.on(event, listener); emitter.once(event, listener); -```` +``` + +> Adds a one time listener for the event. This listener is invoked only the next time the event is fired, after which it is removed. + -> Adds a one time listener for the event. This listener is invoked only the next time the event is fired, after which it is removed. -````js +```js -emitter.removeListener(event, listener); +emitter.removeListener(event, listener); > Remove a listener from the listener array for the specified event. @@ -1194,121 +1554,158 @@ emitter.removeListener(event, listener); emitter.removeAllListeners([event]); -```` +``` + +> Removes all listeners, or those of the specified event. -> Removes all listeners, or those of the specified event. -````js -emitter.setMaxListeners(n); +```js + +emitter.setMaxListeners(n); > By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. ```js -emitter.listeners(event); +emitter.listeners(event); > Returns an array of listeners for the specified event. ```js -emitter.emit(event, [arg1], [arg2], [...]); -```` - +emitter.emit(event, [arg1], [arg2], [...]); +``` --- +> Execute each of the listeners in order with the supplied arguments. Returns true if event had listeners, false otherwise. + -> Execute each of the listeners in order with the supplied arguments. Returns true if event had listeners, false otherwise. ```js -EventEmitter.listenerCount(emitter, event); -``` +EventEmitter.listenerCount(emitter, event); +``` --- +> Return the number of listeners for a given event. +> A stream is an abstract interface implemented by various objects in Node. For example a request to an HTTP server is a stream, as is stdout. + > Streams are readable, writable, or both. All streams are instances of EventEmitter. +> The Readable stream interface is the abstraction for a source of data that you are reading from. + > In other words, data comes out of a Readable stream. + > A Readable stream will not start emitting data until you indicate that you are ready to receive it. + > Examples of readable streams include: http responses on the client, http requests on the server, fs read streams +> zlib streams, crypto streams, tcp sockets, child process stdout and stderr, process.stdin. + -> Return the number of listeners for a given event. -> A stream is an abstract interface implemented by various objects in Node. For example a request to an HTTP server is a stream, as is stdout. -> Streams are readable, writable, or both. All streams are instances of EventEmitter. -> The Readable stream interface is the abstraction for a source of data that you are reading from. -> In other words, data comes out of a Readable stream. -> A Readable stream will not start emitting data until you indicate that you are ready to receive it. -> Examples of readable streams include: http responses on the client, http requests on the server, fs read streams -> zlib streams, crypto streams, tcp sockets, child process stdout and stderr, process.stdin. ```js + let readable = getReadableStreamSomehow(); -readable.on('readable', function () {}); +readable.on('readable', function() {}); + ``` -> When a chunk of data can be read from the stream, it will emit a 'readable' event. +> When a chunk of data can be read from the stream, it will emit a 'readable' event. + + ```js -readable.on('data', function (chunk) {}); -``` +readable.on('data', function(chunk) {}); +``` --- +> If you attach a data event listener, then it will switch the stream into flowing mode, and data will be passed to your handler as soon as it is available. + -> If you attach a data event listener, then it will switch the stream into flowing mode, and data will be passed to your handler as soon as it is available. ```js -readable.on('end', function () {}); -``` -> This event fires when there will be no more data to read. +readable.on('end', function() {}); -```js -readable.on('close', function () {}); ``` ---- +> This event fires when there will be no more data to read. + -> Emitted when the underlying resource (for example, the backing file descriptor) has been closed. Not all streams will emit this. ```js -readable.on('error', function () {}); -``` +readable.on('close', function() {}); +``` --- +> Emitted when the underlying resource (for example, the backing file descriptor) has been closed. Not all streams will emit this. + -> Emitted if there was an error receiving data. -> The read() method pulls some data out of the internal buffer and returns it. If there is no data available, then it will return null. -> This method should only be called in non-flowing mode. In flowing-mode, this method is called automatically until the internal buffer is drained. ```js -readable.read([size]); -readable.setEncoding(encoding); -``` -> Call this function to cause the stream to return strings of the specified encoding instead of Buffer objects. +readable.on('error', function() {}); +``` +--- +> Emitted if there was an error receiving data. +> The read() method pulls some data out of the internal buffer and returns it. If there is no data available, then it will return null. + > This method should only be called in non-flowing mode. In flowing-mode, this method is called automatically until the internal buffer is drained. + + ```js -readable.resume(); + +readable.read([size]); +readable.setEncoding(encoding); + ``` -> This method will cause the readable stream to resume emitting data events. +> Call this function to cause the stream to return strings of the specified encoding instead of Buffer objects. + + ```js + +readable.resume(); + +``` + +> This method will cause the readable stream to resume emitting data events. + + + +```js + readable.pause(); + + ``` -> This method will cause a stream in flowing-mode to stop emitting data events. +> This method will cause a stream in flowing-mode to stop emitting data events. + + ```js + readable.pipe(destination, [options]); + + ``` -> This method pulls all the data out of a readable stream, and writes it to the supplied destination, automatically managing the flow so that the destination is not overwhelmed by a fast readable stream. +> This method pulls all the data out of a readable stream, and writes it to the supplied destination, automatically managing the flow so that the destination is not overwhelmed by a fast readable stream. + + ```js + readable.unpipe([destination]); + + ``` -> This method will remove the hooks set up for a previous pipe() call. If the destination is not specified, then all pipes are removed. +> This method will remove the hooks set up for a previous pipe() call. If the destination is not specified, then all pipes are removed. + -````js -readable.unshift(chunk); +```js + +readable.unshift(chunk); > This is useful in certain cases where a stream is being consumed by a parser, which needs to "un-consume" some data that it has optimistically pulled out of the source, so that the stream can be passed on to some other party. > The Writable stream interface is an abstraction for a destination that you are writing data to. > Examples of writable streams include: http requests on the client, http responses on the server, fs write streams, @@ -1319,62 +1716,70 @@ readable.unshift(chunk); ```js let writer = getWritableStreamSomehow(); -writable.write(chunk, [encoding], [callback]); -```` - +writable.write(chunk, [encoding], [callback]); +``` --- +> This method writes some data to the underlying system, and calls the supplied callback once the data has been fully handled. + -> This method writes some data to the underlying system, and calls the supplied callback once the data has been fully handled. -````js +```js -writer.once('drain', write); +writer.once('drain', write); > If a writable.write(chunk) call returns false, then the drain event will indicate when it is appropriate to begin writing more data to the stream. ```js -writable.end([chunk], [encoding], [callback]); -```` - +writable.end([chunk], [encoding], [callback]); +``` --- +> Call this method when no more data will be written to the stream. -> Call this method when no more data will be written to the stream. -````js -writer.on('finish', function() {}); +```js + +writer.on('finish', function() {}); > When the end() method has been called, and all data has been flushed to the underlying system, this event is emitted. ```js -writer.on('pipe', function(src) {}); -```` - +writer.on('pipe', function(src) {}); +``` --- +> This is emitted whenever the pipe() method is called on a readable stream, adding this writable to its set of destinations. + -> This is emitted whenever the pipe() method is called on a readable stream, adding this writable to its set of destinations. ```js -writer.on('unpipe', function (src) {}); + +writer.on('unpipe', function(src) {}); + ``` -> This is emitted whenever the unpipe() method is called on a readable stream, removing this writable from its set of destinations. +> This is emitted whenever the unpipe() method is called on a readable stream, removing this writable from its set of destinations. + + ```js -writer.on('error', function (src) {}); + +writer.on('error', function(src) {}); + ``` -> Emitted if there was an error when writing or piping data. -> Duplex streams are streams that implement both the Readable and Writable interfaces. See above for usage. -> Examples of Duplex streams include: tcp sockets, zlib streams, crypto streams. -> Transform streams are Duplex streams where the output is in some way computed from the input. They implement both the Readable and Writable interfaces. See above for usage. -> Examples of Transform streams include: zlib streams, crypto streams. +> Emitted if there was an error when writing or piping data. +> Duplex streams are streams that implement both the Readable and Writable interfaces. See above for usage. + > Examples of Duplex streams include: tcp sockets, zlib streams, crypto streams. +> Transform streams are Duplex streams where the output is in some way computed from the input. They implement both the Readable and Writable interfaces. See above for usage. + > Examples of Transform streams include: zlib streams, crypto streams. + -````js + +```js //************** // * FILE SYSTEM @@ -1388,225 +1793,304 @@ writer.on('error', function (src) {}); ```js -fs.rename(oldPath, newPath, callback); -```` - +fs.rename(oldPath, newPath, callback); +``` --- +> Asynchronous rename. No arguments other than a possible exception are given to the completion callback.Asynchronous ftruncate. No arguments other than a possible exception are given to the completion callback. + -> Asynchronous rename. No arguments other than a possible exception are given to the completion callback.Asynchronous ftruncate. No arguments other than a possible exception are given to the completion callback. ```js -fs.renameSync(oldPath, newPath); + +fs.renameSync(oldPath, newPath); + ``` -> Synchronous rename. +> Synchronous rename. + + ```js -fs.ftruncate(fd, len, callback); + +fs.ftruncate(fd, len, callback); + ``` -> Asynchronous ftruncate. No arguments other than a possible exception are given to the completion callback. +> Asynchronous ftruncate. No arguments other than a possible exception are given to the completion callback. + + ```js -fs.ftruncateSync(fd, len); + +fs.ftruncateSync(fd, len); + ``` -> Synchronous ftruncate. +> Synchronous ftruncate. -````js -fs.truncate(path, len, callback); + +```js + +fs.truncate(path, len, callback); > Asynchronous truncate. No arguments other than a possible exception are given to the completion callback. ```js -fs.truncateSync(path, len); +fs.truncateSync(path, len); > Synchronous truncate. ```js -fs.chown(path, uid, gid, callback); +fs.chown(path, uid, gid, callback); > Asynchronous chown. No arguments other than a possible exception are given to the completion callback. ```js -fs.chownSync(path, uid, gid); +fs.chownSync(path, uid, gid); + +``` + +> Synchronous chown. -```` -> Synchronous chown. ```js -fs.fchown(fd, uid, gid, callback); -``` +fs.fchown(fd, uid, gid, callback); +``` --- +> Asynchronous fchown. No arguments other than a possible exception are given to the completion callback. + -> Asynchronous fchown. No arguments other than a possible exception are given to the completion callback. ```js -fs.fchownSync(fd, uid, gid); -``` +fs.fchownSync(fd, uid, gid); +``` --- +> Synchronous fchown. + -> Synchronous fchown. ```js + fs.lchown(path, uid, gid, callback); + + ``` -> Asynchronous lchown. No arguments other than a possible exception are given to the completion callback. +> Asynchronous lchown. No arguments other than a possible exception are given to the completion callback. + + ```js -fs.lchownSync(path, uid, gid); + +fs.lchownSync(path, uid, gid); + ``` -> Synchronous lchown. +> Synchronous lchown. + + ```js -fs.chmod(path, mode, callback); + +fs.chmod(path, mode, callback); + ``` -> Asynchronous chmod. No arguments other than a possible exception are given to the completion callback. +> Asynchronous chmod. No arguments other than a possible exception are given to the completion callback. + + ```js + fs.chmodSync(path, mode); + + ``` -> Synchronous chmod. +> Synchronous chmod. + + ```js -fs.fchmod(fd, mode, callback); + +fs.fchmod(fd, mode, callback); + ``` -> Asynchronous fchmod. No arguments other than a possible exception are given to the completion callback. +> Asynchronous fchmod. No arguments other than a possible exception are given to the completion callback. + + ```js + fs.fchmodSync(fd, mode); + ``` -> Synchronous fchmod. +> Synchronous fchmod. + + ```js -fs.lchmod(path, mode, callback); + +fs.lchmod(path, mode, callback); + ``` -> Asynchronous lchmod. No arguments other than a possible exception are given to the completion callback. +> Asynchronous lchmod. No arguments other than a possible exception are given to the completion callback. + + ```js -fs.lchmodSync(path, mode); + +fs.lchmodSync(path, mode); + ``` -> Synchronous lchmod. +> Synchronous lchmod. + + ```js + fs.stat(path, callback); + ``` -> Asynchronous stat. The callback gets two arguments (err, stats) where stats is a fs.Stats object. +> Asynchronous stat. The callback gets two arguments (err, stats) where stats is a fs.Stats object. + + ```js -fs.statSync(path); + +fs.statSync(path); + ``` -> Synchronous stat. Returns an instance of fs.Stats. +> Synchronous stat. Returns an instance of fs.Stats. + + ```js + fs.lstat(path, callback); + + ``` -> Asynchronous lstat. The callback gets two arguments (err, stats) where stats is a fs.Stats object. lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to. +> Asynchronous lstat. The callback gets two arguments (err, stats) where stats is a fs.Stats object. lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to. + + ```js + fs.lstatSync(path); + + ``` -> Synchronous lstat. Returns an instance of fs.Stats. +> Synchronous lstat. Returns an instance of fs.Stats. + -````js -fs.fstat(fd, callback); +```js + +fs.fstat(fd, callback); > Asynchronous fstat. The callback gets two arguments (err, stats) where stats is a fs.Stats object. fstat() is identical to stat(), except that the file to be stat-ed is specified by the file descriptor fd. ```js -fs.fstatSync(fd); -```` - +fs.fstatSync(fd); +``` --- +> Synchronous fstat. Returns an instance of fs.Stats. -> Synchronous fstat. Returns an instance of fs.Stats. -````js -fs.link(srcpath, dstpath, callback); +```js + +fs.link(srcpath, dstpath, callback); > Asynchronous link. No arguments other than a possible exception are given to the completion callback. ```js -fs.linkSync(srcpath, dstpath); +fs.linkSync(srcpath, dstpath); + +``` +> Synchronous link. -```` -> Synchronous link. ```js -fs.symlink(srcpath, dstpath, [type], callback); -``` +fs.symlink(srcpath, dstpath, [type], callback); +``` --- - -> Asynchronous symlink. No arguments other than a possible exception are given to the completion callback. The type argument can be set to 'dir', 'file', or 'junction' (default is 'file') and is only available on Windows (ignored on other platforms) +> Asynchronous symlink. No arguments other than a possible exception are given to the completion callback. The type argument can be set to 'dir', 'file', or 'junction' (default is 'file') and is only available on Windows (ignored on other platforms) ```js + fs.symlinkSync(srcpath, dstpath, [type]); + ``` -> Synchronous symlink. +> Synchronous symlink. + + ```js + fs.readlink(path, callback); + + ``` -> Asynchronous readlink. The callback gets two arguments (err, linkString). +> Asynchronous readlink. The callback gets two arguments (err, linkString). + + ```js -fs.readlinkSync(path); -``` +fs.readlinkSync(path); +``` --- +> Synchronous readlink. Returns the symbolic link's string value. + -> Synchronous readlink. Returns the symbolic link's string value. ```js -fs.unlink(path, callback); -``` +fs.unlink(path, callback); +``` --- +> Asynchronous unlink. No arguments other than a possible exception are given to the completion callback. -> Asynchronous unlink. No arguments other than a possible exception are given to the completion callback. -````js -fs.unlinkSync(path); +```js + +fs.unlinkSync(path); > Synchronous unlink. ```js -fs.realpath(path, [cache], callback); +fs.realpath(path, [cache], callback); > Asynchronous realpath. The callback gets two arguments (err, resolvedPath). @@ -1616,192 +2100,287 @@ fs.realpath(path, [cache], callback); fs.realpathSync(path, [cache]); -```` +``` -> Synchronous realpath. Returns the resolved path. +> Synchronous realpath. Returns the resolved path. -````js -fs.rmdir(path, callback); + +```js + +fs.rmdir(path, callback); > Asynchronous rmdir. No arguments other than a possible exception are given to the completion callback. ```js -fs.rmdirSync(path); -```` - +fs.rmdirSync(path); +``` --- +> Synchronous rmdir. + -> Synchronous rmdir. ```js -fs.mkdir(path, [mode], callback); + +fs.mkdir(path, [mode], callback); + ``` -> Asynchronous mkdir. No arguments other than a possible exception are given to the completion callback. mode defaults to 0777. +> Asynchronous mkdir. No arguments other than a possible exception are given to the completion callback. mode defaults to 0777. + + ```js + fs.mkdirSync(path, [mode]); + ``` -> Synchronous mkdir. +> Synchronous mkdir. + + ```js + fs.readdir(path, callback); + + ``` -> Asynchronous readdir. Reads the contents of a directory. The callback gets two arguments (err, files) where files is an array of the names of the files in the directory excluding '.' and '..'. +> Asynchronous readdir. Reads the contents of a directory. The callback gets two arguments (err, files) where files is an array of the names of the files in the directory excluding '.' and '..'. + + ```js + fs.readdirSync(path); + + ``` -> Synchronous readdir. Returns an array of filenames excluding '.' and '..'. +> Synchronous readdir. Returns an array of filenames excluding '.' and '..'. + + ```js -fs.close(fd, callback); -``` -> Asynchronous close. No arguments other than a possible exception are given to the completion callback. +fs.close(fd, callback); + +``` +> Asynchronous close. No arguments other than a possible exception are given to the completion callback. + + ```js + fs.closeSync(fd); + + ``` -> Synchronous close. +> Synchronous close. + + ```js -fs.open(path, flags, [mode], callback); + +fs.open(path, flags, [mode], callback); + ``` -> Asynchronous file open. +> Asynchronous file open. + + ```js + fs.openSync(path, flags, [mode]); + ``` -> Synchronous version of fs.open(). +> Synchronous version of fs.open(). + + ```js -fs.utimes(path, atime, mtime, callback); -``` +fs.utimes(path, atime, mtime, callback); +``` --- +> Change file timestamps of the file referenced by the supplied path. + -> Change file timestamps of the file referenced by the supplied path. ```js -fs.utimesSync(path, atime, mtime); + +fs.utimesSync(path, atime, mtime); + ``` -> Synchronous version of fs.utimes(). +> Synchronous version of fs.utimes(). + + ```js -fs.futimes(fd, atime, mtime, callback); + +fs.futimes(fd, atime, mtime, callback); + ``` -> Change the file timestamps of a file referenced by the supplied file descriptor. +> Change the file timestamps of a file referenced by the supplied file descriptor. + + ```js -fs.futimesSync(fd, atime, mtime); + +fs.futimesSync(fd, atime, mtime); + ``` -> Synchronous version of fs.futimes(). +> Synchronous version of fs.futimes(). + + ```js -fs.fsync(fd, callback); -``` -> Asynchronous fsync. No arguments other than a possible exception are given to the completion callback. +fs.fsync(fd, callback); + +``` +> Asynchronous fsync. No arguments other than a possible exception are given to the completion callback. + + ```js + fs.fsyncSync(fd); + + ``` -> Synchronous fsync. +> Synchronous fsync. + + ```js -fs.write(fd, buffer, offset, length, position, callback); -``` +fs.write(fd, buffer, offset, length, position, callback); +``` --- +> Write buffer to the file specified by fd. + -> Write buffer to the file specified by fd. ```js -fs.writeSync(fd, buffer, offset, length, position); + +fs.writeSync(fd, buffer, offset, length, position); + ``` -> Synchronous version of fs.write(). Returns the number of bytes written. +> Synchronous version of fs.write(). Returns the number of bytes written. + + ```js -fs.read(fd, buffer, offset, length, position, callback); + +fs.read(fd, buffer, offset, length, position, callback); + ``` -> Read data from the file specified by fd. +> Read data from the file specified by fd. + + ```js -fs.readSync(fd, buffer, offset, length, position); + +fs.readSync(fd, buffer, offset, length, position); + ``` -> Synchronous version of fs.read. Returns the number of bytesRead. +> Synchronous version of fs.read. Returns the number of bytesRead. + + ```js + fs.readFile(filename, [options], callback); + ``` -> Asynchronously reads the entire contents of a file. +> Asynchronously reads the entire contents of a file. + + ```js + fs.readFileSync(filename, [options]); + ``` -> Synchronous version of fs.readFile. Returns the contents of the filename. If the encoding option is specified then this function returns a string. Otherwise it returns a buffer. +> Synchronous version of fs.readFile. Returns the contents of the filename. If the encoding option is specified then this function returns a string. Otherwise it returns a buffer. + + ```js -fs.writeFile(filename, data, [options], callback); + +fs.writeFile(filename, data, [options], callback); + ``` -> Asynchronously writes data to a file, replacing the file if it already exists. data can be a string or a buffer. +> Asynchronously writes data to a file, replacing the file if it already exists. data can be a string or a buffer. + + ```js + fs.writeFileSync(filename, data, [options]); + ``` -> The synchronous version of fs.writeFile. +> The synchronous version of fs.writeFile. + + ```js -fs.appendFile(filename, data, [options], callback); -``` +fs.appendFile(filename, data, [options], callback); +``` --- +> Asynchronously append data to a file, creating the file if it not yet exists. data can be a string or a buffer. + -> Asynchronously append data to a file, creating the file if it not yet exists. data can be a string or a buffer. ```js + fs.appendFileSync(filename, data, [options]); + ``` -> The synchronous version of fs.appendFile. +> The synchronous version of fs.appendFile. + + ```js + fs.watch(filename, [options], [listener]); + + ``` -> Watch for changes on filename, where filename is either a file or a directory. The returned object is a fs.FSWatcher. The listener callback gets two arguments (event, filename). event is either 'rename' or 'change', and filename is the name of the file which triggered the event. +> Watch for changes on filename, where filename is either a file or a directory. The returned object is a fs.FSWatcher. The listener callback gets two arguments (event, filename). event is either 'rename' or 'change', and filename is the name of the file which triggered the event. + + ```js -fs.exists(path, callback); -``` +fs.exists(path, callback); +``` --- +> Test whether or not the given path exists by checking with the file system. Then call the callback argument with either true or false. (should not be used) +fs.existsSync(path); -> Test whether or not the given path exists by checking with the file system. Then call the callback argument with either true or false. (should not be used) -> fs.existsSync(path); - -```` +``` > Synchronous version of fs.exists. (should not be used) > fs.Stats: objects returned from fs.stat(), fs.lstat() and fs.fstat() and their synchronous counterparts are of this type. @@ -1813,60 +2392,71 @@ stats.isFile(); stats.isDirectory() stats.isBlockDevice() stats.isCharacterDevice() -stats.isSymbolicLink() +stats.isSymbolicLink() > (only valid with fs.lstat()) stats.isFIFO() stats.isSocket() -fs.createReadStream(path, [options]); +fs.createReadStream(path, [options]); + +``` + +> Returns a new ReadStream object. -```` -> Returns a new ReadStream object. ```js -fs.createWriteStream(path, [options]); -``` +fs.createWriteStream(path, [options]); +``` --- +> Returns a new WriteStream object. +> Use require('path') to use this module. + > This module contains utilities for handling and transforming file paths. + > Almost all these methods perform only string transformations. + > The file system is not consulted to check whether paths are valid. -> Returns a new WriteStream object. -> Use require('path') to use this module. -> This module contains utilities for handling and transforming file paths. -> Almost all these methods perform only string transformations. -> The file system is not consulted to check whether paths are valid. -````js -path.normalize(p); +```js + +path.normalize(p); > Normalize a string path, taking care of '..' and '.' parts. ```js -path.join([path1], [path2], [...]); +path.join([path1], [path2], [...]); + +``` + +> Join all arguments together and normalize the resulting path. -```` -> Join all arguments together and normalize the resulting path. ```js -path.resolve([from ...], to); +path.resolve([from ...], to); ``` -> Resolves 'to' to an absolute path. +> Resolves 'to' to an absolute path. + + ```js -path.relative(from, to); + +path.relative(from, to); + ``` -> Solve the relative path from 'from' to 'to'. +> Solve the relative path from 'from' to 'to'. -````js -path.dirname(p); + +```js + +path.dirname(p); > Return the directory name of a path. Similar to the Unix dirname command. @@ -1876,46 +2466,57 @@ path.dirname(p); path.basename(p, [ext]); -```` +``` + +> Return the last portion of a path. Similar to the Unix basename command. + -> Return the last portion of a path. Similar to the Unix basename command. ```js -path.extname(p); -``` +path.extname(p); +``` --- +> Return the extension of the path, from the last '.' to end of string in the last portion of the path. + -> Return the extension of the path, from the last '.' to end of string in the last portion of the path. ```js -path.sep; -``` +path.sep; +``` --- +> The platform-specific file separator. '\\' or '/'. + -> The platform-specific file separator. '\\' or '/'. ```js -path.delimiter; -``` +path.delimiter; +``` --- +> The platform-specific path delimiter, ';' or ':'. +> To use the HTTP server and client one must require('http'). + -> The platform-specific path delimiter, ';' or ':'. -> To use the HTTP server and client one must require('http'). ```js -http.STATUS_CODES; + +http.STATUS_CODES; + ``` -> A collection of all the standard HTTP response status codes, and the short description of each. +> A collection of all the standard HTTP response status codes, and the short description of each. + + ```js + http.request(options, [callback]); + ``` -```` +``` --- > This function allows one to transparently issue requests. @@ -1925,210 +2526,306 @@ http.request(options, [callback]); http.get(options, [callback]); -```` +``` + +> Set the method to GET and calls req.end() automatically. + -> Set the method to GET and calls req.end() automatically. ```js + server = http.createServer([requestListener]); + ``` --- +> Returns a new web server object. The requestListener is a function which is automatically added to the 'request' event. + -> Returns a new web server object. The requestListener is a function which is automatically added to the 'request' event. ```js + server.listen(port, [hostname], [backlog], [callback]); + ``` -> Begin accepting connections on the specified port and hostname. +> Begin accepting connections on the specified port and hostname. + + ```js + server.listen(path, [callback]); + + ``` -> Start a UNIX socket server listening for connections on the given path. +> Start a UNIX socket server listening for connections on the given path. + + ```js + server.listen(handle, [callback]); + + ``` -> The handle object can be set to either a server or socket (anything with an underlying \_handle member), or a {fd: } object. +> The handle object can be set to either a server or socket (anything with an underlying _handle member), or a {fd: } object. + + ```js + server.close([callback]); + ``` +> Stops the server from accepting new connections. -> Stops the server from accepting new connections. -````js -server.setTimeout(msecs, callback); +```js + +server.setTimeout(msecs, callback); > Sets the timeout value for sockets, and emits a 'timeout' event on the Server object, passing the socket as an argument, if a timeout occurs. ```js -server.maxHeadersCount; -```` - +server.maxHeadersCount; +``` +--- +> Limits maximum incoming headers count, equal to 1000 by default. If set to 0 - no limit will be applied. + + + +```js + +server.timeout; + +``` + +> The number of milliseconds of inactivity before a socket is presumed to have timed out. + + + +```js + +server.on('request', function (request, response) { }); + +``` + +> Emitted each time there is a request. + + + +```js + +server.on('connection', function (socket) { }); + +``` + +> When a new TCP stream is established. + + + +```js + +server.on('close', function () { }); +``` --- +> Emitted when the server closes. + -> Limits maximum incoming headers count, equal to 1000 by default. If set to 0 - no limit will be applied. ```js -server.timeout; + +server.on('checkContinue', function (request, response) { }); ``` +--- +> Emitted each time a request with an http Expect: 100-continue is received. + -> The number of milliseconds of inactivity before a socket is presumed to have timed out. ```js -server.on('request', function (request, response) {}); -``` -> Emitted each time there is a request. +server.on('connect', function (request, socket, head) { }); + -```js -server.on('connection', function (socket) {}); ``` -> When a new TCP stream is established. +> Emitted each time a client requests a http CONNECT method. + + ```js -server.on('close', function () {}); -``` ---- +server.on('upgrade', function (request, socket, head) { }); -> Emitted when the server closes. -```js -server.on('checkContinue', function (request, response) {}); ``` ---- +> Emitted each time a client requests a http upgrade. + -> Emitted each time a request with an http Expect: 100-continue is received. ```js -server.on('connect', function (request, socket, head) {}); -``` -> Emitted each time a client requests a http CONNECT method. +server.on('clientError', function (exception, socket) { }); + -```js -server.on('upgrade', function (request, socket, head) {}); ``` -> Emitted each time a client requests a http upgrade. +> If a client connection emits an 'error' event - it will forwarded here. -```js -server.on('clientError', function (exception, socket) {}); -``` -> If a client connection emits an 'error' event - it will forwarded here. ```js + request.write(chunk, [encoding]); + ``` -> Sends a chunk of the body. +> Sends a chunk of the body. + + ```js + request.end([data], [encoding]); + ``` -> Finishes sending the request. If any parts of the body are unsent, it will flush them to the stream. +> Finishes sending the request. If any parts of the body are unsent, it will flush them to the stream. + + ```js + request.abort(); + ``` -> Aborts a request. +> Aborts a request. + + ```js + request.setTimeout(timeout, [callback]); + ``` --- +> Once a socket is assigned to this request and is connected socket.setTimeout() will be called. + -> Once a socket is assigned to this request and is connected socket.setTimeout() will be called. ```js + request.setNoDelay([noDelay]); + ``` +> Once a socket is assigned to this request and is connected socket.setNoDelay() will be called. + -> Once a socket is assigned to this request and is connected socket.setNoDelay() will be called. ```js + request.setSocketKeepAlive([enable], [initialDelay]); + + ``` -> Once a socket is assigned to this request and is connected socket.setKeepAlive() will be called. +> Once a socket is assigned to this request and is connected socket.setKeepAlive() will be called. + + ```js -request.on('response', function (response) {}); + +request.on('response', function(response) { }); + ``` -> Emitted when a response is received to this request. This event is emitted only once. +> Emitted when a response is received to this request. This event is emitted only once. + + -````js +```js -request.on('socket', function(socket) { }); +request.on('socket', function(socket) { }); > Emitted after a socket is assigned to this request. ```js -request.on('connect', function(response, socket, head) { }); +request.on('connect', function(response, socket, head) { }); + +``` + +> Emitted each time a server responds to a request with a CONNECT method. If this event isn't being listened for, clients receiving a CONNECT method will have their connections closed. -```` -> Emitted each time a server responds to a request with a CONNECT method. If this event isn't being listened for, clients receiving a CONNECT method will have their connections closed. ```js -request.on('upgrade', function (response, socket, head) {}); + +request.on('upgrade', function(response, socket, head) { }); + ``` -> Emitted each time a server responds to a request with an upgrade. If this event isn't being listened for, clients receiving an upgrade header will have their connections closed. +> Emitted each time a server responds to a request with an upgrade. If this event isn't being listened for, clients receiving an upgrade header will have their connections closed. + + ```js -request.on('continue', function () {}); + +request.on('continue', function() { }); + ``` -> Emitted when the server sends a '100 Continue' HTTP response, usually because the request contained 'Expect: 100-continue'. This is an instruction that the client should send the request body. +> Emitted when the server sends a '100 Continue' HTTP response, usually because the request contained 'Expect: 100-continue'. This is an instruction that the client should send the request body. + + ```js + response.write(chunk, [encoding]); + + ``` -> This sends a chunk of the response body. If this merthod is called and response.writeHead() has not been called, it will switch to implicit header mode and flush the implicit headers. +> This sends a chunk of the response body. If this merthod is called and response.writeHead() has not been called, it will switch to implicit header mode and flush the implicit headers. + + ```js + response.writeContinue(); + ``` +> Sends a HTTP/1.1 100 Continue message to the client, indicating that the request body should be sent. + -> Sends a HTTP/1.1 100 Continue message to the client, indicating that the request body should be sent. -````js +```js -response.writeHead(statusCode, [reasonPhrase], [headers]); +response.writeHead(statusCode, [reasonPhrase], [headers]); > Sends a response header to the request. ```js -response.setTimeout(msecs, callback); +response.setTimeout(msecs, callback); > Sets the Socket's timeout value to msecs. If a callback is provided, then it is added as a listener on the 'timeout' event on the response object. ```js -response.setHeader(name, value); +response.setHeader(name, value); > Sets a single header value for implicit headers. If this header already exists in the to-be-sent headers, its value will be replaced. Use an array of strings here if you need to send multiple headers with the same name. @@ -2137,98 +2834,118 @@ response.setHeader(name, value); response.getHeader(name); -```` +``` +> Reads out a header that's already been queued but not sent to the client. Note that the name is case insensitive. + -> Reads out a header that's already been queued but not sent to the client. Note that the name is case insensitive. ```js + response.removeHeader(name); + ``` +> Removes a header that's queued for implicit sending. + -> Removes a header that's queued for implicit sending. ```js + response.addTrailers(headers); + ``` +> This method adds HTTP trailing headers (a header but at the end of the message) to the response. + -> This method adds HTTP trailing headers (a header but at the end of the message) to the response. ```js + response.end([data], [encoding]); + ``` -> This method signals to the server that all of the response headers and body have been sent; that server should consider this message complete. The method, response.end(), MUST be called on each response. +> This method signals to the server that all of the response headers and body have been sent; that server should consider this message complete. The method, response.end(), MUST be called on each response. + -````js -response.statusCode; +```js + +response.statusCode; > When using implicit headers (not calling response.writeHead() explicitly), this property controls the status code that will be sent to the client when the headers get flushed. ```js -response.headersSent; +response.headersSent; > Boolean (read-only). True if headers were sent, false otherwise. ```js -response.sendDate; +response.sendDate; > When true, the Date header will be automatically generated and sent in the response if it is not already present in the headers. Defaults to true. ```js -response.on('close', function () { }); -```` - +response.on('close', function () { }); +``` --- +> Indicates that the underlying connection was terminated before response.end() was called or able to flush. + -> Indicates that the underlying connection was terminated before response.end() was called or able to flush. ```js -response.on('finish', function () {}); -``` +response.on('finish', function() { }); +``` --- +> Emitted when the response has been sent. + -> Emitted when the response has been sent. -````js +```js -message.httpVersion; +message.httpVersion; > In case of server request, the HTTP version sent by the client. In the case of client response, the HTTP version of the connected-to server. ```js -message.headers; +message.headers; + +``` + +> The request/response headers object. -```` -> The request/response headers object. ```js -message.trailers; -``` +message.trailers; +``` --- +> The request/response trailers object. Only populated after the 'end' event. + -> The request/response trailers object. Only populated after the 'end' event. ```js + message.method; + + ``` -> The request method as a string. Read only. Example: 'GET', 'DELETE'. +> The request method as a string. Read only. Example: 'GET', 'DELETE'. + + -````js +```js -message.url; +message.url; > Request URL string. This contains only the URL that is present in the actual HTTP request. @@ -2238,44 +2955,66 @@ message.url; message.statusCode; -```` +``` + +> The 3-digit HTTP response status code. E.G. 404. + -> The 3-digit HTTP response status code. E.G. 404. ```js + message.socket; + + ``` -> The net.Socket object associated with the connection. +> The net.Socket object associated with the connection. + + ```js + message.setTimeout(msecs, callback); + + ``` -> Calls message.connection.setTimeout(msecs, callback). -> This module has utilities for URL resolution and parsing. Call require('url') to use it. +> Calls message.connection.setTimeout(msecs, callback). +> This module has utilities for URL resolution and parsing. Call require('url') to use it. + + ```js -url.parse(urlStr, [parseQueryString], [slashesDenoteHost]); -``` +url.parse(urlStr, [parseQueryString], [slashesDenoteHost]); +``` --- +> Take a URL string, and return an object. + -> Take a URL string, and return an object. ```js + url.format(urlObj); + + ``` -> Take a parsed URL object, and return a formatted URL string. +> Take a parsed URL object, and return a formatted URL string. + + ```js + url.resolve(from, to); + ``` -> Take a base URL, and a href URL, and resolve them as a browser would for an anchor tag. +> Take a base URL, and a href URL, and resolve them as a browser would for an anchor tag. -````js + + +```js //************** // * QUERY STRING @@ -2290,242 +3029,341 @@ url.resolve(from, to); querystring.stringify(obj, [sep], [eq]); -```` +``` + +> Serialize an object to a query string. Optionally override the default separator ('&') and assignment ('=') characters. + -> Serialize an object to a query string. Optionally override the default separator ('&') and assignment ('=') characters. ```js -querystring.parse(str, [sep], [eq], [options]); -``` +querystring.parse(str, [sep], [eq], [options]); +``` --- +> Deserialize a query string to an object. Optionally override the default separator ('&') and assignment ('=') characters. +> This module is used for writing unit tests for your applications, you can access it with require('assert'). + -> Deserialize a query string to an object. Optionally override the default separator ('&') and assignment ('=') characters. -> This module is used for writing unit tests for your applications, you can access it with require('assert'). ```js -assert.fail(actual, expected, message, operator); + +assert.fail(actual, expected, message, operator); + ``` -> Throws an exception that displays the values for actual and expected separated by the provided operator. +> Throws an exception that displays the values for actual and expected separated by the provided operator. + + ```js -assert(value, message); -assert.ok(value, [message]); -``` +assert(value, message); assert.ok(value, [message]); +``` --- - -> Tests if value is truthy, it is equivalent to assert.equal(true, !!value, message); +> Tests if value is truthy, it is equivalent to assert.equal(true, !!value, message); ```js + assert.equal(actual, expected, [message]); + ``` --- +> Tests shallow, coercive equality with the equal comparison operator ( == ). + -> Tests shallow, coercive equality with the equal comparison operator ( == ). ```js + assert.notEqual(actual, expected, [message]); + ``` -> Tests shallow, coercive non-equality with the not equal comparison operator ( != ). +> Tests shallow, coercive non-equality with the not equal comparison operator ( != ). + + ```js + assert.deepEqual(actual, expected, [message]); + ``` -> Tests for deep equality. +> Tests for deep equality. + + ```js -assert.notDeepEqual(actual, expected, [message]); + +assert.notDeepEqual(actual, expected, [message]); + ``` -> Tests for any deep inequality. +> Tests for any deep inequality. + + ```js + assert.strictEqual(actual, expected, [message]); ``` - --- - -> Tests strict equality, as determined by the strict equality operator ( === ) +> Tests strict equality, as determined by the strict equality operator ( === ) ```js -assert.notStrictEqual(actual, expected, [message]); + +assert.notStrictEqual(actual, expected, [message]); + ``` -> Tests strict non-equality, as determined by the strict not equal operator ( !== ) +> Tests strict non-equality, as determined by the strict not equal operator ( !== ) ```js + assert.throws(block, [error], [message]); + ``` -> Expects block to throw an error. error can be constructor, RegExp or validation function. +> Expects block to throw an error. error can be constructor, RegExp or validation function. + + ```js + assert.doesNotThrow(block, [message]); + ``` -> Expects block not to throw an error, see assert.throws for details. +> Expects block not to throw an error, see assert.throws for details. + + ```js -assert.ifError(value); + +assert.ifError(value); + ``` -> Tests if value is not a false value, throws if it is a true value. Useful when testing the first argument, error in callbacks. -> Provides a few basic operating-system related utility functions. -> Use require('os') to access this module. +> Tests if value is not a false value, throws if it is a true value. Useful when testing the first argument, error in callbacks. +> Provides a few basic operating-system related utility functions. + > Use require('os') to access this module. + + ```js -os.tmpdir(); + +os.tmpdir(); + ``` -> Returns the operating system's default directory for temp files. +> Returns the operating system's default directory for temp files. + + ```js -os.endianness(); + +os.endianness(); + ``` -> Returns the endianness of the CPU. Possible values are "BE" or "LE". +> Returns the endianness of the CPU. Possible values are "BE" or "LE". + + ```js -os.hostname(); + +os.hostname(); + ``` -> Returns the hostname of the operating system. +> Returns the hostname of the operating system. + + ```js + os.type(); + + ``` -> Returns the operating system name. +> Returns the operating system name. + + ```js -os.platform(); + +os.platform(); + ``` -> Returns the operating system platform. +> Returns the operating system platform. + + ```js + os.arch(); + + ``` -> Returns the operating system CPU architecture. +> Returns the operating system CPU architecture. + + ```js -os.release(); -``` +os.release(); +``` --- +> Returns the operating system release. -> Returns the operating system release. -````js -os.uptime(); +```js + +os.uptime(); > Returns the system uptime in seconds. ```js -os.loadavg(); -```` - +os.loadavg(); +``` --- +> Returns an array containing the 1, 5, and 15 minute load averages. + -> Returns an array containing the 1, 5, and 15 minute load averages. ```js -os.totalmem(); + +os.totalmem(); + ``` -> Returns the total amount of system memory in bytes. +> Returns the total amount of system memory in bytes. + + ```js -os.freemem(); -``` +os.freemem(); +``` --- +> Returns the amount of free system memory in bytes. + -> Returns the amount of free system memory in bytes. ```js + os.cpus(); + + ``` -> Returns an array of objects containing information about each CPU/core installed: model, speed (in MHz), and times (an object containing the number of milliseconds the CPU/core spent in: user, nice, sys, idle, and irq). +> Returns an array of objects containing information about each CPU/core installed: model, speed (in MHz), and times (an object containing the number of milliseconds the CPU/core spent in: user, nice, sys, idle, and irq). + + ```js -os.networkInterfaces(); -``` +os.networkInterfaces(); +``` --- +> Get a list of network interfaces. + -> Get a list of network interfaces. ```js -os.EOL; +os.EOL; > A constant defining the appropriate End-of-line marker for the operating system. ``` -> Buffer is used to dealing with binary data -> Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap +> Buffer is used to dealing with binary data +> Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap ```js + Buffer.from(size); + ``` -> Allocates a new buffer of size octets. +> Allocates a new buffer of size octets. + + ```js + Buffer.from(array); + ``` -> Allocates a new buffer using an array of octets. +> Allocates a new buffer using an array of octets. + + ```js + Buffer.from(str, [encoding]); + ``` -> Allocates a new buffer containing the given str. encoding defaults to 'utf8'. +> Allocates a new buffer containing the given str. encoding defaults to 'utf8'. + + ```js + Buffer.isEncoding(encoding); + ``` -> Returns true if the encoding is a valid encoding argument, or false otherwise. +> Returns true if the encoding is a valid encoding argument, or false otherwise. + + ```js + Buffer.isBuffer(obj); + ``` -> Tests if obj is a Buffer +> Tests if obj is a Buffer ```js + Buffer.concat(list, [totalLength]); + ``` -> Returns a buffer which is the result of concatenating all the buffers in the list together. +> Returns a buffer which is the result of concatenating all the buffers in the list together. + + ```js + Buffer.byteLength(string, [encoding]); + ``` -> Gives the actual byte length of a string. +> Gives the actual byte length of a string. + + ```js + buf.write(string, [offset], [length], [encoding]); + ``` -> Writes string to the buffer at offset using the given encoding -> buf.toString([encoding], [start], [end]); +> Writes string to the buffer at offset using the given encoding +buf.toString([encoding], [start], [end]); -```` +``` --- > Decodes and returns a string from buffer data encoded with encoding (defaults to 'utf8') beginning at start (defaults to 0) and ending at end (defaults to buffer.length). @@ -2536,95 +3374,134 @@ buf.write(string, [offset], [length], [encoding]); buf.toJSON(); -```` +``` -> Returns a JSON-representation of the Buffer instance, which is identical to the output for JSON Arrays +> Returns a JSON-representation of the Buffer instance, which is identical to the output for JSON Arrays ```js -buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd]); -``` +buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd]); +``` --- - -> Does copy between buffers. The source and target regions can be overlapped +> Does copy between buffers. The source and target regions can be overlapped ```js + buf.slice([start], [end]); + ``` -> Returns a new buffer which references the same memory as the old, but offset and cropped by the start (defaults to 0) and end (defaults to buffer.length) indexes. Negative indexes start from the end of the buffer. +> Returns a new buffer which references the same memory as the old, but offset and cropped by the start (defaults to 0) and end (defaults to buffer.length) indexes. Negative indexes start from the end of the buffer. + + ```js + buf.fill(value, [offset], [end]); + ``` -> Fills the buffer with the specified value +> Fills the buffer with the specified value ```js -buf[index]; + +buf[index]; + ``` -> Get and set the octet at index +> Get and set the octet at index ```js -buf.length; + +buf.length; ``` -> The size of the buffer in bytes, Note that this is not necessarily the size of the contents +> The size of the buffer in bytes, Note that this is not necessarily the size of the contents ```js -buffer.INSPECT_MAX_BYTES; + +buffer.INSPECT_MAX_BYTES; + ``` -> How many bytes will be returned when buffer.inspect() is called. This can be overridden by user modules. +> How many bytes will be returned when buffer.inspect() is called. This can be overridden by user modules. + + ```js ``` - # ReactJS - --- ```bash -npm install --save react +npm install --save react #// declarative and flexible JavaScript library for building UI npm install --save react-dom # > serves as the entry point of the DOM-related rendering paths -npm install --save prop-types +npm install --save prop-types #// runtime type checking for React props and similar objects ``` ## notes: don't forget the command lines - > Create and return a new React element of the given type. -> Code written with JSX will be converted to use React.createElement(). -> You will not typically invoke React.createElement() directly if you are using JSX. + + + + > Code written with JSX will be converted to use React.createElement(). + + > You will not typically invoke React.createElement() directly if you are using JSX. + + ```js -React.createElement(type, [props], [...children]); + +React.createElement( +type, +[props], +[...children] +) + ``` > Clone and return a new React element using element as the starting point. -> The resulting element will have the original element’s props with the new props merged in shallowly. + + + + + > The resulting element will have the original element’s props with the new props merged in shallowly. + + ```js -React.cloneElement(element, [props], [...children]); + +React.cloneElement( +element, +[props], +[...children] +) + ``` > Verifies the object is a React element. Returns true or false. + + ```js -React.isValidElement(object); + +React.isValidElement(object) + ``` > React.Children> provides utilities for dealing with the this.props.children opaque data structure. > Invokes a function on every immediate child contained within children with this set to thisArg. + + ```js React.Children.map(children, function[(thisArg)]) @@ -2633,38 +3510,62 @@ React.Children.map(children, function[(thisArg)]) > Like React.Children.map() but does not return an array. + + ```js React.Children.forEach(children, function[(thisArg)]) ``` -> Returns the total number of components in children, equal to the number of times that a callback passed to map or forEach would be invoked. +> Returns the total number of components in children, equal to the number of times that a callback passed to map or forEach would be invoked. + + ```js -React.Children.count(children); + +React.Children.count(children) + ``` > Verifies that children has only one child (a React element) and returns it. -> Otherwise this method throws an error. + + + + + > Otherwise this method throws an error. + + ```js -React.Children.only(children); + +React.Children.only(children) + ``` > Returns the children opaque data structure as a flat array with keys assigned to each child. -> Useful if you want to manipulate collections of children in your render methods, especially if you want to reorder or slice this.props.children before passing it down. + + + + + > Useful if you want to manipulate collections of children in your render methods, especially if you want to reorder or slice this.props.children before passing it down. + + ```js -React.Children.toArray(children); + +React.Children.toArray(children) + ``` > The React.Fragment component lets you return multiple elements in a render() method without creating an additional DOM element > You can also use it with the shorthand <> syntax. + + ```js @@ -2675,33 +3576,47 @@ class Component extends React.Component { ``` > Will be called before it is mounted -> constructor(props) { +constructor(props) { > Call this method before any other statement > or this.props will be undefined in the constructor -> super(props); + super(props); > The constructor is also often used to bind event handlers to the class instance. + + + + > Binding makes sure the method has access to component attributes like this.props and this.state ```js -this.method = this.method.bind(this); + this.method = this.method.bind(this); ``` - > The constructor is the right place to initialize state. + + ```js this.state = { active: true, -``` + ``` + + > In rare cases, it’s okay to initialize state based on props. + + + + + > This effectively “forks” the props and sets the state with the initial props. -> In rare cases, it’s okay to initialize state based on props. -> This effectively “forks” the props and sets the state with the initial props. -> If you “fork” props by using them for state, you might also want to implement componentWillReceiveProps(nextProps) -> to keep the state up-to-date with them. But lifting state up is often easier and less bug-prone. + + + > If you “fork” props by using them for state, you might also want to implement componentWillReceiveProps(nextProps) + > to keep the state up-to-date with them. But lifting state up is often easier and less bug-prone. + + ```js @@ -2713,13 +3628,27 @@ this.method = this.method.bind(this); > Enqueues changes to the component state and tells React that this component and its children need to be re-rendered with the updated state. -> setState() does not always immediately update the component. It may batch or defer the update until later. -> This makes reading this.state right after calling setState() a potential pitfall. -> Instead, use componentDidUpdate or a setState callback. -> You may optionally pass an object as the first argument to setState() instead of a function. + > setState() does not always immediately update the component. It may batch or defer the update until later. + + + + + > This makes reading this.state right after calling setState() a potential pitfall. + + + + + > Instead, use componentDidUpdate or a setState callback. + + + + + > You may optionally pass an object as the first argument to setState() instead of a function. + + ```jsx @@ -2729,8 +3658,11 @@ setState(updater[, callback]) { } > Invoked just before mounting occurs (before render()) + > This is the only lifecycle hook called on server rendering. + + ```js componentWillMount() { } @@ -2739,11 +3671,25 @@ componentWillMount() { } > Invoked immediately after a component is mounted. -> Initialization that requires DOM nodes should go here. -> If you need to load data from a remote endpoint, this is a good place to instantiate the network request. -> This method is a good place to set up any subscriptions. If you do that, don’t forget to unsubscribe in componentWillUnmount(). + + + > Initialization that requires DOM nodes should go here. + + + + + + > If you need to load data from a remote endpoint, this is a good place to instantiate the network request. + + + + + + > This method is a good place to set up any subscriptions. If you do that, don’t forget to unsubscribe in componentWillUnmount(). + + ```js @@ -2753,23 +3699,47 @@ componentDidMount() { } > Invoked before a mounted component receives new props. -> If you need to update the state in response to prop changes (for example, to reset it), you may compare this.props and nextProps and perform state transitions using this.setState() in this method. + + + + + > If you need to update the state in response to prop changes (for example, to reset it), you may compare this.props and nextProps and perform state transitions using this.setState() in this method. + + ```js -componentWillReceiveProps(nextProps) { } +componentWillReceiveProps(nextProps) { } ``` > Let React know if a component’s output is not affected by the current change in state or props. -> The default behavior is to re-render on every state change, and in the vast majority of cases you should rely on the default behavior. -> shouldComponentUpdate() is invoked before rendering when new props or state are being received. Defaults to true. -> This method is not called for the initial render or when forceUpdate() is used. -> Returning false does not prevent child components from re-rendering when their state changes. + + > The default behavior is to re-render on every state change, and in the vast majority of cases you should rely on the default behavior. + + + + + + > shouldComponentUpdate() is invoked before rendering when new props or state are being received. Defaults to true. + + + + + + > This method is not called for the initial render or when forceUpdate() is used. + + + + + + > Returning false does not prevent child components from re-rendering when their state changes. + + ```js @@ -2779,11 +3749,19 @@ shouldComponentUpdate(nextProps, nextState) { } > Invoked just before rendering when new props or state are being received. -> Use this as an opportunity to perform preparation before an update occurs. This method is not called for the initial render. -> Note that you cannot call this.setState() here; nor should you do anything else -```` + + + > Use this as an opportunity to perform preparation before an update occurs. This method is not called for the initial render. + + + + + + > Note that you cannot call this.setState() here; nor should you do anything else + +``` > (e.g. dispatch a Redux action) that would trigger an update to a React component before componentWillUpdate() returns. @@ -2797,15 +3775,25 @@ shouldComponentUpdate(nextProps, nextState) { } ```js -componentWillUpdate(nextProps, nextState) { } +componentWillUpdate(nextProps, nextState) { } -```` +``` > Invoked immediately after updating occurs. This method is not called for the initial render. -> Use this as an opportunity to operate on the DOM when the component has been updated. -> This is also a good place to do network requests as long as you compare the current props to previous props (e.g. a network request may not be necessary if the props have not changed). + + + + > Use this as an opportunity to operate on the DOM when the component has been updated. + + + + + + > This is also a good place to do network requests as long as you compare the current props to previous props (e.g. a network request may not be necessary if the props have not changed). + + ```js @@ -2815,7 +3803,13 @@ componentDidUpdate(prevProps, prevState) { } > Invoked immediately before a component is unmounted and destroyed. -> Perform any necessary cleanup in this method, such as invalidating timers, canceling network requests, or cleaning up any subscriptions that were created in componentDidMount(). + + + + + > Perform any necessary cleanup in this method, such as invalidating timers, canceling network requests, or cleaning up any subscriptions that were created in componentDidMount(). + + ```js @@ -2823,9 +3817,15 @@ componentWillUnmount() { } ``` -> Error boundaries are React components that catch JavaScript errors anywhere in their child component tree, log those errors, and display a fallback UI instead of the component tree that crashed. +> Error boundaries are React components that catch JavaScript errors anywhere in their child component tree, log those errors, and display a fallback UI instead of the component tree that crashed. + + + + + + > Error boundaries catch errors during rendering, in lifecycle methods, and in constructors of the whole tree below them. + -> Error boundaries catch errors during rendering, in lifecycle methods, and in constructors of the whole tree below them. ```js @@ -2835,7 +3835,11 @@ componentDidCatch() { } > This method is required. -> It should be pure, meaning that it does not modify component state, it returns the same result each time it’s invoked, and + + + + + > It should be pure, meaning that it does not modify component state, it returns the same result each time it’s invoked, and ``` @@ -2845,21 +3849,27 @@ componentDidCatch() { } > It must return one of the following types: react elements, string and numbers, portals, null or booleans. + + ```js render() { -``` +``` > Contains the props that were defined by the caller of this component. + + ```js -console.log(this.props); -``` + console.log(this.props); +``` > Contains data specific to this component that may change over time. -````js + + +```js > The state is user-defined, and it should be a plain JavaScript object. @@ -2901,26 +3911,44 @@ console.log(this.props); } } -```` +``` > Can be defined as a property on the component class itself, to set the default props for the class. -> This is used for undefined props, but not for null props. + + + + + > This is used for undefined props, but not for null props. + + ```js + Component.defaultProps = { - color: 'blue' +color: 'blue' }; component = new Component(); + ``` > By default, when your component’s state or props change, your component will re-render. -> If your render() method depends on some other data, you can tell React that the component needs re-rendering by calling forceUpdate(). -> Normally you should try to avoid all uses of forceUpdate() and only read from this.props and this.state in render(). -````js + + + > If your render() method depends on some other data, you can tell React that the component needs re-rendering by calling forceUpdate(). + + + + + + > Normally you should try to avoid all uses of forceUpdate() and only read from this.props and this.state in render(). + + + +```js component.forceUpdate(callback) //************** @@ -2943,11 +3971,11 @@ component.forceUpdate(callback) //------------------------------------------------------------------------------\\ //------------------------------------------------------------------------------\\ -```` +``` > Render a React element into the DOM in the supplied container and return a reference -```` +``` > to the component (or returns null for stateless components). @@ -2957,11 +3985,11 @@ component.forceUpdate(callback) ReactDOM.render(element, container[, callback]) -```` +``` > Same as render(), but is used to hydrate a container whose HTML contents were rendered -```` +``` > by ReactDOMServer. React will attempt to attach event listeners to the existing markup. @@ -2971,16 +3999,28 @@ ReactDOM.render(element, container[, callback]) ReactDOM.hydrate(element, container[, callback]) -```` +``` > Remove a mounted React component from the DOM and clean up its event handlers and state. -> If no component was mounted in the container, calling this function does nothing. -> Returns true if a component was unmounted and false if there was no component to unmount. + + + + > If no component was mounted in the container, calling this function does nothing. + + + + + + > Returns true if a component was unmounted and false if there was no component to unmount. + + ```js -ReactDOM.unmountComponentAtNode(container); + +ReactDOM.unmountComponentAtNode(container) + ``` > If this component has been mounted into the DOM, this returns the corresponding native browser @@ -2993,7 +4033,7 @@ ReactDOM.unmountComponentAtNode(container); > and performing DOM measurements. In most cases, you can attach a ref to the DOM node and avoid -```` +``` > using findDOMNode at all. @@ -3003,11 +4043,11 @@ ReactDOM.unmountComponentAtNode(container); ReactDOM.findDOMNode(component) -```` +``` > Creates a portal. Portals provide a way to render children into a DOM node that exists outside -```` +``` > the hierarchy of the DOM component. @@ -3029,13 +4069,17 @@ ReactDOM.createPortal(child, container) //------------------------------------------------------------------------------\\ //------------------------------------------------------------------------------\\ -```` +``` > Render a React element to its initial HTML. React will return an HTML string. -> You can use this method to generate HTML on the server and send the markup down on the initial -```` + + + + > You can use this method to generate HTML on the server and send the markup down on the initial + +``` > request for faster page loads and to allow search engines to crawl your pages for SEO purposes. @@ -3045,7 +4089,7 @@ ReactDOM.createPortal(child, container) ReactDOMServer.renderToString(element) -```` +``` > Similar to renderToString, except this doesn’t create extra DOM attributes that React uses @@ -3057,17 +4101,29 @@ ReactDOMServer.renderToString(element) > page generator, as stripping away the extra attributes can save some bytes. + + ```js -ReactDOMServer.renderToStaticMarkup(element); + +ReactDOMServer.renderToStaticMarkup(element) + ``` > Render a React element to its initial HTML. Returns a Readable stream that outputs an HTML string. -> The HTML output by this stream is exactly equal to what ReactDOMServer.renderToString would return. -> You can use this method to generate HTML on the server and send the markup down on the initial -```` + + + > The HTML output by this stream is exactly equal to what ReactDOMServer.renderToString would return. + + + + + + > You can use this method to generate HTML on the server and send the markup down on the initial + +``` > request for faster page loads and to allow search engines to crawl your pages for SEO purposes. @@ -3077,7 +4133,7 @@ ReactDOMServer.renderToStaticMarkup(element); ReactDOMServer.renderToNodeStream(element) -```` +``` > Similar to renderToNodeStream, except this doesn’t create extra DOM attributes that React uses @@ -3089,6 +4145,8 @@ ReactDOMServer.renderToNodeStream(element) > page generator, as stripping away the extra attributes can save some bytes. + + ```js ReactDOMServer.renderToStaticNodeStream(element) @@ -3105,7 +4163,7 @@ MyComponent.propTypes = { > You can declare that a prop is a specific JS type. By default, these -```` +``` > are all optional. @@ -3121,11 +4179,13 @@ optionalObject: PropTypes.object, optionalString: PropTypes.string, optionalSymbol: PropTypes.symbol, Anything that can be rendered: numbers, strings, elements or an array -```` +``` > (or fragment) containing these types. -````js + + +```js optionalNode: PropTypes.node, A React element. @@ -3135,10 +4195,12 @@ optionalNode: PropTypes.node, A React element. optionalElement: PropTypes.element, You can also declare that a prop is an instance of a class. This uses -```` +``` > JS's instanceof operator. + + ```js optionalMessage: PropTypes.instanceOf(Message), You can ensure that your prop is limited to specific values by treating @@ -3147,6 +4209,8 @@ optionalMessage: PropTypes.instanceOf(Message), You can ensure that your prop i > it as an enum. + + ```js optionalEnum: PropTypes.oneOf(['News', 'Photos']), An object that could be one of many types @@ -3166,6 +4230,8 @@ optionalObjectWithShape: PropTypes.shape({ > is shown if the prop isn't provided. + + ```js requiredFunc: PropTypes.func.isRequired, A value of any data type @@ -3175,7 +4241,7 @@ requiredAny: PropTypes.any.isRequired, You can also specify a custom validator. > object if the validation fails. Don't `console.warn` or throw, as this -```` +``` > won't work inside `oneOfType`. @@ -3198,11 +4264,11 @@ customProp: function(props, propName, componentName) { > will be called for each key in the array or object. The first two -```` +``` > arguments of the validator are the array or object itself, and the -```` +``` > current item's key. @@ -3219,4 +4285,4 @@ customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, locat } }) }; -```` +``` diff --git a/docs/content/cheat-sheets/Theme.css b/docs/content/cheat-sheets/Theme.css index 8f226abe30..7973404cae 100644 --- a/docs/content/cheat-sheets/Theme.css +++ b/docs/content/cheat-sheets/Theme.css @@ -1,8 +1,7 @@ -html, -body { +html, body { color: #333; background: white; - font-family: medium-content-serif-font, Georgia, Cambria, 'Times New Roman', Times, serif; + font-family: medium-content-serif-font,Georgia,Cambria,"Times New Roman",Times,serif; font-style: normal; font-size: 20px; line-height: 1.6; @@ -17,313 +16,280 @@ body { -ms-overflow-style: -ms-autohiding-scrollbar !important; } -h1, -h2, -h3, -h4, -h5, -h6, -.byline, -.content-title { - font-family: apple-system, BlinkMacSystemFont, 'Segoe UI', 'Source Sans Pro', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif, - 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; - margin-top: 1em; - margin-bottom: 16px; - color: #333; - font-weight: 600; +h1, h2, h3, h4, h5, h6, .byline, .content-title { + font-family: apple-system,BlinkMacSystemFont,"Segoe UI","Source Sans Pro",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + margin-top: 1em; + margin-bottom: 16px; + color: #333; + font-weight: 600; } h1 { - padding-bottom: 0.3em; - font-size: 40px; - line-height: 1.04; - margin-bottom: 16px; + padding-bottom: 0.3em; + font-size: 40px; + line-height: 1.04; + margin-bottom: 16px; } h2 { - font-size: 1.6em; - border-bottom: 1px solid #eee; + font-size: 1.6em; + border-bottom: 1px solid #eee; } h3 { - display: block; - font-size: 32px; + display: block; + font-size: 32px; } h4 { - font-size: 24px; + font-size: 24px; } -h5, -h6 { - font-size: 1em; +h5, h6 { + font-size: 1em; } -a, -a:visited { - text-decoration: none; - color: steelblue; - font-weight: 600; +a, a:visited { + text-decoration: none; + color: steelblue; + font-weight: 600; } -a:hover { + a:hover { text-decoration: underline; -} + } li { - margin-bottom: 12px; - margin-top: 12px; + margin-bottom: 12px; + margin-top: 12px; } code { - font-family: Consolas, monospace; - color: #333; - background: #eee; + font-family: Consolas, monospace; + color: #333; + background: #eee; } pre { - font-family: menlo, consolas, monospace; - font-weight: normal; - font-size: 87%; - line-height: 1.4; - margin: 7px 0; - padding: 0; - border: 1px solid #ddd; - border-radius: 5px; - overflow-x: auto; - max-width: 98%; - white-space: pre; - word-break: normal; - word-wrap: normal; - background: #f6f6f6; -} - -pre > code { + font-family: menlo,consolas,monospace; + font-weight: normal; + font-size: 87%; + line-height: 1.40; + margin: 7px 0; + padding: 0; + border: 1px solid #ddd; + border-radius: 5px; + overflow-x: auto; + max-width: 98%; + white-space: pre; + word-break: normal; + word-wrap: normal; + background: #f6f6f6; +} + + pre > code { white-space: pre; padding: 0.8em !important; display: block; background: transparent; font-weight: normal; -} -pre > code::-webkit-scrollbar { + } + pre>code::-webkit-scrollbar { width: 8px; - height: 8px; - background: #bbb; -} -pre > code::-webkit-scrollbar-thumb { - background: #888; -} + height: 8px; + background: #bbb; + } + pre > code::-webkit-scrollbar-thumb { + background:#888; + } table { - width: 100%; - overflow: auto; - border-spacing: 0; - border-collapse: collapse; - margin: 15px 0; - border-color: gray; + width: 100%; + overflow: auto; + border-spacing: 0; + border-collapse: collapse; + margin: 15px 0; + border-color: gray; } -td, -th { - border: 1px solid #ddd; - padding: 6px 13px; - display: table-cell; - vertical-align: top; +td, th { + border: 1px solid #ddd; + padding: 6px 13px; + display: table-cell; + vertical-align: top; } th { - font-weight: bold; + font-weight: bold; } tbody > tr:nth-child(even) { - background: #eee; + background: #eee; } img { - max-width: 100%; - margin: 0 auto; + max-width: 100%; + margin: 0 auto; } -ul, -ol { - margin: 1.1em 0; +ul, ol { + margin: 1.1em 0; } li { - margin: 0.6em 0.2em 0.6em 1em; + margin: 0.6em 0.2em 0.6em 1em; } ul > li > ul > li > ul > li { - list-style: disc; + list-style: disc; } ul > li > ul > li { - list-style: square; + list-style: square; } .task-list-item { - list-style: none; - margin-left: -2em; + list-style: none; + margin-left: -2em; } /* definition lists can be toggled*/ dt { - font-size: 1.08em; - font-weight: bold; - text-decoration: underline; - padding-top: 0.5em; - cursor: pointer; + font-size: 1.08em; + font-weight: bold; + text-decoration: underline; + padding-top: 0.5em; + cursor: pointer; } dd { - margin: 0; - padding: 0 0 0.2em 1em; - display: none; + margin: 0; + padding: 0 0 0.2em 1em; + display: none; } + blockquote { - background: #f8f8f8; - font-size: 1.1em; - padding: 5px 10px 5px 15px; - margin: 30px 10px; - border-left: 7px #ddd solid; + background: #f8f8f8; + font-size: 1.1em; + padding: 5px 10px 5px 15px; + margin: 30px 10px; + border-left: 7px #ddd solid; } -blockquote h3, -blockquote h4, -blockquote h5 { + blockquote h3, blockquote h4, blockquote h5 { margin-top: 8px; -} + } hr { - margin: 12px 0; + margin: 12px 0; } -.figure .caption, -figure figcaption { - font-size: 0.8em; - font-style: italic; - margin-top: 0; +.figure .caption, figure figcaption { + font-size: 0.8em; + font-style: italic; + margin-top: 0; } /* hidden display, but still part of document flow */ .hidden { - display: none; + display: none; } .hidden-nowidth { - width: 0; + width: 0; } .visually-hidden { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } .line-highlight { - background: #e9f5ff !important; + background: #e9f5ff !important; } -p.line-highlight, -h1.line-highlight, -h2.line-highlight, -h3.line-highlight, -h4.line-highlight { - border-radius: 4px; - margin-left: -10px; - margin-right: -10px; - padding-left: 10px; - padding-right: 10px; +p.line-highlight, h1.line-highlight, h2.line-highlight, h3.line-highlight, h4.line-highlight { + border-radius: 4px; + margin-left: -10px; + margin-right: -10px; + padding-left: 10px; + padding-right: 10px; } #MainContent { - margin: 0 auto; - padding: 10px 40px; - max-width: 840px; - color: #626262; + margin: 0 auto; + padding: 10px 40px; + max-width: 840px; + color: #626262; } /* DocFx Styles*/ -.CAUTION, -.IMPORTANT, -.INFO, -.TIP, -.NOTE, -.WARNING { - padding: 0.1px 20px; - margin: 15px 0; - border-radius: 4px; +.CAUTION, .IMPORTANT, .INFO, .TIP, .NOTE, .WARNING { + padding: 0.1px 20px; + margin: 15px 0; + border-radius: 4px; } -.CAUTION > h5, -.IMPORTANT > h5, -.INFO > h5, -.TIP > h5, -.NOTE > h5, -.WARNING > h5 { - color: inherit; +.CAUTION > h5, .IMPORTANT > h5, .INFO > h5, .TIP > h5, .NOTE > h5, .WARNING > h5 { + color: inherit; } -.CAUTION, -.IMPORTANT { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; +.CAUTION, .IMPORTANT { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; } .WARNING { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; } -.INFO, -.TIP, -.NOTE { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; +.INFO, .TIP, .NOTE { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; } -.NOTE h5:before, -.TIP h5:before { - content: '\f05a'; - font-family: FontAwesome; - padding-right: 6px; +.NOTE h5:before, .TIP h5:before { + content: "\f05a"; + font-family: FontAwesome; + padding-right: 6px; } -.WARNING h5:before, -.CAUTION h5:before { - content: '\f071'; - font-family: FontAwesome; - padding-right: 6px; +.WARNING h5:before, .CAUTION h5:before { + content: "\f071"; + font-family: FontAwesome; + padding-right: 6px; } .IMPORTANT h5:before { - content: '\f06a'; - font-family: FontAwesome; - padding-right: 6px; + content: "\f06a"; + font-family: FontAwesome; + padding-right: 6px; } xref { - display: block; + display: block; } -@media (min-width: 1080px) { - html, - body { - } + +@media(min-width: 1080px) { + html, body { + } } @media print { - pre { - white-space: pre-wrap; - word-break: normal; - word-wrap: normal; - } + pre { + white-space: pre-wrap; + word-break: normal; + word-wrap: normal; + } pre > code { white-space: pre-wrap; diff --git a/docs/content/cheat-sheets/Theme.html b/docs/content/cheat-sheets/Theme.html index b29ce91d80..04df852e9b 100644 --- a/docs/content/cheat-sheets/Theme.html +++ b/docs/content/cheat-sheets/Theme.html @@ -1,26 +1,26 @@ - - - - + + + + - - - - + + + + - - - - - {$extraHeaders} - - -
        - - {$markdownHtml} - -
        - + + + + + {$extraHeaders} + + +
        + + {$markdownHtml} + +
        + diff --git a/docs/content/cheat-sheets/emmet.md b/docs/content/cheat-sheets/emmet.md index 6f343e0442..e98e88f241 100644 --- a/docs/content/cheat-sheets/emmet.md +++ b/docs/content/cheat-sheets/emmet.md @@ -1,28 +1,22 @@ # EMMET - -_The essential toolkit for web-developers_ +*The essential toolkit for web-developers* ## Introduction - Emmet is a productivity toolkit for web developers that uses expressions to generate HTML snippets. ## Installation - Normally, installation for Emmet should be a straight-forward process from the package-manager, as most of the modern text editors support Emmet. If you have difficulty setting up emmet with your editor and wish to check Emmet is supported by your favourite editor or not, you can check it from here. [Emmet Installation instructions](https://?emmet.io/download/) ## Usage - You can use Emmet in two ways: +* Tab Expand Way: Type your emmet code and press `Tab` key +* Interactive Method: Press `alt + ctrl + Enter` and start typing your expressions. This should automatically generate HTML snippets on the fly. -- Tab Expand Way: Type your emmet code and press `Tab` key -- Interactive Method: Press `alt + ctrl + Enter` and start typing your expressions. This should automatically generate HTML snippets on the fly. - -**This cheatsheet will assume that you press `Tab` after each expressions.** +__This cheatsheet will assume that you press `Tab` after each expressions.__ ## HTML -### Generating HTML 5 DOCTYPE - +### Generating HTML 5 DOCTYPE `html:5` Will generate @@ -42,75 +36,72 @@ Will generate ``` ### Child items - Child items are created using `>` `ul>li>p` ```html
          -
        • -

          -
        • +
        • +

          +
        ``` ### Sibling Items - Sibling items are created using `+` `html>head+body` ```html - - + + + + ``` ### Multiplication - Items can be multiplied by `*` `ul>li*5` ```html
          -
        • -
        • -
        • -
        • -
        • +
        • +
        • +
        • +
        • +
        ``` ### Grouping - Items can be grouped together using `()` `table>(tr>th*5)+tr>t*5` ```html - - - - - - - - - - - - - - + + + + + + + + + + + + + +
        ``` ### Class and ID - Class and Id in Emmet can be done using `.` and `#` `div.heading` @@ -134,7 +125,6 @@ ID and Class can also be combined together ``` ### Adding Content inside tags - Contents inside tags can be added using `{}` `h1{Emmet is awesome}+h2{Every front end developers should use this}+p{This is paragraph}*2` @@ -147,7 +137,6 @@ Contents inside tags can be added using `{}` ``` ### Attributes inside HTML tags - Attributes can be added using `[]` `a[href=https://?google.com data-toggle=something target=_blank]` @@ -157,7 +146,6 @@ Attributes can be added using `[]` ``` ### Numbering - Numbering can be done using `$` You can use this inside tag or contents. @@ -197,28 +185,24 @@ To start the numbering from specific number, use this way ``` ## Tips - -- Use `:` to expand known abbreviations +* Use `:` to expand known abbreviations `input:date` - ```HTML ``` `form:post` - ```HTML
        ``` `link:css` - ```html - + ``` -- Building Navbar +* Building Navbar `.navbar>ul>li*3>a[href=#]{Item $@-}` @@ -232,11 +216,12 @@ To start the numbering from specific number, use this way
        ``` + ## CSS Emmet works surprisingly well with css as well. -- `f:l` +* `f:l` ```css float: left; @@ -244,7 +229,7 @@ float: left; You can also use any options n/r/l -- `pos:a­` +* `pos:a­` ```css position: absolute; @@ -252,7 +237,7 @@ position: absolute; Also use any options, pos:a/r/f -- `d:n/b­/f/­i/ib` +* `d:n/b­/f/­i/ib` `d:ib` @@ -260,38 +245,38 @@ Also use any options, pos:a/r/f display: inline-block; ``` -- You can use `m` for margin and `p` for padding followed by direction +* You can use `m` for margin and `p` for padding followed by direction `mr` -> `margin-right` `pr` -> `padding-right` -- `@f` will result in +* `@f` will result in ```css @font-face { - font-family: ; - src: url(); + font-family:; + src:url(); } ``` You can also use these shorthands -| Shorthand | Description | -| --------- | ----------- | -| z | z-index | -| w | width | -| h | height | -| fz | font-size | -| ff | font-family | -| fw | font-weight | -| @lh | line-height | -| maw | max-width | -| mah | max-height | -| miw | min-width | -| mih | min-width | -| ! | !important | -| @f | font-face | -| @op | opacity | -| @lh | line-height | -| @op | opacity | +| Shorthand | Description | +| ----------- | ----------- | +| z | z-index | +| w | width | +| h | height | +| fz | font-size | +| ff | font-family | +| fw | font-weight | +| @lh | line-height | +| maw | max-width | +| mah | max-height | +| miw | min-width | +| mih | min-width | +| ! | !important | +| @f | font-face | +| @op | opacity | +| @lh | line-height | +| @op | opacity | diff --git a/docs/content/cheat-sheets/react.js b/docs/content/cheat-sheets/react.js index c747986ade..819003b7e6 100644 --- a/docs/content/cheat-sheets/react.js +++ b/docs/content/cheat-sheets/react.js @@ -124,7 +124,7 @@ class Component extends React.Component { // Invoked before a mounted component receives new props. // If you need to update the state in response to prop changes (for example, to reset it), // you may compare this.props and nextProps and perform state transitions using this.setState() in this method. - componentWillReceiveProps(nextProps) { } + componentWillReceiveProps(nextProps) { } // Let React know if a component’s output is not affected by the current change in state or props. // The default behavior is to re-render on every state change, and in the vast majority of cases you should rely on the default behavior. @@ -138,7 +138,7 @@ class Component extends React.Component { // Note that you cannot call this.setState() here; nor should you do anything else // (e.g. dispatch a Redux action) that would trigger an update to a React component before componentWillUpdate() returns. // If you need to update state in response to props changes, use componentWillReceiveProps() instead. - componentWillUpdate(nextProps, nextState) { } + componentWillUpdate(nextProps, nextState) { } // Invoked immediately after updating occurs. This method is not called for the initial render. // Use this as an opportunity to operate on the DOM when the component has been updated. diff --git a/docs/content/cheat-sheets/vscode.md b/docs/content/cheat-sheets/vscode.md index 0cc9918fbe..3aa9084127 100644 --- a/docs/content/cheat-sheets/vscode.md +++ b/docs/content/cheat-sheets/vscode.md @@ -4,89 +4,89 @@ ### HTML & CSS -- [`CSScomb`](https://?marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-csscomb): Coding style formatter for CSS, Less, SCSS and Saas. +- [`CSScomb`](https://?marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-csscomb): Coding style formatter for CSS, Less, SCSS and Saas. -- [`Puglint`](https://?marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-puglint): Linter and style checker for pug. +- [`Puglint`](https://?marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-puglint): Linter and style checker for pug. -- [`Sass`](https://?marketplace.visualstudio.com/items?itemName=Syler.sass-indented): Indented Sass syntax highlighting, autocomplete & snippets. +- [`Sass`](https://?marketplace.visualstudio.com/items?itemName=Syler.sass-indented): Indented Sass syntax highlighting, autocomplete & snippets. -- [`SCSS IntelliSense`](https://?marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-scss): Advanced autocompletion and refactoring support for SCSS. +- [`SCSS IntelliSense`](https://?marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-scss): Advanced autocompletion and refactoring support for SCSS. -- [`XML Format`](https://?marketplace.visualstudio.com/items?itemName=mikeburgh.xml-format): Format XML documents. +- [`XML Format`](https://?marketplace.visualstudio.com/items?itemName=mikeburgh.xml-format): Format XML documents. ### JavaScript, Node & NPM -- [`Import Cost`](https://?marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost): This extension will display inline in the editor the size of the imported package. +- [`Import Cost`](https://?marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost): This extension will display inline in the editor the size of the imported package. -- [`ESLint`](https://?marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint): Integrates ESLint into VS Code +- [`ESLint`](https://?marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint): Integrates ESLint into VS Code -- [`NPM`](https://?marketplace.visualstudio.com/items?itemName=eg2.vscode-npm-script): NPM support for VS Code. +- [`NPM`](https://?marketplace.visualstudio.com/items?itemName=eg2.vscode-npm-script): NPM support for VS Code. -- [`NPM Intellisense`](https://?marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense): Visual Studio Code plugin that autocompletes NPM modules in import statements. +- [`NPM Intellisense`](https://?marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense): Visual Studio Code plugin that autocompletes NPM modules in import statements. -- [`Version Lens`](https://?marketplace.visualstudio.com/items?itemName=pflannery.vscode-versionlens): Shows the latest version for each package using code lens. +- [`Version Lens`](https://?marketplace.visualstudio.com/items?itemName=pflannery.vscode-versionlens): Shows the latest version for each package using code lens. -- [`Vetur`](https://?marketplace.visualstudio.com/items?itemName=octref.vetur): Vue tooling for VS Code. +- [`Vetur`](https://?marketplace.visualstudio.com/items?itemName=octref.vetur): Vue tooling for VS Code. ### PHP -- [`Better PHPUnit`](https://?marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit): A better PHPUnit test runner. +- [`Better PHPUnit`](https://?marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit): A better PHPUnit test runner. -- [`Laravel Artisan`](https://?marketplace.visualstudio.com/items?itemName=ryannaddy.laravel-artisan): Laravel Artisan commands within Visual Studio Code. +- [`Laravel Artisan`](https://?marketplace.visualstudio.com/items?itemName=ryannaddy.laravel-artisan): Laravel Artisan commands within Visual Studio Code. -- [`PHP CS Fixer`](https://?marketplace.visualstudio.com/items?itemName=junstyle.php-cs-fixer): PHP CS Fixer extension for VS Code, php formatter, php code beautify tool. +- [`PHP CS Fixer`](https://?marketplace.visualstudio.com/items?itemName=junstyle.php-cs-fixer): PHP CS Fixer extension for VS Code, php formatter, php code beautify tool. -- [`PHP Doc Comment VSCode Plugin`](https://?marketplace.visualstudio.com/items?itemName=rexshi.phpdoc-comment-vscode-plugin): Add phpdoc @param and @return tag for selected function signatures. +- [`PHP Doc Comment VSCode Plugin`](https://?marketplace.visualstudio.com/items?itemName=rexshi.phpdoc-comment-vscode-plugin): Add phpdoc @param and @return tag for selected function signatures. -- [`PHP IntelliSense`](https://?marketplace.visualstudio.com/items?itemName=felixfbecker.php-intellisense): Advanced Autocompletion and Refactoring support for PHP. +- [`PHP IntelliSense`](https://?marketplace.visualstudio.com/items?itemName=felixfbecker.php-intellisense): Advanced Autocompletion and Refactoring support for PHP. ### Git -- [`Git History`](https://?marketplace.visualstudio.com/items?itemName=donjayamanne.githistory): View git log, file history, compare branches or commits. +- [`Git History`](https://?marketplace.visualstudio.com/items?itemName=donjayamanne.githistory): View git log, file history, compare branches or commits. -- [`Gitignore`](https://?marketplace.visualstudio.com/items?itemName=codezombiech.gitignore): A extension for Visual Studio Code that assists you in working with .gitignore files. +- [`Gitignore`](https://?marketplace.visualstudio.com/items?itemName=codezombiech.gitignore): A extension for Visual Studio Code that assists you in working with .gitignore files. ### Themes -- [`Material Icon Theme`](https://?marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme): Material Design Icons for Visual Studio Code. +- [`Material Icon Theme`](https://?marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme): Material Design Icons for Visual Studio Code. -- [`Palenight Theme`](https://?marketplace.visualstudio.com/items?itemName=whizkydee.material-palenight-theme): An elegant and juicy material-like theme for Visual Studio Code. +- [`Palenight Theme`](https://?marketplace.visualstudio.com/items?itemName=whizkydee.material-palenight-theme): An elegant and juicy material-like theme for Visual Studio Code. ### Handy -- [`Better comments`](https://?marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments): Improve your code commenting by annotating with alert, informational, TODOs, and more! +- [`Better comments`](https://?marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments): Improve your code commenting by annotating with alert, informational, TODOs, and more! -- [`Debugger for Chrome`](https://?marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome): Debug your JavaScript code in the Chrome browser. +- [`Debugger for Chrome`](https://?marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome): Debug your JavaScript code in the Chrome browser. -- [`EditorConfig for VS Code`](https://?marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig): EditorConfig Support for Visual Studio Code. +- [`EditorConfig for VS Code`](https://?marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig): EditorConfig Support for Visual Studio Code. -- [`File Utils`](https://?marketplace.visualstudio.com/items?itemName=sleistner.vscode-fileutils): A convenient way of creating, duplicating, moving, renaming and deleting files and directories. +- [`File Utils`](https://?marketplace.visualstudio.com/items?itemName=sleistner.vscode-fileutils): A convenient way of creating, duplicating, moving, renaming and deleting files and directories. -- [`Final-Newline`](https://?marketplace.visualstudio.com/items?itemName=samverschueren.final-newline): Inserts a final newline when saving the document. +- [`Final-Newline`](https://?marketplace.visualstudio.com/items?itemName=samverschueren.final-newline): Inserts a final newline when saving the document. -- [`Formatting Toggle`](https://?marketplace.visualstudio.com/items?itemName=tombonnike.vscode-status-bar-format-toggle): A VS Code extension that allows you to toggle the formatter (Prettier, Beautify, …) ON and OFF with a simple click. +- [`Formatting Toggle`](https://?marketplace.visualstudio.com/items?itemName=tombonnike.vscode-status-bar-format-toggle): A VS Code extension that allows you to toggle the formatter (Prettier, Beautify, …) ON and OFF with a simple click. -- [`Open in Github/Bitbucket...`](https://?marketplace.visualstudio.com/items?itemName=ziyasal.vscode-open-in-github): Jump to a source code line in Github / Bitbucket, Gitlab, VisualStudio.com +- [`Open in Github/Bitbucket...`](https://?marketplace.visualstudio.com/items?itemName=ziyasal.vscode-open-in-github): Jump to a source code line in Github / Bitbucket, Gitlab, VisualStudio.com -- [`OpenChrome`](https://?marketplace.visualstudio.com/items?itemName=huazaierli.openchrome&ssr=false#overview): Open file with Chrome. +- [`OpenChrome`](https://?marketplace.visualstudio.com/items?itemName=huazaierli.openchrome&ssr=false#overview): Open file with Chrome. -- [`Output Colorizer`](https://?marketplace.visualstudio.com/items?itemName=IBM.output-colorizer): Syntax Highlighting for log files. +- [`Output Colorizer`](https://?marketplace.visualstudio.com/items?itemName=IBM.output-colorizer): Syntax Highlighting for log files. -- [`Prettier - Code formatter`](https://?marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): VS Code plugin for prettier/prettier. +- [`Prettier - Code formatter`](https://?marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): VS Code plugin for prettier/prettier. -- [`Project Manager`](https://?marketplace.visualstudio.com/items?itemName=alefragnani.project-manager): Easily switch between projects. +- [`Project Manager`](https://?marketplace.visualstudio.com/items?itemName=alefragnani.project-manager): Easily switch between projects. -- [`REST Client`](https://?marketplace.visualstudio.com/items?itemName=humao.rest-client): REST Client for Visual Studio Code. +- [`REST Client`](https://?marketplace.visualstudio.com/items?itemName=humao.rest-client): REST Client for Visual Studio Code. -- [`SVG Viewer`](https://?marketplace.visualstudio.com/items?itemName=cssho.vscode-svgviewer): SVG Viewer for Visual Studio Code. +- [`SVG Viewer`](https://?marketplace.visualstudio.com/items?itemName=cssho.vscode-svgviewer): SVG Viewer for Visual Studio Code. -- [`Terminal`](https://?marketplace.visualstudio.com/items?itemName=formulahendry.terminal): Terminal for Visual Studio Code. +- [`Terminal`](https://?marketplace.visualstudio.com/items?itemName=formulahendry.terminal): Terminal for Visual Studio Code. -- [`Vue Peek`](https://?marketplace.visualstudio.com/items?itemName=dariofuzinato.vue-peek): Allows peek and goto definition for Vue single-file components. +- [`Vue Peek`](https://?marketplace.visualstudio.com/items?itemName=dariofuzinato.vue-peek): Allows peek and goto definition for Vue single-file components. -- [`VS Live Share`](https://?marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare): Real-time collaborative development from the comfort of your favorite tools. +- [`VS Live Share`](https://?marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare): Real-time collaborative development from the comfort of your favorite tools. -- [`Wrap Console Log`](https://?marketplace.visualstudio.com/items?itemName=midnightsyntax.vscode-wrap-console-log): Wrap to console.log by word or selection. +- [`Wrap Console Log`](https://?marketplace.visualstudio.com/items?itemName=midnightsyntax.vscode-wrap-console-log): Wrap to console.log by word or selection. ## My Settings diff --git a/notes/BGOONZ_BLOG_2.0.wiki/Add-site-search-w-algolia.md.md b/notes/BGOONZ_BLOG_2.0.wiki/Add-site-search-w-algolia.md.md index 00bee4a488..5c1a589b45 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/Add-site-search-w-algolia.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/Add-site-search-w-algolia.md.md @@ -1,19 +1,17 @@ -Adding a Site Search to Your Stackbit Gatsby Site -================================================= +# Adding a Site Search to Your Stackbit Gatsby Site -There are a number of options for adding search to your Stackbit site built with Gatsby. There are some free options like [Lunr](https://lunrjs.com/) that are free and open source and can perform simple searches on pre-generated indexes. In this example, we'll use a service called [Algolia](https://www.algolia.com/) for the search API. Algolia is a service specifically geared towards search and thus has many more features. Algolia is a commercial offering, but it has a generous free tier. +There are a number of options for adding search to your Stackbit site built with Gatsby. There are some free options like [Lunr](https://lunrjs.com/) that are free and open source and can perform simple searches on pre-generated indexes. In this example, we'll use a service called [Algolia](https://www.algolia.com/) for the search API. Algolia is a service specifically geared towards search and thus has many more features. Algolia is a commercial offering, but it has a generous free tier. -The example below was built with Stackbit. You can see the full project code at ). +The example below was built with Stackbit. You can see the full project code at ). -[](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#setting_up_algolia)Setting Up Algolia ------------------------------------------------------------------------------------------------------------ +## [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#setting_up_algolia)Setting Up Algolia You'll need to set up your account on Algolia and set up a project. You can skip the steps about setting up indices when creating your account - we'll take care of that via code. However, be sure to grab all your API keys from the Algolia dashboard as we'll need them later. Algolia provides two projects that we'll make use of: -- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. -- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. +- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. +- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. Let's start by installing these on our Gatsby project. @@ -26,7 +24,7 @@ Copy ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#configuring_algolia_in_our_gatsby_project)Configuring Algolia in Our Gatsby Project -Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. +Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. ``` const queries = require('./src/utils/algolia'); @@ -36,7 +34,7 @@ require('dotenv').config(); Copy -Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: +Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: ``` { @@ -51,7 +49,7 @@ Neither of these files exist yet, but we'll create them in a moment. Staying in ``` -Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) +Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) ``` GATSBY_ALGOLIA_APP_ID=MY_ALGOLIA_APP_ID @@ -60,13 +58,13 @@ GATSBY_ALGOLIA_ADMIN_KEY=MY_ALGOLIA_ADMIN_KEY ``` -Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. +Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#adding_slugs_to_posts)Adding Slugs to Posts -In some cases, pages do not have a `slug` field in the frontmatter. Having slugs available in the search makes it much easier to output the results. Rather than manually add slugs to all of the content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. +In some cases, pages do not have a `slug` field in the frontmatter. Having slugs available in the search makes it much easier to output the results. Rather than manually add slugs to all of the content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. -This depends on `gatsby-source-filesystem`, so we'll need to install that first. Then, add the following code to `gatsby-node.js`: +This depends on `gatsby-source-filesystem`, so we'll need to install that first. Then, add the following code to `gatsby-node.js`: ``` const { createFilePath } = require(`gatsby-source-filesystem`); @@ -91,11 +89,11 @@ Now when we query Gastby for our pages, we'll be able to get the slug and provid ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#populating_our_indices)Populating Our Indices -Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. +Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. -Typically a Stackbit site has both pages and posts that have differing front matter properties. For this example, we'll be creating a blog search so we'll create an index that is specific to the blog called `Posts`. Feel free to customize the query to create indices for whatever content you wish to make searchable. +Typically a Stackbit site has both pages and posts that have differing front matter properties. For this example, we'll be creating a blog search so we'll create an index that is specific to the blog called `Posts`. Feel free to customize the query to create indices for whatever content you wish to make searchable. -Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. +Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. ``` const postQuery = `{ @@ -122,28 +120,27 @@ const postQuery = `{ }`; const flatten = (arr) => - arr.map(({ node: { frontmatter, ...rest } }) => ({ - ...frontmatter, - ...rest - })); + arr.map(({ node: { frontmatter, ...rest } }) => ({ + ...frontmatter, + ...rest + })); const settings = { attributesToSnippet: [`excerpt:20`] }; const queries = [ - { - query: postQuery, - transformer: ({ data }) => flatten(data.posts.edges), - indexName: `Posts`, - settings - } + { + query: postQuery, + transformer: ({ data }) => flatten(data.posts.edges), + indexName: `Posts`, + settings + } ]; module.exports = queries; - ``` Copy -With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. +With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. ![console showing indices have been populated](https://www.stackbit.com/docs/images/indices-populated-sm.png) @@ -151,12 +148,11 @@ We can now see the results when going into Algolia and browsing Indices. ![indices populated on Algolia dashboard](https://www.stackbit.com/docs/images/algolia-indices-sm.png) -[](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#creating_the_search_ui)Creating the Search UI -------------------------------------------------------------------------------------------------------------------- +## [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#creating_the_search_ui)Creating the Search UI -Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). +Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). -Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. +Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. ``` import React from 'react'; @@ -187,7 +183,7 @@ export default class Search extends React.Component { Copy -We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. +We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. ``` --- @@ -199,15 +195,15 @@ template: search Copy -From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: +From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: ![InstantSearch unstyled](https://www.stackbit.com/docs/images/basic-instantsearch.gif) ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#customizing_the_output)Customizing the Output -Let's integrate the search into our existing blog page, allowing a user to filter the results based upon their search. In doing so, we'll see how to customize the output of the InstantSearch `Hits` component. +Let's integrate the search into our existing blog page, allowing a user to filter the results based upon their search. In doing so, we'll see how to customize the output of the InstantSearch `Hits` component. -Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. +Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. ``` import React from 'react'; @@ -269,9 +265,9 @@ export default function Search({ indexName }) { Copy -As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. +As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. -Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: +Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: ``` import React from 'react'; @@ -304,11 +300,10 @@ The result works as shown below. ![finished search results](https://www.stackbit.com/docs/images/finished-search.gif) -[](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#deployment)Deployment -------------------------------------------------------------------------------------------- +## [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#deployment)Deployment -When we're ready to deploy the search, we need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. +When we're ready to deploy the search, we need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. ![Netlify environment variables](https://www.stackbit.com/docs/images/env-variables-sm.png) -We're all set! \ No newline at end of file +We're all set! diff --git a/notes/BGOONZ_BLOG_2.0.wiki/Adding-search-2-gatsby-site.md.md b/notes/BGOONZ_BLOG_2.0.wiki/Adding-search-2-gatsby-site.md.md index c45501575b..9661ddd5e8 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/Adding-search-2-gatsby-site.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/Adding-search-2-gatsby-site.md.md @@ -1,7 +1,6 @@ -Adding Search to Your Gatsby Site -================================= +# Adding Search to Your Gatsby Site -Brian Rinaldi --- July 01, 2020 +Brian Rinaldi --- July 01, 2020 Search is a common site requirement. Let's look at how to populate a search index on Algolia and implement search on a Jamstack site built with Gatsby. @@ -9,17 +8,16 @@ Search is an important part of almost any site. Once you have a lot of content, ![nope](https://www.stackbit.com/images/1593607475-nope.jpg) -In this post, we're going to explore adding search to a site built with Gatsby. We'll use a service called [Algolia](https://www.algolia.com/) for the search API. This is a commercial offering, but it has a generous free tier. The example site was built with Stackbit, though there's nothing in the code that we'll discuss that is Stackbit specific (for reference, you can see the full project code at ). Ok, enough intro...let's get coding. +In this post, we're going to explore adding search to a site built with Gatsby. We'll use a service called [Algolia](https://www.algolia.com/) for the search API. This is a commercial offering, but it has a generous free tier. The example site was built with Stackbit, though there's nothing in the code that we'll discuss that is Stackbit specific (for reference, you can see the full project code at ). Ok, enough intro...let's get coding. -Setting Up Algolia ------------------- +## Setting Up Algolia First things first, you'll need to set up your account on Algolia and set up a project. You can skip the steps about setting up indices as we'll take care of that via code. However, be sure to grab all your API keys from the Algolia dashboard as we'll need them later. Algolia provides two projects that we'll make use of: -- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. -- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. +- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. +- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. Let's start by installing these on our Gatsby project. @@ -32,7 +30,7 @@ Copy ### Configuring Algolia in Our Gatsby Project -Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. +Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. ``` const queries = require('./src/utils/algolia'); @@ -42,7 +40,7 @@ require('dotenv').config(); Copy -Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: +Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: ``` { @@ -57,7 +55,7 @@ Neither of these files exist yet, but we'll create them in a moment. Staying in ``` -Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) +Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) ``` GATSBY_ALGOLIA_APP_ID=MY_ALGOLIA_APP_ID @@ -66,13 +64,13 @@ GATSBY_ALGOLIA_ADMIN_KEY=MY_ALGOLIA_ADMIN_KEY ``` -Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. +Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. ### Adding Slugs to Posts -In some cases, as in my site generated by Stackbit, pages do not have a `slug` field in the frontmatter. Having slugs available in the search made it much easier to output the results. Rather than manually add slugs to all of my content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. +In some cases, as in my site generated by Stackbit, pages do not have a `slug` field in the frontmatter. Having slugs available in the search made it much easier to output the results. Rather than manually add slugs to all of my content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. -This depends on `gatsby-source-filesystem`, so you'll need to install that first. Then, add the following code to `gatsby-node.js`: +This depends on `gatsby-source-filesystem`, so you'll need to install that first. Then, add the following code to `gatsby-node.js`: ``` const { createFilePath } = require(`gatsby-source-filesystem`); @@ -97,11 +95,11 @@ Now when we query Gastby for our pages, we'll be able to get the slug and provid ### Populating Our Indices -Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. +Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. -In my case, my Stackbit site has both pages and posts that have differing frontmatter properties. For this example, we'll be creating a blog search so I created an index that is specific to the blog calles `Posts`. Feel free to customize your query to create indices for whatever content you wish to make searchable. +In my case, my Stackbit site has both pages and posts that have differing frontmatter properties. For this example, we'll be creating a blog search so I created an index that is specific to the blog calles `Posts`. Feel free to customize your query to create indices for whatever content you wish to make searchable. -Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. +Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. ``` const postQuery = `{ @@ -149,7 +147,7 @@ module.exports = queries; Copy -With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. +With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. ![console showing indices have been populated](https://www.stackbit.com/images/1593607471-indices-populated-sm.png) @@ -157,12 +155,11 @@ We can now see the results when going into Algolia and browsing Indices. ![indices populated on Algolia dashboard](https://www.stackbit.com/images/1593607436-algolia-indices-sm.png) -Creating the Search UI ----------------------- +## Creating the Search UI -Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). +Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). -Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. +Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. ``` import React from 'react'; @@ -193,7 +190,7 @@ export default class Search extends React.Component { Copy -We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. +We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. ``` --- @@ -205,7 +202,7 @@ template: search Copy -From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: +From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: ![](https://www.stackbit.com/images/gatsby-basic-instant-search.png) @@ -217,9 +214,9 @@ Looks great! We're done! So, ok, our boss has suggested that perhaps we're not quite done yet. She doesn't think the search results are very attractive and, worse yet, they don't even lead anywhere. She has a point. -What if, instead of a separate search page, we actually integrated the search into our existing blog page, allowing a user to filter the results based upon their search? Let's do that and, in doing so, learn how to customize the output of the InstantSearch `Hits` component. +What if, instead of a separate search page, we actually integrated the search into our existing blog page, allowing a user to filter the results based upon their search? Let's do that and, in doing so, learn how to customize the output of the InstantSearch `Hits` component. -Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. +Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. ``` import React from 'react'; @@ -281,9 +278,9 @@ export default function Search({ indexName }) { Copy -As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. +As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. -Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: +Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: ``` import React from 'react'; @@ -316,13 +313,12 @@ The result works as shown below. ![](https://www.stackbit.com/images/gatsby-finished-search.png) -Where to Go From Here ---------------------- +## Where to Go From Here -There's one more step that I should mention. We need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. +There's one more step that I should mention. We need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. ![Netlify environment variables](https://www.stackbit.com/images/1593607459-env-variables-sm.png) We're all set! -Obviously, this is just one way to implement the search. The [Gatsby documentation](https://www.gatsbyjs.org/docs/adding-search-with-algolia/) offers a similar but probably more flexible implementation. The [InstantSearch](https://www.algolia.com/doc/api-reference/widgets/instantsearch/react/) documentation also offers a ton of API and customization details with code samples to help you make the tools fit the needs of your specific site. In the end, implementing a search seems like a complicated task, but, thankfully, the tools and libraries available to us do a lot of the heavy lifting, making our jobs much easier. \ No newline at end of file +Obviously, this is just one way to implement the search. The [Gatsby documentation](https://www.gatsbyjs.org/docs/adding-search-with-algolia/) offers a similar but probably more flexible implementation. The [InstantSearch](https://www.algolia.com/doc/api-reference/widgets/instantsearch/react/) documentation also offers a ton of API and customization details with code samples to help you make the tools fit the needs of your specific site. In the end, implementing a search seems like a complicated task, but, thankfully, the tools and libraries available to us do a lot of the heavy lifting, making our jobs much easier. diff --git a/notes/BGOONZ_BLOG_2.0.wiki/BasicWebDevelopmentEnvironmentSetup.md.md b/notes/BGOONZ_BLOG_2.0.wiki/BasicWebDevelopmentEnvironmentSetup.md.md index bf21ab5a88..1f0f4a5b93 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/BasicWebDevelopmentEnvironmentSetup.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/BasicWebDevelopmentEnvironmentSetup.md.md @@ -1,9 +1,8 @@ -Basic Web Development Environment Setup -======================================= +# Basic Web Development Environment Setup Windows Subsystem for Linux (WSL) and Ubuntu ------------------------------------------------------------------------- +--- ### Basic Web Development Environment Setup diff --git a/notes/BGOONZ_BLOG_2.0.wiki/DOM-standard.md.md b/notes/BGOONZ_BLOG_2.0.wiki/DOM-standard.md.md index 8a0b0f4875..6131fcad85 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/DOM-standard.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/DOM-standard.md.md @@ -1,10 +1,11 @@ - # DOM Standard > ## Excerpt +> > This specification depends on the Infra Standard. [INFRA] --- + ## 1\. Infrastructure[](https://dom.spec.whatwg.org/#infrastructure) This specification depends on the Infra Standard. [\[INFRA\]](https://dom.spec.whatwg.org/#biblio-infra) @@ -52,11 +53,8 @@ The index of an object is its number of [preceding](https://dom.spec.whatwg.org/ The ordered set parser takes a string input and then runs these steps: 1. Let inputTokens be the result of [splitting input on ASCII whitespace](https://infra.spec.whatwg.org/#split-on-ascii-whitespace). - 2. Let tokens be a new [ordered set](https://infra.spec.whatwg.org/#ordered-set). - 3. [For each](https://infra.spec.whatwg.org/#list-iterate) token in inputTokens, [append](https://infra.spec.whatwg.org/#set-append) token to tokens. - 4. Return tokens. The ordered set serializer takes a set and returns the [concatenation](https://infra.spec.whatwg.org/#string-concatenate) of set using U+0020 SPACE. @@ -66,11 +64,8 @@ The ordered set serializer takes a set and returns the [concatenation](https://i To scope-match a selectors string selectors against a node, run these steps: 1. Let s be the result of [parse a selector](https://drafts.csswg.org/selectors-4/#parse-a-selector) selectors. [\[SELECTORS4\]](https://dom.spec.whatwg.org/#biblio-selectors4) - 2. If s is failure, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. Return the result of [match a selector against a tree](https://drafts.csswg.org/selectors-4/#match-a-selector-against-a-tree) with s and node’s [root](https://dom.spec.whatwg.org/#concept-tree-root) using [scoping root](https://drafts.csswg.org/selectors-4/#scoping-root) node. [\[SELECTORS4\]](https://dom.spec.whatwg.org/#biblio-selectors4). - Support for namespaces within selectors is not planned and will not be added. @@ -81,25 +76,15 @@ To validate a qualifiedName, [throw](https://webidl.spec.whatwg.org/#dfn-throw) To validate and extract a namespace and qualifiedName, run these steps: 1. If namespace is the empty string, then set it to null. - 2. [Validate](https://dom.spec.whatwg.org/#validate) qualifiedName. - 3. Let prefix be null. - 4. Let localName be qualifiedName. - 5. If qualifiedName contains a U+003A (:), then [strictly split](https://infra.spec.whatwg.org/#strictly-split) the string on it and set prefix to the part before and localName to the part after. - 6. If prefix is non-null and namespace is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NamespaceError](https://webidl.spec.whatwg.org/#namespaceerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 7. If prefix is "`xml`" and namespace is not the [XML namespace](https://infra.spec.whatwg.org/#xml-namespace), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NamespaceError](https://webidl.spec.whatwg.org/#namespaceerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 8. If either qualifiedName or prefix is "`xmlns`" and namespace is not the [XMLNS namespace](https://infra.spec.whatwg.org/#xmlns-namespace), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NamespaceError](https://webidl.spec.whatwg.org/#namespaceerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 9. If namespace is the [XMLNS namespace](https://infra.spec.whatwg.org/#xmlns-namespace) and neither qualifiedName nor prefix is "`xmlns`", then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NamespaceError](https://webidl.spec.whatwg.org/#namespaceerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - -10. Return namespace, prefix, and localName. - +10. Return namespace, prefix, and localName. ## 2\. Events[](https://dom.spec.whatwg.org/#events) @@ -110,8 +95,8 @@ Throughout the web platform [events](https://dom.spec.whatwg.org/#concept-event) obj.addEventListener("load", imgFetched) function imgFetched(ev) { - // great success - … +// great success +… } [Event listeners](https://dom.spec.whatwg.org/#concept-event-listener) can be removed by utilizing the `[removeEventListener()](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener)` method, passing the same arguments. @@ -132,8 +117,8 @@ obj.dispatchEvent(event) Apart from signaling, [events](https://dom.spec.whatwg.org/#concept-event) are sometimes also used to let an application control what happens next in an operation. For instance as part of form submission an [event](https://dom.spec.whatwg.org/#concept-event) whose `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value is "`submit`" is [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch). If this [event](https://dom.spec.whatwg.org/#concept-event)’s `[preventDefault()](https://dom.spec.whatwg.org/#dom-event-preventdefault)` method is invoked, form submission will be terminated. Applications who wish to make use of this functionality through [events](https://dom.spec.whatwg.org/#concept-event) [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) by the application (synthetic events) can make use of the return value of the `[dispatchEvent()](https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent)` method: if(obj.dispatchEvent(event)) { - // event was not canceled, time for some magic - … +// event was not canceled, time for some magic +… } When an [event](https://dom.spec.whatwg.org/#concept-event) is [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) to an object that [participates](https://dom.spec.whatwg.org/#concept-tree-participate) in a [tree](https://dom.spec.whatwg.org/#concept-tree) (e.g., an [element](https://dom.spec.whatwg.org/#concept-element)), it can reach [event listeners](https://dom.spec.whatwg.org/#concept-event-listener) on that object’s [ancestors](https://dom.spec.whatwg.org/#concept-tree-ancestor) too. Effectively, all the object’s [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) [event listeners](https://dom.spec.whatwg.org/#concept-event-listener) whose [capture](https://dom.spec.whatwg.org/#event-listener-capture) is true are invoked, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). And then, if [event](https://dom.spec.whatwg.org/#concept-event)’s `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` is true, all the object’s [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) [event listeners](https://dom.spec.whatwg.org/#concept-event-listener) whose [capture](https://dom.spec.whatwg.org/#event-listener-capture) is false are invoked, now in reverse [tree order](https://dom.spec.whatwg.org/#concept-tree-order). @@ -141,87 +126,88 @@ When an [event](https://dom.spec.whatwg.org/#concept-event) is [dispatched](http Let’s look at an example of how [events](https://dom.spec.whatwg.org/#concept-event) work in a [tree](https://dom.spec.whatwg.org/#concept-tree): + - - Boring example - - - Hello world! - - function test(e) { - debug(e.target, e.currentTarget, e.eventPhase) - } - document.addEventListener("hey", test, {capture: true}) - document.body.addEventListener("hey", test) - var ev \= new Event("hey", {bubbles:true}) - document.getElementById("x").dispatchEvent(ev) - - + +Boring example + + +Hello world! + +function test(e) { +debug(e.target, e.currentTarget, e.eventPhase) +} +document.addEventListener("hey", test, {capture: true}) +document.body.addEventListener("hey", test) +var ev \= new Event("hey", {bubbles:true}) +document.getElementById("x").dispatchEvent(ev) + + The `debug` function will be invoked twice. Each time the [event](https://dom.spec.whatwg.org/#concept-event)’s `[target](https://dom.spec.whatwg.org/#dom-event-target)` attribute value will be the `span` [element](https://dom.spec.whatwg.org/#concept-element). The first time `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute’s value will be the [document](https://dom.spec.whatwg.org/#concept-document), the second time the `body` [element](https://dom.spec.whatwg.org/#concept-element). `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute’s value switches from `[CAPTURING_PHASE](https://dom.spec.whatwg.org/#dom-event-capturing_phase)` to `[BUBBLING_PHASE](https://dom.spec.whatwg.org/#dom-event-bubbling_phase)`. If an [event listener](https://dom.spec.whatwg.org/#concept-event-listener) was registered for the `span` [element](https://dom.spec.whatwg.org/#concept-element), `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute’s value would have been `[AT_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target)`. ### 2.2. Interface `[Event](https://dom.spec.whatwg.org/#event)`[](https://dom.spec.whatwg.org/#interface-event) -[Event](https://developer.mozilla.org/en-US/docs/Web/API/Event "The Event interface represents an event which takes place in the DOM.") +[Event](https://developer.mozilla.org/en-US/docs/Web/API/Event 'The Event interface represents an event which takes place in the DOM.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera4+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=(Window,Worker,AudioWorklet)\] interface `Event` { - `constructor`([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-event-event-type-eventinitdict-type), optional [EventInit](https://dom.spec.whatwg.org/#dictdef-eventinit) `eventInitDict`[](https://dom.spec.whatwg.org/#dom-event-event-type-eventinitdict-eventinitdict) = {}); - - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [type](https://dom.spec.whatwg.org/#dom-event-type); - readonly attribute [EventTarget](https://dom.spec.whatwg.org/#eventtarget)? [target](https://dom.spec.whatwg.org/#dom-event-target); - readonly attribute [EventTarget](https://dom.spec.whatwg.org/#eventtarget)? [srcElement](https://dom.spec.whatwg.org/#dom-event-srcelement); // legacy - readonly attribute [EventTarget](https://dom.spec.whatwg.org/#eventtarget)? [currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget); - [sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[EventTarget](https://dom.spec.whatwg.org/#eventtarget)\> [composedPath](https://dom.spec.whatwg.org/#dom-event-composedpath)(); - - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [NONE](https://dom.spec.whatwg.org/#dom-event-none) = 0; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [CAPTURING\_PHASE](https://dom.spec.whatwg.org/#dom-event-capturing_phase) = 1; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [AT\_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target) = 2; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [BUBBLING\_PHASE](https://dom.spec.whatwg.org/#dom-event-bubbling_phase) = 3; - readonly attribute [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase); - - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [stopPropagation](https://dom.spec.whatwg.org/#dom-event-stoppropagation)(); - attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [cancelBubble](https://dom.spec.whatwg.org/#dom-event-cancelbubble); // legacy alias of .stopPropagation() - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [stopImmediatePropagation](https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation)(); - - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [cancelable](https://dom.spec.whatwg.org/#dom-event-cancelable); - attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [returnValue](https://dom.spec.whatwg.org/#dom-event-returnvalue); // legacy - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [preventDefault](https://dom.spec.whatwg.org/#dom-event-preventdefault)(); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [defaultPrevented](https://dom.spec.whatwg.org/#dom-event-defaultprevented); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [composed](https://dom.spec.whatwg.org/#dom-event-composed); - - \[[LegacyUnforgeable](https://webidl.spec.whatwg.org/#LegacyUnforgeable)\] readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted); - readonly attribute [DOMHighResTimeStamp](https://w3c.github.io/hr-time/#dom-domhighrestimestamp) [timeStamp](https://dom.spec.whatwg.org/#dom-event-timestamp); - - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [initEvent](https://dom.spec.whatwg.org/#dom-event-initevent)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-event-initevent-type-bubbles-cancelable-type), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `bubbles`[](https://dom.spec.whatwg.org/#dom-event-initevent-type-bubbles-cancelable-bubbles) = false, optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `cancelable`[](https://dom.spec.whatwg.org/#dom-event-initevent-type-bubbles-cancelable-cancelable) = false); // legacy +`constructor`([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-event-event-type-eventinitdict-type), optional [EventInit](https://dom.spec.whatwg.org/#dictdef-eventinit) `eventInitDict`[](https://dom.spec.whatwg.org/#dom-event-event-type-eventinitdict-eventinitdict) = {}); + +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [type](https://dom.spec.whatwg.org/#dom-event-type); +readonly attribute [EventTarget](https://dom.spec.whatwg.org/#eventtarget)? [target](https://dom.spec.whatwg.org/#dom-event-target); +readonly attribute [EventTarget](https://dom.spec.whatwg.org/#eventtarget)? [srcElement](https://dom.spec.whatwg.org/#dom-event-srcelement); // legacy +readonly attribute [EventTarget](https://dom.spec.whatwg.org/#eventtarget)? [currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget); +[sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[EventTarget](https://dom.spec.whatwg.org/#eventtarget)\> [composedPath](https://dom.spec.whatwg.org/#dom-event-composedpath)(); + +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [NONE](https://dom.spec.whatwg.org/#dom-event-none) = 0; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [CAPTURING_PHASE](https://dom.spec.whatwg.org/#dom-event-capturing_phase) = 1; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [AT_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target) = 2; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [BUBBLING_PHASE](https://dom.spec.whatwg.org/#dom-event-bubbling_phase) = 3; +readonly attribute [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase); + +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [stopPropagation](https://dom.spec.whatwg.org/#dom-event-stoppropagation)(); +attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [cancelBubble](https://dom.spec.whatwg.org/#dom-event-cancelbubble); // legacy alias of .stopPropagation() +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [stopImmediatePropagation](https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation)(); + +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [cancelable](https://dom.spec.whatwg.org/#dom-event-cancelable); +attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [returnValue](https://dom.spec.whatwg.org/#dom-event-returnvalue); // legacy +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [preventDefault](https://dom.spec.whatwg.org/#dom-event-preventdefault)(); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [defaultPrevented](https://dom.spec.whatwg.org/#dom-event-defaultprevented); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [composed](https://dom.spec.whatwg.org/#dom-event-composed); + +\[[LegacyUnforgeable](https://webidl.spec.whatwg.org/#LegacyUnforgeable)\] readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted); +readonly attribute [DOMHighResTimeStamp](https://w3c.github.io/hr-time/#dom-domhighrestimestamp) [timeStamp](https://dom.spec.whatwg.org/#dom-event-timestamp); + +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [initEvent](https://dom.spec.whatwg.org/#dom-event-initevent)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-event-initevent-type-bubbles-cancelable-type), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `bubbles`[](https://dom.spec.whatwg.org/#dom-event-initevent-type-bubbles-cancelable-bubbles) = false, optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `cancelable`[](https://dom.spec.whatwg.org/#dom-event-initevent-type-bubbles-cancelable-cancelable) = false); // legacy }; dictionary `EventInit` { - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `bubbles`[](https://dom.spec.whatwg.org/#dom-eventinit-bubbles) = false; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `cancelable`[](https://dom.spec.whatwg.org/#dom-eventinit-cancelable) = false; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `composed`[](https://dom.spec.whatwg.org/#dom-eventinit-composed) = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `bubbles`[](https://dom.spec.whatwg.org/#dom-eventinit-bubbles) = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `cancelable`[](https://dom.spec.whatwg.org/#dom-eventinit-cancelable) = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `composed`[](https://dom.spec.whatwg.org/#dom-eventinit-composed) = false; }; An `[Event](https://dom.spec.whatwg.org/#event)` object is simply named an event. It allows for signaling that something has occurred, e.g., that an image has completed downloading. @@ -240,25 +226,25 @@ The [touch target list](https://dom.spec.whatwg.org/#event-touch-target-list) is An [event](https://dom.spec.whatwg.org/#concept-event) has an associated path. A [path](https://dom.spec.whatwg.org/#event-path) is a [list](https://infra.spec.whatwg.org/#list) of [structs](https://infra.spec.whatwg.org/#struct). Each [struct](https://infra.spec.whatwg.org/#struct) consists of an invocation target (an `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object), an invocation-target-in-shadow-tree (a boolean), a shadow-adjusted target (a [potential event target](https://dom.spec.whatwg.org/#potential-event-target)), a (a [potential event target](https://dom.spec.whatwg.org/#potential-event-target)), a touch target list (a [list](https://infra.spec.whatwg.org/#list) of [potential event targets](https://dom.spec.whatwg.org/#potential-event-target)), a root-of-closed-tree (a boolean), and a slot-in-closed-tree (a boolean). A [path](https://dom.spec.whatwg.org/#event-path) is initially the empty list. -[Event/Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event "The Event() constructor creates a new Event object. An event created in this way is called a synthetic event, as opposed to an event fired by the browser, and can be dispatched by a script.") +[Event/Event](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event 'The Event() constructor creates a new Event object. An event created in this way is called a synthetic event, as opposed to an event fired by the browser, and can be dispatched by a script.') In all current engines. Firefox11+Safari6+Chrome15+ -___ +--- Opera11.6+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android14+iOS Safari6+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12+ -___ +--- Node.js15.0.0+ @@ -272,75 +258,75 @@ In all current engines. Firefox1.5+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ -``event . `[type](https://dom.spec.whatwg.org/#dom-event-type)` `` +`` event . `[type](https://dom.spec.whatwg.org/#dom-event-type)` `` Returns the type of event, e.g. "`click`", "`hashchange`", or "`submit`". -[Event/target](https://developer.mozilla.org/en-US/docs/Web/API/Event/target "The read-only target property of the Event interface is a reference to the object onto which the event was dispatched. It is different from Event.currentTarget when the event handler is called during the bubbling or capturing phase of the event.") +[Event/target](https://developer.mozilla.org/en-US/docs/Web/API/Event/target 'The read-only target property of the Event interface is a reference to the object onto which the event was dispatched. It is different from Event.currentTarget when the event handler is called during the bubbling or capturing phase of the event.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ -``event . `[target](https://dom.spec.whatwg.org/#dom-event-target)` `` +`` event . `[target](https://dom.spec.whatwg.org/#dom-event-target)` `` Returns the object to which event is [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) (its [target](https://dom.spec.whatwg.org/#event-target)). -[Event/currentTarget](https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget "The currentTarget read-only property of the Event interface identifies the current target for the event, as the event traverses the DOM. It always refers to the element to which the event handler has been attached, as opposed to Event.target, which identifies the element on which the event occurred and which may be its descendant.") +[Event/currentTarget](https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget 'The currentTarget read-only property of the Event interface identifies the current target for the event, as the event traverses the DOM. It always refers to the element to which the event handler has been attached, as opposed to Event.target, which identifies the element on which the event occurred and which may be its descendant.') In all current engines. Firefox1+Safari10+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari10+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ -``event . `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` `` +`` event . `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` `` Returns the object whose [event listener](https://dom.spec.whatwg.org/#concept-event-listener)’s [callback](https://dom.spec.whatwg.org/#event-listener-callback) is currently being invoked. @@ -350,71 +336,71 @@ In all current engines. Firefox52+Safari10+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android52+iOS Safari10+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ -___ +--- Node.js14.5.0+ -``event . `[composedPath()](https://dom.spec.whatwg.org/#dom-event-composedpath)` `` +`` event . `[composedPath()](https://dom.spec.whatwg.org/#dom-event-composedpath)` `` Returns the [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target) objects of event’s [path](https://dom.spec.whatwg.org/#event-path) (objects on which listeners will be invoked), except for any [nodes](https://dom.spec.whatwg.org/#concept-node) in [shadow trees](https://dom.spec.whatwg.org/#concept-shadow-tree) of which the [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root)’s [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is "`closed`" that are not reachable from event’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)`. -[Event/eventPhase](https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase "The eventPhase read-only property of the Event interface indicates which phase of the event flow is currently being evaluated.") +[Event/eventPhase](https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase 'The eventPhase read-only property of the Event interface indicates which phase of the event flow is currently being evaluated.') In all current engines. Firefox1.5+Safari4+Chrome45+ -___ +--- Opera32+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android45+Android WebView45+Samsung Internet5.0+Opera Mobile32+ -___ +--- Node.js14.5.0+ -``event . `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` `` +`` event . `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` `` Returns the [event](https://dom.spec.whatwg.org/#concept-event)’s phase, which is one of `[NONE](https://dom.spec.whatwg.org/#dom-event-none)`, `[CAPTURING_PHASE](https://dom.spec.whatwg.org/#dom-event-capturing_phase)`, `[AT_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target)`, and `[BUBBLING_PHASE](https://dom.spec.whatwg.org/#dom-event-bubbling_phase)`. -[Event/stopPropagation](https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation "The stopPropagation() method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases. It does not, however, prevent any default behaviors from occurring; for instance, clicks on links are still processed. If you want to stop those behaviors, see the preventDefault() method. It also does not prevent immediate propagation to other event-handlers. If you want to stop those, see stopImmediatePropagation().") +[Event/stopPropagation](https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation 'The stopPropagation() method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases. It does not, however, prevent any default behaviors from occurring; for instance, clicks on links are still processed. If you want to stop those behaviors, see the preventDefault() method. It also does not prevent immediate propagation to other event-handlers. If you want to stop those, see stopImmediatePropagation().') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ @@ -422,25 +408,25 @@ Node.js14.5.0+ When [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) in a [tree](https://dom.spec.whatwg.org/#concept-tree), invoking this method prevents event from reaching any objects other than the current object. -[Event/stopImmediatePropagation](https://developer.mozilla.org/en-US/docs/Web/API/Event/stopImmediatePropagation "The stopImmediatePropagation() method of the Event interface prevents other listeners of the same event from being called.") +[Event/stopImmediatePropagation](https://developer.mozilla.org/en-US/docs/Web/API/Event/stopImmediatePropagation 'The stopImmediatePropagation() method of the Event interface prevents other listeners of the same event from being called.') In all current engines. Firefox10+Safari5+Chrome6+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android10+iOS Safari5+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile14+ -___ +--- Node.js14.5.0+ @@ -448,77 +434,77 @@ Node.js14.5.0+ Invoking this method prevents event from reaching any registered [event listeners](https://dom.spec.whatwg.org/#concept-event-listener) after the current one finishes running and, when [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) in a [tree](https://dom.spec.whatwg.org/#concept-tree), also prevents event from reaching any other objects. -[Event/bubbles](https://developer.mozilla.org/en-US/docs/Web/API/Event/bubbles "The bubbles read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not.") +[Event/bubbles](https://developer.mozilla.org/en-US/docs/Web/API/Event/bubbles 'The bubbles read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not.') In all current engines. Firefox1.5+Safari4+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12.1+ -___ +--- Node.js14.5.0+ -``event . `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` `` +`` event . `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` `` Returns true or false depending on how event was initialized. True if event goes through its [target](https://dom.spec.whatwg.org/#event-target)’s [ancestors](https://dom.spec.whatwg.org/#concept-tree-ancestor) in reverse [tree order](https://dom.spec.whatwg.org/#concept-tree-order); otherwise false. -[Event/cancelable](https://developer.mozilla.org/en-US/docs/Web/API/Event/cancelable "The cancelable read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened.") +[Event/cancelable](https://developer.mozilla.org/en-US/docs/Web/API/Event/cancelable 'The cancelable read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened.') In all current engines. Firefox1.5+Safari4+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12.1+ -___ +--- Node.js14.5.0+ -``event . `[cancelable](https://dom.spec.whatwg.org/#dom-event-cancelable)` `` +`` event . `[cancelable](https://dom.spec.whatwg.org/#dom-event-cancelable)` `` Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch), can be canceled by invoking the `[preventDefault()](https://dom.spec.whatwg.org/#dom-event-preventdefault)` method. -[Event/preventDefault](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault "The preventDefault() method of the Event interface tells the user agent that if the event does not get explicitly handled, its default action should not be taken as it normally would be.") +[Event/preventDefault](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault 'The preventDefault() method of the Event interface tells the user agent that if the event does not get explicitly handled, its default action should not be taken as it normally would be.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ @@ -526,107 +512,107 @@ Node.js14.5.0+ If invoked when the `[cancelable](https://dom.spec.whatwg.org/#dom-event-cancelable)` attribute value is true, and while executing a listener for the event with `[passive](https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-passive)` set to false, signals to the operation that caused event to be [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) that it needs to be canceled. -[Event/defaultPrevented](https://developer.mozilla.org/en-US/docs/Web/API/Event/defaultPrevented "The defaultPrevented read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event.") +[Event/defaultPrevented](https://developer.mozilla.org/en-US/docs/Web/API/Event/defaultPrevented 'The defaultPrevented read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event.') In all current engines. Firefox6+Safari5+Chrome18+ -___ +--- Opera11+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android6+iOS Safari5+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile11+ -___ +--- Node.js14.5.0+ -``event . `[defaultPrevented](https://dom.spec.whatwg.org/#dom-event-defaultprevented)` `` +`` event . `[defaultPrevented](https://dom.spec.whatwg.org/#dom-event-defaultprevented)` `` Returns true if `[preventDefault()](https://dom.spec.whatwg.org/#dom-event-preventdefault)` was invoked successfully to indicate cancelation; otherwise false. -[Event/composed](https://developer.mozilla.org/en-US/docs/Web/API/Event/composed "The read-only composed property of the Event interface returns a boolean value which indicates whether or not the event will propagate across the shadow DOM boundary into the standard DOM.") +[Event/composed](https://developer.mozilla.org/en-US/docs/Web/API/Event/composed 'The read-only composed property of the Event interface returns a boolean value which indicates whether or not the event will propagate across the shadow DOM boundary into the standard DOM.') In all current engines. Firefox52+Safari10+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android52+iOS Safari10+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ -___ +--- Node.js14.5.0+ -``event . `[composed](https://dom.spec.whatwg.org/#dom-event-composed)` `` +`` event . `[composed](https://dom.spec.whatwg.org/#dom-event-composed)` `` Returns true or false depending on how event was initialized. True if event invokes listeners past a `[ShadowRoot](https://dom.spec.whatwg.org/#shadowroot)` [node](https://dom.spec.whatwg.org/#concept-node) that is the [root](https://dom.spec.whatwg.org/#concept-tree-root) of its [target](https://dom.spec.whatwg.org/#event-target); otherwise false. -[Event/isTrusted](https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted "The isTrusted read-only property of the Event interface is a boolean value that is true when the event was generated by a user action, and false when the event was created or modified by a script or dispatched via EventTarget.dispatchEvent().") +[Event/isTrusted](https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted 'The isTrusted read-only property of the Event interface is a boolean value that is true when the event was generated by a user action, and false when the event was created or modified by a script or dispatched via EventTarget.dispatchEvent().') In all current engines. Firefox1.5+Safari10+Chrome46+ -___ +--- Opera33+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari10+Chrome for Android46+Android WebView46+Samsung Internet5.0+Opera Mobile33+ -___ +--- Node.js14.5.0+ -``event . `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` `` +`` event . `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` `` Returns true if event was [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) by the user agent, and false otherwise. -[Event/timeStamp](https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp "The timeStamp read-only property of the Event interface returns the time (in milliseconds) at which the event was created.") +[Event/timeStamp](https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp 'The timeStamp read-only property of the Event interface returns the time (in milliseconds) at which the event was created.') In all current engines. Firefox1.5+Safari4+Chrome49+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android49+Android WebView49+Samsung Internet5.0+Opera Mobile36+ -___ +--- Node.js14.5.0+ -``event . `[timeStamp](https://dom.spec.whatwg.org/#dom-event-timestamp)` `` +`` event . `[timeStamp](https://dom.spec.whatwg.org/#dom-event-timestamp)` `` Returns the event’s timestamp as the number of milliseconds measured relative to the [time origin](https://w3c.github.io/hr-time/#dfn-time-origin). @@ -641,69 +627,49 @@ The `currentTarget` attribute must return the value it was initialized to. When The `composedPath()` method steps are: 1. Let composedPath be an empty [list](https://infra.spec.whatwg.org/#list). - 2. Let path be [this](https://webidl.spec.whatwg.org/#this)’s [path](https://dom.spec.whatwg.org/#event-path). - 3. If path [is empty](https://infra.spec.whatwg.org/#list-is-empty), then return composedPath. - 4. Let currentTarget be [this](https://webidl.spec.whatwg.org/#this)’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute value. - 5. [Append](https://infra.spec.whatwg.org/#list-append) currentTarget to composedPath. - 6. Let currentTargetIndex be 0. - 7. Let currentTargetHiddenSubtreeLevel be 0. - 8. Let index be path’s [size](https://infra.spec.whatwg.org/#list-size) − 1. - 9. While index is greater than or equal to 0: - + 1. If path\[index\]'s [root-of-closed-tree](https://dom.spec.whatwg.org/#event-path-root-of-closed-tree) is true, then increase currentTargetHiddenSubtreeLevel by 1. - 2. If path\[index\]'s [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target) is currentTarget, then set currentTargetIndex to index and [break](https://infra.spec.whatwg.org/#iteration-break). - 3. If path\[index\]'s [slot-in-closed-tree](https://dom.spec.whatwg.org/#event-path-slot-in-closed-tree) is true, then decrease currentTargetHiddenSubtreeLevel by 1. - - 4. Decrease index by 1. - -10. Let currentHiddenLevel and maxHiddenLevel be currentTargetHiddenSubtreeLevel. - -11. Set index to currentTargetIndex − 1. - -12. While index is greater than or equal to 0: - - 1. If path\[index\]'s [root-of-closed-tree](https://dom.spec.whatwg.org/#event-path-root-of-closed-tree) is true, then increase currentHiddenLevel by 1. - - 2. If currentHiddenLevel is less than or equal to maxHiddenLevel, then [prepend](https://infra.spec.whatwg.org/#list-prepend) path\[index\]'s [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target) to composedPath. - - 3. If path\[index\]'s [slot-in-closed-tree](https://dom.spec.whatwg.org/#event-path-slot-in-closed-tree) is true, then: - - 1. Decrease currentHiddenLevel by 1. - - 2. If currentHiddenLevel is less than maxHiddenLevel, then set maxHiddenLevel to currentHiddenLevel. - 4. Decrease index by 1. - -13. Set currentHiddenLevel and maxHiddenLevel to currentTargetHiddenSubtreeLevel. - -14. Set index to currentTargetIndex + 1. - -15. While index is less than path’s [size](https://infra.spec.whatwg.org/#list-size): - - 1. If path\[index\]'s [slot-in-closed-tree](https://dom.spec.whatwg.org/#event-path-slot-in-closed-tree) is true, then increase currentHiddenLevel by 1. - - 2. If currentHiddenLevel is less than or equal to maxHiddenLevel, then [append](https://infra.spec.whatwg.org/#list-append) path\[index\]'s [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target) to composedPath. - - 3. If path\[index\]'s [root-of-closed-tree](https://dom.spec.whatwg.org/#event-path-root-of-closed-tree) is true, then: - - 1. Decrease currentHiddenLevel by 1. - - 2. If currentHiddenLevel is less than maxHiddenLevel, then set maxHiddenLevel to currentHiddenLevel. - - 4. Increase index by 1. - -16. Return composedPath. - + +10. Let currentHiddenLevel and maxHiddenLevel be currentTargetHiddenSubtreeLevel. + +11. Set index to currentTargetIndex − 1. + +12. While index is greater than or equal to 0: + +13. If path\[index\]'s [root-of-closed-tree](https://dom.spec.whatwg.org/#event-path-root-of-closed-tree) is true, then increase currentHiddenLevel by 1. +14. If currentHiddenLevel is less than or equal to maxHiddenLevel, then [prepend](https://infra.spec.whatwg.org/#list-prepend) path\[index\]'s [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target) to composedPath. +15. If path\[index\]'s [slot-in-closed-tree](https://dom.spec.whatwg.org/#event-path-slot-in-closed-tree) is true, then: + + 1. Decrease currentHiddenLevel by 1. + 2. If currentHiddenLevel is less than maxHiddenLevel, then set maxHiddenLevel to currentHiddenLevel. + +16. Decrease index by 1. +17. Set currentHiddenLevel and maxHiddenLevel to currentTargetHiddenSubtreeLevel. + +18. Set index to currentTargetIndex + 1. + +19. While index is less than path’s [size](https://infra.spec.whatwg.org/#list-size): + +20. If path\[index\]'s [slot-in-closed-tree](https://dom.spec.whatwg.org/#event-path-slot-in-closed-tree) is true, then increase currentHiddenLevel by 1. +21. If currentHiddenLevel is less than or equal to maxHiddenLevel, then [append](https://infra.spec.whatwg.org/#list-append) path\[index\]'s [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target) to composedPath. +22. If path\[index\]'s [root-of-closed-tree](https://dom.spec.whatwg.org/#event-path-root-of-closed-tree) is true, then: + + 1. Decrease currentHiddenLevel by 1. + 2. If currentHiddenLevel is less than maxHiddenLevel, then set maxHiddenLevel to currentHiddenLevel. + +23. Increase index by 1. +24. Return composedPath. The `eventPhase` attribute must return the value it was initialized to, which must be one of the following: @@ -725,7 +691,7 @@ When an [event](https://dom.spec.whatwg.org/#concept-event) is [dispatched](http Initially the attribute must be initialized to `[NONE](https://dom.spec.whatwg.org/#dom-event-none)`. -___ +--- Each [event](https://dom.spec.whatwg.org/#concept-event) has the following associated flags that are all initially unset: @@ -741,25 +707,25 @@ The `stopPropagation()` method steps are to set [this](https://webidl.spec.whatw The `cancelBubble` getter steps are to return true if [this](https://webidl.spec.whatwg.org/#this)’s [stop propagation flag](https://dom.spec.whatwg.org/#stop-propagation-flag) is set; otherwise false. -[Event/cancelBubble](https://developer.mozilla.org/en-US/docs/Web/API/Event/cancelBubble "The cancelBubble property of the Event interface is deprecated. Use Event.stopPropagation() instead. Setting its value to true before returning from an event handler prevents propagation of the event. In later implementations, setting this to false does nothing. See Browser compatibility for details.") +[Event/cancelBubble](https://developer.mozilla.org/en-US/docs/Web/API/Event/cancelBubble 'The cancelBubble property of the Event interface is deprecated. Use Event.stopPropagation() instead. Setting its value to true before returning from an event handler prevents propagation of the event. In later implementations, setting this to false does nothing. See Browser compatibility for details.') In all current engines. Firefox53+Safari4+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android53+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12.1+ -___ +--- Node.js14.5.0+ @@ -783,7 +749,7 @@ The `defaultPrevented` getter steps are to return true if [this](https://webidl. The `composed` getter steps are to return true if [this](https://webidl.spec.whatwg.org/#this)’s [composed flag](https://dom.spec.whatwg.org/#composed-flag) is set; otherwise false. -___ +--- The `isTrusted` attribute must return the value it was initialized to. When an [event](https://dom.spec.whatwg.org/#concept-event) is created the attribute must be initialized to false. @@ -791,38 +757,29 @@ The `isTrusted` attribute must return the value it was initialized to. When an [ The `timeStamp` attribute must return the value it was initialized to. -___ +--- To initialize an event, with type, bubbles, and cancelable, run these steps: 1. Set event’s [initialized flag](https://dom.spec.whatwg.org/#initialized-flag). - 2. Unset event’s [stop propagation flag](https://dom.spec.whatwg.org/#stop-propagation-flag), [stop immediate propagation flag](https://dom.spec.whatwg.org/#stop-immediate-propagation-flag), and [canceled flag](https://dom.spec.whatwg.org/#canceled-flag). - 3. Set event’s `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` attribute to false. - 4. Set event’s [target](https://dom.spec.whatwg.org/#event-target) to null. - 5. Set event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute to type. - 6. Set event’s `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` attribute to bubbles. - 7. Set event’s `[cancelable](https://dom.spec.whatwg.org/#dom-event-cancelable)` attribute to cancelable. - The `initEvent(type, bubbles, cancelable)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this)’s [dispatch flag](https://dom.spec.whatwg.org/#dispatch-flag) is set, then return. - 2. [Initialize](https://dom.spec.whatwg.org/#concept-event-initialize) [this](https://webidl.spec.whatwg.org/#this) with type, bubbles, and cancelable. - `[initEvent()](https://dom.spec.whatwg.org/#dom-event-initevent)` is redundant with [event](https://dom.spec.whatwg.org/#concept-event) constructors and incapable of setting `[composed](https://dom.spec.whatwg.org/#dom-event-composed)`. It has to be supported for legacy content. ### 2.3. Legacy extensions to the `[Window](https://html.spec.whatwg.org/multipage/window-object.html#window)` interface[](https://dom.spec.whatwg.org/#interface-window-extensions) partial interface [Window](https://html.spec.whatwg.org/multipage/window-object.html#window) { - \[[Replaceable](https://webidl.spec.whatwg.org/#Replaceable)\] readonly attribute ([Event](https://dom.spec.whatwg.org/#event) or [undefined](https://webidl.spec.whatwg.org/#idl-undefined)) [event](https://dom.spec.whatwg.org/#dom-window-event); // legacy +\[[Replaceable](https://webidl.spec.whatwg.org/#Replaceable)\] readonly attribute ([Event](https://dom.spec.whatwg.org/#event) or [undefined](https://webidl.spec.whatwg.org/#idl-undefined)) [event](https://dom.spec.whatwg.org/#dom-window-event); // legacy }; Each `[Window](https://html.spec.whatwg.org/multipage/window-object.html#window)` object has an associated current event (undefined or an `[Event](https://dom.spec.whatwg.org/#event)` object). Unless stated otherwise it is undefined. @@ -833,54 +790,54 @@ Web developers are strongly encouraged to instead rely on the `[Event](https://d ### 2.4. Interface `[CustomEvent](https://dom.spec.whatwg.org/#customevent)`[](https://dom.spec.whatwg.org/#interface-customevent) -[CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent "The CustomEvent interface represents events initialized by an application for any purpose.") +[CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent 'The CustomEvent interface represents events initialized by an application for any purpose.') In all current engines. Firefox6+Safari5+Chrome15+ -___ +--- Opera11+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android6+iOS Safari5+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile11+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=(Window,Worker)\] interface `CustomEvent` : [Event](https://dom.spec.whatwg.org/#event) { - `constructor`([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-customevent-customevent-type-eventinitdict-type), optional [CustomEventInit](https://dom.spec.whatwg.org/#dictdef-customeventinit) `eventInitDict`[](https://dom.spec.whatwg.org/#dom-customevent-customevent-type-eventinitdict-eventinitdict) = {}); +`constructor`([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-customevent-customevent-type-eventinitdict-type), optional [CustomEventInit](https://dom.spec.whatwg.org/#dictdef-customeventinit) `eventInitDict`[](https://dom.spec.whatwg.org/#dom-customevent-customevent-type-eventinitdict-eventinitdict) = {}); - readonly attribute [any](https://webidl.spec.whatwg.org/#idl-any) [detail](https://dom.spec.whatwg.org/#dom-customevent-detail); +readonly attribute [any](https://webidl.spec.whatwg.org/#idl-any) [detail](https://dom.spec.whatwg.org/#dom-customevent-detail); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [initCustomEvent](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-type), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `bubbles`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-bubbles) = false, optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `cancelable`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-cancelable) = false, optional [any](https://webidl.spec.whatwg.org/#idl-any) `detail`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-detail) = null); // legacy +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [initCustomEvent](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-type), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `bubbles`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-bubbles) = false, optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `cancelable`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-cancelable) = false, optional [any](https://webidl.spec.whatwg.org/#idl-any) `detail`[](https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-detail) = null); // legacy }; dictionary `CustomEventInit` : [EventInit](https://dom.spec.whatwg.org/#dictdef-eventinit) { - [any](https://webidl.spec.whatwg.org/#idl-any) `detail`[](https://dom.spec.whatwg.org/#dom-customeventinit-detail) = null; +[any](https://webidl.spec.whatwg.org/#idl-any) `detail`[](https://dom.spec.whatwg.org/#dom-customeventinit-detail) = null; }; [Events](https://dom.spec.whatwg.org/#concept-event) using the `[CustomEvent](https://dom.spec.whatwg.org/#customevent)` interface can be used to carry custom data. -[CustomEvent/CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent "The CustomEvent() constructor creates a new CustomEvent.") +[CustomEvent/CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent 'The CustomEvent() constructor creates a new CustomEvent.') In all current engines. Firefox11+Safari6+Chrome15+ -___ +--- Opera11.6+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android14+iOS Safari6+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12+ @@ -888,25 +845,25 @@ Firefox for Android14+iOS Safari6+Chrome for Android18+Android WebView37+Samsung Works analogously to the constructor for `[Event](https://dom.spec.whatwg.org/#event)` except that the eventInitDict argument now allows for setting the `[detail](https://dom.spec.whatwg.org/#dom-customevent-detail)` attribute too. -[CustomEvent/detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail "The detail readonly property of the CustomEvent interface returns any data passed when initializing the event.") +[CustomEvent/detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail 'The detail readonly property of the CustomEvent interface returns any data passed when initializing the event.') In all current engines. Firefox11+Safari5+Chrome15+ -___ +--- Opera11.6+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android14+iOS Safari5+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12+ -``event . `[detail](https://dom.spec.whatwg.org/#dom-customevent-detail)` `` +`` event . `[detail](https://dom.spec.whatwg.org/#dom-customevent-detail)` `` Returns any custom data event was created with. Typically used for synthetic events. @@ -915,11 +872,8 @@ The `detail` attribute must return the value it was initialized to. The `initCustomEvent(type, bubbles, cancelable, detail)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this)’s [dispatch flag](https://dom.spec.whatwg.org/#dispatch-flag) is set, then return. - 2. [Initialize](https://dom.spec.whatwg.org/#concept-event-initialize) [this](https://webidl.spec.whatwg.org/#this) with type, bubbles, and cancelable. - 3. Set [this](https://webidl.spec.whatwg.org/#this)’s `[detail](https://dom.spec.whatwg.org/#dom-customevent-detail)` attribute to detail. - ### 2.5. Constructing events[](https://dom.spec.whatwg.org/#constructing-events) @@ -930,47 +884,36 @@ This construct can be used by `[Event](https://dom.spec.whatwg.org/#event)` subc When a constructor[](https://dom.spec.whatwg.org/#concept-event-constructor) of the `[Event](https://dom.spec.whatwg.org/#event)` interface, or of an interface that inherits from the `[Event](https://dom.spec.whatwg.org/#event)` interface, is invoked, these steps must be run, given the arguments type and eventInitDict: 1. Let event be the result of running the [inner event creation steps](https://dom.spec.whatwg.org/#inner-event-creation-steps) with this interface, null, now, and eventInitDict. - 2. Initialize event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute to type. - 3. Return event. - To create an event using eventInterface, which must be either `[Event](https://dom.spec.whatwg.org/#event)` or an interface that inherits from it, and optionally given a [Realm](https://tc39.es/ecma262/#realm) realm, run these steps: 1. If realm is not given, then set it to null. - 2. Let dictionary be the result of [converting](https://webidl.spec.whatwg.org/#dfn-convert-ecmascript-to-idl-value) the JavaScript value undefined to the dictionary type accepted by eventInterface’s constructor. (This dictionary type will either be `[EventInit](https://dom.spec.whatwg.org/#dictdef-eventinit)` or a dictionary that inherits from it.) - + This does not work if members are required; see [whatwg/dom#600](https://github.com/whatwg/dom/issues/600). - + 3. Let event be the result of running the [inner event creation steps](https://dom.spec.whatwg.org/#inner-event-creation-steps) with eventInterface, realm, the time of the occurrence that the event is signaling, and dictionary. - + [](https://dom.spec.whatwg.org/#example-timestamp-initialization)In macOS the time of the occurrence for input actions is available via the `timestamp` property of `NSEvent` objects. - + 4. Initialize event’s `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` attribute to true. - 5. Return event. - [Create an event](https://dom.spec.whatwg.org/#concept-event-create) is meant to be used by other specifications which need to separately [create](https://dom.spec.whatwg.org/#concept-event-create) and [dispatch](https://dom.spec.whatwg.org/#concept-event-dispatch) events, instead of simply [firing](https://dom.spec.whatwg.org/#concept-event-fire) them. It ensures the event’s attributes are initialized to the correct defaults. The inner event creation steps, given an interface, realm, time, and dictionary, are as follows: 1. Let event be the result of creating a new object using eventInterface. If realm is non-null, then use that Realm; otherwise, use the default behavior defined in Web IDL. - + As of the time of this writing Web IDL does not yet define any default behavior; see [whatwg/webidl#135](https://github.com/whatwg/webidl/issues/135). - + 2. Set event’s [initialized flag](https://dom.spec.whatwg.org/#initialized-flag). - 3. Initialize event’s `[timeStamp](https://dom.spec.whatwg.org/#dom-event-timestamp)` attribute to the [relative high resolution coarse time](https://w3c.github.io/hr-time/#dfn-relative-high-resolution-coarse-time) given time and event’s [relevant global object](https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-global). - 4. [For each](https://infra.spec.whatwg.org/#map-iterate) member → value in dictionary, if event has an attribute whose [identifier](https://webidl.spec.whatwg.org/#dfn-identifier) is member, then initialize that attribute to value. - 5. Run the [event constructing steps](https://dom.spec.whatwg.org/#concept-event-constructor-ext) with event and dictionary. - 6. Return event. - ### 2.6. Defining event interfaces[](https://dom.spec.whatwg.org/#defining-event-interfaces) @@ -980,85 +923,85 @@ The `[CustomEvent](https://dom.spec.whatwg.org/#customevent)` interface can be u ### 2.7. Interface `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)`[](https://dom.spec.whatwg.org/#interface-eventtarget) -[EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget "The EventTarget interface is implemented by objects that can receive events and may have listeners for them. In other words, any target of events implements the three methods associated with this interface.") +[EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget 'The EventTarget interface is implemented by objects that can receive events and may have listeners for them. In other words, any target of events implements the three methods associated with this interface.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ -[EventListener/handleEvent](https://developer.mozilla.org/en-US/docs/Web/API/EventListener/handleEvent "The EventListener method handleEvent() method is called by the user agent when an event is sent to the EventListener, in order to handle events that occur on an observed EventTarget.") +[EventListener/handleEvent](https://developer.mozilla.org/en-US/docs/Web/API/EventListener/handleEvent 'The EventListener method handleEvent() method is called by the user agent when an event is sent to the EventListener, in order to handle events that occur on an observed EventTarget.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -[EventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventListener "The EventListener interface represents an object that can handle an event dispatched by an EventTarget object.") +[EventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventListener 'The EventListener interface represents an object that can handle an event dispatched by an EventTarget object.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=(Window,Worker,AudioWorklet)\] interface `EventTarget` { - [constructor](https://dom.spec.whatwg.org/#dom-eventtarget-eventtarget)(); +[constructor](https://dom.spec.whatwg.org/#dom-eventtarget-eventtarget)(); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [addEventListener](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener-type-callback-options-type), [EventListener](https://dom.spec.whatwg.org/#callbackdef-eventlistener)? `callback`[](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener-type-callback-options-callback), optional ([AddEventListenerOptions](https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions) or [boolean](https://webidl.spec.whatwg.org/#idl-boolean)) `options`[](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener-type-callback-options-options) = {}); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [removeEventListener](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener-type-callback-options-type), [EventListener](https://dom.spec.whatwg.org/#callbackdef-eventlistener)? `callback`[](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener-type-callback-options-callback), optional ([EventListenerOptions](https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions) or [boolean](https://webidl.spec.whatwg.org/#idl-boolean)) `options`[](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener-type-callback-options-options) = {}); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [dispatchEvent](https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent)([Event](https://dom.spec.whatwg.org/#event) `event`[](https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent-event-event)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [addEventListener](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener-type-callback-options-type), [EventListener](https://dom.spec.whatwg.org/#callbackdef-eventlistener)? `callback`[](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener-type-callback-options-callback), optional ([AddEventListenerOptions](https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions) or [boolean](https://webidl.spec.whatwg.org/#idl-boolean)) `options`[](https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener-type-callback-options-options) = {}); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [removeEventListener](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `type`[](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener-type-callback-options-type), [EventListener](https://dom.spec.whatwg.org/#callbackdef-eventlistener)? `callback`[](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener-type-callback-options-callback), optional ([EventListenerOptions](https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions) or [boolean](https://webidl.spec.whatwg.org/#idl-boolean)) `options`[](https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener-type-callback-options-options) = {}); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [dispatchEvent](https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent)([Event](https://dom.spec.whatwg.org/#event) `event`[](https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent-event-event)); }; callback interface `EventListener` { - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) `handleEvent`[](https://dom.spec.whatwg.org/#dom-eventlistener-handleevent)([Event](https://dom.spec.whatwg.org/#event) `event`[](https://dom.spec.whatwg.org/#dom-eventlistener-handleevent-event-event)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) `handleEvent`[](https://dom.spec.whatwg.org/#dom-eventlistener-handleevent)([Event](https://dom.spec.whatwg.org/#event) `event`[](https://dom.spec.whatwg.org/#dom-eventlistener-handleevent-event-event)); }; dictionary `EventListenerOptions` { - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `capture` = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `capture` = false; }; dictionary `AddEventListenerOptions` : [EventListenerOptions](https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions) { - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `passive` = false; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `once` = false; - [AbortSignal](https://dom.spec.whatwg.org/#abortsignal) `signal`; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `passive` = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `once` = false; +[AbortSignal](https://dom.spec.whatwg.org/#abortsignal) `signal`; }; An `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object represents a target to which an [event](https://dom.spec.whatwg.org/#concept-event) can be [dispatched](https://dom.spec.whatwg.org/#concept-event-dispatch) when something has occurred. @@ -1089,25 +1032,25 @@ Each `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object that has [ These algorithms only exist for checkbox and radio `[input](https://html.spec.whatwg.org/multipage/input.html#the-input-element)` elements and are not to be used for anything else. [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) -[EventTarget/EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/EventTarget "The EventTarget() constructor creates a new EventTarget object instance.") +[EventTarget/EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/EventTarget 'The EventTarget() constructor creates a new EventTarget object instance.') In all current engines. Firefox59+Safari14+Chrome64+ -___ +--- Opera51+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android59+iOS Safari14+Chrome for Android64+Android WebView64+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ @@ -1115,25 +1058,25 @@ Node.js15.0.0+ Creates a new `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object, which can be used by developers to [dispatch](https://dom.spec.whatwg.org/#concept-event-dispatch) and listen for [events](https://dom.spec.whatwg.org/#concept-event). -[EventTarget/addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener "The addEventListener() method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.") +[EventTarget/addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener 'The addEventListener() method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ @@ -1153,25 +1096,25 @@ If an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` is passed for op The [event listener](https://dom.spec.whatwg.org/#concept-event-listener) is appended to target’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list) and is not appended if it has the same [type](https://dom.spec.whatwg.org/#event-listener-type), [callback](https://dom.spec.whatwg.org/#event-listener-callback), and [capture](https://dom.spec.whatwg.org/#event-listener-capture). -[EventTarget/removeEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener "The removeEventListener() method of the EventTarget interface removes from the target an event listener previously registered with EventTarget.addEventListener(). The event listener to be removed is identified using a combination of the event type, the event listener function itself, and various optional options that may affect the matching process; see Matching event listeners for removal.") +[EventTarget/removeEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener 'The removeEventListener() method of the EventTarget interface removes from the target an event listener previously registered with EventTarget.addEventListener(). The event listener to be removed is identified using a combination of the event type, the event listener function itself, and various optional options that may affect the matching process; see Matching event listeners for removal.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ @@ -1179,25 +1122,25 @@ Node.js14.5.0+ Removes the [event listener](https://dom.spec.whatwg.org/#concept-event-listener) in target’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list) with the same type, callback, and options. -[EventTarget/dispatchEvent](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent "The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected EventListeners in the appropriate order. The normal event processing rules (including the capturing and optional bubbling phase) also apply to events dispatched manually with dispatchEvent().") +[EventTarget/dispatchEvent](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent 'The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected EventListeners in the appropriate order. The normal event processing rules (including the capturing and optional bubbling phase) also apply to events dispatched manually with dispatchEvent().') In all current engines. Firefox2+Safari3.1+Chrome4+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView4+Samsung Internet1.0+Opera Mobile10.1+ -___ +--- Node.js14.5.0+ @@ -1208,26 +1151,19 @@ Node.js14.5.0+ To flatten options, run these steps: 1. If options is a boolean, then return options. - 2. Return options\["`[capture](https://dom.spec.whatwg.org/#dom-eventlisteneroptions-capture)`"\]. - To flatten more options, run these steps: 1. Let capture be the result of [flattening](https://dom.spec.whatwg.org/#concept-flatten-options) options. - 2. Let once and passive be false. - 3. Let signal be null. - 4. If options is a [dictionary](https://webidl.spec.whatwg.org/#dfn-dictionary), then: - + 1. Set passive to options\["`[passive](https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-passive)`"\] and once to options\["`[once](https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-once)`"\]. - 2. If options\["`[signal](https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-signal)`"\] [exists](https://infra.spec.whatwg.org/#map-exists), then set signal to options\["`[signal](https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-signal)`"\]. - + 5. Return capture, passive, once, and signal. - The `new EventTarget()` constructor steps are to do nothing. @@ -1238,15 +1174,11 @@ In the future we could allow custom [get the parent](https://dom.spec.whatwg.org To add an event listener, given an `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object eventTarget and an [event listener](https://dom.spec.whatwg.org/#concept-event-listener) listener, run these steps: 1. If eventTarget is a `[ServiceWorkerGlobalScope](https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope)` object, its [service worker](https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope-service-worker)’s [script resource](https://w3c.github.io/ServiceWorker/#dfn-script-resource)’s [has ever been evaluated flag](https://w3c.github.io/ServiceWorker/#dfn-has-ever-been-evaluated-flag) is set, and listener’s [type](https://dom.spec.whatwg.org/#event-listener-type) matches the `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value of any of the [service worker events](https://w3c.github.io/ServiceWorker/#dfn-service-worker-events), then [report a warning to the console](https://console.spec.whatwg.org/#report-a-warning-to-the-console) that this might not give the expected results. [\[SERVICE-WORKERS\]](https://dom.spec.whatwg.org/#biblio-service-workers) - 2. If listener’s [signal](https://dom.spec.whatwg.org/#event-listener-signal) is not null and is [aborted](https://dom.spec.whatwg.org/#abortsignal-aborted), then return. - 3. If listener’s [callback](https://dom.spec.whatwg.org/#event-listener-callback) is null, then return. - 4. If eventTarget’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list) does not [contain](https://infra.spec.whatwg.org/#list-contain) an [event listener](https://dom.spec.whatwg.org/#concept-event-listener) whose [type](https://dom.spec.whatwg.org/#event-listener-type) is listener’s [type](https://dom.spec.whatwg.org/#event-listener-type), [callback](https://dom.spec.whatwg.org/#event-listener-callback) is listener’s [callback](https://dom.spec.whatwg.org/#event-listener-callback), and [capture](https://dom.spec.whatwg.org/#event-listener-capture) is listener’s [capture](https://dom.spec.whatwg.org/#event-listener-capture), then [append](https://infra.spec.whatwg.org/#list-append) listener to eventTarget’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list). - 5. If listener’s [signal](https://dom.spec.whatwg.org/#event-listener-signal) is not null, then [add the following](https://dom.spec.whatwg.org/#abortsignal-add) abort steps to it: - + 1. [Remove an event listener](https://dom.spec.whatwg.org/#remove-an-event-listener) with eventTarget and listener. The [add an event listener](https://dom.spec.whatwg.org/#add-an-event-listener) concept exists to ensure [event handlers](https://html.spec.whatwg.org/multipage/webappapis.html#event-handlers) use the same code path. [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) @@ -1254,16 +1186,12 @@ The [add an event listener](https://dom.spec.whatwg.org/#add-an-event-listener) The `addEventListener(type, callback, options)` method steps are: 1. Let capture, passive, once, and signal be the result of [flattening more](https://dom.spec.whatwg.org/#event-flatten-more) options. - 2. [Add an event listener](https://dom.spec.whatwg.org/#add-an-event-listener) with [this](https://webidl.spec.whatwg.org/#this) and an [event listener](https://dom.spec.whatwg.org/#concept-event-listener) whose [type](https://dom.spec.whatwg.org/#event-listener-type) is type, [callback](https://dom.spec.whatwg.org/#event-listener-callback) is callback, [capture](https://dom.spec.whatwg.org/#event-listener-capture) is capture, [passive](https://dom.spec.whatwg.org/#event-listener-passive) is passive, [once](https://dom.spec.whatwg.org/#event-listener-once) is once, and [signal](https://dom.spec.whatwg.org/#event-listener-signal) is signal. - To remove an event listener, given an `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object eventTarget and an [event listener](https://dom.spec.whatwg.org/#concept-event-listener) listener, run these steps: 1. If eventTarget is a `[ServiceWorkerGlobalScope](https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope)` object and its [service worker](https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope-service-worker)’s [set of event types to handle](https://w3c.github.io/ServiceWorker/#dfn-set-of-event-types-to-handle) contains type, then [report a warning to the console](https://console.spec.whatwg.org/#report-a-warning-to-the-console) that this might not give the expected results. [\[SERVICE-WORKERS\]](https://dom.spec.whatwg.org/#biblio-service-workers) - 2. Set listener’s [removed](https://dom.spec.whatwg.org/#event-listener-removed) to true and [remove](https://infra.spec.whatwg.org/#list-remove) listener from eventTarget’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list). - HTML needs this to define event handlers. [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) @@ -1274,20 +1202,15 @@ HTML needs this to define `document.open()`. [\[HTML\]](https://dom.spec.whatwg. The `removeEventListener(type, callback, options)` method steps are: 1. Let capture be the result of [flattening](https://dom.spec.whatwg.org/#concept-flatten-options) options. - 2. If [this](https://webidl.spec.whatwg.org/#this)’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list) [contains](https://infra.spec.whatwg.org/#list-contain) an [event listener](https://dom.spec.whatwg.org/#concept-event-listener) whose [type](https://dom.spec.whatwg.org/#event-listener-type) is type, [callback](https://dom.spec.whatwg.org/#event-listener-callback) is callback, and [capture](https://dom.spec.whatwg.org/#event-listener-capture) is capture, then [remove an event listener](https://dom.spec.whatwg.org/#remove-an-event-listener) with [this](https://webidl.spec.whatwg.org/#this) and that [event listener](https://dom.spec.whatwg.org/#concept-event-listener). - The event listener list will not contain multiple event listeners with equal type, callback, and capture, as [add an event listener](https://dom.spec.whatwg.org/#add-an-event-listener) prevents that. The `dispatchEvent(event)` method steps are: 1. If event’s [dispatch flag](https://dom.spec.whatwg.org/#dispatch-flag) is set, or if its [initialized flag](https://dom.spec.whatwg.org/#initialized-flag) is not set, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidStateError](https://webidl.spec.whatwg.org/#invalidstateerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. Initialize event’s `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` attribute to false. - 3. Return the result of [dispatching](https://dom.spec.whatwg.org/#concept-event-dispatch) event to [this](https://webidl.spec.whatwg.org/#this). - ### 2.8. Observing event listeners[](https://dom.spec.whatwg.org/#observing-event-listeners) @@ -1302,245 +1225,178 @@ Ideally, any new event APIs are defined such that they do not need this property To dispatch an event to a target, with an optional legacy target override flag and an optional legacyOutputDidListenersThrowFlag, run these steps: 1. Set event’s [dispatch flag](https://dom.spec.whatwg.org/#dispatch-flag). - 2. Let targetOverride be target, if legacy target override flag is not given, and target’s [associated `Document`](https://html.spec.whatwg.org/multipage/window-object.html#concept-document-window) otherwise. [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) - + legacy target override flag is only used by HTML and only when target is a `[Window](https://html.spec.whatwg.org/multipage/window-object.html#window)` object. - + 3. Let activationTarget be null. - 4. Let relatedTarget be the result of [retargeting](https://dom.spec.whatwg.org/#retarget) event’s [relatedTarget](https://dom.spec.whatwg.org/#event-relatedtarget) against target. - 5. If target is not relatedTarget or target is event’s [relatedTarget](https://dom.spec.whatwg.org/#event-relatedtarget), then: - + 1. Let touchTargets be a new [list](https://infra.spec.whatwg.org/#list). - 2. [For each](https://infra.spec.whatwg.org/#list-iterate) touchTarget of event’s [touch target list](https://dom.spec.whatwg.org/#event-touch-target-list), [append](https://infra.spec.whatwg.org/#list-append) the result of [retargeting](https://dom.spec.whatwg.org/#retarget) touchTarget against target to touchTargets. - 3. [Append to an event path](https://dom.spec.whatwg.org/#concept-event-path-append) with event, target, targetOverride, relatedTarget, touchTargets, and false. - 4. Let isActivationEvent be true, if event is a `[MouseEvent](https://www.w3.org/TR/uievents/#mouseevent)` object and event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute is "`click`"; otherwise false. - 5. If isActivationEvent is true and target has [activation behavior](https://dom.spec.whatwg.org/#eventtarget-activation-behavior), then set activationTarget to target. - 6. Let slottable be target, if target is a [slottable](https://dom.spec.whatwg.org/#concept-slotable) and is [assigned](https://dom.spec.whatwg.org/#slotable-assigned), and null otherwise. - 7. Let slot-in-closed-tree be false. - 8. Let parent be the result of invoking target’s [get the parent](https://dom.spec.whatwg.org/#get-the-parent) with event. - 9. While parent is non-null: - + 1. If slottable is non-null: - + 1. Assert: parent is a [slot](https://dom.spec.whatwg.org/#concept-slot). - 2. Set slottable to null. - 3. If parent’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root) whose [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is "`closed`", then set slot-in-closed-tree to true. - + 2. If parent is a [slottable](https://dom.spec.whatwg.org/#concept-slotable) and is [assigned](https://dom.spec.whatwg.org/#slotable-assigned), then set slottable to parent. - 3. Let relatedTarget be the result of [retargeting](https://dom.spec.whatwg.org/#retarget) event’s [relatedTarget](https://dom.spec.whatwg.org/#event-relatedtarget) against parent. - 4. Let touchTargets be a new [list](https://infra.spec.whatwg.org/#list). - 5. [For each](https://infra.spec.whatwg.org/#list-iterate) touchTarget of event’s [touch target list](https://dom.spec.whatwg.org/#event-touch-target-list), [append](https://infra.spec.whatwg.org/#list-append) the result of [retargeting](https://dom.spec.whatwg.org/#retarget) touchTarget against parent to touchTargets. - 6. If parent is a `[Window](https://html.spec.whatwg.org/multipage/window-object.html#window)` object, or parent is a [node](https://dom.spec.whatwg.org/#concept-node) and target’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow-including inclusive ancestor](https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-ancestor) of parent, then: - + 1. If isActivationEvent is true, event’s `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` attribute is true, activationTarget is null, and parent has [activation behavior](https://dom.spec.whatwg.org/#eventtarget-activation-behavior), then set activationTarget to parent. - 2. [Append to an event path](https://dom.spec.whatwg.org/#concept-event-path-append) with event, parent, null, relatedTarget, touchTargets, and slot-in-closed-tree. - + 7. Otherwise, if parent is relatedTarget, then set parent to null. - 8. Otherwise, set target to parent and then: - + 1. If isActivationEvent is true, activationTarget is null, and target has [activation behavior](https://dom.spec.whatwg.org/#eventtarget-activation-behavior), then set activationTarget to target. - 2. [Append to an event path](https://dom.spec.whatwg.org/#concept-event-path-append) with event, parent, target, relatedTarget, touchTargets, and slot-in-closed-tree. - + 9. If parent is non-null, then set parent to the result of invoking parent’s [get the parent](https://dom.spec.whatwg.org/#get-the-parent) with event. - - 10. Set slot-in-closed-tree to false. - - 10. Let clearTargetsStruct be the last struct in event’s [path](https://dom.spec.whatwg.org/#event-path) whose [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is non-null. - - 11. Let clearTargets be true if clearTargetsStruct’s [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target), clearTargetsStruct’s [relatedTarget](https://dom.spec.whatwg.org/#event-path-relatedtarget), or an `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object in clearTargetsStruct’s [touch target list](https://dom.spec.whatwg.org/#event-path-touch-target-list) is a [node](https://dom.spec.whatwg.org/#concept-node) and its [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root); otherwise false. - - 12. If activationTarget is non-null and activationTarget has [legacy-pre-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-pre-activation-behavior), then run activationTarget’s [legacy-pre-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-pre-activation-behavior). - - 13. [For each](https://infra.spec.whatwg.org/#list-iterate) struct in event’s [path](https://dom.spec.whatwg.org/#event-path), in reverse order: - - 1. If struct’s [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is non-null, then set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[AT_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target)`. - - 2. Otherwise, set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[CAPTURING_PHASE](https://dom.spec.whatwg.org/#dom-event-capturing_phase)`. - - 3. [Invoke](https://dom.spec.whatwg.org/#concept-event-listener-invoke) with struct, event, "`capturing`", and legacyOutputDidListenersThrowFlag if given. - - 14. [For each](https://infra.spec.whatwg.org/#list-iterate) struct in event’s [path](https://dom.spec.whatwg.org/#event-path): - - 1. If struct’s [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is non-null, then set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[AT_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target)`. - - 2. Otherwise: - - 1. If event’s `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` attribute is false, then [continue](https://infra.spec.whatwg.org/#iteration-continue). - - 2. Set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[BUBBLING_PHASE](https://dom.spec.whatwg.org/#dom-event-bubbling_phase)`. - - 3. [Invoke](https://dom.spec.whatwg.org/#concept-event-listener-invoke) with struct, event, "`bubbling`", and legacyOutputDidListenersThrowFlag if given. - + 10. Set slot-in-closed-tree to false. + + 10. Let clearTargetsStruct be the last struct in event’s [path](https://dom.spec.whatwg.org/#event-path) whose [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is non-null. + + 11. Let clearTargets be true if clearTargetsStruct’s [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target), clearTargetsStruct’s [relatedTarget](https://dom.spec.whatwg.org/#event-path-relatedtarget), or an `[EventTarget](https://dom.spec.whatwg.org/#eventtarget)` object in clearTargetsStruct’s [touch target list](https://dom.spec.whatwg.org/#event-path-touch-target-list) is a [node](https://dom.spec.whatwg.org/#concept-node) and its [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root); otherwise false. + + 12. If activationTarget is non-null and activationTarget has [legacy-pre-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-pre-activation-behavior), then run activationTarget’s [legacy-pre-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-pre-activation-behavior). + + 13. [For each](https://infra.spec.whatwg.org/#list-iterate) struct in event’s [path](https://dom.spec.whatwg.org/#event-path), in reverse order: + + 14. If struct’s [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is non-null, then set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[AT_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target)`. + 15. Otherwise, set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[CAPTURING_PHASE](https://dom.spec.whatwg.org/#dom-event-capturing_phase)`. + 16. [Invoke](https://dom.spec.whatwg.org/#concept-event-listener-invoke) with struct, event, "`capturing`", and legacyOutputDidListenersThrowFlag if given. + 17. [For each](https://infra.spec.whatwg.org/#list-iterate) struct in event’s [path](https://dom.spec.whatwg.org/#event-path): + + 18. If struct’s [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is non-null, then set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[AT_TARGET](https://dom.spec.whatwg.org/#dom-event-at_target)`. + 19. Otherwise: + + 1. If event’s `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` attribute is false, then [continue](https://infra.spec.whatwg.org/#iteration-continue). + 2. Set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[BUBBLING_PHASE](https://dom.spec.whatwg.org/#dom-event-bubbling_phase)`. + + 20. [Invoke](https://dom.spec.whatwg.org/#concept-event-listener-invoke) with struct, event, "`bubbling`", and legacyOutputDidListenersThrowFlag if given. + 6. Set event’s `[eventPhase](https://dom.spec.whatwg.org/#dom-event-eventphase)` attribute to `[NONE](https://dom.spec.whatwg.org/#dom-event-none)`. - 7. Set event’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute to null. - 8. Set event’s [path](https://dom.spec.whatwg.org/#event-path) to the empty list. - 9. Unset event’s [dispatch flag](https://dom.spec.whatwg.org/#dispatch-flag), [stop propagation flag](https://dom.spec.whatwg.org/#stop-propagation-flag), and [stop immediate propagation flag](https://dom.spec.whatwg.org/#stop-immediate-propagation-flag). - -10. If clearTargets, then: - - 1. Set event’s [target](https://dom.spec.whatwg.org/#event-target) to null. - - 2. Set event’s [relatedTarget](https://dom.spec.whatwg.org/#event-relatedtarget) to null. - - 3. Set event’s [touch target list](https://dom.spec.whatwg.org/#event-touch-target-list) to the empty list. - -11. If activationTarget is non-null, then: - - 1. If event’s [canceled flag](https://dom.spec.whatwg.org/#canceled-flag) is unset, then run activationTarget’s [activation behavior](https://dom.spec.whatwg.org/#eventtarget-activation-behavior) with event. - - 2. Otherwise, if activationTarget has [legacy-canceled-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-canceled-activation-behavior), then run activationTarget’s [legacy-canceled-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-canceled-activation-behavior). - -12. Return false if event’s [canceled flag](https://dom.spec.whatwg.org/#canceled-flag) is set; otherwise true. - +10. If clearTargets, then: + +11. Set event’s [target](https://dom.spec.whatwg.org/#event-target) to null. +12. Set event’s [relatedTarget](https://dom.spec.whatwg.org/#event-relatedtarget) to null. +13. Set event’s [touch target list](https://dom.spec.whatwg.org/#event-touch-target-list) to the empty list. +14. If activationTarget is non-null, then: + +15. If event’s [canceled flag](https://dom.spec.whatwg.org/#canceled-flag) is unset, then run activationTarget’s [activation behavior](https://dom.spec.whatwg.org/#eventtarget-activation-behavior) with event. +16. Otherwise, if activationTarget has [legacy-canceled-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-canceled-activation-behavior), then run activationTarget’s [legacy-canceled-activation behavior](https://dom.spec.whatwg.org/#eventtarget-legacy-canceled-activation-behavior). +17. Return false if event’s [canceled flag](https://dom.spec.whatwg.org/#canceled-flag) is set; otherwise true. To append to an event path, given an event, invocationTarget, shadowAdjustedTarget, relatedTarget, touchTargets, and a slot-in-closed-tree, run these steps: 1. Let invocationTargetInShadowTree be false. - 2. If invocationTarget is a [node](https://dom.spec.whatwg.org/#concept-node) and its [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), then set invocationTargetInShadowTree to true. - 3. Let root-of-closed-tree be false. - 4. If invocationTarget is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root) whose [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is "`closed`", then set root-of-closed-tree to true. - 5. [Append](https://infra.spec.whatwg.org/#list-append) a new [struct](https://infra.spec.whatwg.org/#struct) to event’s [path](https://dom.spec.whatwg.org/#event-path) whose [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target) is invocationTarget, [invocation-target-in-shadow-tree](https://dom.spec.whatwg.org/#event-path-invocation-target-in-shadow-tree) is invocationTargetInShadowTree, [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is shadowAdjustedTarget, [relatedTarget](https://dom.spec.whatwg.org/#event-path-relatedtarget) is relatedTarget, [touch target list](https://dom.spec.whatwg.org/#event-path-touch-target-list) is touchTargets, [root-of-closed-tree](https://dom.spec.whatwg.org/#event-path-root-of-closed-tree) is root-of-closed-tree, and [slot-in-closed-tree](https://dom.spec.whatwg.org/#event-path-slot-in-closed-tree) is slot-in-closed-tree. - To invoke, given a struct, event, phase, and an optional legacyOutputDidListenersThrowFlag, run these steps: 1. Set event’s [target](https://dom.spec.whatwg.org/#event-target) to the [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) of the last struct in event’s [path](https://dom.spec.whatwg.org/#event-path), that is either struct or preceding struct, whose [shadow-adjusted target](https://dom.spec.whatwg.org/#event-path-shadow-adjusted-target) is non-null. - 2. Set event’s [relatedTarget](https://dom.spec.whatwg.org/#event-relatedtarget) to struct’s [relatedTarget](https://dom.spec.whatwg.org/#event-path-relatedtarget). - 3. Set event’s [touch target list](https://dom.spec.whatwg.org/#event-touch-target-list) to struct’s [touch target list](https://dom.spec.whatwg.org/#event-path-touch-target-list). - 4. If event’s [stop propagation flag](https://dom.spec.whatwg.org/#stop-propagation-flag) is set, then return. - 5. Initialize event’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute to struct’s [invocation target](https://dom.spec.whatwg.org/#event-path-invocation-target). - 6. Let listeners be a [clone](https://infra.spec.whatwg.org/#list-clone) of event’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute value’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list). - + This avoids [event listeners](https://dom.spec.whatwg.org/#concept-event-listener) added after this point from being run. Note that removal still has an effect due to the [removed](https://dom.spec.whatwg.org/#event-listener-removed) field. - + 7. Let invocationTargetInShadowTree be struct’s [invocation-target-in-shadow-tree](https://dom.spec.whatwg.org/#event-path-invocation-target-in-shadow-tree). - 8. Let found be the result of running [inner invoke](https://dom.spec.whatwg.org/#concept-event-listener-inner-invoke) with event, listeners, phase, invocationTargetInShadowTree, and legacyOutputDidListenersThrowFlag if given. - 9. If found is false and event’s `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` attribute is true, then: - + 1. Let originalEventType be event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value. - 2. If event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value is a match for any of the strings in the first column in the following table, set event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value to the string in the second column on the same row as the matching string, and return otherwise. - + Event type - + Legacy event type - + "`animationend`" - + "`webkitAnimationEnd`" - + "`animationiteration`" - + "`webkitAnimationIteration`" - + "`animationstart`" - + "`webkitAnimationStart`" - + "`transitionend`" - + "`webkitTransitionEnd`" - + 3. [Inner invoke](https://dom.spec.whatwg.org/#concept-event-listener-inner-invoke) with event, listeners, phase, invocationTargetInShadowTree, and legacyOutputDidListenersThrowFlag if given. - 4. Set event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value to originalEventType. - To inner invoke, given an event, listeners, phase, invocationTargetInShadowTree, and an optional legacyOutputDidListenersThrowFlag, run these steps: 1. Let found be false. - 2. [For each](https://infra.spec.whatwg.org/#list-iterate) listener in listeners, whose [removed](https://dom.spec.whatwg.org/#event-listener-removed) is false: - + 1. If event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value is not listener’s [type](https://dom.spec.whatwg.org/#event-listener-type), then [continue](https://infra.spec.whatwg.org/#iteration-continue). - 2. Set found to true. - 3. If phase is "`capturing`" and listener’s [capture](https://dom.spec.whatwg.org/#event-listener-capture) is false, then [continue](https://infra.spec.whatwg.org/#iteration-continue). - 4. If phase is "`bubbling`" and listener’s [capture](https://dom.spec.whatwg.org/#event-listener-capture) is true, then [continue](https://infra.spec.whatwg.org/#iteration-continue). - 5. If listener’s [once](https://dom.spec.whatwg.org/#event-listener-once) is true, then [remove](https://infra.spec.whatwg.org/#list-remove) listener from event’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute value’s [event listener list](https://dom.spec.whatwg.org/#eventtarget-event-listener-list). - 6. Let global be listener [callback](https://dom.spec.whatwg.org/#event-listener-callback)’s [associated Realm](https://webidl.spec.whatwg.org/#dfn-associated-realm)’s [global object](https://html.spec.whatwg.org/multipage/webappapis.html#concept-realm-global). - 7. Let currentEvent be undefined. - 8. If global is a `[Window](https://html.spec.whatwg.org/multipage/window-object.html#window)` object, then: - + 1. Set currentEvent to global’s [current event](https://dom.spec.whatwg.org/#window-current-event). - 2. If invocationTargetInShadowTree is false, then set global’s [current event](https://dom.spec.whatwg.org/#window-current-event) to event. - + 9. If listener’s [passive](https://dom.spec.whatwg.org/#event-listener-passive) is true, then set event’s [in passive listener flag](https://dom.spec.whatwg.org/#in-passive-listener-flag). - - 10. [Call a user object’s operation](https://webidl.spec.whatwg.org/#call-a-user-objects-operation) with listener’s [callback](https://dom.spec.whatwg.org/#event-listener-callback), "`handleEvent`", « event », and event’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute value. If this throws an exception, then: - - 1. [Report the exception](https://html.spec.whatwg.org/multipage/webappapis.html#report-the-exception). - - 2. Set legacyOutputDidListenersThrowFlag if given. - - The legacyOutputDidListenersThrowFlag is only used by Indexed Database API. [\[INDEXEDDB\]](https://dom.spec.whatwg.org/#biblio-indexeddb) - - 11. Unset event’s [in passive listener flag](https://dom.spec.whatwg.org/#in-passive-listener-flag). - - 12. If global is a `[Window](https://html.spec.whatwg.org/multipage/window-object.html#window)` object, then set global’s [current event](https://dom.spec.whatwg.org/#window-current-event) to currentEvent. - - 13. If event’s [stop immediate propagation flag](https://dom.spec.whatwg.org/#stop-immediate-propagation-flag) is set, then return found. - + 10. [Call a user object’s operation](https://webidl.spec.whatwg.org/#call-a-user-objects-operation) with listener’s [callback](https://dom.spec.whatwg.org/#event-listener-callback), "`handleEvent`", « event », and event’s `[currentTarget](https://dom.spec.whatwg.org/#dom-event-currenttarget)` attribute value. If this throws an exception, then: + + 11. [Report the exception](https://html.spec.whatwg.org/multipage/webappapis.html#report-the-exception). + 12. Set legacyOutputDidListenersThrowFlag if given. + + The legacyOutputDidListenersThrowFlag is only used by Indexed Database API. [\[INDEXEDDB\]](https://dom.spec.whatwg.org/#biblio-indexeddb) + + 13. Unset event’s [in passive listener flag](https://dom.spec.whatwg.org/#in-passive-listener-flag). + + 14. If global is a `[Window](https://html.spec.whatwg.org/multipage/window-object.html#window)` object, then set global’s [current event](https://dom.spec.whatwg.org/#window-current-event) to currentEvent. + + 15. If event’s [stop immediate propagation flag](https://dom.spec.whatwg.org/#stop-immediate-propagation-flag) is set, then return found. + 3. Return found. - ### 2.10. Firing events[](https://dom.spec.whatwg.org/#firing-events) To fire an event named e at target, optionally using an eventConstructor, with a description of how IDL attributes are to be initialized, and a legacy target override flag, run these steps: 1. If eventConstructor is not given, then let eventConstructor be `[Event](https://dom.spec.whatwg.org/#event)`. - 2. Let event be the result of [creating an event](https://dom.spec.whatwg.org/#concept-event-create) given eventConstructor, in the [relevant Realm](https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-realm) of target. - 3. Initialize event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute to e. - 4. Initialize any other IDL attributes of event as described in the invocation of this algorithm. - + This also allows for the `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` attribute to be set to false. - + 5. Return the result of [dispatching](https://dom.spec.whatwg.org/#concept-event-dispatch) event at target, with legacy target override flag set if set. - Fire in the context of DOM is short for [creating](https://dom.spec.whatwg.org/#concept-event-create), initializing, and [dispatching](https://dom.spec.whatwg.org/#concept-event-dispatch) an [event](https://dom.spec.whatwg.org/#concept-event). [Fire an event](https://dom.spec.whatwg.org/#concept-event-fire) makes that process easier to write down. @@ -1551,9 +1407,7 @@ Or, when a custom constructor is needed, "[fire an event](https://dom.spec.whatw Occasionally the return value is important: 1. Let doAction be the result of [firing an event](https://dom.spec.whatwg.org/#concept-event-fire) named `like` at target. - 2. If doAction is true, then … - ### 2.11. Action versus occurrence[](https://dom.spec.whatwg.org/#action-versus-occurance) @@ -1611,78 +1465,78 @@ APIs that require more granular control could extend both `[AbortController](htt ### 3.1. Interface `[AbortController](https://dom.spec.whatwg.org/#abortcontroller)`[](https://dom.spec.whatwg.org/#interface-abortcontroller) -[AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController "The AbortController interface represents a controller object that allows you to abort one or more Web requests as and when desired.") +[AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController 'The AbortController interface represents a controller object that allows you to abort one or more Web requests as and when desired.') In all current engines. Firefox57+Safari12.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari12.2+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=(Window,Worker)\] interface `AbortController` { - [constructor](https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller)(); +[constructor](https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller)(); - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [AbortSignal](https://dom.spec.whatwg.org/#abortsignal) [signal](https://dom.spec.whatwg.org/#dom-abortcontroller-signal); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [AbortSignal](https://dom.spec.whatwg.org/#abortsignal) [signal](https://dom.spec.whatwg.org/#dom-abortcontroller-signal); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [abort](https://dom.spec.whatwg.org/#dom-abortcontroller-abort)(optional [any](https://webidl.spec.whatwg.org/#idl-any) `reason`[](https://dom.spec.whatwg.org/#dom-abortcontroller-abort-reason-reason)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [abort](https://dom.spec.whatwg.org/#dom-abortcontroller-abort)(optional [any](https://webidl.spec.whatwg.org/#idl-any) `reason`[](https://dom.spec.whatwg.org/#dom-abortcontroller-abort-reason-reason)); }; -[AbortController/AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/AbortController "The AbortController() constructor creates a new AbortController object instance.") +[AbortController/AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/AbortController 'The AbortController() constructor creates a new AbortController object instance.') In all current engines. Firefox57+Safari12.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari12.2+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ -[AbortController/abort](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort "The abort() method of the AbortController interface aborts a DOM request before it has completed. This is able to abort fetch requests, the consumption of any response bodies, or streams.") +[AbortController/abort](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort 'The abort() method of the AbortController interface aborts a DOM request before it has completed. This is able to abort fetch requests, the consumption of any response bodies, or streams.') In all current engines. Firefox57+Safari12.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari12.2+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ @@ -1690,25 +1544,25 @@ Node.js15.0.0+ Returns a new controller whose `[signal](https://dom.spec.whatwg.org/#dom-abortcontroller-signal)` is set to a newly created `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` object. -[AbortController/signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal "The signal read-only property of the AbortController interface returns an AbortSignal object instance, which can be used to communicate with/abort a DOM request as desired.") +[AbortController/signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal 'The signal read-only property of the AbortController interface returns an AbortSignal object instance, which can be used to communicate with/abort a DOM request as desired.') In all current engines. Firefox57+Safari12.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari12.2+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ @@ -1725,9 +1579,7 @@ An `[AbortController](https://dom.spec.whatwg.org/#abortcontroller)` object has The `new AbortController()` constructor steps are: 1. Let signal be a new `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` object. - 2. Set [this](https://webidl.spec.whatwg.org/#this)’s [signal](https://dom.spec.whatwg.org/#abortcontroller-signal) to signal. - The `signal` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [signal](https://dom.spec.whatwg.org/#abortcontroller-signal). @@ -1735,58 +1587,58 @@ The `abort(reason)` method steps are to [signal abort](https://dom.spec.whatwg.o ### 3.2. Interface `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)`[](https://dom.spec.whatwg.org/#interface-AbortSignal) -[AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal "The AbortSignal interface represents a signal object that allows you to communicate with a DOM request (such as a fetch request) and abort it if required via an AbortController object.") +[AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal 'The AbortSignal interface represents a signal object that allows you to communicate with a DOM request (such as a fetch request) and abort it if required via an AbortController object.') In all current engines. Firefox57+Safari11.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari11.3+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=(Window,Worker)\] interface `AbortSignal` : [EventTarget](https://dom.spec.whatwg.org/#eventtarget) { - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] static [AbortSignal](https://dom.spec.whatwg.org/#abortsignal) [abort](https://dom.spec.whatwg.org/#dom-abortsignal-abort)(optional [any](https://webidl.spec.whatwg.org/#idl-any) `reason`[](https://dom.spec.whatwg.org/#dom-abortsignal-abort-reason-reason)); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] static [AbortSignal](https://dom.spec.whatwg.org/#abortsignal) [abort](https://dom.spec.whatwg.org/#dom-abortsignal-abort)(optional [any](https://webidl.spec.whatwg.org/#idl-any) `reason`[](https://dom.spec.whatwg.org/#dom-abortsignal-abort-reason-reason)); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [aborted](https://dom.spec.whatwg.org/#dom-abortsignal-aborted); - readonly attribute [any](https://webidl.spec.whatwg.org/#idl-any) [reason](https://dom.spec.whatwg.org/#dom-abortsignal-reason); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [throwIfAborted](https://dom.spec.whatwg.org/#dom-abortsignal-throwifaborted)(); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [aborted](https://dom.spec.whatwg.org/#dom-abortsignal-aborted); +readonly attribute [any](https://webidl.spec.whatwg.org/#idl-any) [reason](https://dom.spec.whatwg.org/#dom-abortsignal-reason); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [throwIfAborted](https://dom.spec.whatwg.org/#dom-abortsignal-throwifaborted)(); - attribute [EventHandler](https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler) [onabort](https://dom.spec.whatwg.org/#dom-abortsignal-onabort); +attribute [EventHandler](https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler) [onabort](https://dom.spec.whatwg.org/#dom-abortsignal-onabort); }; -[AbortSignal/abort](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/abort "The static AbortSignal.abort() method returns an AbortSignal that is already set as aborted (and which does not trigger an abort event).") +[AbortSignal/abort](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/abort 'The static AbortSignal.abort() method returns an AbortSignal that is already set as aborted (and which does not trigger an abort event).') In all current engines. Firefox88+Safari15+Chrome93+ -___ +--- Opera79+Edge93+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android88+iOS Safari15+Chrome for Android93+Android WebView93+Samsung InternetNoneOpera MobileNone -___ +--- Node.jsNone @@ -1794,25 +1646,25 @@ Node.jsNone Returns an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` instance whose [abort reason](https://dom.spec.whatwg.org/#abortsignal-abort-reason) is set to reason if not undefined; otherwise to an "`[AbortError](https://webidl.spec.whatwg.org/#aborterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. -[AbortSignal/aborted](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/aborted "The aborted read-only property returns a value that indicates whether the DOM requests the signal is communicating with are aborted (true) or not (false).") +[AbortSignal/aborted](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/aborted 'The aborted read-only property returns a value that indicates whether the DOM requests the signal is communicating with are aborted (true) or not (false).') In all current engines. Firefox57+Safari11.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari11.3+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ @@ -1837,9 +1689,7 @@ An `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` object has associat To add an algorithm algorithm to an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` object signal, run these steps: 1. If signal is [aborted](https://dom.spec.whatwg.org/#abortsignal-aborted), then return. - 2. [Append](https://infra.spec.whatwg.org/#set-append) algorithm to signal’s [abort algorithms](https://dom.spec.whatwg.org/#abortsignal-abort-algorithms). - To remove[](https://dom.spec.whatwg.org/#abortsignal-remove) an algorithm algorithm from an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` signal, [remove](https://infra.spec.whatwg.org/#list-remove) algorithm from signal’s [abort algorithms](https://dom.spec.whatwg.org/#abortsignal-abort-algorithms). @@ -1848,9 +1698,7 @@ The [abort algorithms](https://dom.spec.whatwg.org/#abortsignal-abort-algorithms The static `abort(reason)` method steps are: 1. Let signal be a new `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` object. - 2. Set signal’s [abort reason](https://dom.spec.whatwg.org/#abortsignal-abort-reason) to reason if it is given; otherwise to a new "`[AbortError](https://webidl.spec.whatwg.org/#aborterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. Return signal. The `aborted` getter steps are to return true if [this](https://webidl.spec.whatwg.org/#this) is [aborted](https://dom.spec.whatwg.org/#abortsignal-aborted); otherwise false. @@ -1862,57 +1710,58 @@ The `throwIfAborted()` method steps are to throw [this](https://webidl.spec.what This method is primarily useful for when functions accepting `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)`s want to throw (or return a rejected promise) at specific checkpoints, instead of passing along the `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` to other methods. For example, the following function allows aborting in between each attempt to poll for a condition. This gives opportunities to abort the polling process, even though the actual asynchronous operation (i.e., `await func()`) does not accept an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)`. async function waitForCondition(func, targetValue, { signal } \= {}) { - while (true) { - signal?.throwIfAborted(); +while (true) { +signal?.throwIfAborted(); const result \= await func(); if (result \=== targetValue) { return; } - } + +} } -[AbortSignal/abort\_event](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/abort_event "The abort event of the Fetch API is fired when a fetch request is aborted, i.e. using AbortController.abort().") +[AbortSignal/abort_event](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/abort_event 'The abort event of the Fetch API is fired when a fetch request is aborted, i.e. using AbortController.abort().') In all current engines. Firefox57+Safari11.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari11.3+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ -[AbortSignal/onabort](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/onabort "The onabort read-only property of the AbortSignal interface is an event handler invoked when an abort event fires, i.e. when the fetch requests the signal is communicating with are aborted.") +[AbortSignal/onabort](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/onabort 'The onabort read-only property of the AbortSignal interface is an event handler invoked when an abort event fires, i.e. when the fetch requests the signal is communicating with are aborted.') In all current engines. Firefox57+Safari11.1+Chrome66+ -___ +--- Opera53+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android57+iOS Safari11.3+Chrome for Android66+Android WebView66+Samsung Internet9.0+Opera Mobile47+ -___ +--- Node.js15.0.0+ @@ -1923,26 +1772,18 @@ Changes to an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` object r To signal abort, given an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` object signal and an optional reason, run these steps: 1. If signal is [aborted](https://dom.spec.whatwg.org/#abortsignal-aborted), then return. - 2. Set signal’s [abort reason](https://dom.spec.whatwg.org/#abortsignal-abort-reason) to reason if it is given; otherwise to a new "`[AbortError](https://webidl.spec.whatwg.org/#aborterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. [For each](https://infra.spec.whatwg.org/#list-iterate) algorithm in signal’s [abort algorithms](https://dom.spec.whatwg.org/#abortsignal-abort-algorithms): run algorithm. - 4. [Empty](https://infra.spec.whatwg.org/#list-empty) signal’s [abort algorithms](https://dom.spec.whatwg.org/#abortsignal-abort-algorithms). - 5. [Fire an event](https://dom.spec.whatwg.org/#concept-event-fire) named `[abort](https://dom.spec.whatwg.org/#eventdef-abortsignal-abort)` at signal. - A followingSignal (an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)`) is made to follow[](https://dom.spec.whatwg.org/#abortsignal-follow) a parentSignal (an `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)`) by running these steps: 1. If followingSignal is [aborted](https://dom.spec.whatwg.org/#abortsignal-aborted), then return. - 2. If parentSignal is [aborted](https://dom.spec.whatwg.org/#abortsignal-aborted), then [signal abort](https://dom.spec.whatwg.org/#abortsignal-signal-abort) on followingSignal with parentSignal’s [abort reason](https://dom.spec.whatwg.org/#abortsignal-abort-reason). - 3. Otherwise, [add the following abort steps](https://dom.spec.whatwg.org/#abortsignal-add) to parentSignal: - + 1. [Signal abort](https://dom.spec.whatwg.org/#abortsignal-signal-abort) on followingSignal with parentSignal’s [abort reason](https://dom.spec.whatwg.org/#abortsignal-abort-reason). - ### 3.3. Using `[AbortController](https://dom.spec.whatwg.org/#abortcontroller)` and `[AbortSignal](https://dom.spec.whatwg.org/#abortsignal)` objects in APIs[](https://dom.spec.whatwg.org/#abortcontroller-api-integration) @@ -2000,15 +1841,10 @@ A [node tree](https://dom.spec.whatwg.org/#concept-node-tree) is constrained as In [tree order](https://dom.spec.whatwg.org/#concept-tree-order): 1. Zero or more `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)` or `[Comment](https://dom.spec.whatwg.org/#comment)` [nodes](https://dom.spec.whatwg.org/#concept-node). - 2. Optionally one `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` [node](https://dom.spec.whatwg.org/#concept-node). - 3. Zero or more `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)` or `[Comment](https://dom.spec.whatwg.org/#comment)` [nodes](https://dom.spec.whatwg.org/#concept-node). - 4. Optionally one `[Element](https://dom.spec.whatwg.org/#element)` [node](https://dom.spec.whatwg.org/#concept-node). - 5. Zero or more `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)` or `[Comment](https://dom.spec.whatwg.org/#comment)` [nodes](https://dom.spec.whatwg.org/#concept-node). - `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` @@ -2029,11 +1865,8 @@ No [children](https://dom.spec.whatwg.org/#concept-tree-child). To determine the length of a [node](https://dom.spec.whatwg.org/#concept-node) node, run these steps: 1. If node is a `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` or `[Attr](https://dom.spec.whatwg.org/#attr)` [node](https://dom.spec.whatwg.org/#concept-node), then return 0. - 2. If node is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then return node’s [data](https://dom.spec.whatwg.org/#concept-cd-data)’s [length](https://infra.spec.whatwg.org/#string-length). - 3. Return the number of node’s [children](https://dom.spec.whatwg.org/#concept-tree-child). - A [node](https://dom.spec.whatwg.org/#concept-node) is considered empty if its [length](https://dom.spec.whatwg.org/#concept-node-length) is 0. @@ -2061,21 +1894,21 @@ An [element](https://dom.spec.whatwg.org/#concept-element) is connected if its [ ##### 4.2.2.1. Slots[](https://dom.spec.whatwg.org/#shadow-tree-slots) -[Element/slot](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot "The HTML element—part of the Web Components technology suite—is a placeholder inside a web component that you can fill with your own markup, which lets you create separate DOM trees and present them together.") +[Element/slot](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot 'The HTML element—part of the Web Components technology suite—is a placeholder inside a web component that you can fill with your own markup, which lets you create separate DOM trees and present them together.') In all current engines. Firefox63+Safari10+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ @@ -2088,19 +1921,13 @@ A [slot](https://dom.spec.whatwg.org/#concept-slot) has an associated name (a st Use these [attribute change steps](https://dom.spec.whatwg.org/#concept-element-attributes-change-ext) to update a [slot](https://dom.spec.whatwg.org/#concept-slot)’s [name](https://dom.spec.whatwg.org/#slot-name): 1. If element is a [slot](https://dom.spec.whatwg.org/#concept-slot), localName is `name`, and namespace is null, then: - + 1. If value is oldValue, then return. - 2. If value is null and oldValue is the empty string, then return. - 3. If value is the empty string and oldValue is null, then return. - 4. If value is null or the empty string, then set element’s [name](https://dom.spec.whatwg.org/#slot-name) to the empty string. - 5. Otherwise, set element’s [name](https://dom.spec.whatwg.org/#slot-name) to value. - 6. Run [assign slottables for a tree](https://dom.spec.whatwg.org/#assign-slotables-for-a-tree) with element’s [root](https://dom.spec.whatwg.org/#concept-tree-root). - The first [slot](https://dom.spec.whatwg.org/#concept-slot) in a [shadow tree](https://dom.spec.whatwg.org/#concept-shadow-tree), in [tree order](https://dom.spec.whatwg.org/#concept-tree-order), whose [name](https://dom.spec.whatwg.org/#slot-name) is the empty string, is sometimes known as the "default slot". @@ -2117,21 +1944,14 @@ A [slottable](https://dom.spec.whatwg.org/#concept-slotable) has an associated n Use these [attribute change steps](https://dom.spec.whatwg.org/#concept-element-attributes-change-ext) to update a [slottable](https://dom.spec.whatwg.org/#concept-slotable)’s [name](https://dom.spec.whatwg.org/#slotable-name): 1. If localName is `slot` and namespace is null, then: - + 1. If value is oldValue, then return. - 2. If value is null and oldValue is the empty string, then return. - 3. If value is the empty string and oldValue is null, then return. - 4. If value is null or the empty string, then set element’s [name](https://dom.spec.whatwg.org/#slotable-name) to the empty string. - 5. Otherwise, set element’s [name](https://dom.spec.whatwg.org/#slotable-name) to value. - 6. If element is [assigned](https://dom.spec.whatwg.org/#slotable-assigned), then run [assign slottables](https://dom.spec.whatwg.org/#assign-slotables) for element’s [assigned slot](https://dom.spec.whatwg.org/#slotable-assigned-slot). - 7. Run [assign a slot](https://dom.spec.whatwg.org/#assign-a-slot) for element. - A [slottable](https://dom.spec.whatwg.org/#concept-slotable) has an associated assigned slot (null or a [slot](https://dom.spec.whatwg.org/#concept-slot)). Unless stated otherwise it is null. A [slottable](https://dom.spec.whatwg.org/#concept-slotable) is assigned if its [assigned slot](https://dom.spec.whatwg.org/#slotable-assigned-slot) is non-null. @@ -2144,87 +1964,62 @@ A [slottable](https://dom.spec.whatwg.org/#concept-slotable)’s [manual slot as To find a slot for a given [slottable](https://dom.spec.whatwg.org/#concept-slotable) slottable and an optional _open flag_ (unset unless stated otherwise), run these steps: 1. If slottable’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is null, then return null. - 2. Let shadow be slottable’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent)’s [shadow root](https://dom.spec.whatwg.org/#concept-element-shadow-root). - 3. If shadow is null, then return null. - 4. If the _open flag_ is set and shadow’s [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is _not_ "`open`", then return null. - 5. If shadow’s [slot assignment](https://dom.spec.whatwg.org/#shadowroot-slot-assignment) is "`manual`", then return the [slot](https://dom.spec.whatwg.org/#concept-slot) in shadow’s [descendants](https://dom.spec.whatwg.org/#concept-tree-descendant) whose [manually assigned nodes](https://html.spec.whatwg.org/multipage/scripting.html#manually-assigned-nodes) [contains](https://infra.spec.whatwg.org/#list-contain) slottable, if any; otherwise null. - 6. Return the first [slot](https://dom.spec.whatwg.org/#concept-slot) in [tree order](https://dom.spec.whatwg.org/#concept-tree-order) in shadow’s [descendants](https://dom.spec.whatwg.org/#concept-tree-descendant) whose [name](https://dom.spec.whatwg.org/#slot-name) is slottable’s [name](https://dom.spec.whatwg.org/#slotable-name), if any; otherwise null. - To find slottables for a given [slot](https://dom.spec.whatwg.org/#concept-slot) slot, run these steps: 1. Let result be an empty list. - 2. Let root be slot’s [root](https://dom.spec.whatwg.org/#concept-tree-root). - 3. If root is not a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), then return result. - 4. Let host be root’s [host](https://dom.spec.whatwg.org/#concept-documentfragment-host). - 5. If root’s [slot assignment](https://dom.spec.whatwg.org/#shadowroot-slot-assignment) is "`manual`", then: - + 1. Let result be « ». - 2. [For each](https://infra.spec.whatwg.org/#list-iterate) [slottable](https://dom.spec.whatwg.org/#concept-slotable) slottable of slot’s [manually assigned nodes](https://html.spec.whatwg.org/multipage/scripting.html#manually-assigned-nodes), if slottable’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is host, [append](https://infra.spec.whatwg.org/#list-append) slottable to result. - + 6. Otherwise, for each [slottable](https://dom.spec.whatwg.org/#concept-slotable) [child](https://dom.spec.whatwg.org/#concept-tree-child) slottable of host, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order): - + 1. Let foundSlot be the result of [finding a slot](https://dom.spec.whatwg.org/#find-a-slot) given slottable. - 2. If foundSlot is slot, then [append](https://infra.spec.whatwg.org/#list-append) slottable to result. - + 7. Return result. - To find flattened slottables for a given [slot](https://dom.spec.whatwg.org/#concept-slot) slot, run these steps: 1. Let result be an empty list. - 2. If slot’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is not a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), then return result. - 3. Let slottables be the result of [finding slottables](https://dom.spec.whatwg.org/#find-slotables) given slot. - 4. If slottables is the empty list, then append each [slottable](https://dom.spec.whatwg.org/#concept-slotable) [child](https://dom.spec.whatwg.org/#concept-tree-child) of slot, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order), to slottables. - 5. For each node in slottables: - + 1. If node is a [slot](https://dom.spec.whatwg.org/#concept-slot) whose [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), then: - + 1. Let temporaryResult be the result of [finding flattened slottables](https://dom.spec.whatwg.org/#find-flattened-slotables) given node. - 2. Append each [slottable](https://dom.spec.whatwg.org/#concept-slotable) in temporaryResult, in order, to result. - + 2. Otherwise, append node to result. - + 6. Return result. - ##### 4.2.2.4. Assigning slottables and slots[](https://dom.spec.whatwg.org/#assigning-slotables-and-slots) To assign slottables for a [slot](https://dom.spec.whatwg.org/#concept-slot) slot, run these steps: 1. Let slottables be the result of [finding slottables](https://dom.spec.whatwg.org/#find-slotables) for slot. - 2. If slottables and slot’s [assigned nodes](https://dom.spec.whatwg.org/#slot-assigned-nodes) are not identical, then run [signal a slot change](https://dom.spec.whatwg.org/#signal-a-slot-change) for slot. - 3. Set slot’s [assigned nodes](https://dom.spec.whatwg.org/#slot-assigned-nodes) to slottables. - 4. For each slottable in slottables, set slottable’s [assigned slot](https://dom.spec.whatwg.org/#slotable-assigned-slot) to slot. - To assign slottables for a tree, given a [node](https://dom.spec.whatwg.org/#concept-node) root, run [assign slottables](https://dom.spec.whatwg.org/#assign-slotables) for each [slot](https://dom.spec.whatwg.org/#concept-slot) slot in root’s [inclusive descendants](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant), in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). To assign a slot, given a [slottable](https://dom.spec.whatwg.org/#concept-slotable) slottable, run these steps: 1. Let slot be the result of [finding a slot](https://dom.spec.whatwg.org/#find-a-slot) with slottable. - 2. If slot is non-null, then run [assign slottables](https://dom.spec.whatwg.org/#assign-slotables) for slot. - ##### 4.2.2.5. Signaling slot change[](https://dom.spec.whatwg.org/#signaling-slot-change) @@ -2233,53 +2028,40 @@ Each [similar-origin window agent](https://html.spec.whatwg.org/multipage/webapp To signal a slot change, for a [slot](https://dom.spec.whatwg.org/#concept-slot) slot, run these steps: 1. [Append](https://infra.spec.whatwg.org/#set-append) slot to slot’s [relevant agent](https://html.spec.whatwg.org/multipage/webappapis.html#relevant-agent)’s [signal slots](https://dom.spec.whatwg.org/#signal-slot-list). - 2. [Queue a mutation observer microtask](https://dom.spec.whatwg.org/#queue-a-mutation-observer-compound-microtask). - #### 4.2.3. Mutation algorithms[](https://dom.spec.whatwg.org/#mutation-algorithms) To ensure pre-insertion validity of a node into a parent before a child, run these steps: 1. If parent is not a `[Document](https://dom.spec.whatwg.org/#document)`, `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)`, or `[Element](https://dom.spec.whatwg.org/#element)` [node](https://dom.spec.whatwg.org/#concept-node), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If node is a [host-including inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-host-including-inclusive-ancestor) of parent, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. If child is non-null and its [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is not parent, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotFoundError](https://webidl.spec.whatwg.org/#notfounderror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 4. If node is not a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)`, `[DocumentType](https://dom.spec.whatwg.org/#documenttype)`, `[Element](https://dom.spec.whatwg.org/#element)`, or `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 5. If either node is a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) and parent is a [document](https://dom.spec.whatwg.org/#concept-document), or node is a [doctype](https://dom.spec.whatwg.org/#concept-doctype) and parent is not a [document](https://dom.spec.whatwg.org/#concept-document), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 6. If parent is a [document](https://dom.spec.whatwg.org/#concept-document), and any of the statements below, switched on the interface node [implements](https://webidl.spec.whatwg.org/#implements), are true, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` - + If node has more than one [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child) or has a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) [child](https://dom.spec.whatwg.org/#concept-tree-child). - + Otherwise, if node has one [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child) and either parent has an [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child), child is a [doctype](https://dom.spec.whatwg.org/#concept-doctype), or child is non-null and a [doctype](https://dom.spec.whatwg.org/#concept-doctype) is [following](https://dom.spec.whatwg.org/#concept-tree-following) child. - + `[Element](https://dom.spec.whatwg.org/#element)` - + parent has an [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child), child is a [doctype](https://dom.spec.whatwg.org/#concept-doctype), or child is non-null and a [doctype](https://dom.spec.whatwg.org/#concept-doctype) is [following](https://dom.spec.whatwg.org/#concept-tree-following) child. - + `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` - + parent has a [doctype](https://dom.spec.whatwg.org/#concept-doctype) [child](https://dom.spec.whatwg.org/#concept-tree-child), child is non-null and an [element](https://dom.spec.whatwg.org/#concept-element) is [preceding](https://dom.spec.whatwg.org/#concept-tree-preceding) child, or child is null and parent has an [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child). - To pre-insert a node into a parent before a child, run these steps: 1. [Ensure pre-insertion validity](https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity) of node into parent before child. - 2. Let referenceChild be child. - 3. If referenceChild is node, then set referenceChild to node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - 4. [Insert](https://dom.spec.whatwg.org/#concept-node-insert) node into parent before referenceChild. - 5. Return node. - [Specifications](https://dom.spec.whatwg.org/#other-applicable-specifications) may define insertion steps for all or some [nodes](https://dom.spec.whatwg.org/#concept-node). The algorithm is passed insertedNode, as indicated in the [insert](https://dom.spec.whatwg.org/#concept-node-insert) algorithm below. @@ -2288,207 +2070,156 @@ To pre-insert a node into a parent before a child, run these steps: To insert a node into a parent before a child, with an optional _suppress observers flag_, run these steps: 1. Let nodes be node’s [children](https://dom.spec.whatwg.org/#concept-tree-child), if node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node); otherwise « node ». - 2. Let count be nodes’s [size](https://infra.spec.whatwg.org/#list-size). - 3. If count is 0, then return. - 4. If node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node), then: - + 1. [Remove](https://dom.spec.whatwg.org/#concept-node-remove) its [children](https://dom.spec.whatwg.org/#concept-tree-child) with the _suppress observers flag_ set. - 2. [Queue a tree mutation record](https://dom.spec.whatwg.org/#queue-a-tree-mutation-record) for node with « », nodes, null, and null. - + This step intentionally does not pay attention to the _suppress observers flag_. - + 5. If child is non-null, then: - + 1. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is parent and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is greater than child’s [index](https://dom.spec.whatwg.org/#concept-tree-index), increase its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) by count. - 2. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is parent and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is greater than child’s [index](https://dom.spec.whatwg.org/#concept-tree-index), increase its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) by count. - + 6. Let previousSibling be child’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling) or parent’s [last child](https://dom.spec.whatwg.org/#concept-tree-last-child) if child is null. - 7. For each node in nodes, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order): - + 1. [Adopt](https://dom.spec.whatwg.org/#concept-node-adopt) node into parent’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. If child is null, then [append](https://infra.spec.whatwg.org/#set-append) node to parent’s [children](https://dom.spec.whatwg.org/#concept-tree-child). - 3. Otherwise, [insert](https://infra.spec.whatwg.org/#list-insert) node into parent’s [children](https://dom.spec.whatwg.org/#concept-tree-child) before child’s [index](https://dom.spec.whatwg.org/#concept-tree-index). - 4. If parent is a [shadow host](https://dom.spec.whatwg.org/#element-shadow-host) whose [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root)’s [slot assignment](https://dom.spec.whatwg.org/#shadowroot-slot-assignment) is "`named`" and node is a [slottable](https://dom.spec.whatwg.org/#concept-slotable), then [assign a slot](https://dom.spec.whatwg.org/#assign-a-slot) for node. - 5. If parent’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), and parent is a [slot](https://dom.spec.whatwg.org/#concept-slot) whose [assigned nodes](https://dom.spec.whatwg.org/#slot-assigned-nodes) is the empty list, then run [signal a slot change](https://dom.spec.whatwg.org/#signal-a-slot-change) for parent. - 6. Run [assign slottables for a tree](https://dom.spec.whatwg.org/#assign-slotables-for-a-tree) with node’s [root](https://dom.spec.whatwg.org/#concept-tree-root). - 7. For each [shadow-including inclusive descendant](https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-descendant) inclusiveDescendant of node, in [shadow-including tree order](https://dom.spec.whatwg.org/#concept-shadow-including-tree-order): - + 1. Run the [insertion steps](https://dom.spec.whatwg.org/#concept-node-insert-ext) with inclusiveDescendant. - 2. If inclusiveDescendant is [connected](https://dom.spec.whatwg.org/#connected), then: - + 1. If inclusiveDescendant is [custom](https://dom.spec.whatwg.org/#concept-element-custom), then [enqueue a custom element callback reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction) with inclusiveDescendant, callback name "`connectedCallback`", and an empty argument list. - 2. Otherwise, [try to upgrade](https://html.spec.whatwg.org/multipage/custom-elements.html#concept-try-upgrade) inclusiveDescendant. - + If this successfully upgrades inclusiveDescendant, its `connectedCallback` will be enqueued automatically during the [upgrade an element](https://html.spec.whatwg.org/multipage/custom-elements.html#concept-upgrade-an-element) algorithm. - + 8. If _suppress observers flag_ is unset, then [queue a tree mutation record](https://dom.spec.whatwg.org/#queue-a-tree-mutation-record) for parent with nodes, « », previousSibling, and child. - 9. Run the [children changed steps](https://dom.spec.whatwg.org/#concept-node-children-changed-ext) for parent. - To append a node to a parent, [pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into parent before null. To replace a child with node within a parent, run these steps: 1. If parent is not a `[Document](https://dom.spec.whatwg.org/#document)`, `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)`, or `[Element](https://dom.spec.whatwg.org/#element)` [node](https://dom.spec.whatwg.org/#concept-node), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If node is a [host-including inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-host-including-inclusive-ancestor) of parent, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. If child’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is not parent, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotFoundError](https://webidl.spec.whatwg.org/#notfounderror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 4. If node is not a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)`, `[DocumentType](https://dom.spec.whatwg.org/#documenttype)`, `[Element](https://dom.spec.whatwg.org/#element)`, or `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 5. If either node is a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) and parent is a [document](https://dom.spec.whatwg.org/#concept-document), or node is a [doctype](https://dom.spec.whatwg.org/#concept-doctype) and parent is not a [document](https://dom.spec.whatwg.org/#concept-document), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 6. If parent is a [document](https://dom.spec.whatwg.org/#concept-document), and any of the statements below, switched on the interface node [implements](https://webidl.spec.whatwg.org/#implements), are true, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` - + If node has more than one [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child) or has a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) [child](https://dom.spec.whatwg.org/#concept-tree-child). - + Otherwise, if node has one [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child) and either parent has an [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child) that is not child or a [doctype](https://dom.spec.whatwg.org/#concept-doctype) is [following](https://dom.spec.whatwg.org/#concept-tree-following) child. - + `[Element](https://dom.spec.whatwg.org/#element)` - + parent has an [element](https://dom.spec.whatwg.org/#concept-element) [child](https://dom.spec.whatwg.org/#concept-tree-child) that is not child or a [doctype](https://dom.spec.whatwg.org/#concept-doctype) is [following](https://dom.spec.whatwg.org/#concept-tree-following) child. - + `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` - + parent has a [doctype](https://dom.spec.whatwg.org/#concept-doctype) [child](https://dom.spec.whatwg.org/#concept-tree-child) that is not child, or an [element](https://dom.spec.whatwg.org/#concept-element) is [preceding](https://dom.spec.whatwg.org/#concept-tree-preceding) child. - + The above statements differ from the [pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) algorithm. - + 7. Let referenceChild be child’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - 8. If referenceChild is node, then set referenceChild to node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - 9. Let previousSibling be child’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling). - -10. Let removedNodes be the empty set. - -11. If child’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is non-null, then: - - 1. Set removedNodes to « child ». - - 2. [Remove](https://dom.spec.whatwg.org/#concept-node-remove) child with the _suppress observers flag_ set. - - +10. Let removedNodes be the empty set. + +11. If child’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is non-null, then: + +12. Set removedNodes to « child ». +13. [Remove](https://dom.spec.whatwg.org/#concept-node-remove) child with the _suppress observers flag_ set. + The above can only be false if child is node. - -12. Let nodes be node’s [children](https://dom.spec.whatwg.org/#concept-tree-child) if node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node); otherwise « node ». - -13. [Insert](https://dom.spec.whatwg.org/#concept-node-insert) node into parent before referenceChild with the _suppress observers flag_ set. - -14. [Queue a tree mutation record](https://dom.spec.whatwg.org/#queue-a-tree-mutation-record) for parent with nodes, removedNodes, previousSibling, and referenceChild. - -15. Return child. - + +14. Let nodes be node’s [children](https://dom.spec.whatwg.org/#concept-tree-child) if node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node); otherwise « node ». + +15. [Insert](https://dom.spec.whatwg.org/#concept-node-insert) node into parent before referenceChild with the _suppress observers flag_ set. + +16. [Queue a tree mutation record](https://dom.spec.whatwg.org/#queue-a-tree-mutation-record) for parent with nodes, removedNodes, previousSibling, and referenceChild. + +17. Return child. To replace all with a node within a parent, run these steps: 1. Let removedNodes be parent’s [children](https://dom.spec.whatwg.org/#concept-tree-child). - 2. Let addedNodes be the empty set. - 3. If node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node), then set addedNodes to node’s [children](https://dom.spec.whatwg.org/#concept-tree-child). - 4. Otherwise, if node is non-null, set addedNodes to « node ». - 5. [Remove](https://dom.spec.whatwg.org/#concept-node-remove) all parent’s [children](https://dom.spec.whatwg.org/#concept-tree-child), in [tree order](https://dom.spec.whatwg.org/#concept-tree-order), with the _suppress observers flag_ set. - 6. If node is non-null, then [insert](https://dom.spec.whatwg.org/#concept-node-insert) node into parent before null with the _suppress observers flag_ set. - 7. If either addedNodes or removedNodes [is not empty](https://infra.spec.whatwg.org/#list-is-empty), then [queue a tree mutation record](https://dom.spec.whatwg.org/#queue-a-tree-mutation-record) for parent with addedNodes, removedNodes, null, and null. - This algorithm does not make any checks with regards to the [node tree](https://dom.spec.whatwg.org/#concept-node-tree) constraints. Specification authors need to use it wisely. To pre-remove a child from a parent, run these steps: 1. If child’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is not parent, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotFoundError](https://webidl.spec.whatwg.org/#notfounderror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. [Remove](https://dom.spec.whatwg.org/#concept-node-remove) child. - 3. Return child. - [Specifications](https://dom.spec.whatwg.org/#other-applicable-specifications) may define removing steps for all or some [nodes](https://dom.spec.whatwg.org/#concept-node). The algorithm is passed removedNode, and optionally oldParent, as indicated in the [remove](https://dom.spec.whatwg.org/#concept-node-remove) algorithm below. To remove a node, with an optional _suppress observers flag_, run these steps: 1. Let parent be node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) - 2. Assert: parent is non-null. - 3. Let index be node’s [index](https://dom.spec.whatwg.org/#concept-tree-index). - 4. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) of node, set its [start](https://dom.spec.whatwg.org/#concept-range-start) to (parent, index). - 5. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) of node, set its [end](https://dom.spec.whatwg.org/#concept-range-end) to (parent, index). - 6. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is parent and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is greater than index, decrease its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) by 1. - 7. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is parent and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is greater than index, decrease its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) by 1. - 8. For each `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)` object iterator whose [root](https://dom.spec.whatwg.org/#concept-traversal-root)’s [node document](https://dom.spec.whatwg.org/#concept-node-document) is node’s [node document](https://dom.spec.whatwg.org/#concept-node-document), run the [`NodeIterator` pre-removing steps](https://dom.spec.whatwg.org/#nodeiterator-pre-removing-steps) given node and iterator. - 9. Let oldPreviousSibling be node’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling). - -10. Let oldNextSibling be node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - -11. [Remove](https://infra.spec.whatwg.org/#list-remove) node from its parent’s [children](https://dom.spec.whatwg.org/#concept-tree-child). - -12. If node is [assigned](https://dom.spec.whatwg.org/#slotable-assigned), then run [assign slottables](https://dom.spec.whatwg.org/#assign-slotables) for node’s [assigned slot](https://dom.spec.whatwg.org/#slotable-assigned-slot). - -13. If parent’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), and parent is a [slot](https://dom.spec.whatwg.org/#concept-slot) whose [assigned nodes](https://dom.spec.whatwg.org/#slot-assigned-nodes) is the empty list, then run [signal a slot change](https://dom.spec.whatwg.org/#signal-a-slot-change) for parent. - -14. If node has an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) that is a [slot](https://dom.spec.whatwg.org/#concept-slot), then: - - 1. Run [assign slottables for a tree](https://dom.spec.whatwg.org/#assign-slotables-for-a-tree) with parent’s [root](https://dom.spec.whatwg.org/#concept-tree-root). - - 2. Run [assign slottables for a tree](https://dom.spec.whatwg.org/#assign-slotables-for-a-tree) with node. - -15. Run the [removing steps](https://dom.spec.whatwg.org/#concept-node-remove-ext) with node and parent. - -16. Let isParentConnected be parent’s [connected](https://dom.spec.whatwg.org/#connected). - -17. If node is [custom](https://dom.spec.whatwg.org/#concept-element-custom) and isParentConnected is true, then [enqueue a custom element callback reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction) with node, callback name "`disconnectedCallback`", and an empty argument list. - +10. Let oldNextSibling be node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). + +11. [Remove](https://infra.spec.whatwg.org/#list-remove) node from its parent’s [children](https://dom.spec.whatwg.org/#concept-tree-child). + +12. If node is [assigned](https://dom.spec.whatwg.org/#slotable-assigned), then run [assign slottables](https://dom.spec.whatwg.org/#assign-slotables) for node’s [assigned slot](https://dom.spec.whatwg.org/#slotable-assigned-slot). + +13. If parent’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), and parent is a [slot](https://dom.spec.whatwg.org/#concept-slot) whose [assigned nodes](https://dom.spec.whatwg.org/#slot-assigned-nodes) is the empty list, then run [signal a slot change](https://dom.spec.whatwg.org/#signal-a-slot-change) for parent. + +14. If node has an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) that is a [slot](https://dom.spec.whatwg.org/#concept-slot), then: + +15. Run [assign slottables for a tree](https://dom.spec.whatwg.org/#assign-slotables-for-a-tree) with parent’s [root](https://dom.spec.whatwg.org/#concept-tree-root). +16. Run [assign slottables for a tree](https://dom.spec.whatwg.org/#assign-slotables-for-a-tree) with node. +17. Run the [removing steps](https://dom.spec.whatwg.org/#concept-node-remove-ext) with node and parent. + +18. Let isParentConnected be parent’s [connected](https://dom.spec.whatwg.org/#connected). + +19. If node is [custom](https://dom.spec.whatwg.org/#concept-element-custom) and isParentConnected is true, then [enqueue a custom element callback reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction) with node, callback name "`disconnectedCallback`", and an empty argument list. + It is intentional for now that [custom](https://dom.spec.whatwg.org/#concept-element-custom) [elements](https://dom.spec.whatwg.org/#concept-element) do not get parent passed. This might change in the future if there is a need. - -18. For each [shadow-including descendant](https://dom.spec.whatwg.org/#concept-shadow-including-descendant) descendant of node, in [shadow-including tree order](https://dom.spec.whatwg.org/#concept-shadow-including-tree-order), then: - - 1. Run the [removing steps](https://dom.spec.whatwg.org/#concept-node-remove-ext) with descendant. - - 2. If descendant is [custom](https://dom.spec.whatwg.org/#concept-element-custom) and isParentConnected is true, then [enqueue a custom element callback reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction) with descendant, callback name "`disconnectedCallback`", and an empty argument list. - -19. For each [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) inclusiveAncestor of parent, and then [for each](https://infra.spec.whatwg.org/#list-iterate) registered of inclusiveAncestor’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list), if registered’s [options](https://dom.spec.whatwg.org/#registered-observer-options)\["`[subtree](https://dom.spec.whatwg.org/#dom-mutationobserverinit-subtree)`"\] is true, then [append](https://infra.spec.whatwg.org/#list-append) a new [transient registered observer](https://dom.spec.whatwg.org/#transient-registered-observer) whose [observer](https://dom.spec.whatwg.org/#registered-observer-observer) is registered’s [observer](https://dom.spec.whatwg.org/#registered-observer-observer), [options](https://dom.spec.whatwg.org/#registered-observer-options) is registered’s [options](https://dom.spec.whatwg.org/#registered-observer-options), and [source](https://dom.spec.whatwg.org/#transient-registered-observer-source) is registered to node’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list). - -20. If _suppress observers flag_ is unset, then [queue a tree mutation record](https://dom.spec.whatwg.org/#queue-a-tree-mutation-record) for parent with « », « node », oldPreviousSibling, and oldNextSibling. - -21. Run the [children changed steps](https://dom.spec.whatwg.org/#concept-node-children-changed-ext) for parent. - + +20. For each [shadow-including descendant](https://dom.spec.whatwg.org/#concept-shadow-including-descendant) descendant of node, in [shadow-including tree order](https://dom.spec.whatwg.org/#concept-shadow-including-tree-order), then: + +21. Run the [removing steps](https://dom.spec.whatwg.org/#concept-node-remove-ext) with descendant. +22. If descendant is [custom](https://dom.spec.whatwg.org/#concept-element-custom) and isParentConnected is true, then [enqueue a custom element callback reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction) with descendant, callback name "`disconnectedCallback`", and an empty argument list. +23. For each [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) inclusiveAncestor of parent, and then [for each](https://infra.spec.whatwg.org/#list-iterate) registered of inclusiveAncestor’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list), if registered’s [options](https://dom.spec.whatwg.org/#registered-observer-options)\["`[subtree](https://dom.spec.whatwg.org/#dom-mutationobserverinit-subtree)`"\] is true, then [append](https://infra.spec.whatwg.org/#list-append) a new [transient registered observer](https://dom.spec.whatwg.org/#transient-registered-observer) whose [observer](https://dom.spec.whatwg.org/#registered-observer-observer) is registered’s [observer](https://dom.spec.whatwg.org/#registered-observer-observer), [options](https://dom.spec.whatwg.org/#registered-observer-options) is registered’s [options](https://dom.spec.whatwg.org/#registered-observer-options), and [source](https://dom.spec.whatwg.org/#transient-registered-observer-source) is registered to node’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list). + +24. If _suppress observers flag_ is unset, then [queue a tree mutation record](https://dom.spec.whatwg.org/#queue-a-tree-mutation-record) for parent with « », « node », oldPreviousSibling, and oldNextSibling. + +25. Run the [children changed steps](https://dom.spec.whatwg.org/#concept-node-children-changed-ext) for parent. #### 4.2.4. Mixin `[NonElementParentNode](https://dom.spec.whatwg.org/#nonelementparentnode)`[](https://dom.spec.whatwg.org/#interface-nonelementparentnode) Web compatibility prevents the `[getElementById()](https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid)` method from being exposed on [elements](https://dom.spec.whatwg.org/#concept-element) (and therefore on `[ParentNode](https://dom.spec.whatwg.org/#parentnode)`). interface mixin `NonElementParentNode` { - [Element](https://dom.spec.whatwg.org/#element)? [getElementById](https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `elementId`[](https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid-elementid-elementid)); +[Element](https://dom.spec.whatwg.org/#element)? [getElementById](https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `elementId`[](https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid-elementid-elementid)); }; [Document](https://dom.spec.whatwg.org/#document) includes [NonElementParentNode](https://dom.spec.whatwg.org/#nonelementparentnode); [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) includes [NonElementParentNode](https://dom.spec.whatwg.org/#nonelementparentnode); @@ -2499,15 +2230,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5.5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -2531,88 +2262,83 @@ The `[DocumentOrShadowRoot](https://dom.spec.whatwg.org/#documentorshadowroot)` To convert nodes into a node, given nodes and document, run these steps: 1. Let node be null. - 2. Replace each string in nodes with a new `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is the string and [node document](https://dom.spec.whatwg.org/#concept-node-document) is document. - 3. If nodes contains one [node](https://dom.spec.whatwg.org/#concept-node), then set node to nodes\[0\]. - 4. Otherwise, set node to a new `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node) whose [node document](https://dom.spec.whatwg.org/#concept-node-document) is document, and then [append](https://dom.spec.whatwg.org/#concept-node-append) each [node](https://dom.spec.whatwg.org/#concept-node) in nodes, if any, to it. - 5. Return node. - interface mixin `ParentNode` { - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [children](https://dom.spec.whatwg.org/#dom-parentnode-children); - readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [firstElementChild](https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild); - readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [lastElementChild](https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [childElementCount](https://dom.spec.whatwg.org/#dom-parentnode-childelementcount); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [children](https://dom.spec.whatwg.org/#dom-parentnode-children); +readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [firstElementChild](https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild); +readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [lastElementChild](https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [childElementCount](https://dom.spec.whatwg.org/#dom-parentnode-childelementcount); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [prepend](https://dom.spec.whatwg.org/#dom-parentnode-prepend)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-parentnode-prepend-nodes-nodes)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [append](https://dom.spec.whatwg.org/#dom-parentnode-append)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-parentnode-append-nodes-nodes)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [replaceChildren](https://dom.spec.whatwg.org/#dom-parentnode-replacechildren)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-parentnode-replacechildren-nodes-nodes)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [prepend](https://dom.spec.whatwg.org/#dom-parentnode-prepend)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-parentnode-prepend-nodes-nodes)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [append](https://dom.spec.whatwg.org/#dom-parentnode-append)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-parentnode-append-nodes-nodes)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [replaceChildren](https://dom.spec.whatwg.org/#dom-parentnode-replacechildren)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-parentnode-replacechildren-nodes-nodes)); - [Element](https://dom.spec.whatwg.org/#element)? [querySelector](https://dom.spec.whatwg.org/#dom-parentnode-queryselector)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-parentnode-queryselector-selectors-selectors)); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [NodeList](https://dom.spec.whatwg.org/#nodelist) [querySelectorAll](https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall-selectors-selectors)); +[Element](https://dom.spec.whatwg.org/#element)? [querySelector](https://dom.spec.whatwg.org/#dom-parentnode-queryselector)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-parentnode-queryselector-selectors-selectors)); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [NodeList](https://dom.spec.whatwg.org/#nodelist) [querySelectorAll](https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-parentnode-queryselectorall-selectors-selectors)); }; [Document](https://dom.spec.whatwg.org/#document) includes [ParentNode](https://dom.spec.whatwg.org/#parentnode); [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) includes [ParentNode](https://dom.spec.whatwg.org/#parentnode); [Element](https://dom.spec.whatwg.org/#element) includes [ParentNode](https://dom.spec.whatwg.org/#parentnode); -[Document/children](https://developer.mozilla.org/en-US/docs/Web/API/Document/children "The read-only children property returns a live HTMLCollection which contains all of the child elements of the document upon which it was called.") +[Document/children](https://developer.mozilla.org/en-US/docs/Web/API/Document/children 'The read-only children property returns a live HTMLCollection which contains all of the child elements of the document upon which it was called.') In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ -[DocumentFragment/children](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/children "The read-only children property returns a live HTMLCollection which contains all of the child elements of the document fragment upon which it was called.") +[DocumentFragment/children](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/children 'The read-only children property returns a live HTMLCollection which contains all of the child elements of the document fragment upon which it was called.') In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ -[Element/children](https://developer.mozilla.org/en-US/docs/Web/API/Element/children "The read-only children property returns a live HTMLCollection which contains all of the child elements of the element upon which it was called.") +[Element/children](https://developer.mozilla.org/en-US/docs/Web/API/Element/children 'The read-only children property returns a live HTMLCollection which contains all of the child elements of the element upon which it was called.') In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -``collection = node . `[children](https://dom.spec.whatwg.org/#dom-parentnode-children)` `` +`` collection = node . `[children](https://dom.spec.whatwg.org/#dom-parentnode-children)` `` Returns the [child](https://dom.spec.whatwg.org/#concept-tree-child) [elements](https://dom.spec.whatwg.org/#concept-element). @@ -2622,15 +2348,15 @@ In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -2640,15 +2366,15 @@ In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -2658,19 +2384,19 @@ In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -``element = node . `[firstElementChild](https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild)` `` +`` element = node . `[firstElementChild](https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild)` `` Returns the first [child](https://dom.spec.whatwg.org/#concept-tree-child) that is an [element](https://dom.spec.whatwg.org/#concept-element); otherwise null. @@ -2680,15 +2406,15 @@ In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -2698,15 +2424,15 @@ In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -2716,73 +2442,73 @@ In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -``element = node . `[lastElementChild](https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild)` `` +`` element = node . `[lastElementChild](https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild)` `` Returns the last [child](https://dom.spec.whatwg.org/#concept-tree-child) that is an [element](https://dom.spec.whatwg.org/#concept-element); otherwise null. -[Document/prepend](https://developer.mozilla.org/en-US/docs/Web/API/Document/prepend "The Document.prepend() method inserts a set of Node objects or DOMString objects before the first child of the document. DOMString objects are inserted as equivalent Text nodes.") +[Document/prepend](https://developer.mozilla.org/en-US/docs/Web/API/Document/prepend 'The Document.prepend() method inserts a set of Node objects or DOMString objects before the first child of the document. DOMString objects are inserted as equivalent Text nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera41+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -[DocumentFragment/prepend](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/prepend "The DocumentFragment.prepend() method inserts a set of Node objects or DOMString objects before the first child of the document fragment. DOMString objects are inserted as equivalent Text nodes.") +[DocumentFragment/prepend](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/prepend 'The DocumentFragment.prepend() method inserts a set of Node objects or DOMString objects before the first child of the document fragment. DOMString objects are inserted as equivalent Text nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera41+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -[Element/prepend](https://developer.mozilla.org/en-US/docs/Web/API/Element/prepend "The Element.prepend() method inserts a set of Node objects or DOMString objects before the first child of the Element. DOMString objects are inserted as equivalent Text nodes.") +[Element/prepend](https://developer.mozilla.org/en-US/docs/Web/API/Element/prepend 'The Element.prepend() method inserts a set of Node objects or DOMString objects before the first child of the Element. DOMString objects are inserted as equivalent Text nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera41+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ @@ -2792,57 +2518,57 @@ Inserts nodes before the [first child](https://dom.spec.whatwg.org/#concept-tree [Throws](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` if the constraints of the [node tree](https://dom.spec.whatwg.org/#concept-node-tree) are violated. -[Document/append](https://developer.mozilla.org/en-US/docs/Web/API/Document/append "The Document.append() method inserts a set of Node objects or DOMString objects after the last child of the document. DOMString objects are inserted as equivalent Text nodes.") +[Document/append](https://developer.mozilla.org/en-US/docs/Web/API/Document/append 'The Document.append() method inserts a set of Node objects or DOMString objects after the last child of the document. DOMString objects are inserted as equivalent Text nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera41+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -[DocumentFragment/append](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/append "The DocumentFragment.append() method inserts a set of Node objects or DOMString objects after the last child of the document fragment. DOMString objects are inserted as equivalent Text nodes.") +[DocumentFragment/append](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/append 'The DocumentFragment.append() method inserts a set of Node objects or DOMString objects after the last child of the document fragment. DOMString objects are inserted as equivalent Text nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera41+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -[Element/append](https://developer.mozilla.org/en-US/docs/Web/API/Element/append "The Element.append() method inserts a set of Node objects or DOMString objects after the last child of the Element. DOMString objects are inserted as equivalent Text nodes.") +[Element/append](https://developer.mozilla.org/en-US/docs/Web/API/Element/append 'The Element.append() method inserts a set of Node objects or DOMString objects after the last child of the Element. DOMString objects are inserted as equivalent Text nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera41+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ @@ -2852,57 +2578,57 @@ Inserts nodes after the [last child](https://dom.spec.whatwg.org/#concept-tree-l [Throws](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` if the constraints of the [node tree](https://dom.spec.whatwg.org/#concept-node-tree) are violated. -[Document/replaceChildren](https://developer.mozilla.org/en-US/docs/Web/API/Document/replaceChildren "The Document.replaceChildren() method replaces the existing children of a Document with a specified new set of children.") +[Document/replaceChildren](https://developer.mozilla.org/en-US/docs/Web/API/Document/replaceChildren 'The Document.replaceChildren() method replaces the existing children of a Document with a specified new set of children.') In all current engines. Firefox78+Safari14+Chrome86+ -___ +--- Opera72+Edge86+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android79+iOS Safari14+Chrome for Android86+Android WebView86+Samsung Internet14.0+Opera Mobile61+ -[DocumentFragment/replaceChildren](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/replaceChildren "The DocumentFragment.replaceChildren() method replaces the existing children of a DocumentFragment with a specified new set of children. These can be DOMString or Node objects.") +[DocumentFragment/replaceChildren](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/replaceChildren 'The DocumentFragment.replaceChildren() method replaces the existing children of a DocumentFragment with a specified new set of children. These can be DOMString or Node objects.') In all current engines. Firefox78+Safari14+Chrome86+ -___ +--- Opera72+Edge86+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android79+iOS Safari14+Chrome for Android86+Android WebView86+Samsung Internet14.0+Opera Mobile61+ -[Element/replaceChildren](https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceChildren "The Element.replaceChildren() method replaces the existing children of a Node with a specified new set of children. These can be DOMString or Node objects.") +[Element/replaceChildren](https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceChildren 'The Element.replaceChildren() method replaces the existing children of a Node with a specified new set of children. These can be DOMString or Node objects.') In all current engines. Firefox78+Safari14+Chrome86+ -___ +--- Opera72+Edge86+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android79+iOS Safari14+Chrome for Android86+Android WebView86+Samsung Internet14.0+Opera Mobile61+ @@ -2912,21 +2638,21 @@ Replace all [children](https://dom.spec.whatwg.org/#concept-tree-child) of node [Throws](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` if the constraints of the [node tree](https://dom.spec.whatwg.org/#concept-node-tree) are violated. -[Document/querySelector](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector "The Document method querySelector() returns the first Element within the document that matches the specified selector, or group of selectors. If no matches are found, null is returned.") +[Document/querySelector](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector 'The Document method querySelector() returns the first Element within the document that matches the specified selector, or group of selectors. If no matches are found, null is returned.') In all current engines. Firefox3.5+Safari3.1+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari2+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -2936,15 +2662,15 @@ In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ @@ -2958,15 +2684,15 @@ In all current engines. Firefox3.5+Safari3.1+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari2+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -2976,51 +2702,51 @@ In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -[Element/querySelector](https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector "The querySelector() method of the Element interface returns the first element that is a descendant of the element on which it is invoked that matches the specified group of selectors.") +[Element/querySelector](https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector 'The querySelector() method of the Element interface returns the first element that is a descendant of the element on which it is invoked that matches the specified group of selectors.') In all current engines. Firefox3.5+Safari3.1+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari2+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -[Element/querySelectorAll](https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll "The Element method querySelectorAll() returns a static (not live) NodeList representing a list of elements matching the specified group of selectors which are descendants of the element on which the method was called.") +[Element/querySelectorAll](https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll 'The Element method querySelectorAll() returns a static (not live) NodeList representing a list of elements matching the specified group of selectors which are descendants of the element on which the method was called.') In all current engines. Firefox3.5+Safari3.1+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari2+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -3034,57 +2760,57 @@ The `firstElementChild` getter steps are to return the first [child](https://dom The `lastElementChild` getter steps are to return the last [child](https://dom.spec.whatwg.org/#concept-tree-child) that is an [element](https://dom.spec.whatwg.org/#concept-element); otherwise null. -[Document/childElementCount](https://developer.mozilla.org/en-US/docs/Web/API/Document/childElementCount "The Document.childElementCount read-only property returns the number of child elements of the document.") +[Document/childElementCount](https://developer.mozilla.org/en-US/docs/Web/API/Document/childElementCount 'The Document.childElementCount read-only property returns the number of child elements of the document.') In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ -[DocumentFragment/childElementCount](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/childElementCount "The Document.childElementCount read-only property returns the number of child elements of a DocumentFragment.") +[DocumentFragment/childElementCount](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/childElementCount 'The Document.childElementCount read-only property returns the number of child elements of a DocumentFragment.') In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ -[Element/childElementCount](https://developer.mozilla.org/en-US/docs/Web/API/Element/childElementCount "The Element.childElementCount read-only property returns the number of child elements of this element.") +[Element/childElementCount](https://developer.mozilla.org/en-US/docs/Web/API/Element/childElementCount 'The Element.childElementCount read-only property returns the number of child elements of this element.') In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ @@ -3093,25 +2819,18 @@ The `childElementCount` getter steps are to return the number of [children](http The `prepend(nodes)` method steps are: 1. Let node be the result of [converting nodes into a node](https://dom.spec.whatwg.org/#converting-nodes-into-a-node) given nodes and [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. [Pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into [this](https://webidl.spec.whatwg.org/#this) before [this](https://webidl.spec.whatwg.org/#this)’s [first child](https://dom.spec.whatwg.org/#concept-tree-first-child). - The `append(nodes)` method steps are: 1. Let node be the result of [converting nodes into a node](https://dom.spec.whatwg.org/#converting-nodes-into-a-node) given nodes and [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. [Append](https://dom.spec.whatwg.org/#concept-node-append) node to [this](https://webidl.spec.whatwg.org/#this). - The `replaceChildren(nodes)` method steps are: 1. Let node be the result of [converting nodes into a node](https://dom.spec.whatwg.org/#converting-nodes-into-a-node) given nodes and [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. [Ensure pre-insertion validity](https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity) of node into [this](https://webidl.spec.whatwg.org/#this) before null. - 3. [Replace all](https://dom.spec.whatwg.org/#concept-node-replace-all) with node within [this](https://webidl.spec.whatwg.org/#this). - The `querySelector(selectors)` method steps are to return the first result of running [scope-match a selectors string](https://dom.spec.whatwg.org/#scope-match-a-selectors-string) selectors against [this](https://webidl.spec.whatwg.org/#this), if the result is not an empty list; otherwise null. @@ -3122,8 +2841,8 @@ The `querySelectorAll(selectors)` method steps are to return the [static](https: Web compatibility prevents the `[previousElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling)` and `[nextElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling)` attributes from being exposed on [doctypes](https://dom.spec.whatwg.org/#concept-doctype) (and therefore on `[ChildNode](https://dom.spec.whatwg.org/#childnode)`). interface mixin `NonDocumentTypeChildNode` { - readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [previousElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling); - readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [nextElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling); +readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [previousElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling); +readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [nextElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling); }; [Element](https://dom.spec.whatwg.org/#element) includes [NonDocumentTypeChildNode](https://dom.spec.whatwg.org/#nondocumenttypechildnode); [CharacterData](https://dom.spec.whatwg.org/#characterdata) includes [NonDocumentTypeChildNode](https://dom.spec.whatwg.org/#nondocumenttypechildnode); @@ -3134,15 +2853,15 @@ In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -3152,19 +2871,19 @@ In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -``element = node . `[previousElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling)` `` +`` element = node . `[previousElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling)` `` Returns the first [preceding](https://dom.spec.whatwg.org/#concept-tree-preceding) [sibling](https://dom.spec.whatwg.org/#concept-tree-sibling) that is an [element](https://dom.spec.whatwg.org/#concept-element); otherwise null. @@ -3174,15 +2893,15 @@ In all current engines. Firefox25+Safari9+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android25+iOS Safari9+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -3192,19 +2911,19 @@ In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- Opera10+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -``element = node . `[nextElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling)` `` +`` element = node . `[nextElementSibling](https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling)` `` Returns the first [following](https://dom.spec.whatwg.org/#concept-tree-following) [sibling](https://dom.spec.whatwg.org/#concept-tree-sibling) that is an [element](https://dom.spec.whatwg.org/#concept-element); otherwise null. @@ -3215,10 +2934,10 @@ The `nextElementSibling` getter steps are to return the first [following](https: #### 4.2.8. Mixin `[ChildNode](https://dom.spec.whatwg.org/#childnode)`[](https://dom.spec.whatwg.org/#interface-childnode) interface mixin `ChildNode` { - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [before](https://dom.spec.whatwg.org/#dom-childnode-before)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-childnode-before-nodes-nodes)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [after](https://dom.spec.whatwg.org/#dom-childnode-after)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-childnode-after-nodes-nodes)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [replaceWith](https://dom.spec.whatwg.org/#dom-childnode-replacewith)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-childnode-replacewith-nodes-nodes)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [remove](https://dom.spec.whatwg.org/#dom-childnode-remove)(); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [before](https://dom.spec.whatwg.org/#dom-childnode-before)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-childnode-before-nodes-nodes)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [after](https://dom.spec.whatwg.org/#dom-childnode-after)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-childnode-after-nodes-nodes)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [replaceWith](https://dom.spec.whatwg.org/#dom-childnode-replacewith)(([Node](https://dom.spec.whatwg.org/#node) or [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString))... `nodes`[](https://dom.spec.whatwg.org/#dom-childnode-replacewith-nodes-nodes)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [remove](https://dom.spec.whatwg.org/#dom-childnode-remove)(); }; [DocumentType](https://dom.spec.whatwg.org/#documenttype) includes [ChildNode](https://dom.spec.whatwg.org/#childnode); [Element](https://dom.spec.whatwg.org/#element) includes [ChildNode](https://dom.spec.whatwg.org/#childnode); @@ -3230,15 +2949,15 @@ In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ @@ -3248,15 +2967,15 @@ In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ @@ -3266,19 +2985,19 @@ In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -``node . `[before(...nodes)](https://dom.spec.whatwg.org/#dom-childnode-before)` `` +`` node . `[before(...nodes)](https://dom.spec.whatwg.org/#dom-childnode-before)` `` Inserts nodes just before node, while replacing strings in nodes with equivalent `[Text](https://dom.spec.whatwg.org/#text)` [nodes](https://dom.spec.whatwg.org/#concept-node). @@ -3290,15 +3009,15 @@ In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ @@ -3308,15 +3027,15 @@ In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ @@ -3326,99 +3045,99 @@ In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -``node . `[after(...nodes)](https://dom.spec.whatwg.org/#dom-childnode-after)` `` +`` node . `[after(...nodes)](https://dom.spec.whatwg.org/#dom-childnode-after)` `` Inserts nodes just after node, while replacing strings in nodes with equivalent `[Text](https://dom.spec.whatwg.org/#text)` [nodes](https://dom.spec.whatwg.org/#concept-node). [Throws](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` if the constraints of the [node tree](https://dom.spec.whatwg.org/#concept-node-tree) are violated. -[CharacterData/replaceWith](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/replaceWith "The replaceWith() method of the CharacterData interface replaces this node in the children list of its parent with a set of Node objects or string.") +[CharacterData/replaceWith](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/replaceWith 'The replaceWith() method of the CharacterData interface replaces this node in the children list of its parent with a set of Node objects or string.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -[DocumentType/replaceWith](https://developer.mozilla.org/en-US/docs/Web/API/DocumentType/replaceWith "The DocumentType.replaceWith() method replaces the document type with a set of given nodes.") +[DocumentType/replaceWith](https://developer.mozilla.org/en-US/docs/Web/API/DocumentType/replaceWith 'The DocumentType.replaceWith() method replaces the document type with a set of given nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -[Element/replaceWith](https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceWith "The Element.replaceWith() method replaces this Element in the children list of its parent with a set of Node or DOMString objects. DOMString objects are inserted as equivalent Text nodes.") +[Element/replaceWith](https://developer.mozilla.org/en-US/docs/Web/API/Element/replaceWith 'The Element.replaceWith() method replaces this Element in the children list of its parent with a set of Node or DOMString objects. DOMString objects are inserted as equivalent Text nodes.') In all current engines. Firefox49+Safari10+Chrome54+ -___ +--- Opera39+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -``node . `[replaceWith(...nodes)](https://dom.spec.whatwg.org/#dom-childnode-replacewith)` `` +`` node . `[replaceWith(...nodes)](https://dom.spec.whatwg.org/#dom-childnode-replacewith)` `` Replaces node with nodes, while replacing strings in nodes with equivalent `[Text](https://dom.spec.whatwg.org/#text)` [nodes](https://dom.spec.whatwg.org/#concept-node). [Throws](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` if the constraints of the [node tree](https://dom.spec.whatwg.org/#concept-node-tree) are violated. -[CharacterData/remove](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/remove "The remove() method of the CharacterData removes the text contained in the node.") +[CharacterData/remove](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/remove 'The remove() method of the CharacterData removes the text contained in the node.') In all current engines. Firefox23+Safari7+Chrome24+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android23+iOS Safari7+Chrome for Android25+Android WebView37+Samsung Internet1.5+Opera Mobile14+ @@ -3428,133 +3147,115 @@ In all current engines. Firefox23+Safari7+Chrome24+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android23+iOS Safari7+Chrome for Android25+Android WebView37+Samsung Internet1.5+Opera Mobile14+ -[Element/remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove "The Element.remove() method removes the element from the tree it belongs to.") +[Element/remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove 'The Element.remove() method removes the element from the tree it belongs to.') In all current engines. Firefox23+Safari7+Chrome24+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android23+iOS Safari7+Chrome for Android25+Android WebView37+Samsung Internet1.5+Opera Mobile14+ -``node . `[remove()](https://dom.spec.whatwg.org/#dom-childnode-remove)` `` +`` node . `[remove()](https://dom.spec.whatwg.org/#dom-childnode-remove)` `` Removes node. The `before(nodes)` method steps are: 1. Let parent be [this](https://webidl.spec.whatwg.org/#this)’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 2. If parent is null, then return. - 3. Let viablePreviousSibling be [this](https://webidl.spec.whatwg.org/#this)’s first [preceding](https://dom.spec.whatwg.org/#concept-tree-preceding) [sibling](https://dom.spec.whatwg.org/#concept-tree-sibling) not in nodes; otherwise null. - 4. Let node be the result of [converting nodes into a node](https://dom.spec.whatwg.org/#converting-nodes-into-a-node), given nodes and [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 5. If viablePreviousSibling is null, then set it to parent’s [first child](https://dom.spec.whatwg.org/#concept-tree-first-child); otherwise to viablePreviousSibling’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - 6. [Pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into parent before viablePreviousSibling. - The `after(nodes)` method steps are: 1. Let parent be [this](https://webidl.spec.whatwg.org/#this)’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 2. If parent is null, then return. - 3. Let viableNextSibling be [this](https://webidl.spec.whatwg.org/#this)’s first [following](https://dom.spec.whatwg.org/#concept-tree-following) [sibling](https://dom.spec.whatwg.org/#concept-tree-sibling) not in nodes; otherwise null. - 4. Let node be the result of [converting nodes into a node](https://dom.spec.whatwg.org/#converting-nodes-into-a-node), given nodes and [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 5. [Pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into parent before viableNextSibling. - The `replaceWith(nodes)` method steps are: 1. Let parent be [this](https://webidl.spec.whatwg.org/#this)’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 2. If parent is null, then return. - 3. Let viableNextSibling be [this](https://webidl.spec.whatwg.org/#this)’s first [following](https://dom.spec.whatwg.org/#concept-tree-following) [sibling](https://dom.spec.whatwg.org/#concept-tree-sibling) not in nodes; otherwise null. - 4. Let node be the result of [converting nodes into a node](https://dom.spec.whatwg.org/#converting-nodes-into-a-node), given nodes and [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 5. If [this](https://webidl.spec.whatwg.org/#this)’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is parent, [replace](https://dom.spec.whatwg.org/#concept-node-replace) [this](https://webidl.spec.whatwg.org/#this) with node within parent. - + [This](https://webidl.spec.whatwg.org/#this) could have been inserted into node. - + 6. Otherwise, [pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into parent before viableNextSibling. - The `remove()` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this)’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is null, then return. - 2. [Remove](https://dom.spec.whatwg.org/#concept-node-remove) [this](https://webidl.spec.whatwg.org/#this). - #### 4.2.9. Mixin `[Slottable](https://dom.spec.whatwg.org/#slotable)`[](https://dom.spec.whatwg.org/#mixin-slotable) interface mixin `Slottable` { - readonly attribute [HTMLSlotElement](https://html.spec.whatwg.org/multipage/scripting.html#htmlslotelement)? [assignedSlot](https://dom.spec.whatwg.org/#dom-slotable-assignedslot); +readonly attribute [HTMLSlotElement](https://html.spec.whatwg.org/multipage/scripting.html#htmlslotelement)? [assignedSlot](https://dom.spec.whatwg.org/#dom-slotable-assignedslot); }; [Element](https://dom.spec.whatwg.org/#element) includes [Slottable](https://dom.spec.whatwg.org/#slotable); [Text](https://dom.spec.whatwg.org/#text) includes [Slottable](https://dom.spec.whatwg.org/#slotable); -[Element/assignedSlot](https://developer.mozilla.org/en-US/docs/Web/API/Element/assignedSlot "The assignedSlot read-only property of the Element interface returns an HTMLSlotElement representing the element the node is inserted in.") +[Element/assignedSlot](https://developer.mozilla.org/en-US/docs/Web/API/Element/assignedSlot 'The assignedSlot read-only property of the Element interface returns an HTMLSlotElement representing the element the node is inserted in.') In all current engines. Firefox63+Safari10.1+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10.3+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ -[Text/assignedSlot](https://developer.mozilla.org/en-US/docs/Web/API/Text/assignedSlot "The read-only assignedSlot property of the Text interface returns the HTMLSlotElement object associated with the element.") +[Text/assignedSlot](https://developer.mozilla.org/en-US/docs/Web/API/Text/assignedSlot 'The read-only assignedSlot property of the Text interface returns the HTMLSlotElement object associated with the element.') In all current engines. Firefox63+Safari10.1+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for Android63+iOS Safari10.3+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ @@ -3572,21 +3273,21 @@ The [collection](https://dom.spec.whatwg.org/#concept-collection) then represent ##### 4.2.10.1. Interface `[NodeList](https://dom.spec.whatwg.org/#nodelist)`[](https://dom.spec.whatwg.org/#interface-nodelist) -[NodeList](https://developer.mozilla.org/en-US/docs/Web/API/NodeList "NodeList objects are collections of nodes, usually returned by properties such as Node.childNodes and methods such as document.querySelectorAll().") +[NodeList](https://developer.mozilla.org/en-US/docs/Web/API/NodeList 'NodeList objects are collections of nodes, usually returned by properties such as Node.childNodes and methods such as document.querySelectorAll().') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -3594,26 +3295,26 @@ A `[NodeList](https://dom.spec.whatwg.org/#nodelist)` object is a [collection](h \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `NodeList` { - getter [Node](https://dom.spec.whatwg.org/#node)? [item](https://dom.spec.whatwg.org/#dom-nodelist-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-nodelist-item-index-index)); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-nodelist-length); - iterable<[Node](https://dom.spec.whatwg.org/#node)\>; +getter [Node](https://dom.spec.whatwg.org/#node)? [item](https://dom.spec.whatwg.org/#dom-nodelist-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-nodelist-item-index-index)); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-nodelist-length); +iterable<[Node](https://dom.spec.whatwg.org/#node)\>; }; -[NodeList/length](https://developer.mozilla.org/en-US/docs/Web/API/NodeList/length "The NodeList.length property returns the number of items in a NodeList.") +[NodeList/length](https://developer.mozilla.org/en-US/docs/Web/API/NodeList/length 'The NodeList.length property returns the number of items in a NodeList.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -3627,15 +3328,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -3647,50 +3348,50 @@ Returns the [node](https://dom.spec.whatwg.org/#concept-node) with index index f ##### 4.2.10.2. Interface `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)`[](https://dom.spec.whatwg.org/#interface-htmlcollection) -[HTMLCollection](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection "The HTMLCollection interface represents a generic collection (array-like object similar to arguments) of elements (in document order) and offers methods and properties for selecting from the list.") +[HTMLCollection](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection 'The HTMLCollection interface represents a generic collection (array-like object similar to arguments) of elements (in document order) and offers methods and properties for selecting from the list.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE8+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window, [LegacyUnenumerableNamedProperties](https://webidl.spec.whatwg.org/#LegacyUnenumerableNamedProperties)\] interface `HTMLCollection` { - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-htmlcollection-length); - getter [Element](https://dom.spec.whatwg.org/#element)? [item](https://dom.spec.whatwg.org/#dom-htmlcollection-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-htmlcollection-item-index-index)); - getter [Element](https://dom.spec.whatwg.org/#element)? `namedItem`([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `name`[](https://dom.spec.whatwg.org/#dom-htmlcollection-nameditem-name-name)); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-htmlcollection-length); +getter [Element](https://dom.spec.whatwg.org/#element)? [item](https://dom.spec.whatwg.org/#dom-htmlcollection-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-htmlcollection-item-index-index)); +getter [Element](https://dom.spec.whatwg.org/#element)? `namedItem`([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `name`[](https://dom.spec.whatwg.org/#dom-htmlcollection-nameditem-name-name)); }; An `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` object is a [collection](https://dom.spec.whatwg.org/#concept-collection) of [elements](https://dom.spec.whatwg.org/#concept-element). `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` is a historical artifact we cannot rid the web of. While developers are of course welcome to keep using it, new API standard designers ought not to use it (use `sequence` in IDL instead). -[HTMLCollection/length](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/length "The HTMLCollection.length property returns the number of items in a HTMLCollection.") +[HTMLCollection/length](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/length 'The HTMLCollection.length property returns the number of items in a HTMLCollection.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE8+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -3698,21 +3399,21 @@ collection . `[length](https://dom.spec.whatwg.org/#dom-htmlcollection-length)` Returns the number of [elements](https://dom.spec.whatwg.org/#concept-element) in the [collection](https://dom.spec.whatwg.org/#concept-collection). -[HTMLCollection/item](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/item "The HTMLCollection method item() returns the node located at the specified offset into the collection.") +[HTMLCollection/item](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/item 'The HTMLCollection method item() returns the node located at the specified offset into the collection.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE8+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -3737,45 +3438,40 @@ The `item(index)` method steps are to return the indexth [element](https://dom.s The [supported property names](https://webidl.spec.whatwg.org/#dfn-supported-property-names) are the values from the list returned by these steps: 1. Let result be an empty list. - 2. For each element [represented by the collection](https://dom.spec.whatwg.org/#represented-by-the-collection), in [tree order](https://dom.spec.whatwg.org/#concept-tree-order): - + 1. If element has an [ID](https://dom.spec.whatwg.org/#concept-id) which is not in result, append element’s [ID](https://dom.spec.whatwg.org/#concept-id) to result. - 2. If element is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and [has](https://dom.spec.whatwg.org/#concept-element-attribute-has) a [`name` attribute](https://dom.spec.whatwg.org/#concept-named-attribute) whose [value](https://dom.spec.whatwg.org/#concept-attribute-value) is neither the empty string nor is in result, append element’s [`name` attribute](https://dom.spec.whatwg.org/#concept-named-attribute) [value](https://dom.spec.whatwg.org/#concept-attribute-value) to result. - + 3. Return result. - -[HTMLCollection/namedItem](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/namedItem "The namedItem() method of the HTMLCollection interface returns the first Element in the collection whose id or name attribute match the specified name, or null if no element matches.") +[HTMLCollection/namedItem](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection/namedItem 'The namedItem() method of the HTMLCollection interface returns the first Element in the collection whose id or name attribute match the specified name, or null if no element matches.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE8+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `namedItem(key)`[](https://dom.spec.whatwg.org/#dom-htmlcollection-nameditem-key) method steps are: 1. If key is the empty string, return null. - 2. Return the first [element](https://dom.spec.whatwg.org/#concept-element) in the [collection](https://dom.spec.whatwg.org/#concept-collection) for which at least one of the following is true: - + - it has an [ID](https://dom.spec.whatwg.org/#concept-id) which is key; - it is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and [has](https://dom.spec.whatwg.org/#concept-element-attribute-has) a [`name` attribute](https://dom.spec.whatwg.org/#concept-named-attribute) whose [value](https://dom.spec.whatwg.org/#concept-attribute-value) is key; - + or null if there is no such [element](https://dom.spec.whatwg.org/#concept-element). - ### 4.3. Mutation observers[](https://dom.spec.whatwg.org/#mutation-observers) @@ -3786,36 +3482,25 @@ Each [similar-origin window agent](https://html.spec.whatwg.org/multipage/webapp To queue a mutation observer microtask, run these steps: 1. If the [surrounding agent](https://tc39.es/ecma262/#surrounding-agent)’s [mutation observer microtask queued](https://dom.spec.whatwg.org/#mutation-observer-compound-microtask-queued-flag) is true, then return. - 2. Set the [surrounding agent](https://tc39.es/ecma262/#surrounding-agent)’s [mutation observer microtask queued](https://dom.spec.whatwg.org/#mutation-observer-compound-microtask-queued-flag) to true. - 3. [Queue](https://html.spec.whatwg.org/multipage/webappapis.html#queue-a-microtask) a [microtask](https://html.spec.whatwg.org/multipage/webappapis.html#microtask) to [notify mutation observers](https://dom.spec.whatwg.org/#notify-mutation-observers). - To notify mutation observers, run these steps: 1. Set the [surrounding agent](https://tc39.es/ecma262/#surrounding-agent)’s [mutation observer microtask queued](https://dom.spec.whatwg.org/#mutation-observer-compound-microtask-queued-flag) to false. - 2. Let notifySet be a [clone](https://infra.spec.whatwg.org/#list-clone) of the [surrounding agent](https://tc39.es/ecma262/#surrounding-agent)’s [mutation observers](https://dom.spec.whatwg.org/#mutation-observer-list). - 3. Let signalSet be a [clone](https://infra.spec.whatwg.org/#list-clone) of the [surrounding agent](https://tc39.es/ecma262/#surrounding-agent)’s [signal slots](https://dom.spec.whatwg.org/#signal-slot-list). - 4. [Empty](https://infra.spec.whatwg.org/#list-empty) the [surrounding agent](https://tc39.es/ecma262/#surrounding-agent)’s [signal slots](https://dom.spec.whatwg.org/#signal-slot-list). - 5. [For each](https://infra.spec.whatwg.org/#list-iterate) mo of notifySet: - + 1. Let records be a [clone](https://infra.spec.whatwg.org/#list-clone) of mo’s [record queue](https://dom.spec.whatwg.org/#concept-mo-queue). - 2. [Empty](https://infra.spec.whatwg.org/#list-empty) mo’s [record queue](https://dom.spec.whatwg.org/#concept-mo-queue). - 3. [For each](https://infra.spec.whatwg.org/#list-iterate) node of mo’s [node list](https://dom.spec.whatwg.org/#mutationobserver-node-list), [remove](https://infra.spec.whatwg.org/#list-remove) all [transient registered observers](https://dom.spec.whatwg.org/#transient-registered-observer) whose [observer](https://dom.spec.whatwg.org/#registered-observer-observer) is mo from node’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list). - 4. If records [is not empty](https://infra.spec.whatwg.org/#list-is-empty), then [invoke](https://webidl.spec.whatwg.org/#invoke-a-callback-function) mo’s [callback](https://dom.spec.whatwg.org/#concept-mo-callback) with « records, mo », and mo. If this throws an exception, catch it, and [report the exception](https://html.spec.whatwg.org/multipage/webappapis.html#report-the-exception). - + 6. [For each](https://infra.spec.whatwg.org/#list-iterate) slot of signalSet, [fire an event](https://dom.spec.whatwg.org/#concept-event-fire) named `[slotchange](https://html.spec.whatwg.org/multipage/indices.html#event-slotchange)`, with its `[bubbles](https://dom.spec.whatwg.org/#dom-event-bubbles)` attribute set to true, at slot. - -___ +--- Each [node](https://dom.spec.whatwg.org/#concept-node) has a registered observer list (a [list](https://infra.spec.whatwg.org/#list) of zero or more [registered observers](https://dom.spec.whatwg.org/#registered-observer)), which is initially empty. @@ -3827,43 +3512,43 @@ A transient registered observer is a [registered observer](https://dom.spec.what #### 4.3.1. Interface `[MutationObserver](https://dom.spec.whatwg.org/#mutationobserver)`[](https://dom.spec.whatwg.org/#interface-mutationobserver) -[MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver "The MutationObserver interface provides the ability to watch for changes being made to the DOM tree. It is designed as a replacement for the older Mutation Events feature, which was part of the DOM3 Events specification.") +[MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver 'The MutationObserver interface provides the ability to watch for changes being made to the DOM tree. It is designed as a replacement for the older Mutation Events feature, which was part of the DOM3 Events specification.') In all current engines. Firefox14+Safari7+Chrome26+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IE11 -___ +--- Firefox for Android14+iOS Safari7+Chrome for Android26+Android WebView37+Samsung Internet1.5+Opera Mobile14+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `MutationObserver` { - [constructor](https://dom.spec.whatwg.org/#dom-mutationobserver-mutationobserver)([MutationCallback](https://dom.spec.whatwg.org/#callbackdef-mutationcallback) `callback`[](https://dom.spec.whatwg.org/#dom-mutationobserver-mutationobserver-callback-callback)); +[constructor](https://dom.spec.whatwg.org/#dom-mutationobserver-mutationobserver)([MutationCallback](https://dom.spec.whatwg.org/#callbackdef-mutationcallback) `callback`[](https://dom.spec.whatwg.org/#dom-mutationobserver-mutationobserver-callback-callback)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [observe](https://dom.spec.whatwg.org/#dom-mutationobserver-observe)([Node](https://dom.spec.whatwg.org/#node) `target`[](https://dom.spec.whatwg.org/#dom-mutationobserver-observe-target-options-target), optional [MutationObserverInit](https://dom.spec.whatwg.org/#dictdef-mutationobserverinit) `options`[](https://dom.spec.whatwg.org/#dom-mutationobserver-observe-target-options-options) = {}); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [disconnect](https://dom.spec.whatwg.org/#dom-mutationobserver-disconnect)(); - [sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[MutationRecord](https://dom.spec.whatwg.org/#mutationrecord)\> [takeRecords](https://dom.spec.whatwg.org/#dom-mutationobserver-takerecords)(); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [observe](https://dom.spec.whatwg.org/#dom-mutationobserver-observe)([Node](https://dom.spec.whatwg.org/#node) `target`[](https://dom.spec.whatwg.org/#dom-mutationobserver-observe-target-options-target), optional [MutationObserverInit](https://dom.spec.whatwg.org/#dictdef-mutationobserverinit) `options`[](https://dom.spec.whatwg.org/#dom-mutationobserver-observe-target-options-options) = {}); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [disconnect](https://dom.spec.whatwg.org/#dom-mutationobserver-disconnect)(); +[sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[MutationRecord](https://dom.spec.whatwg.org/#mutationrecord)\> [takeRecords](https://dom.spec.whatwg.org/#dom-mutationobserver-takerecords)(); }; callback `MutationCallback` = [undefined](https://webidl.spec.whatwg.org/#idl-undefined) ([sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[MutationRecord](https://dom.spec.whatwg.org/#mutationrecord)\> `mutations`[](https://dom.spec.whatwg.org/#dom-mutationcallback-mutations), [MutationObserver](https://dom.spec.whatwg.org/#mutationobserver) `observer`[](https://dom.spec.whatwg.org/#dom-mutationcallback-observer)); dictionary `MutationObserverInit` { - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `childList` = false; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `attributes`; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `characterData`; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `subtree` = false; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `attributeOldValue`; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `characterDataOldValue`; - [sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)\> `attributeFilter`; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `childList` = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `attributes`; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `characterData`; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `subtree` = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `attributeOldValue`; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `characterDataOldValue`; +[sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)\> `attributeFilter`; }; A `[MutationObserver](https://dom.spec.whatwg.org/#mutationobserver)` object can be used to observe mutations to the [tree](https://dom.spec.whatwg.org/#concept-tree) of [nodes](https://dom.spec.whatwg.org/#concept-node). @@ -3874,47 +3559,47 @@ Each `[MutationObserver](https://dom.spec.whatwg.org/#mutationobserver)` object - A node list (a [list](https://infra.spec.whatwg.org/#list) of [nodes](https://dom.spec.whatwg.org/#concept-node)), which is initially empty. - A record queue (a [queue](https://infra.spec.whatwg.org/#queue) of zero or more `[MutationRecord](https://dom.spec.whatwg.org/#mutationrecord)` objects), which is initially empty. -[MutationObserver/MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/MutationObserver "The DOM MutationObserver() constructor — part of the MutationObserver interface — creates and returns a new observer which invokes a specified callback when DOM events occur.") +[MutationObserver/MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/MutationObserver 'The DOM MutationObserver() constructor — part of the MutationObserver interface — creates and returns a new observer which invokes a specified callback when DOM events occur.') In all current engines. Firefox14+Safari7+Chrome26+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IE11 -___ +--- Firefox for Android14+iOS Safari7+Chrome for Android26+Android WebView37+Samsung Internet1.5+Opera Mobile14+ -``observer = new `[MutationObserver(callback)](https://dom.spec.whatwg.org/#dom-mutationobserver-mutationobserver)` `` +`` observer = new `[MutationObserver(callback)](https://dom.spec.whatwg.org/#dom-mutationobserver-mutationobserver)` `` Constructs a `[MutationObserver](https://dom.spec.whatwg.org/#mutationobserver)` object and sets its [callback](https://dom.spec.whatwg.org/#concept-mo-callback) to callback. The callback is invoked with a list of `[MutationRecord](https://dom.spec.whatwg.org/#mutationrecord)` objects as first argument and the constructed `[MutationObserver](https://dom.spec.whatwg.org/#mutationobserver)` object as second argument. It is invoked after [nodes](https://dom.spec.whatwg.org/#concept-node) registered with the `[observe()](https://dom.spec.whatwg.org/#dom-mutationobserver-observe)` method, are mutated. -[MutationObserver/observe](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe "The MutationObserver method observe() configures the MutationObserver callback to begin receiving notifications of changes to the DOM that match the given options.") +[MutationObserver/observe](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe 'The MutationObserver method observe() configures the MutationObserver callback to begin receiving notifications of changes to the DOM that match the given options.') In all current engines. Firefox14+Safari6+Chrome18+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IE11 -___ +--- Firefox for Android14+iOS Safari6+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile14+ -``observer . `[observe(target, options)](https://dom.spec.whatwg.org/#dom-mutationobserver-observe)` `` +`` observer . `[observe(target, options)](https://dom.spec.whatwg.org/#dom-mutationobserver-observe)` `` Instructs the user agent to observe a given target (a [node](https://dom.spec.whatwg.org/#concept-node)) and report any mutations based on the criteria given by options (an object). @@ -3948,25 +3633,25 @@ Set to true if `[characterData](https://dom.spec.whatwg.org/#dom-mutationobserve Set to a list of [attribute](https://dom.spec.whatwg.org/#concept-attribute) [local names](https://dom.spec.whatwg.org/#concept-attribute-local-name) (without [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace)) if not all [attribute](https://dom.spec.whatwg.org/#concept-attribute) mutations need to be observed and `[attributes](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributes)` is true or omitted. -[MutationObserver/disconnect](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/disconnect "The MutationObserver method disconnect() tells the observer to stop watching for mutations.") +[MutationObserver/disconnect](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/disconnect 'The MutationObserver method disconnect() tells the observer to stop watching for mutations.') In all current engines. Firefox14+Safari6+Chrome18+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IE11 -___ +--- Firefox for Android14+iOS Safari6+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile14+ -``observer . `[disconnect()](https://dom.spec.whatwg.org/#dom-mutationobserver-disconnect)` `` +`` observer . `[disconnect()](https://dom.spec.whatwg.org/#dom-mutationobserver-disconnect)` `` Stops observer from observing any mutations. Until the `[observe()](https://dom.spec.whatwg.org/#dom-mutationobserver-observe)` method is used again, observer’s [callback](https://dom.spec.whatwg.org/#concept-mo-callback) will not be invoked. @@ -3976,115 +3661,90 @@ In all current engines. Firefox14+Safari6+Chrome18+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IE11 -___ +--- Firefox for Android14+iOS Safari6+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile14+ -``observer . `[takeRecords()](https://dom.spec.whatwg.org/#dom-mutationobserver-takerecords)` `` +`` observer . `[takeRecords()](https://dom.spec.whatwg.org/#dom-mutationobserver-takerecords)` `` Empties the [record queue](https://dom.spec.whatwg.org/#concept-mo-queue) and returns what was in there. The `new MutationObserver(callback)` constructor steps are: 1. Set [this](https://webidl.spec.whatwg.org/#this)’s [callback](https://dom.spec.whatwg.org/#concept-mo-callback) to callback. - 2. [Append](https://infra.spec.whatwg.org/#set-append) [this](https://webidl.spec.whatwg.org/#this) to [this](https://webidl.spec.whatwg.org/#this)’s [relevant agent](https://html.spec.whatwg.org/multipage/webappapis.html#relevant-agent)’s [mutation observers](https://dom.spec.whatwg.org/#mutation-observer-list). - The `observe(target, options)` method steps are: 1. If either options\["`[attributeOldValue](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributeoldvalue)`"\] or options\["`[attributeFilter](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributefilter)`"\] [exists](https://infra.spec.whatwg.org/#map-exists), and options\["`[attributes](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributes)`"\] does not [exist](https://infra.spec.whatwg.org/#map-exists), then set options\["`[attributes](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributes)`"\] to true. - 2. If options\["`[characterDataOldValue](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdataoldvalue)`"\] [exists](https://infra.spec.whatwg.org/#map-exists) and options\["`[characterData](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdata)`"\] does not [exist](https://infra.spec.whatwg.org/#map-exists), then set options\["`[characterData](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdata)`"\] to true. - 3. If none of options\["`[childList](https://dom.spec.whatwg.org/#dom-mutationobserverinit-childlist)`"\], options\["`[attributes](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributes)`"\], and options\["`[characterData](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdata)`"\] is true, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a `TypeError`. - 4. If options\["`[attributeOldValue](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributeoldvalue)`"\] is true and options\["`[attributes](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributes)`"\] is false, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a `TypeError`. - 5. If options\["`[attributeFilter](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributefilter)`"\] is present and options\["`[attributes](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributes)`"\] is false, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a `TypeError`. - 6. If options\["`[characterDataOldValue](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdataoldvalue)`"\] is true and options\["`[characterData](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdata)`"\] is false, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a `TypeError`. - 7. [For each](https://infra.spec.whatwg.org/#list-iterate) registered of target’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list), if registered’s [observer](https://dom.spec.whatwg.org/#registered-observer-observer) is [this](https://webidl.spec.whatwg.org/#this): - + 1. [For each](https://infra.spec.whatwg.org/#list-iterate) node of [this](https://webidl.spec.whatwg.org/#this)’s [node list](https://dom.spec.whatwg.org/#mutationobserver-node-list), [remove](https://infra.spec.whatwg.org/#list-remove) all [transient registered observers](https://dom.spec.whatwg.org/#transient-registered-observer) whose [source](https://dom.spec.whatwg.org/#transient-registered-observer-source) is registered from node’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list). - 2. Set registered’s [options](https://dom.spec.whatwg.org/#registered-observer-options) to options. - + 8. Otherwise: - + 1. [Append](https://infra.spec.whatwg.org/#list-append) a new [registered observer](https://dom.spec.whatwg.org/#registered-observer) whose [observer](https://dom.spec.whatwg.org/#registered-observer-observer) is [this](https://webidl.spec.whatwg.org/#this) and [options](https://dom.spec.whatwg.org/#registered-observer-options) is options to target’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list). - 2. [Append](https://infra.spec.whatwg.org/#list-append) target to [this](https://webidl.spec.whatwg.org/#this)’s [node list](https://dom.spec.whatwg.org/#mutationobserver-node-list). - The `disconnect()` method steps are: 1. [For each](https://infra.spec.whatwg.org/#list-iterate) node of [this](https://webidl.spec.whatwg.org/#this)’s [node list](https://dom.spec.whatwg.org/#mutationobserver-node-list), [remove](https://infra.spec.whatwg.org/#list-remove) any [registered observer](https://dom.spec.whatwg.org/#registered-observer) from node’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list) for which [this](https://webidl.spec.whatwg.org/#this) is the [observer](https://dom.spec.whatwg.org/#registered-observer-observer). - 2. [Empty](https://infra.spec.whatwg.org/#list-empty) [this](https://webidl.spec.whatwg.org/#this)’s [record queue](https://dom.spec.whatwg.org/#concept-mo-queue). - The `takeRecords()` method steps are: 1. Let records be a [clone](https://infra.spec.whatwg.org/#list-clone) of [this](https://webidl.spec.whatwg.org/#this)’s [record queue](https://dom.spec.whatwg.org/#concept-mo-queue). - 2. [Empty](https://infra.spec.whatwg.org/#list-empty) [this](https://webidl.spec.whatwg.org/#this)’s [record queue](https://dom.spec.whatwg.org/#concept-mo-queue). - 3. Return records. - #### 4.3.2. Queuing a mutation record[](https://dom.spec.whatwg.org/#queueing-a-mutation-record) To queue a mutation record of type for target with name, namespace, oldValue, addedNodes, removedNodes, previousSibling, and nextSibling, run these steps: 1. Let interestedObservers be an empty [map](https://infra.spec.whatwg.org/#ordered-map). - 2. Let nodes be the [inclusive ancestors](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of target. - 3. For each node in nodes, and then [for each](https://infra.spec.whatwg.org/#list-iterate) registered of node’s [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list): - + 1. Let options be registered’s [options](https://dom.spec.whatwg.org/#registered-observer-options). - 2. If none of the following are true - + - node is not target and options\["`[subtree](https://dom.spec.whatwg.org/#dom-mutationobserverinit-subtree)`"\] is false - type is "`attributes`" and options\["`[attributes](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributes)`"\] either does not [exist](https://infra.spec.whatwg.org/#map-exists) or is false - type is "`attributes`", options\["`[attributeFilter](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributefilter)`"\] [exists](https://infra.spec.whatwg.org/#map-exists), and options\["`[attributeFilter](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributefilter)`"\] does not [contain](https://infra.spec.whatwg.org/#list-contain) name or namespace is non-null - type is "`characterData`" and options\["`[characterData](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdata)`"\] either does not [exist](https://infra.spec.whatwg.org/#map-exists) or is false - type is "`childList`" and options\["`[childList](https://dom.spec.whatwg.org/#dom-mutationobserverinit-childlist)`"\] is false - + then: - + 1. Let mo be registered’s [observer](https://dom.spec.whatwg.org/#registered-observer-observer). - 2. If interestedObservers\[mo\] does not [exist](https://infra.spec.whatwg.org/#map-exists), then [set](https://infra.spec.whatwg.org/#map-set) interestedObservers\[mo\] to null. - 3. If either type is "`attributes`" and options\["`[attributeOldValue](https://dom.spec.whatwg.org/#dom-mutationobserverinit-attributeoldvalue)`"\] is true, or type is "`characterData`" and options\["`[characterDataOldValue](https://dom.spec.whatwg.org/#dom-mutationobserverinit-characterdataoldvalue)`"\] is true, then [set](https://infra.spec.whatwg.org/#map-set) interestedObservers\[mo\] to oldValue. - + 4. [For each](https://infra.spec.whatwg.org/#map-iterate) observer → mappedOldValue of interestedObservers: - + 1. Let record be a new `[MutationRecord](https://dom.spec.whatwg.org/#mutationrecord)` object with its `[type](https://dom.spec.whatwg.org/#dom-mutationrecord-type)` set to type, `[target](https://dom.spec.whatwg.org/#dom-mutationrecord-target)` set to target, `[attributeName](https://dom.spec.whatwg.org/#dom-mutationrecord-attributename)` set to name, `[attributeNamespace](https://dom.spec.whatwg.org/#dom-mutationrecord-attributenamespace)` set to namespace, `[oldValue](https://dom.spec.whatwg.org/#dom-mutationrecord-oldvalue)` set to mappedOldValue, `[addedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-addednodes)` set to addedNodes, `[removedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-removednodes)` set to removedNodes, `[previousSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-previoussibling)` set to previousSibling, and `[nextSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-nextsibling)` set to nextSibling. - 2. [Enqueue](https://infra.spec.whatwg.org/#queue-enqueue) record to observer’s [record queue](https://dom.spec.whatwg.org/#concept-mo-queue). - + 5. [Queue a mutation observer microtask](https://dom.spec.whatwg.org/#queue-a-mutation-observer-compound-microtask). - To queue a tree mutation record for target with addedNodes, removedNodes, previousSibling, and nextSibling, run these steps: 1. Assert: either addedNodes or removedNodes [is not empty](https://infra.spec.whatwg.org/#list-is-empty). - 2. [Queue a mutation record](https://dom.spec.whatwg.org/#queue-a-mutation-record) of "`childList`" for target with null, null, null, addedNodes, removedNodes, previousSibling, and nextSibling. - #### 4.3.3. Interface `[MutationRecord](https://dom.spec.whatwg.org/#mutationrecord)`[](https://dom.spec.whatwg.org/#interface-mutationrecord) @@ -4094,60 +3754,60 @@ In all current engines. Firefox14+Safari7+Chrome16+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IE11 -___ +--- Firefox for Android14+iOS Safari7+Chrome for Android25+Android WebView37+Samsung Internet1.5+Opera Mobile14+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `MutationRecord` { - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [type](https://dom.spec.whatwg.org/#dom-mutationrecord-type); - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [Node](https://dom.spec.whatwg.org/#node) [target](https://dom.spec.whatwg.org/#dom-mutationrecord-target); - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NodeList](https://dom.spec.whatwg.org/#nodelist) [addedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-addednodes); - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NodeList](https://dom.spec.whatwg.org/#nodelist) [removedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-removednodes); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [previousSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-previoussibling); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [nextSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-nextsibling); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [attributeName](https://dom.spec.whatwg.org/#dom-mutationrecord-attributename); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [attributeNamespace](https://dom.spec.whatwg.org/#dom-mutationrecord-attributenamespace); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [oldValue](https://dom.spec.whatwg.org/#dom-mutationrecord-oldvalue); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [type](https://dom.spec.whatwg.org/#dom-mutationrecord-type); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [Node](https://dom.spec.whatwg.org/#node) [target](https://dom.spec.whatwg.org/#dom-mutationrecord-target); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NodeList](https://dom.spec.whatwg.org/#nodelist) [addedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-addednodes); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NodeList](https://dom.spec.whatwg.org/#nodelist) [removedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-removednodes); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [previousSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-previoussibling); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [nextSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-nextsibling); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [attributeName](https://dom.spec.whatwg.org/#dom-mutationrecord-attributename); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [attributeNamespace](https://dom.spec.whatwg.org/#dom-mutationrecord-attributenamespace); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [oldValue](https://dom.spec.whatwg.org/#dom-mutationrecord-oldvalue); }; -``record . `[type](https://dom.spec.whatwg.org/#dom-mutationrecord-type)` `` +`` record . `[type](https://dom.spec.whatwg.org/#dom-mutationrecord-type)` `` Returns "`attributes`" if it was an [attribute](https://dom.spec.whatwg.org/#concept-attribute) mutation. "`characterData`" if it was a mutation to a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node). And "`childList`" if it was a mutation to the [tree](https://dom.spec.whatwg.org/#concept-tree) of [nodes](https://dom.spec.whatwg.org/#concept-node). -``record . `[target](https://dom.spec.whatwg.org/#dom-mutationrecord-target)` `` +`` record . `[target](https://dom.spec.whatwg.org/#dom-mutationrecord-target)` `` Returns the [node](https://dom.spec.whatwg.org/#concept-node) the mutation affected, depending on the `[type](https://dom.spec.whatwg.org/#dom-mutationrecord-type)`. For "`attributes`", it is the [element](https://dom.spec.whatwg.org/#concept-element) whose [attribute](https://dom.spec.whatwg.org/#concept-attribute) changed. For "`characterData`", it is the `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node). For "`childList`", it is the [node](https://dom.spec.whatwg.org/#concept-node) whose [children](https://dom.spec.whatwg.org/#concept-tree-child) changed. -``record . `[addedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-addednodes)` `` +`` record . `[addedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-addednodes)` `` -``record . `[removedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-removednodes)` `` +`` record . `[removedNodes](https://dom.spec.whatwg.org/#dom-mutationrecord-removednodes)` `` Return the [nodes](https://dom.spec.whatwg.org/#concept-node) added and removed respectively. -``record . `[previousSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-previoussibling)` `` +`` record . `[previousSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-previoussibling)` `` -``record . `[nextSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-nextsibling)` `` +`` record . `[nextSibling](https://dom.spec.whatwg.org/#dom-mutationrecord-nextsibling)` `` Return the [previous](https://dom.spec.whatwg.org/#concept-tree-previous-sibling) and [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling) respectively of the added or removed [nodes](https://dom.spec.whatwg.org/#concept-node); otherwise null. -``record . `[attributeName](https://dom.spec.whatwg.org/#dom-mutationrecord-attributename)` `` +`` record . `[attributeName](https://dom.spec.whatwg.org/#dom-mutationrecord-attributename)` `` Returns the [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) of the changed [attribute](https://dom.spec.whatwg.org/#concept-attribute); otherwise null. -``record . `[attributeNamespace](https://dom.spec.whatwg.org/#dom-mutationrecord-attributenamespace)` `` +`` record . `[attributeNamespace](https://dom.spec.whatwg.org/#dom-mutationrecord-attributenamespace)` `` Returns the [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) of the changed [attribute](https://dom.spec.whatwg.org/#concept-attribute); otherwise null. -``record . `[oldValue](https://dom.spec.whatwg.org/#dom-mutationrecord-oldvalue)` `` +`` record . `[oldValue](https://dom.spec.whatwg.org/#dom-mutationrecord-oldvalue)` `` The return value depends on `[type](https://dom.spec.whatwg.org/#dom-mutationrecord-type)`. For "`attributes`", it is the [value](https://dom.spec.whatwg.org/#concept-attribute-value) of the changed [attribute](https://dom.spec.whatwg.org/#concept-attribute) before the change. For "`characterData`", it is the [data](https://dom.spec.whatwg.org/#concept-cd-data) of the changed [node](https://dom.spec.whatwg.org/#concept-node) before the change. For "`childList`", it is null. @@ -4161,84 +3821,84 @@ The `type`, `target`, `addedNodes`, `removedNodes`, `previousSibling`, `nextSibl ### 4.4. Interface `[Node](https://dom.spec.whatwg.org/#node)`[](https://dom.spec.whatwg.org/#interface-node) -[Node](https://developer.mozilla.org/en-US/docs/Web/API/Node "The DOM Node interface is an abstract base class upon which many other DOM API objects are based, thus letting those object types to be used similarly and often interchangeably. As an abstract class, there is no such thing as a plain Node object. All objects that implement Node functionality are based on one of its subclasses. Most notable are Document, Element, and DocumentFragment.") +[Node](https://developer.mozilla.org/en-US/docs/Web/API/Node 'The DOM Node interface is an abstract base class upon which many other DOM API objects are based, thus letting those object types to be used similarly and often interchangeably. As an abstract class, there is no such thing as a plain Node object. All objects that implement Node functionality are based on one of its subclasses. Most notable are Document, Element, and DocumentFragment.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `Node` : [EventTarget](https://dom.spec.whatwg.org/#eventtarget) { - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [ELEMENT\_NODE](https://dom.spec.whatwg.org/#dom-node-element_node) = 1; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [ATTRIBUTE\_NODE](https://dom.spec.whatwg.org/#dom-node-attribute_node) = 2; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [TEXT\_NODE](https://dom.spec.whatwg.org/#dom-node-text_node) = 3; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [CDATA\_SECTION\_NODE](https://dom.spec.whatwg.org/#dom-node-cdata_section_node) = 4; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ENTITY_REFERENCE_NODE`[](https://dom.spec.whatwg.org/#dom-node-entity_reference_node) = 5; // legacy - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ENTITY_NODE`[](https://dom.spec.whatwg.org/#dom-node-entity_node) = 6; // legacy - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [PROCESSING\_INSTRUCTION\_NODE](https://dom.spec.whatwg.org/#dom-node-processing_instruction_node) = 7; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [COMMENT\_NODE](https://dom.spec.whatwg.org/#dom-node-comment_node) = 8; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_NODE](https://dom.spec.whatwg.org/#dom-node-document_node) = 9; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_TYPE\_NODE](https://dom.spec.whatwg.org/#dom-node-document_type_node) = 10; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_FRAGMENT\_NODE](https://dom.spec.whatwg.org/#dom-node-document_fragment_node) = 11; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `NOTATION_NODE`[](https://dom.spec.whatwg.org/#dom-node-notation_node) = 12; // legacy - readonly attribute [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [nodeType](https://dom.spec.whatwg.org/#dom-node-nodetype); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [nodeName](https://dom.spec.whatwg.org/#dom-node-nodename); - - readonly attribute [USVString](https://webidl.spec.whatwg.org/#idl-USVString) [baseURI](https://dom.spec.whatwg.org/#dom-node-baseuri); - - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isConnected](https://dom.spec.whatwg.org/#dom-node-isconnected); - readonly attribute [Document](https://dom.spec.whatwg.org/#document)? [ownerDocument](https://dom.spec.whatwg.org/#dom-node-ownerdocument); - [Node](https://dom.spec.whatwg.org/#node) [getRootNode](https://dom.spec.whatwg.org/#dom-node-getrootnode)(optional [GetRootNodeOptions](https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions) `options`[](https://dom.spec.whatwg.org/#dom-node-getrootnode-options-options) = {}); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [parentNode](https://dom.spec.whatwg.org/#dom-node-parentnode); - readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [parentElement](https://dom.spec.whatwg.org/#dom-node-parentelement); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasChildNodes](https://dom.spec.whatwg.org/#dom-node-haschildnodes)(); - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NodeList](https://dom.spec.whatwg.org/#nodelist) [childNodes](https://dom.spec.whatwg.org/#dom-node-childnodes); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [firstChild](https://dom.spec.whatwg.org/#dom-node-firstchild); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [lastChild](https://dom.spec.whatwg.org/#dom-node-lastchild); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [previousSibling](https://dom.spec.whatwg.org/#dom-node-previoussibling); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [nextSibling](https://dom.spec.whatwg.org/#dom-node-nextsibling); - - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [nodeValue](https://dom.spec.whatwg.org/#dom-node-nodevalue); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [textContent](https://dom.spec.whatwg.org/#dom-node-textcontent); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [normalize](https://dom.spec.whatwg.org/#dom-node-normalize)(); - - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Node](https://dom.spec.whatwg.org/#node) [cloneNode](https://dom.spec.whatwg.org/#dom-node-clonenode)(optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `deep`[](https://dom.spec.whatwg.org/#dom-node-clonenode-deep-deep) = false); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isEqualNode](https://dom.spec.whatwg.org/#dom-node-isequalnode)([Node](https://dom.spec.whatwg.org/#node)? `otherNode`[](https://dom.spec.whatwg.org/#dom-node-isequalnode-othernode-othernode)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isSameNode](https://dom.spec.whatwg.org/#dom-node-issamenode)([Node](https://dom.spec.whatwg.org/#node)? `otherNode`[](https://dom.spec.whatwg.org/#dom-node-issamenode-othernode-othernode)); // legacy alias of === - - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_POSITION\_DISCONNECTED](https://dom.spec.whatwg.org/#dom-node-document_position_disconnected) = 0x01; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_POSITION\_PRECEDING](https://dom.spec.whatwg.org/#dom-node-document_position_preceding) = 0x02; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_POSITION\_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following) = 0x04; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_POSITION\_CONTAINS](https://dom.spec.whatwg.org/#dom-node-document_position_contains) = 0x08; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_POSITION\_CONTAINED\_BY](https://dom.spec.whatwg.org/#dom-node-document_position_contained_by) = 0x10; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT\_POSITION\_IMPLEMENTATION\_SPECIFIC](https://dom.spec.whatwg.org/#dom-node-document_position_implementation_specific) = 0x20; - [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [compareDocumentPosition](https://dom.spec.whatwg.org/#dom-node-comparedocumentposition)([Node](https://dom.spec.whatwg.org/#node) `other`[](https://dom.spec.whatwg.org/#dom-node-comparedocumentposition-other-other)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [contains](https://dom.spec.whatwg.org/#dom-node-contains)([Node](https://dom.spec.whatwg.org/#node)? `other`[](https://dom.spec.whatwg.org/#dom-node-contains-other-other)); - - [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [lookupPrefix](https://dom.spec.whatwg.org/#dom-node-lookupprefix)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-node-lookupprefix-namespace-namespace)); - [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [lookupNamespaceURI](https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `prefix`[](https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri-prefix-prefix)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isDefaultNamespace](https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace-namespace-namespace)); - - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [insertBefore](https://dom.spec.whatwg.org/#dom-node-insertbefore)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-node-insertbefore-node-child-node), [Node](https://dom.spec.whatwg.org/#node)? `child`[](https://dom.spec.whatwg.org/#dom-node-insertbefore-node-child-child)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [appendChild](https://dom.spec.whatwg.org/#dom-node-appendchild)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-node-appendchild-node-node)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [replaceChild](https://dom.spec.whatwg.org/#dom-node-replacechild)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-node-replacechild-node-child-node), [Node](https://dom.spec.whatwg.org/#node) `child`[](https://dom.spec.whatwg.org/#dom-node-replacechild-node-child-child)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [removeChild](https://dom.spec.whatwg.org/#dom-node-removechild)([Node](https://dom.spec.whatwg.org/#node) `child`[](https://dom.spec.whatwg.org/#dom-node-removechild-child-child)); +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [ELEMENT_NODE](https://dom.spec.whatwg.org/#dom-node-element_node) = 1; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [ATTRIBUTE_NODE](https://dom.spec.whatwg.org/#dom-node-attribute_node) = 2; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [TEXT_NODE](https://dom.spec.whatwg.org/#dom-node-text_node) = 3; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [CDATA_SECTION_NODE](https://dom.spec.whatwg.org/#dom-node-cdata_section_node) = 4; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ENTITY_REFERENCE_NODE`[](https://dom.spec.whatwg.org/#dom-node-entity_reference_node) = 5; // legacy +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ENTITY_NODE`[](https://dom.spec.whatwg.org/#dom-node-entity_node) = 6; // legacy +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [PROCESSING_INSTRUCTION_NODE](https://dom.spec.whatwg.org/#dom-node-processing_instruction_node) = 7; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [COMMENT_NODE](https://dom.spec.whatwg.org/#dom-node-comment_node) = 8; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_NODE](https://dom.spec.whatwg.org/#dom-node-document_node) = 9; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_TYPE_NODE](https://dom.spec.whatwg.org/#dom-node-document_type_node) = 10; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_FRAGMENT_NODE](https://dom.spec.whatwg.org/#dom-node-document_fragment_node) = 11; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `NOTATION_NODE`[](https://dom.spec.whatwg.org/#dom-node-notation_node) = 12; // legacy +readonly attribute [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [nodeType](https://dom.spec.whatwg.org/#dom-node-nodetype); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [nodeName](https://dom.spec.whatwg.org/#dom-node-nodename); + +readonly attribute [USVString](https://webidl.spec.whatwg.org/#idl-USVString) [baseURI](https://dom.spec.whatwg.org/#dom-node-baseuri); + +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isConnected](https://dom.spec.whatwg.org/#dom-node-isconnected); +readonly attribute [Document](https://dom.spec.whatwg.org/#document)? [ownerDocument](https://dom.spec.whatwg.org/#dom-node-ownerdocument); +[Node](https://dom.spec.whatwg.org/#node) [getRootNode](https://dom.spec.whatwg.org/#dom-node-getrootnode)(optional [GetRootNodeOptions](https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions) `options`[](https://dom.spec.whatwg.org/#dom-node-getrootnode-options-options) = {}); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [parentNode](https://dom.spec.whatwg.org/#dom-node-parentnode); +readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [parentElement](https://dom.spec.whatwg.org/#dom-node-parentelement); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasChildNodes](https://dom.spec.whatwg.org/#dom-node-haschildnodes)(); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NodeList](https://dom.spec.whatwg.org/#nodelist) [childNodes](https://dom.spec.whatwg.org/#dom-node-childnodes); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [firstChild](https://dom.spec.whatwg.org/#dom-node-firstchild); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [lastChild](https://dom.spec.whatwg.org/#dom-node-lastchild); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [previousSibling](https://dom.spec.whatwg.org/#dom-node-previoussibling); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? [nextSibling](https://dom.spec.whatwg.org/#dom-node-nextsibling); + +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [nodeValue](https://dom.spec.whatwg.org/#dom-node-nodevalue); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [textContent](https://dom.spec.whatwg.org/#dom-node-textcontent); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [normalize](https://dom.spec.whatwg.org/#dom-node-normalize)(); + +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Node](https://dom.spec.whatwg.org/#node) [cloneNode](https://dom.spec.whatwg.org/#dom-node-clonenode)(optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `deep`[](https://dom.spec.whatwg.org/#dom-node-clonenode-deep-deep) = false); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isEqualNode](https://dom.spec.whatwg.org/#dom-node-isequalnode)([Node](https://dom.spec.whatwg.org/#node)? `otherNode`[](https://dom.spec.whatwg.org/#dom-node-isequalnode-othernode-othernode)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isSameNode](https://dom.spec.whatwg.org/#dom-node-issamenode)([Node](https://dom.spec.whatwg.org/#node)? `otherNode`[](https://dom.spec.whatwg.org/#dom-node-issamenode-othernode-othernode)); // legacy alias of === + +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_POSITION_DISCONNECTED](https://dom.spec.whatwg.org/#dom-node-document_position_disconnected) = 0x01; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_POSITION_PRECEDING](https://dom.spec.whatwg.org/#dom-node-document_position_preceding) = 0x02; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_POSITION_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following) = 0x04; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_POSITION_CONTAINS](https://dom.spec.whatwg.org/#dom-node-document_position_contains) = 0x08; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_POSITION_CONTAINED_BY](https://dom.spec.whatwg.org/#dom-node-document_position_contained_by) = 0x10; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC](https://dom.spec.whatwg.org/#dom-node-document_position_implementation_specific) = 0x20; +[unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [compareDocumentPosition](https://dom.spec.whatwg.org/#dom-node-comparedocumentposition)([Node](https://dom.spec.whatwg.org/#node) `other`[](https://dom.spec.whatwg.org/#dom-node-comparedocumentposition-other-other)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [contains](https://dom.spec.whatwg.org/#dom-node-contains)([Node](https://dom.spec.whatwg.org/#node)? `other`[](https://dom.spec.whatwg.org/#dom-node-contains-other-other)); + +[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [lookupPrefix](https://dom.spec.whatwg.org/#dom-node-lookupprefix)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-node-lookupprefix-namespace-namespace)); +[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [lookupNamespaceURI](https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `prefix`[](https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri-prefix-prefix)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isDefaultNamespace](https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace-namespace-namespace)); + +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [insertBefore](https://dom.spec.whatwg.org/#dom-node-insertbefore)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-node-insertbefore-node-child-node), [Node](https://dom.spec.whatwg.org/#node)? `child`[](https://dom.spec.whatwg.org/#dom-node-insertbefore-node-child-child)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [appendChild](https://dom.spec.whatwg.org/#dom-node-appendchild)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-node-appendchild-node-node)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [replaceChild](https://dom.spec.whatwg.org/#dom-node-replacechild)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-node-replacechild-node-child-node), [Node](https://dom.spec.whatwg.org/#node) `child`[](https://dom.spec.whatwg.org/#dom-node-replacechild-node-child-child)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [removeChild](https://dom.spec.whatwg.org/#dom-node-removechild)([Node](https://dom.spec.whatwg.org/#node) `child`[](https://dom.spec.whatwg.org/#dom-node-removechild-child-child)); }; dictionary `GetRootNodeOptions` { - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `composed` = false; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `composed` = false; }; `[Node](https://dom.spec.whatwg.org/#node)` is an abstract interface that is used by all [nodes](https://dom.spec.whatwg.org/#concept-node). You cannot get a direct instance of it. @@ -4251,27 +3911,27 @@ A [node](https://dom.spec.whatwg.org/#concept-node)’s [get the parent](https:/ Each [node](https://dom.spec.whatwg.org/#concept-node) also has a [registered observer list](https://dom.spec.whatwg.org/#registered-observer-list). -___ +--- -[Node/nodeType](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType "The read-only nodeType property of a Node element is an integer that identifies what the node is. It distinguishes different kind of nodes from each other, such as elements, text and comments.") +[Node/nodeType](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType 'The read-only nodeType property of a Node element is an integer that identifies what the node is. It distinguishes different kind of nodes from each other, such as elements, text and comments.') In all current engines. Firefox1+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -``node . `[nodeType](https://dom.spec.whatwg.org/#dom-node-nodetype)` `` +`` node . `[nodeType](https://dom.spec.whatwg.org/#dom-node-nodetype)` `` Returns a number appropriate for the type of node, as follows: @@ -4311,25 +3971,25 @@ An [exclusive `Text` node](https://dom.spec.whatwg.org/#exclusive-text-node) `` `[Node](https://dom.spec.whatwg.org/#node)` . `[DOCUMENT_FRAGMENT_NODE](https://dom.spec.whatwg.org/#dom-node-document_fragment_node)` `` (11). -[Node/nodeName](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeName "The read-only nodeName property of Node returns the name of the current node as a string.") +[Node/nodeName](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeName 'The read-only nodeName property of Node returns the name of the current node as a string.') In all current engines. Firefox1+Safari7+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari7+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[nodeName](https://dom.spec.whatwg.org/#dom-node-nodename)` `` +`` node . `[nodeName](https://dom.spec.whatwg.org/#dom-node-nodename)` `` Returns a string appropriate for the type of node, as follows: @@ -4445,75 +4105,75 @@ Its [name](https://dom.spec.whatwg.org/#concept-doctype-name). "`#document-fragment`". -___ +--- -[Node/baseURI](https://developer.mozilla.org/en-US/docs/Web/API/Node/baseURI "The read-only baseURI property of the Node interface returns the absolute base URL of the document containing the node.") +[Node/baseURI](https://developer.mozilla.org/en-US/docs/Web/API/Node/baseURI 'The read-only baseURI property of the Node interface returns the absolute base URL of the document containing the node.') In all current engines. Firefox1+Safari7+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari7+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[baseURI](https://dom.spec.whatwg.org/#dom-node-baseuri)` `` +`` node . `[baseURI](https://dom.spec.whatwg.org/#dom-node-baseuri)` `` Returns node’s [node document](https://dom.spec.whatwg.org/#concept-node-document)’s [document base URL](https://html.spec.whatwg.org/multipage/urls-and-fetching.html#document-base-url). The `baseURI` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document)’s [document base URL](https://html.spec.whatwg.org/multipage/urls-and-fetching.html#document-base-url), [serialized](https://url.spec.whatwg.org/#concept-url-serializer). -___ +--- -[Node/isConnected](https://developer.mozilla.org/en-US/docs/Web/API/Node/isConnected "The read-only isConnected property of the Node interface returns a boolean indicating whether the node is connected (directly or indirectly) to the context object, for example the Document object in the case of the normal DOM, or the ShadowRoot in the case of a shadow DOM.") +[Node/isConnected](https://developer.mozilla.org/en-US/docs/Web/API/Node/isConnected 'The read-only isConnected property of the Node interface returns a boolean indicating whether the node is connected (directly or indirectly) to the context object, for example the Document object in the case of the normal DOM, or the ShadowRoot in the case of a shadow DOM.') In all current engines. Firefox49+Safari10+Chrome51+ -___ +--- Opera38+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android49+iOS Safari10+Chrome for Android51+Android WebView51+Samsung Internet6.0+Opera Mobile41+ -``node . `[isConnected](https://dom.spec.whatwg.org/#dom-node-isconnected)` `` +`` node . `[isConnected](https://dom.spec.whatwg.org/#dom-node-isconnected)` `` Returns true if node is [connected](https://dom.spec.whatwg.org/#connected); otherwise false. -[Node/ownerDocument](https://developer.mozilla.org/en-US/docs/Web/API/Node/ownerDocument "The read-only ownerDocument property of the Node interface returns the top-level document object of the node.") +[Node/ownerDocument](https://developer.mozilla.org/en-US/docs/Web/API/Node/ownerDocument 'The read-only ownerDocument property of the Node interface returns the top-level document object of the node.') In all current engines. Firefox9+Safari7+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android9+iOS Safari7+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[ownerDocument](https://dom.spec.whatwg.org/#dom-node-ownerdocument)` `` +`` node . `[ownerDocument](https://dom.spec.whatwg.org/#dom-node-ownerdocument)` `` Returns the [node document](https://dom.spec.whatwg.org/#concept-node-document). Returns null for [documents](https://dom.spec.whatwg.org/#concept-document). @@ -4523,19 +4183,19 @@ In all current engines. Firefox53+Safari10.1+Chrome54+ -___ +--- Opera41+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android53+iOS Safari10.3+Chrome for Android54+Android WebView54+Samsung Internet6.0+Opera Mobile41+ -``node . `[getRootNode()](https://dom.spec.whatwg.org/#dom-node-getrootnode)` `` +`` node . `[getRootNode()](https://dom.spec.whatwg.org/#dom-node-getrootnode)` `` Returns node’s [root](https://dom.spec.whatwg.org/#concept-tree-root). @@ -4543,25 +4203,25 @@ Returns node’s [root](https://dom.spec.whatwg.org/#concept-tree-root). Returns node’s [shadow-including root](https://dom.spec.whatwg.org/#concept-shadow-including-root). -[Node/parentNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/parentNode "The read-only parentNode property of the Node interface returns the parent of the specified node in the DOM tree.") +[Node/parentNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/parentNode 'The read-only parentNode property of the Node interface returns the parent of the specified node in the DOM tree.') In all current engines. Firefox1+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5.5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -``node . `[parentNode](https://dom.spec.whatwg.org/#dom-node-parentnode)` `` +`` node . `[parentNode](https://dom.spec.whatwg.org/#dom-node-parentnode)` `` Returns the [parent](https://dom.spec.whatwg.org/#concept-tree-parent). @@ -4571,63 +4231,63 @@ In all current engines. Firefox9+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android9+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -``node . `[parentElement](https://dom.spec.whatwg.org/#dom-node-parentelement)` `` +`` node . `[parentElement](https://dom.spec.whatwg.org/#dom-node-parentelement)` `` Returns the [parent element](https://dom.spec.whatwg.org/#parent-element). -[Node/hasChildNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/hasChildNodes "The hasChildNodes() method of the Node interface returns a boolean value indicating whether the given Node has child nodes or not.") +[Node/hasChildNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/hasChildNodes 'The hasChildNodes() method of the Node interface returns a boolean value indicating whether the given Node has child nodes or not.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[hasChildNodes()](https://dom.spec.whatwg.org/#dom-node-haschildnodes)` `` +`` node . `[hasChildNodes()](https://dom.spec.whatwg.org/#dom-node-haschildnodes)` `` Returns whether node has [children](https://dom.spec.whatwg.org/#concept-tree-child). -[Node/childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes "The read-only childNodes property of the Node interface returns a live NodeList of child nodes of the given element where the first child node is assigned index 0. Child nodes include elements, text and comments.") +[Node/childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes 'The read-only childNodes property of the Node interface returns a live NodeList of child nodes of the given element where the first child node is assigned index 0. Child nodes include elements, text and comments.') In all current engines. Firefox1+Safari1.2+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -``node . `[childNodes](https://dom.spec.whatwg.org/#dom-node-childnodes)` `` +`` node . `[childNodes](https://dom.spec.whatwg.org/#dom-node-childnodes)` `` Returns the [children](https://dom.spec.whatwg.org/#concept-tree-child). @@ -4637,41 +4297,41 @@ In all current engines. Firefox1+Safari7+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari7+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[firstChild](https://dom.spec.whatwg.org/#dom-node-firstchild)` `` +`` node . `[firstChild](https://dom.spec.whatwg.org/#dom-node-firstchild)` `` Returns the [first child](https://dom.spec.whatwg.org/#concept-tree-first-child). -[Node/lastChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/lastChild "The read-only lastChild property of the Node interface returns the last child of the node. If its parent is an element, then the child is generally an element node, a text node, or a comment node. It returns null if there are no child elements.") +[Node/lastChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/lastChild 'The read-only lastChild property of the Node interface returns the last child of the node. If its parent is an element, then the child is generally an element node, a text node, or a comment node. It returns null if there are no child elements.') In all current engines. Firefox1+Safari7+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android45+iOS Safari7+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[lastChild](https://dom.spec.whatwg.org/#dom-node-lastchild)` `` +`` node . `[lastChild](https://dom.spec.whatwg.org/#dom-node-lastchild)` `` Returns the [last child](https://dom.spec.whatwg.org/#concept-tree-last-child). @@ -4681,19 +4341,19 @@ In all current engines. Firefox1+Safari7+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5.5+ -___ +--- Firefox for Android4+iOS Safari7+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[previousSibling](https://dom.spec.whatwg.org/#dom-node-previoussibling)` `` +`` node . `[previousSibling](https://dom.spec.whatwg.org/#dom-node-previoussibling)` `` Returns the [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling). @@ -4703,19 +4363,19 @@ In all current engines. Firefox1+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5.5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -``node . `[nextSibling](https://dom.spec.whatwg.org/#dom-node-nextsibling)` `` +`` node . `[nextSibling](https://dom.spec.whatwg.org/#dom-node-nextsibling)` `` Returns the [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). @@ -4743,23 +4403,23 @@ The `previousSibling` getter steps are to return [this](https://webidl.spec.what The `nextSibling` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). -___ +--- -[Node/nodeValue](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeValue "The nodeValue property of the Node interface returns or sets the value of the current node.") +[Node/nodeValue](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeValue 'The nodeValue property of the Node interface returns or sets the value of the current node.') In all current engines. Firefox1+Safari7+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari7+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -4791,21 +4451,21 @@ Otherwise Do nothing. -[Node/textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent "The textContent property of the Node interface represents the text content of the node and its descendants.") +[Node/textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent 'The textContent property of the Node interface represents the text content of the node and its descendants.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -4832,11 +4492,8 @@ Null. To string replace all with a string string within a [node](https://dom.spec.whatwg.org/#concept-node) parent, run these steps: 1. Let node be null. - 2. If string is not the empty string, then set node to a new `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is string and [node document](https://dom.spec.whatwg.org/#concept-node-document) is parent’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 3. [Replace all](https://dom.spec.whatwg.org/#concept-node-replace-all) with node within parent. - The `[textContent](https://dom.spec.whatwg.org/#dom-node-textcontent)` setter steps are to, if the given value is null, act as if it was the empty string instead, and then do as described below, switching on the interface [this](https://webidl.spec.whatwg.org/#this) [implements](https://webidl.spec.whatwg.org/#implements): @@ -4858,27 +4515,27 @@ Otherwise Do nothing. -___ +--- -[Node/normalize](https://developer.mozilla.org/en-US/docs/Web/API/Node/normalize "The normalize() method of the Node puts the specified node and all of its sub-tree into a normalized form. In a normalized sub-tree, no text nodes in the sub-tree are empty and there are no adjacent text nodes.") +[Node/normalize](https://developer.mozilla.org/en-US/docs/Web/API/Node/normalize 'The normalize() method of the Node puts the specified node and all of its sub-tree into a normalized form. In a normalized sub-tree, no text nodes in the sub-tree are empty and there are no adjacent text nodes.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[normalize()](https://dom.spec.whatwg.org/#dom-node-normalize)` `` +`` node . `[normalize()](https://dom.spec.whatwg.org/#dom-node-normalize)` `` Removes [empty](https://dom.spec.whatwg.org/#concept-node-empty) [exclusive `Text` nodes](https://dom.spec.whatwg.org/#exclusive-text-node) and concatenates the [data](https://dom.spec.whatwg.org/#concept-cd-data) of remaining [contiguous exclusive `Text` nodes](https://dom.spec.whatwg.org/#contiguous-exclusive-text-nodes) into the first of their [nodes](https://dom.spec.whatwg.org/#concept-node). @@ -4890,38 +4547,33 @@ The `normalize()` method steps are to run these steps for each [descendant](http 4. [Replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node node, offset length, count 0, and data data. 5. Let currentNode be node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). 6. While currentNode is an [exclusive `Text` node](https://dom.spec.whatwg.org/#exclusive-text-node): - + 1. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is currentNode, add length to its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) and set its [start node](https://dom.spec.whatwg.org/#concept-range-start-node) to node. - 2. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is currentNode, add length to its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) and set its [end node](https://dom.spec.whatwg.org/#concept-range-end-node) to node. - 3. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is currentNode’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is currentNode’s [index](https://dom.spec.whatwg.org/#concept-tree-index), set its [start node](https://dom.spec.whatwg.org/#concept-range-start-node) to node and its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) to length. - 4. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is currentNode’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is currentNode’s [index](https://dom.spec.whatwg.org/#concept-tree-index), set its [end node](https://dom.spec.whatwg.org/#concept-range-end-node) to node and its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) to length. - 5. Add currentNode’s [length](https://dom.spec.whatwg.org/#concept-node-length) to length. - 6. Set currentNode to its [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - + 7. [Remove](https://dom.spec.whatwg.org/#concept-node-remove) node’s [contiguous exclusive `Text` nodes](https://dom.spec.whatwg.org/#contiguous-exclusive-text-nodes) (excluding itself), in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). -___ +--- -[Node/cloneNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode "The cloneNode() method of the Node interface returns a duplicate of the node on which this method was called. Its parameter controls if the subtree contained in a node is also cloned or not.") +[Node/cloneNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode 'The cloneNode() method of the Node interface returns a duplicate of the node on which this method was called. Its parameter controls if the subtree contained in a node is also cloned or not.') In all current engines. Firefox1+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -4929,25 +4581,25 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Returns a copy of node. If deep is true, the copy also includes the node’s [descendants](https://dom.spec.whatwg.org/#concept-tree-descendant). -[Node/isEqualNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/isEqualNode "The isEqualNode() method of the Node interface tests whether two nodes are equal. Two nodes are equal when they have the same type, defining characteristics (for elements, this would be their ID, number of children, and so forth), its attributes match, and so on. The specific set of data points that must match varies depending on the types of the nodes.") +[Node/isEqualNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/isEqualNode 'The isEqualNode() method of the Node interface tests whether two nodes are equal. Two nodes are equal when they have the same type, defining characteristics (for elements, this would be their ID, number of children, and so forth), its attributes match, and so on. The specific set of data points that must match varies depending on the types of the nodes.') In all current engines. Firefox2+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[isEqualNode(otherNode)](https://dom.spec.whatwg.org/#dom-node-isequalnode)` `` +`` node . `[isEqualNode(otherNode)](https://dom.spec.whatwg.org/#dom-node-isequalnode)` `` Returns whether node and otherNode have the same properties. @@ -4958,47 +4610,43 @@ HTML defines [cloning steps](https://dom.spec.whatwg.org/#concept-node-clone-ext To clone a node, with an optional document and _clone children flag_, run these steps: 1. If document is not given, let document be node’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. If node is an [element](https://dom.spec.whatwg.org/#concept-element), then: - + 1. Let copy be the result of [creating an element](https://dom.spec.whatwg.org/#concept-create-element), given document, node’s [local name](https://dom.spec.whatwg.org/#concept-element-local-name), node’s [namespace](https://dom.spec.whatwg.org/#concept-element-namespace), node’s [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix), and node’s [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value), with the synchronous custom elements flag unset. - 2. [For each](https://infra.spec.whatwg.org/#list-iterate) attribute in node’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute): - + 1. Let copyAttribute be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of attribute. - 2. [Append](https://dom.spec.whatwg.org/#concept-element-attributes-append) copyAttribute to copy. - + 3. Otherwise, let copy be a [node](https://dom.spec.whatwg.org/#concept-node) that [implements](https://webidl.spec.whatwg.org/#implements) the same interfaces as node, and fulfills these additional requirements, switching on the interface node [implements](https://webidl.spec.whatwg.org/#implements): - + `[Document](https://dom.spec.whatwg.org/#document)` - + Set copy’s [encoding](https://dom.spec.whatwg.org/#concept-document-encoding), [content type](https://dom.spec.whatwg.org/#concept-document-content-type), [URL](https://dom.spec.whatwg.org/#concept-document-url), [origin](https://dom.spec.whatwg.org/#concept-document-origin), [type](https://dom.spec.whatwg.org/#concept-document-type), and [mode](https://dom.spec.whatwg.org/#concept-document-mode) to those of node. - + `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` - + Set copy’s [name](https://dom.spec.whatwg.org/#concept-doctype-name), [public ID](https://dom.spec.whatwg.org/#concept-doctype-publicid), and [system ID](https://dom.spec.whatwg.org/#concept-doctype-systemid) to those of node. - + `[Attr](https://dom.spec.whatwg.org/#attr)` - + Set copy’s [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace), [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix), [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), and [value](https://dom.spec.whatwg.org/#concept-attribute-value) to those of node. - + `[Text](https://dom.spec.whatwg.org/#text)` - + `[Comment](https://dom.spec.whatwg.org/#comment)` - + Set copy’s [data](https://dom.spec.whatwg.org/#concept-cd-data) to that of node. - + `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)` - + Set copy’s [target](https://dom.spec.whatwg.org/#concept-pi-target) and [data](https://dom.spec.whatwg.org/#concept-cd-data) to those of node. - + Otherwise - + Do nothing. - + 4. Set copy’s [node document](https://dom.spec.whatwg.org/#concept-node-document) and document to copy, if copy is a [document](https://dom.spec.whatwg.org/#concept-document), and set copy’s [node document](https://dom.spec.whatwg.org/#concept-node-document) to document otherwise. - 5. Run any [cloning steps](https://dom.spec.whatwg.org/#concept-node-clone-ext) defined for node in [other applicable specifications](https://dom.spec.whatwg.org/#other-applicable-specifications) and pass copy, node, document and the _clone children flag_ if set, as parameters. 6. If the _clone children flag_ is set, [clone](https://dom.spec.whatwg.org/#concept-node-clone) all the [children](https://dom.spec.whatwg.org/#concept-tree-child) of node and append them to copy, with document as specified and the _clone children flag_ being set. 7. Return copy. @@ -5006,92 +4654,86 @@ To clone a node, with an optional document and _clone children flag_, run these The `cloneNode(deep)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. Return a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of [this](https://webidl.spec.whatwg.org/#this), with the _clone children flag_ set if deep is true. - A [node](https://dom.spec.whatwg.org/#concept-node) A equals a [node](https://dom.spec.whatwg.org/#concept-node) B if all of the following conditions are true: - A and B [implement](https://webidl.spec.whatwg.org/#implements) the same interfaces. - - The following are equal, switching on the interface A [implements](https://webidl.spec.whatwg.org/#implements): - + `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` - + Its [name](https://dom.spec.whatwg.org/#concept-doctype-name), [public ID](https://dom.spec.whatwg.org/#concept-doctype-publicid), and [system ID](https://dom.spec.whatwg.org/#concept-doctype-systemid). - + `[Element](https://dom.spec.whatwg.org/#element)` - + Its [namespace](https://dom.spec.whatwg.org/#concept-element-namespace), [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix), [local name](https://dom.spec.whatwg.org/#concept-element-local-name), and its [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute)’s [size](https://infra.spec.whatwg.org/#list-size). - + `[Attr](https://dom.spec.whatwg.org/#attr)` - + Its [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace), [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), and [value](https://dom.spec.whatwg.org/#concept-attribute-value). - + `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)` - + Its [target](https://dom.spec.whatwg.org/#concept-pi-target) and [data](https://dom.spec.whatwg.org/#concept-cd-data). - + `[Text](https://dom.spec.whatwg.org/#text)` - + `[Comment](https://dom.spec.whatwg.org/#comment)` - + Its [data](https://dom.spec.whatwg.org/#concept-cd-data). - + Otherwise - + — - + - If A is an [element](https://dom.spec.whatwg.org/#concept-element), each [attribute](https://dom.spec.whatwg.org/#concept-attribute) in its [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) has an [attribute](https://dom.spec.whatwg.org/#concept-attribute) that [equals](https://dom.spec.whatwg.org/#concept-node-equals) an [attribute](https://dom.spec.whatwg.org/#concept-attribute) in B’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute). - - A and B have the same number of [children](https://dom.spec.whatwg.org/#concept-tree-child). - - Each [child](https://dom.spec.whatwg.org/#concept-tree-child) of A [equals](https://dom.spec.whatwg.org/#concept-node-equals) the [child](https://dom.spec.whatwg.org/#concept-tree-child) of B at the identical [index](https://dom.spec.whatwg.org/#concept-tree-index). - The `isEqualNode(otherNode)` method steps are to return true if otherNode is non-null and [this](https://webidl.spec.whatwg.org/#this) [equals](https://dom.spec.whatwg.org/#concept-node-equals) otherNode; otherwise false. -[Node/isSameNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/isSameNode "The isSameNode() method of the Node interface is a legacy alias the for the === strict equality operator. That is, it tests whether two nodes are the same (in other words, whether they reference the same object).") +[Node/isSameNode](https://developer.mozilla.org/en-US/docs/Web/API/Node/isSameNode 'The isSameNode() method of the Node interface is a legacy alias the for the === strict equality operator. That is, it tests whether two nodes are the same (in other words, whether they reference the same object).') In all current engines. Firefox48+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android48+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `isSameNode(otherNode)` method steps are to return true if otherNode is [this](https://webidl.spec.whatwg.org/#this); otherwise false. -___ +--- -[Node/compareDocumentPosition](https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition "The compareDocumentPosition() method of the Node interface reports the position of its argument node relative to the node on which it is called.") +[Node/compareDocumentPosition](https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition 'The compareDocumentPosition() method of the Node interface reports the position of its argument node relative to the node on which it is called.') In all current engines. Firefox9+Safari4+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android9+iOS Safari3.2+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12.1+ -``node . `[compareDocumentPosition(other)](https://dom.spec.whatwg.org/#dom-node-comparedocumentposition)` `` +`` node . `[compareDocumentPosition(other)](https://dom.spec.whatwg.org/#dom-node-comparedocumentposition)` `` Returns a bitmask indicating the position of other relative to node. These are the bits that can be set: @@ -5121,19 +4763,19 @@ In all current engines. Firefox9+Safari1.1+Chrome16+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android9+iOS Safari1+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -``node . `[contains(other)](https://dom.spec.whatwg.org/#dom-node-contains)` `` +`` node . `[contains(other)](https://dom.spec.whatwg.org/#dom-node-contains)` `` Returns true if other is an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) of node; otherwise false. @@ -5149,74 +4791,55 @@ These are the constants `[compareDocumentPosition()](https://dom.spec.whatwg.org The `compareDocumentPosition(other)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this) is other, then return zero. - 2. Let node1 be other and node2 be [this](https://webidl.spec.whatwg.org/#this). - 3. Let attr1 and attr2 be null. - 4. If node1 is an [attribute](https://dom.spec.whatwg.org/#concept-attribute), then set attr1 to node1 and node1 to attr1’s [element](https://dom.spec.whatwg.org/#concept-attribute-element). - 5. If node2 is an [attribute](https://dom.spec.whatwg.org/#concept-attribute), then: - + 1. Set attr2 to node2 and node2 to attr2’s [element](https://dom.spec.whatwg.org/#concept-attribute-element). - 2. If attr1 and node1 are non-null, and node2 is node1, then: - + 1. [For each](https://infra.spec.whatwg.org/#list-iterate) attr in node2’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute): - + 1. If attr [equals](https://dom.spec.whatwg.org/#concept-node-equals) attr1, then return the result of adding `[DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC](https://dom.spec.whatwg.org/#dom-node-document_position_implementation_specific)` and `[DOCUMENT_POSITION_PRECEDING](https://dom.spec.whatwg.org/#dom-node-document_position_preceding)`. - 2. If attr [equals](https://dom.spec.whatwg.org/#concept-node-equals) attr2, then return the result of adding `[DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC](https://dom.spec.whatwg.org/#dom-node-document_position_implementation_specific)` and `[DOCUMENT_POSITION_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following)`. - + 6. If node1 or node2 is null, or node1’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is not node2’s [root](https://dom.spec.whatwg.org/#concept-tree-root), then return the result of adding `[DOCUMENT_POSITION_DISCONNECTED](https://dom.spec.whatwg.org/#dom-node-document_position_disconnected)`, `[DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC](https://dom.spec.whatwg.org/#dom-node-document_position_implementation_specific)`, and either `[DOCUMENT_POSITION_PRECEDING](https://dom.spec.whatwg.org/#dom-node-document_position_preceding)` or `[DOCUMENT_POSITION_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following)`, with the constraint that this is to be consistent, together. - + Whether to return `[DOCUMENT_POSITION_PRECEDING](https://dom.spec.whatwg.org/#dom-node-document_position_preceding)` or `[DOCUMENT_POSITION_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following)` is typically implemented via pointer comparison. In JavaScript implementations a cached `Math.random()` value can be used. - + 7. If node1 is an [ancestor](https://dom.spec.whatwg.org/#concept-tree-ancestor) of node2 and attr1 is null, or node1 is node2 and attr2 is non-null, then return the result of adding `[DOCUMENT_POSITION_CONTAINS](https://dom.spec.whatwg.org/#dom-node-document_position_contains)` to `[DOCUMENT_POSITION_PRECEDING](https://dom.spec.whatwg.org/#dom-node-document_position_preceding)`. - 8. If node1 is a [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) of node2 and attr2 is null, or node1 is node2 and attr1 is non-null, then return the result of adding `[DOCUMENT_POSITION_CONTAINED_BY](https://dom.spec.whatwg.org/#dom-node-document_position_contained_by)` to `[DOCUMENT_POSITION_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following)`. - 9. If node1 is [preceding](https://dom.spec.whatwg.org/#concept-tree-preceding) node2, then return `[DOCUMENT_POSITION_PRECEDING](https://dom.spec.whatwg.org/#dom-node-document_position_preceding)`. - + Due to the way [attributes](https://dom.spec.whatwg.org/#concept-attribute) are handled in this algorithm this results in a [node](https://dom.spec.whatwg.org/#concept-node)’s [attributes](https://dom.spec.whatwg.org/#concept-attribute) counting as [preceding](https://dom.spec.whatwg.org/#concept-tree-preceding) that [node](https://dom.spec.whatwg.org/#concept-node)’s [children](https://dom.spec.whatwg.org/#concept-tree-child), despite [attributes](https://dom.spec.whatwg.org/#concept-attribute) not [participating](https://dom.spec.whatwg.org/#concept-tree-participate) in the same [tree](https://dom.spec.whatwg.org/#concept-tree). - -10. Return `[DOCUMENT_POSITION_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following)`. - + +10. Return `[DOCUMENT_POSITION_FOLLOWING](https://dom.spec.whatwg.org/#dom-node-document_position_following)`. The `contains(other)` method steps are to return true if other is an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) of [this](https://webidl.spec.whatwg.org/#this); otherwise false (including when other is null). -___ +--- To locate a namespace prefix for an element using namespace, run these steps: 1. If element’s [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is namespace and its [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) is non-null, then return its [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix). - 2. If element [has](https://dom.spec.whatwg.org/#concept-element-attribute-has) an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix) is "`xmlns`" and [value](https://dom.spec.whatwg.org/#concept-attribute-value) is namespace, then return element’s first such [attribute](https://dom.spec.whatwg.org/#concept-attribute)’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name). - 3. If element’s [parent element](https://dom.spec.whatwg.org/#parent-element) is not null, then return the result of running [locate a namespace prefix](https://dom.spec.whatwg.org/#locate-a-namespace-prefix) on that [element](https://dom.spec.whatwg.org/#concept-element) using namespace. - 4. Return null. - To locate a namespace for a node using prefix, switch on the interface node [implements](https://webidl.spec.whatwg.org/#implements): `[Element](https://dom.spec.whatwg.org/#element)` 1. If its [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is non-null and its [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) is prefix, then return [namespace](https://dom.spec.whatwg.org/#concept-element-namespace). - 2. If it [has](https://dom.spec.whatwg.org/#concept-element-attribute-has) an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is the [XMLNS namespace](https://infra.spec.whatwg.org/#xmlns-namespace), [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix) is "`xmlns`", and [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is prefix, or if prefix is null and it [has](https://dom.spec.whatwg.org/#concept-element-attribute-has) an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is the [XMLNS namespace](https://infra.spec.whatwg.org/#xmlns-namespace), [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix) is null, and [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is "`xmlns`", then return its [value](https://dom.spec.whatwg.org/#concept-attribute-value) if it is not the empty string, and null otherwise. - 3. If its [parent element](https://dom.spec.whatwg.org/#parent-element) is null, then return null. - 4. Return the result of running [locate a namespace](https://dom.spec.whatwg.org/#locate-a-namespace) on its [parent element](https://dom.spec.whatwg.org/#parent-element) using prefix. - `[Document](https://dom.spec.whatwg.org/#document)` 1. If its [document element](https://dom.spec.whatwg.org/#document-element) is null, then return null. - 2. Return the result of running [locate a namespace](https://dom.spec.whatwg.org/#locate-a-namespace) on its [document element](https://dom.spec.whatwg.org/#document-element) using prefix. - `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` @@ -5227,227 +4850,208 @@ Return null. `[Attr](https://dom.spec.whatwg.org/#attr)` 1. If its [element](https://dom.spec.whatwg.org/#concept-attribute-element) is null, then return null. - 2. Return the result of running [locate a namespace](https://dom.spec.whatwg.org/#locate-a-namespace) on its [element](https://dom.spec.whatwg.org/#concept-attribute-element) using prefix. - Otherwise 1. If its [parent element](https://dom.spec.whatwg.org/#parent-element) is null, then return null. - 2. Return the result of running [locate a namespace](https://dom.spec.whatwg.org/#locate-a-namespace) on its [parent element](https://dom.spec.whatwg.org/#parent-element) using prefix. - -[Node/lookupPrefix](https://developer.mozilla.org/en-US/docs/Web/API/Node/lookupPrefix "The lookupPrefix() method of the Node interface returns a String containing the prefix for a given namespace URI, if present, and null if not. When multiple prefixes are possible, the first prefix is returned.") +[Node/lookupPrefix](https://developer.mozilla.org/en-US/docs/Web/API/Node/lookupPrefix 'The lookupPrefix() method of the Node interface returns a String containing the prefix for a given namespace URI, if present, and null if not. When multiple prefixes are possible, the first prefix is returned.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `lookupPrefix(namespace)` method steps are: 1. If namespace is null or the empty string, then return null. - 2. Switch on the interface [this](https://webidl.spec.whatwg.org/#this) [implements](https://webidl.spec.whatwg.org/#implements): - + `[Element](https://dom.spec.whatwg.org/#element)` - + Return the result of [locating a namespace prefix](https://dom.spec.whatwg.org/#locate-a-namespace-prefix) for it using namespace. - + `[Document](https://dom.spec.whatwg.org/#document)` - + Return the result of [locating a namespace prefix](https://dom.spec.whatwg.org/#locate-a-namespace-prefix) for its [document element](https://dom.spec.whatwg.org/#document-element), if its [document element](https://dom.spec.whatwg.org/#document-element) is non-null; otherwise null. - + `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` - + `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` - + Return null. - + `[Attr](https://dom.spec.whatwg.org/#attr)` - + Return the result of [locating a namespace prefix](https://dom.spec.whatwg.org/#locate-a-namespace-prefix) for its [element](https://dom.spec.whatwg.org/#concept-attribute-element), if its [element](https://dom.spec.whatwg.org/#concept-attribute-element) is non-null; otherwise null. - + Otherwise - + Return the result of [locating a namespace prefix](https://dom.spec.whatwg.org/#locate-a-namespace-prefix) for its [parent element](https://dom.spec.whatwg.org/#parent-element), if its [parent element](https://dom.spec.whatwg.org/#parent-element) is non-null; otherwise null. - -[Node/lookupNamespaceURI](https://developer.mozilla.org/en-US/docs/Web/API/Node/lookupNamespaceURI "The lookupNamespaceURI() method of the Node interface takes a prefix as parameter and returns the namespace URI associated with it on the given node if found (and null if not).") +[Node/lookupNamespaceURI](https://developer.mozilla.org/en-US/docs/Web/API/Node/lookupNamespaceURI 'The lookupNamespaceURI() method of the Node interface takes a prefix as parameter and returns the namespace URI associated with it on the given node if found (and null if not).') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `lookupNamespaceURI(prefix)` method steps are: 1. If prefix is the empty string, then set it to null. - 2. Return the result of running [locate a namespace](https://dom.spec.whatwg.org/#locate-a-namespace) for [this](https://webidl.spec.whatwg.org/#this) using prefix. - -[Node/isDefaultNamespace](https://developer.mozilla.org/en-US/docs/Web/API/Node/isDefaultNamespace "The isDefaultNamespace() method of the Node interface accepts a namespace URI as an argument. It returns a boolean value that is true if the namespace is the default namespace on the given node and false if not.") +[Node/isDefaultNamespace](https://developer.mozilla.org/en-US/docs/Web/API/Node/isDefaultNamespace 'The isDefaultNamespace() method of the Node interface accepts a namespace URI as an argument. It returns a boolean value that is true if the namespace is the default namespace on the given node and false if not.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `isDefaultNamespace(namespace)` method steps are: 1. If namespace is the empty string, then set it to null. - 2. Let defaultNamespace be the result of running [locate a namespace](https://dom.spec.whatwg.org/#locate-a-namespace) for [this](https://webidl.spec.whatwg.org/#this) using null. - 3. Return true if defaultNamespace is the same as namespace; otherwise false. - -___ +--- -[Node/insertBefore](https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore "The insertBefore() method of the Node interface inserts a node before a reference node as a child of a specified parent node.") +[Node/insertBefore](https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore 'The insertBefore() method of the Node interface inserts a node before a reference node as a child of a specified parent node.') In all current engines. Firefox3+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `insertBefore(node, child)` method steps are to return the result of [pre-inserting](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into [this](https://webidl.spec.whatwg.org/#this) before child. -[Node/appendChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild "The appendChild() method of the Node interface adds a node to the end of the list of children of a specified parent node. If the given child is a reference to an existing node in the document, appendChild() moves it from its current position to the new position (there is no requirement to remove the node from its parent node before appending it to some other node).") +[Node/appendChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild 'The appendChild() method of the Node interface adds a node to the end of the list of children of a specified parent node. If the given child is a reference to an existing node in the document, appendChild() moves it from its current position to the new position (there is no requirement to remove the node from its parent node before appending it to some other node).') In all current engines. Firefox1+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `appendChild(node)` method steps are to return the result of [appending](https://dom.spec.whatwg.org/#concept-node-append) node to [this](https://webidl.spec.whatwg.org/#this). -[Node/replaceChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/replaceChild "The replaceChild() method of the Node element replaces a child node within the given (parent) node.") +[Node/replaceChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/replaceChild 'The replaceChild() method of the Node element replaces a child node within the given (parent) node.') In all current engines. Firefox1+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `replaceChild(node, child)` method steps are to return the result of [replacing](https://dom.spec.whatwg.org/#concept-node-replace) child with node within [this](https://webidl.spec.whatwg.org/#this). -[Node/removeChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild "The removeChild() method of the Node interface removes a child node from the DOM and returns the removed node.") +[Node/removeChild](https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild 'The removeChild() method of the Node interface removes a child node from the DOM and returns the removed node.') In all current engines. Firefox1+Safari1.1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `removeChild(child)` method steps are to return the result of [pre-removing](https://dom.spec.whatwg.org/#concept-node-pre-remove) child from [this](https://webidl.spec.whatwg.org/#this). -___ +--- The list of elements with qualified name qualifiedName for a [node](https://dom.spec.whatwg.org/#concept-node) root is the `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` returned by the following algorithm: 1. If qualifiedName is U+002A (\*), then return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches only [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element). - 2. Otherwise, if root’s [node document](https://dom.spec.whatwg.org/#concept-node-document) is an [HTML document](https://dom.spec.whatwg.org/#html-document), return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches the following [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element): - + - Whose [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and whose [qualified name](https://dom.spec.whatwg.org/#concept-element-qualified-name) is qualifiedName, in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - - Whose [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is _not_ the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and whose [qualified name](https://dom.spec.whatwg.org/#concept-element-qualified-name) is qualifiedName. - + 3. Otherwise, return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element) whose [qualified name](https://dom.spec.whatwg.org/#concept-element-qualified-name) is qualifiedName. - When invoked with the same argument, and as long as root’s [node document](https://dom.spec.whatwg.org/#concept-node-document)’s [type](https://dom.spec.whatwg.org/#concept-document-type) has not changed, the same `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` object may be returned as returned by an earlier call. The list of elements with namespace namespace and local name localName for a [node](https://dom.spec.whatwg.org/#concept-node) root is the `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` returned by the following algorithm: 1. If namespace is the empty string, then set it to null. - 2. If both namespace and localName are U+002A (\*), then return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element). - 3. If namespace is U+002A (\*), then return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element) whose [local name](https://dom.spec.whatwg.org/#concept-element-local-name) is localName. - 4. If localName is U+002A (\*), then return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element) whose [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is namespace. - 5. Return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element) whose [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is namespace and [local name](https://dom.spec.whatwg.org/#concept-element-local-name) is localName. - When invoked with the same arguments, the same `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` object may be returned as returned by an earlier call. @@ -5456,9 +5060,8 @@ The list of elements with class names classNames for a [node](https://dom.spec.w 1. Let classes be the result of running the [ordered set parser](https://dom.spec.whatwg.org/#concept-ordered-set-parser) on classNames. 2. If classes is the empty set, return an empty `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)`. 3. Return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` rooted at root, whose filter matches [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element) that have all their [classes](https://dom.spec.whatwg.org/#concept-class) in classes. - + The comparisons for the [classes](https://dom.spec.whatwg.org/#concept-class) must be done in an [ASCII case-insensitive](https://infra.spec.whatwg.org/#ascii-case-insensitive) manner if root’s [node document](https://dom.spec.whatwg.org/#concept-node-document)’s [mode](https://dom.spec.whatwg.org/#concept-document-mode) is "`quirks`"; otherwise in an [identical to](https://infra.spec.whatwg.org/#string-is) manner. - When invoked with the same argument, the same `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` object may be returned as returned by an earlier call. @@ -5470,83 +5073,83 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera3+Edge79+ -___ +--- Edge (Legacy)12+IE4+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -[XMLDocument](https://developer.mozilla.org/en-US/docs/Web/API/XMLDocument "The XMLDocument interface represents an XML document. It inherits from the generic Document and does not add any specific methods or properties to it: nevertheless, several algorithms behave differently with the two types of documents.") +[XMLDocument](https://developer.mozilla.org/en-US/docs/Web/API/XMLDocument 'The XMLDocument interface represents an XML document. It inherits from the generic Document and does not add any specific methods or properties to it: nevertheless, several algorithms behave differently with the two types of documents.') In all current engines. Firefox1+Safari10+Chrome34+ -___ +--- Opera21+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari10+Chrome for Android34+Android WebView37+Samsung Internet2.0+Opera Mobile21+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `Document` : [Node](https://dom.spec.whatwg.org/#node) { - [constructor](https://dom.spec.whatwg.org/#dom-document-document)(); - - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [DOMImplementation](https://dom.spec.whatwg.org/#domimplementation) [implementation](https://dom.spec.whatwg.org/#dom-document-implementation); - readonly attribute [USVString](https://webidl.spec.whatwg.org/#idl-USVString) [URL](https://dom.spec.whatwg.org/#dom-document-url); - readonly attribute [USVString](https://webidl.spec.whatwg.org/#idl-USVString) [documentURI](https://dom.spec.whatwg.org/#dom-document-documenturi); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [compatMode](https://dom.spec.whatwg.org/#dom-document-compatmode); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [characterSet](https://dom.spec.whatwg.org/#dom-document-characterset); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [charset](https://dom.spec.whatwg.org/#dom-document-charset); // legacy alias of .characterSet - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [inputEncoding](https://dom.spec.whatwg.org/#dom-document-inputencoding); // legacy alias of .characterSet - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [contentType](https://dom.spec.whatwg.org/#dom-document-contenttype); - - readonly attribute [DocumentType](https://dom.spec.whatwg.org/#documenttype)? [doctype](https://dom.spec.whatwg.org/#dom-document-doctype); - readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [documentElement](https://dom.spec.whatwg.org/#dom-document-documentelement); - [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagName](https://dom.spec.whatwg.org/#dom-document-getelementsbytagname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-document-getelementsbytagname-qualifiedname-qualifiedname)); - [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagNameNS](https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens-namespace-localname-localname)); - [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByClassName](https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `classNames`[](https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames)); - - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Element](https://dom.spec.whatwg.org/#element) [createElement](https://dom.spec.whatwg.org/#dom-document-createelement)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-document-createelement-localname-options-localname), optional ([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) or [ElementCreationOptions](https://dom.spec.whatwg.org/#dictdef-elementcreationoptions)) `options`[](https://dom.spec.whatwg.org/#dom-document-createelement-localname-options-options) = {}); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Element](https://dom.spec.whatwg.org/#element) [createElementNS](https://dom.spec.whatwg.org/#dom-document-createelementns)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-document-createelementns-namespace-qualifiedname-options-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-document-createelementns-namespace-qualifiedname-options-qualifiedname), optional ([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) or [ElementCreationOptions](https://dom.spec.whatwg.org/#dictdef-elementcreationoptions)) `options`[](https://dom.spec.whatwg.org/#dom-document-createelementns-namespace-qualifiedname-options-options) = {}); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) [createDocumentFragment](https://dom.spec.whatwg.org/#dom-document-createdocumentfragment)(); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Text](https://dom.spec.whatwg.org/#text) [createTextNode](https://dom.spec.whatwg.org/#dom-document-createtextnode)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-document-createtextnode-data-data)); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [CDATASection](https://dom.spec.whatwg.org/#cdatasection) [createCDATASection](https://dom.spec.whatwg.org/#dom-document-createcdatasection)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-document-createcdatasection-data-data)); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Comment](https://dom.spec.whatwg.org/#comment) [createComment](https://dom.spec.whatwg.org/#dom-document-createcomment)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) ); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction) [createProcessingInstruction](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `target`[](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction-target-data-target), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction-target-data-data)); - - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Node](https://dom.spec.whatwg.org/#node) [importNode](https://dom.spec.whatwg.org/#dom-document-importnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-document-importnode-node-deep-node), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `deep`[](https://dom.spec.whatwg.org/#dom-document-importnode-node-deep-deep) = false); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [adoptNode](https://dom.spec.whatwg.org/#dom-document-adoptnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-document-adoptnode-node-node)); - - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Attr](https://dom.spec.whatwg.org/#attr) [createAttribute](https://dom.spec.whatwg.org/#dom-document-createattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-document-createattribute-localname-localname)); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Attr](https://dom.spec.whatwg.org/#attr) [createAttributeNS](https://dom.spec.whatwg.org/#dom-document-createattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-document-createattributens-namespace-qualifiedname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-document-createattributens-namespace-qualifiedname-qualifiedname)); - - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Event](https://dom.spec.whatwg.org/#event) [createEvent](https://dom.spec.whatwg.org/#dom-document-createevent)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `interface`[](https://dom.spec.whatwg.org/#dom-document-createevent-interface-interface)); // legacy - - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Range](https://dom.spec.whatwg.org/#range) [createRange](https://dom.spec.whatwg.org/#dom-document-createrange)(); - - // NodeFilter.SHOW\_ALL = 0xFFFFFFFF - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [NodeIterator](https://dom.spec.whatwg.org/#nodeiterator) [createNodeIterator](https://dom.spec.whatwg.org/#dom-document-createnodeiterator)([Node](https://dom.spec.whatwg.org/#node) `root`[](https://dom.spec.whatwg.org/#dom-document-createnodeiterator-root-whattoshow-filter-root), optional [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `whatToShow`[](https://dom.spec.whatwg.org/#dom-document-createnodeiterator-root-whattoshow-filter-whattoshow) = 0xFFFFFFFF, optional [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? `filter`[](https://dom.spec.whatwg.org/#dom-document-createnodeiterator-root-whattoshow-filter-filter) = null); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [TreeWalker](https://dom.spec.whatwg.org/#treewalker) [createTreeWalker](https://dom.spec.whatwg.org/#dom-document-createtreewalker)([Node](https://dom.spec.whatwg.org/#node) `root`[](https://dom.spec.whatwg.org/#dom-document-createtreewalker-root-whattoshow-filter-root), optional [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `whatToShow`[](https://dom.spec.whatwg.org/#dom-document-createtreewalker-root-whattoshow-filter-whattoshow) = 0xFFFFFFFF, optional [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? `filter`[](https://dom.spec.whatwg.org/#dom-document-createtreewalker-root-whattoshow-filter-filter) = null); +[constructor](https://dom.spec.whatwg.org/#dom-document-document)(); + +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [DOMImplementation](https://dom.spec.whatwg.org/#domimplementation) [implementation](https://dom.spec.whatwg.org/#dom-document-implementation); +readonly attribute [USVString](https://webidl.spec.whatwg.org/#idl-USVString) [URL](https://dom.spec.whatwg.org/#dom-document-url); +readonly attribute [USVString](https://webidl.spec.whatwg.org/#idl-USVString) [documentURI](https://dom.spec.whatwg.org/#dom-document-documenturi); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [compatMode](https://dom.spec.whatwg.org/#dom-document-compatmode); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [characterSet](https://dom.spec.whatwg.org/#dom-document-characterset); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [charset](https://dom.spec.whatwg.org/#dom-document-charset); // legacy alias of .characterSet +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [inputEncoding](https://dom.spec.whatwg.org/#dom-document-inputencoding); // legacy alias of .characterSet +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [contentType](https://dom.spec.whatwg.org/#dom-document-contenttype); + +readonly attribute [DocumentType](https://dom.spec.whatwg.org/#documenttype)? [doctype](https://dom.spec.whatwg.org/#dom-document-doctype); +readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [documentElement](https://dom.spec.whatwg.org/#dom-document-documentelement); +[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagName](https://dom.spec.whatwg.org/#dom-document-getelementsbytagname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-document-getelementsbytagname-qualifiedname-qualifiedname)); +[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagNameNS](https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens-namespace-localname-localname)); +[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByClassName](https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `classNames`[](https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames)); + +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Element](https://dom.spec.whatwg.org/#element) [createElement](https://dom.spec.whatwg.org/#dom-document-createelement)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-document-createelement-localname-options-localname), optional ([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) or [ElementCreationOptions](https://dom.spec.whatwg.org/#dictdef-elementcreationoptions)) `options`[](https://dom.spec.whatwg.org/#dom-document-createelement-localname-options-options) = {}); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Element](https://dom.spec.whatwg.org/#element) [createElementNS](https://dom.spec.whatwg.org/#dom-document-createelementns)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-document-createelementns-namespace-qualifiedname-options-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-document-createelementns-namespace-qualifiedname-options-qualifiedname), optional ([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) or [ElementCreationOptions](https://dom.spec.whatwg.org/#dictdef-elementcreationoptions)) `options`[](https://dom.spec.whatwg.org/#dom-document-createelementns-namespace-qualifiedname-options-options) = {}); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) [createDocumentFragment](https://dom.spec.whatwg.org/#dom-document-createdocumentfragment)(); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Text](https://dom.spec.whatwg.org/#text) [createTextNode](https://dom.spec.whatwg.org/#dom-document-createtextnode)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-document-createtextnode-data-data)); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [CDATASection](https://dom.spec.whatwg.org/#cdatasection) [createCDATASection](https://dom.spec.whatwg.org/#dom-document-createcdatasection)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-document-createcdatasection-data-data)); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Comment](https://dom.spec.whatwg.org/#comment) [createComment](https://dom.spec.whatwg.org/#dom-document-createcomment)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) ); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction) [createProcessingInstruction](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `target`[](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction-target-data-target), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction-target-data-data)); + +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Node](https://dom.spec.whatwg.org/#node) [importNode](https://dom.spec.whatwg.org/#dom-document-importnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-document-importnode-node-deep-node), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `deep`[](https://dom.spec.whatwg.org/#dom-document-importnode-node-deep-deep) = false); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Node](https://dom.spec.whatwg.org/#node) [adoptNode](https://dom.spec.whatwg.org/#dom-document-adoptnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-document-adoptnode-node-node)); + +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Attr](https://dom.spec.whatwg.org/#attr) [createAttribute](https://dom.spec.whatwg.org/#dom-document-createattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-document-createattribute-localname-localname)); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Attr](https://dom.spec.whatwg.org/#attr) [createAttributeNS](https://dom.spec.whatwg.org/#dom-document-createattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-document-createattributens-namespace-qualifiedname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-document-createattributens-namespace-qualifiedname-qualifiedname)); + +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Event](https://dom.spec.whatwg.org/#event) [createEvent](https://dom.spec.whatwg.org/#dom-document-createevent)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `interface`[](https://dom.spec.whatwg.org/#dom-document-createevent-interface-interface)); // legacy + +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Range](https://dom.spec.whatwg.org/#range) [createRange](https://dom.spec.whatwg.org/#dom-document-createrange)(); + +// NodeFilter.SHOW_ALL = 0xFFFFFFFF +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [NodeIterator](https://dom.spec.whatwg.org/#nodeiterator) [createNodeIterator](https://dom.spec.whatwg.org/#dom-document-createnodeiterator)([Node](https://dom.spec.whatwg.org/#node) `root`[](https://dom.spec.whatwg.org/#dom-document-createnodeiterator-root-whattoshow-filter-root), optional [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `whatToShow`[](https://dom.spec.whatwg.org/#dom-document-createnodeiterator-root-whattoshow-filter-whattoshow) = 0xFFFFFFFF, optional [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? `filter`[](https://dom.spec.whatwg.org/#dom-document-createnodeiterator-root-whattoshow-filter-filter) = null); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [TreeWalker](https://dom.spec.whatwg.org/#treewalker) [createTreeWalker](https://dom.spec.whatwg.org/#dom-document-createtreewalker)([Node](https://dom.spec.whatwg.org/#node) `root`[](https://dom.spec.whatwg.org/#dom-document-createtreewalker-root-whattoshow-filter-root), optional [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `whatToShow`[](https://dom.spec.whatwg.org/#dom-document-createtreewalker-root-whattoshow-filter-whattoshow) = 0xFFFFFFFF, optional [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? `filter`[](https://dom.spec.whatwg.org/#dom-document-createtreewalker-root-whattoshow-filter-filter) = null); }; \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `XMLDocument` : [Document](https://dom.spec.whatwg.org/#document) {}; dictionary `ElementCreationOptions` { - [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `is`; +[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `is`; }; `[Document](https://dom.spec.whatwg.org/#document)` [nodes](https://dom.spec.whatwg.org/#concept-node) are simply known as documents. @@ -5565,7 +5168,7 @@ The [mode](https://dom.spec.whatwg.org/#concept-document-mode) is only ever chan A [document](https://dom.spec.whatwg.org/#concept-document)’s [get the parent](https://dom.spec.whatwg.org/#get-the-parent) algorithm, given an event, returns null if event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute value is "`load`" or [document](https://dom.spec.whatwg.org/#concept-document) does not have a [browsing context](https://html.spec.whatwg.org/multipage/browsers.html#concept-document-bc); otherwise the [document](https://dom.spec.whatwg.org/#concept-document)’s [relevant global object](https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-global). -___ +--- [Document/Document](https://developer.mozilla.org/en-US/docs/Web/API/Document/Document "The Document constructor creates a new Document object that is a web page loaded in the browser and serving as an entry point into the page's content.") @@ -5573,105 +5176,105 @@ In all current engines. Firefox20+Safari8+Chrome60+ -___ +--- Opera47+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android20+iOS Safari8+Chrome for Android60+Android WebView60+Samsung Internet8.0+Opera Mobile44+ -``document = new `[Document()](https://dom.spec.whatwg.org/#dom-document-document)` `` +`` document = new `[Document()](https://dom.spec.whatwg.org/#dom-document-document)` `` Returns a new [document](https://dom.spec.whatwg.org/#concept-document). -[Document/implementation](https://developer.mozilla.org/en-US/docs/Web/API/Document/implementation "The Document.implementation property returns a DOMImplementation object associated with the current document.") +[Document/implementation](https://developer.mozilla.org/en-US/docs/Web/API/Document/implementation 'The Document.implementation property returns a DOMImplementation object associated with the current document.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` `` +`` document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` `` Returns document’s `[DOMImplementation](https://dom.spec.whatwg.org/#domimplementation)` object. -[Document/URL](https://developer.mozilla.org/en-US/docs/Web/API/Document/URL "The URL read-only property of the Document interface returns the document location as a string.") +[Document/URL](https://developer.mozilla.org/en-US/docs/Web/API/Document/URL 'The URL read-only property of the Document interface returns the document location as a string.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera3+Edge79+ -___ +--- Edge (Legacy)12+IE4+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -``document . `[URL](https://dom.spec.whatwg.org/#dom-document-url)` `` +`` document . `[URL](https://dom.spec.whatwg.org/#dom-document-url)` `` -[Document/documentURI](https://developer.mozilla.org/en-US/docs/Web/API/Document/documentURI "The documentURI read-only property of the Document interface returns the document location as a string.") +[Document/documentURI](https://developer.mozilla.org/en-US/docs/Web/API/Document/documentURI 'The documentURI read-only property of the Document interface returns the document location as a string.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``document . `[documentURI](https://dom.spec.whatwg.org/#dom-document-documenturi)` `` +`` document . `[documentURI](https://dom.spec.whatwg.org/#dom-document-documenturi)` `` Returns document’s [URL](https://dom.spec.whatwg.org/#concept-document-url). -[Document/compatMode](https://developer.mozilla.org/en-US/docs/Web/API/Document/compatMode "The Document.compatMode read-only property indicates whether the document is rendered in Quirks mode or Standards mode.") +[Document/compatMode](https://developer.mozilla.org/en-US/docs/Web/API/Document/compatMode 'The Document.compatMode read-only property indicates whether the document is rendered in Quirks mode or Standards mode.') In all current engines. Firefox1+Safari3.1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari2+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``document . `[compatMode](https://dom.spec.whatwg.org/#dom-document-compatmode)` `` +`` document . `[compatMode](https://dom.spec.whatwg.org/#dom-document-compatmode)` `` Returns the string "`BackCompat`" if document’s [mode](https://dom.spec.whatwg.org/#concept-document-mode) is "`quirks`"; otherwise "`CSS1Compat`". @@ -5681,41 +5284,41 @@ In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera MobileYes -``document . `[characterSet](https://dom.spec.whatwg.org/#dom-document-characterset)` `` +`` document . `[characterSet](https://dom.spec.whatwg.org/#dom-document-characterset)` `` Returns document’s [encoding](https://dom.spec.whatwg.org/#concept-document-encoding). -[Document/contentType](https://developer.mozilla.org/en-US/docs/Web/API/Document/contentType "The Document.contentType read-only property returns the MIME type that the document is being rendered as. This may come from HTTP headers or other sources of MIME information, and might be affected by automatic type conversions performed by either the browser or extensions.") +[Document/contentType](https://developer.mozilla.org/en-US/docs/Web/API/Document/contentType 'The Document.contentType read-only property returns the MIME type that the document is being rendered as. This may come from HTTP headers or other sources of MIME information, and might be affected by automatic type conversions performed by either the browser or extensions.') In all current engines. Firefox1+Safari9+Chrome36+ -___ +--- Opera23+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android4+iOS Safari9+Chrome for Android36+Android WebView37+Samsung Internet3.0+Opera Mobile24+ -``document . `[contentType](https://dom.spec.whatwg.org/#dom-document-contenttype)` `` +`` document . `[contentType](https://dom.spec.whatwg.org/#dom-document-contenttype)` `` Returns document’s [content type](https://dom.spec.whatwg.org/#concept-document-content-type). @@ -5733,23 +5336,23 @@ The `characterSet`, `charset`, and `inputEncoding` getter steps are to return [t The `contentType` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [content type](https://dom.spec.whatwg.org/#concept-document-content-type). -___ +--- -[Document/doctype](https://developer.mozilla.org/en-US/docs/Web/API/Document/doctype "Returns the Document Type Declaration (DTD) associated with current document. The returned object implements the DocumentType interface. Use DOMImplementation.createDocumentType() to create a DocumentType.") +[Document/doctype](https://developer.mozilla.org/en-US/docs/Web/API/Document/doctype 'Returns the Document Type Declaration (DTD) associated with current document. The returned object implements the DocumentType interface. Use DOMImplementation.createDocumentType() to create a DocumentType.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -5757,21 +5360,21 @@ document . `[doctype](https://dom.spec.whatwg.org/#dom-document-doctype)` Returns the [doctype](https://dom.spec.whatwg.org/#concept-doctype) or null if there is none. -[Document/documentElement](https://developer.mozilla.org/en-US/docs/Web/API/Document/documentElement "Document.documentElement returns the Element that is the root element of the document (for example, the element for HTML documents).") +[Document/documentElement](https://developer.mozilla.org/en-US/docs/Web/API/Document/documentElement 'Document.documentElement returns the Element that is the root element of the document (for example, the element for HTML documents).') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -5779,21 +5382,21 @@ document . `[documentElement](https://dom.spec.whatwg.org/#dom-document-document Returns the [document element](https://dom.spec.whatwg.org/#document-element). -[Document/getElementsByTagName](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByTagName "The getElementsByTagName method of Document interface returns an HTMLCollection of elements with the given tag name.") +[Document/getElementsByTagName](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByTagName 'The getElementsByTagName method of Document interface returns an HTMLCollection of elements with the given tag name.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera5.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -5803,21 +5406,21 @@ If qualifiedName is "`*`" returns a `[HTMLCollection](https://dom.spec.whatwg.or Otherwise, returns a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` of all [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element) whose [qualified name](https://dom.spec.whatwg.org/#concept-element-qualified-name) is qualifiedName. (Matches case-insensitively against [elements](https://dom.spec.whatwg.org/#concept-element) in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) within an [HTML document](https://dom.spec.whatwg.org/#html-document).) -[Document/getElementsByTagNameNS](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByTagNameNS "Returns a list of elements with the given tag name belonging to the given namespace. The complete document is searched, including the root node.") +[Document/getElementsByTagNameNS](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByTagNameNS 'Returns a list of elements with the given tag name belonging to the given namespace. The complete document is searched, including the root node.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -5831,41 +5434,41 @@ If only localName is "`*`" returns a `[HTMLCollection](https://dom.spec.whatwg.o Otherwise, returns a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` of all [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant) [elements](https://dom.spec.whatwg.org/#concept-element) whose [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is namespace and [local name](https://dom.spec.whatwg.org/#concept-element-local-name) is localName. -[Document/getElementsByClassName](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName "The getElementsByClassName method of Document interface returns an array-like object of all child elements which have all of the given class name(s).") +[Document/getElementsByClassName](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName 'The getElementsByClassName method of Document interface returns an array-like object of all child elements which have all of the given class name(s).') In all current engines. Firefox3+Safari3.1+Chrome1+ -___ +--- Opera9.5+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari2+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ collection = document . `[getElementsByClassName(classNames)](https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname)` -[Element/getElementsByClassName](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByClassName "The Element method getElementsByClassName() returns a live HTMLCollection which contains every descendant element which has the specified class name or names.") +[Element/getElementsByClassName](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByClassName 'The Element method getElementsByClassName() returns a live HTMLCollection which contains every descendant element which has the specified class name or names.') In all current engines. Firefox3+Safari6+Chrome1+ -___ +--- Opera9.5+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android4+iOS Safari6+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -5897,11 +5500,11 @@ The `getElementsByClassName(classNames)` method steps are to return the [list of A call to `document.getElementById("example").getElementsByClassName("aaa")` would return a `[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection)` with the two paragraphs `p1` and `p2` in it. -A call to `getElementsByClassName("ccc bbb")` would only return one node, however, namely `p3`. A call to `document.getElementById("example").getElementsByClassName("bbb  ccc ")` would return the same thing. +A call to `getElementsByClassName("ccc bbb")` would only return one node, however, namely `p3`. A call to `document.getElementById("example").getElementsByClassName("bbb ccc ")` would return the same thing. A call to `getElementsByClassName("aaa,bbb")` would return no nodes; none of the elements above are in the `aaa,bbb` class. -___ +--- [Document/createElement](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement "In an HTML document, the document.createElement() method creates the HTML element specified by tagName, or an HTMLUnknownElement if tagName isn't recognized.") @@ -5909,15 +5512,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera6+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -5929,21 +5532,21 @@ If localName does not match the `[Name](https://www.w3.org/TR/xml/#NT-Name)` pro When supplied, options’s `[is](https://dom.spec.whatwg.org/#dom-elementcreationoptions-is)` can be used to create a [customized built-in element](https://html.spec.whatwg.org/multipage/custom-elements.html#customized-built-in-element). -[Document/createElementNS](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElementNS "Creates an element with the specified namespace URI and qualified name.") +[Document/createElementNS](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElementNS 'Creates an element with the specified namespace URI and qualified name.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -5962,113 +5565,113 @@ If one of the following conditions is true a "`[NamespaceError](https://webidl.s When supplied, options’s `[is](https://dom.spec.whatwg.org/#dom-elementcreationoptions-is)` can be used to create a [customized built-in element](https://html.spec.whatwg.org/multipage/custom-elements.html#customized-built-in-element). -[Document/createDocumentFragment](https://developer.mozilla.org/en-US/docs/Web/API/Document/createDocumentFragment "Creates a new empty DocumentFragment into which DOM nodes can be added to build an offscreen DOM tree.") +[Document/createDocumentFragment](https://developer.mozilla.org/en-US/docs/Web/API/Document/createDocumentFragment 'Creates a new empty DocumentFragment into which DOM nodes can be added to build an offscreen DOM tree.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``documentFragment = document . `[createDocumentFragment()](https://dom.spec.whatwg.org/#dom-document-createdocumentfragment)` `` +`` documentFragment = document . `[createDocumentFragment()](https://dom.spec.whatwg.org/#dom-document-createdocumentfragment)` `` Returns a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node). -[Document/createTextNode](https://developer.mozilla.org/en-US/docs/Web/API/Document/createTextNode "Creates a new Text node. This method can be used to escape HTML characters.") +[Document/createTextNode](https://developer.mozilla.org/en-US/docs/Web/API/Document/createTextNode 'Creates a new Text node. This method can be used to escape HTML characters.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -``text = document . `[createTextNode(data)](https://dom.spec.whatwg.org/#dom-document-createtextnode)` `` +`` text = document . `[createTextNode(data)](https://dom.spec.whatwg.org/#dom-document-createtextnode)` `` Returns a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is data. -``text = document . `[createCDATASection(data)](https://dom.spec.whatwg.org/#dom-document-createcdatasection)` `` +`` text = document . `[createCDATASection(data)](https://dom.spec.whatwg.org/#dom-document-createcdatasection)` `` Returns a `[CDATASection](https://dom.spec.whatwg.org/#cdatasection)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is data. -[Document/createCDATASection](https://developer.mozilla.org/en-US/docs/Web/API/Document/createCDATASection "createCDATASection() creates a new CDATA section node, and returns it.") +[Document/createCDATASection](https://developer.mozilla.org/en-US/docs/Web/API/Document/createCDATASection 'createCDATASection() creates a new CDATA section node, and returns it.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[Document/createComment](https://developer.mozilla.org/en-US/docs/Web/API/Document/createComment "createComment() creates a new comment node, and returns it.") +[Document/createComment](https://developer.mozilla.org/en-US/docs/Web/API/Document/createComment 'createComment() creates a new comment node, and returns it.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``comment = document . `[createComment(data)](https://dom.spec.whatwg.org/#dom-document-createcomment)` `` +`` comment = document . `[createComment(data)](https://dom.spec.whatwg.org/#dom-document-createcomment)` `` Returns a `[Comment](https://dom.spec.whatwg.org/#comment)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is data. -[Document/createProcessingInstruction](https://developer.mozilla.org/en-US/docs/Web/API/Document/createProcessingInstruction "createProcessingInstruction() generates a new processing instruction node and returns it.") +[Document/createProcessingInstruction](https://developer.mozilla.org/en-US/docs/Web/API/Document/createProcessingInstruction 'createProcessingInstruction() generates a new processing instruction node and returns it.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``processingInstruction = document . `[createProcessingInstruction(target, data)](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction)` `` +`` processingInstruction = document . `[createProcessingInstruction(target, data)](https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction)` `` Returns a `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)` [node](https://dom.spec.whatwg.org/#concept-node) whose [target](https://dom.spec.whatwg.org/#concept-pi-target) is target and [data](https://dom.spec.whatwg.org/#concept-cd-data) is data. If target does not match the `[Name](https://www.w3.org/TR/xml/#NT-Name)` production an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` will be thrown. If data contains "`?>`" an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` will be thrown. @@ -6079,28 +5682,18 @@ The HTML Standard will, e.g., define that for `html` and the [HTML namespace](ht The `createElement(localName, options)` method steps are: 1. If localName does not match the `[Name](https://www.w3.org/TR/xml/#NT-Name)` production, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If [this](https://webidl.spec.whatwg.org/#this) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then set localName to localName in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - 3. Let is be null. - 4. If options is a [dictionary](https://webidl.spec.whatwg.org/#dfn-dictionary) and options\["`[is](https://dom.spec.whatwg.org/#dom-elementcreationoptions-is)`"\] [exists](https://infra.spec.whatwg.org/#map-exists), then set is to it. - 5. Let namespace be the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), if [this](https://webidl.spec.whatwg.org/#this) is an [HTML document](https://dom.spec.whatwg.org/#html-document) or [this](https://webidl.spec.whatwg.org/#this)’s [content type](https://dom.spec.whatwg.org/#concept-document-content-type) is "`application/xhtml+xml`"; otherwise null. - 6. Return the result of [creating an element](https://dom.spec.whatwg.org/#concept-create-element) given [this](https://webidl.spec.whatwg.org/#this), localName, namespace, null, is, and with the synchronous custom elements flag set. - The internal `createElementNS` steps, given document, namespace, qualifiedName, and options, are as follows: 1. Let namespace, prefix, and localName be the result of passing namespace and qualifiedName to [validate and extract](https://dom.spec.whatwg.org/#validate-and-extract). - 2. Let is be null. - 3. If options is a [dictionary](https://webidl.spec.whatwg.org/#dfn-dictionary) and options\["`[is](https://dom.spec.whatwg.org/#dom-elementcreationoptions-is)`"\] [exists](https://infra.spec.whatwg.org/#map-exists), then set is to it. - 4. Return the result of [creating an element](https://dom.spec.whatwg.org/#concept-create-element) given document, localName, namespace, prefix, is, and with the synchronous custom elements flag set. - The `createElementNS(namespace, qualifiedName, options)` method steps are to return the result of running the [internal `createElementNS` steps](https://dom.spec.whatwg.org/#internal-createelementns-steps), given [this](https://webidl.spec.whatwg.org/#this), namespace, qualifiedName, and options. @@ -6115,11 +5708,8 @@ No check is performed that data consists of characters that match the `[Char](ht The `createCDATASection(data)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If data contains the string "`]]>`", then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. Return a new `[CDATASection](https://dom.spec.whatwg.org/#cdatasection)` [node](https://dom.spec.whatwg.org/#concept-node) with its [data](https://dom.spec.whatwg.org/#concept-cd-data) set to data and [node document](https://dom.spec.whatwg.org/#concept-node-document) set to [this](https://webidl.spec.whatwg.org/#this). - The method steps are to return a new `[Comment](https://dom.spec.whatwg.org/#comment)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is data and [node document](https://dom.spec.whatwg.org/#concept-node-document) is [this](https://webidl.spec.whatwg.org/#this). @@ -6133,7 +5723,7 @@ The `createProcessingInstruction(target, data)` method steps are: No check is performed that target contains "`xml`" or "`:`", or that data contains characters that match the `[Char](https://www.w3.org/TR/xml/#NT-Char)` production. -___ +--- [Document/importNode](https://developer.mozilla.org/en-US/docs/Web/API/Document/importNode "The Document object's importNode() method creates a copy of a Node or DocumentFragment from another document, to be inserted into the current document later.") @@ -6141,15 +5731,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -6165,15 +5755,15 @@ In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -6186,252 +5776,229 @@ If node is a [document](https://dom.spec.whatwg.org/#concept-document), throws a The `importNode(node, deep)` method steps are: 1. If node is a [document](https://dom.spec.whatwg.org/#concept-document) or [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. Return a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of node, with [this](https://webidl.spec.whatwg.org/#this) and the _clone children flag_ set if deep is true. - [Specifications](https://dom.spec.whatwg.org/#other-applicable-specifications) may define adopting steps for all or some [nodes](https://dom.spec.whatwg.org/#concept-node). The algorithm is passed node and oldDocument, as indicated in the [adopt](https://dom.spec.whatwg.org/#concept-node-adopt) algorithm. To adopt a node into a document, run these steps: 1. Let oldDocument be node’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. If node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is non-null, then [remove](https://dom.spec.whatwg.org/#concept-node-remove) node. - 3. If document is not oldDocument, then: - + 1. For each inclusiveDescendant in node’s [shadow-including inclusive descendants](https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-descendant): - + 1. Set inclusiveDescendant’s [node document](https://dom.spec.whatwg.org/#concept-node-document) to document. - 2. If inclusiveDescendant is an [element](https://dom.spec.whatwg.org/#concept-element), then set the [node document](https://dom.spec.whatwg.org/#concept-node-document) of each [attribute](https://dom.spec.whatwg.org/#concept-attribute) in inclusiveDescendant’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) to document. - + 2. For each inclusiveDescendant in node’s [shadow-including inclusive descendants](https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-descendant) that is [custom](https://dom.spec.whatwg.org/#concept-element-custom), [enqueue a custom element callback reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction) with inclusiveDescendant, callback name "`adoptedCallback`", and an argument list containing oldDocument and document. - 3. For each inclusiveDescendant in node’s [shadow-including inclusive descendants](https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-descendant), in [shadow-including tree order](https://dom.spec.whatwg.org/#concept-shadow-including-tree-order), run the [adopting steps](https://dom.spec.whatwg.org/#concept-node-adopt-ext) with inclusiveDescendant and oldDocument. - The `adoptNode(node)` method steps are: 1. If node is a [document](https://dom.spec.whatwg.org/#concept-document), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If node is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. If node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node) whose [host](https://dom.spec.whatwg.org/#concept-documentfragment-host) is non-null, then return. - 4. [Adopt](https://dom.spec.whatwg.org/#concept-node-adopt) node into [this](https://webidl.spec.whatwg.org/#this). - 5. Return node. - -___ +--- -[Document/createAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Document/createAttribute "The Document.createAttribute() method creates a new attribute node, and returns it. The object created a node implementing the Attr interface. The DOM does not enforce what sort of attributes can be added to a particular element in this manner.") +[Document/createAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Document/createAttribute 'The Document.createAttribute() method creates a new attribute node, and returns it. The object created a node implementing the Attr interface. The DOM does not enforce what sort of attributes can be added to a particular element in this manner.') In all current engines. Firefox44+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android44+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `createAttribute(localName)` method steps are: 1. If localName does not match the `[Name](https://www.w3.org/TR/xml/#NT-Name)` production in XML, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If [this](https://webidl.spec.whatwg.org/#this) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then set localName to localName in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). 3. Return a new [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName and [node document](https://dom.spec.whatwg.org/#concept-node-document) is [this](https://webidl.spec.whatwg.org/#this). The `createAttributeNS(namespace, qualifiedName)` method steps are: 1. Let namespace, prefix, and localName be the result of passing namespace and qualifiedName to [validate and extract](https://dom.spec.whatwg.org/#validate-and-extract). - 2. Return a new [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is namespace, [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix) is prefix, [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName, and [node document](https://dom.spec.whatwg.org/#concept-node-document) is [this](https://webidl.spec.whatwg.org/#this). - -___ +--- -[Document/createEvent](https://developer.mozilla.org/en-US/docs/Web/API/Document/createEvent "Creates an event of the type specified. The returned object should be first initialized and can then be passed to EventTarget.dispatchEvent.") +[Document/createEvent](https://developer.mozilla.org/en-US/docs/Web/API/Document/createEvent 'Creates an event of the type specified. The returned object should be first initialized and can then be passed to EventTarget.dispatchEvent.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera7+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `createEvent(interface)` method steps are: 1. Let constructor be null. - 2. If interface is an [ASCII case-insensitive](https://infra.spec.whatwg.org/#ascii-case-insensitive) match for any of the strings in the first column in the following table, then set constructor to the interface in the second column on the same row as the matching string: - + String - + Interface - + Notes - + "`beforeunloadevent`" - + `[BeforeUnloadEvent](https://html.spec.whatwg.org/multipage/browsing-the-web.html#beforeunloadevent)` - + [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) - + "`compositionevent`" - + `[CompositionEvent](https://www.w3.org/TR/uievents/#compositionevent)` - + [\[UIEVENTS\]](https://dom.spec.whatwg.org/#biblio-uievents) - + "`customevent`" - + `[CustomEvent](https://dom.spec.whatwg.org/#customevent)` - + "`devicemotionevent`" - + `[DeviceMotionEvent](https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion)` - + [\[DEVICE-ORIENTATION\]](https://dom.spec.whatwg.org/#biblio-device-orientation) - + "`deviceorientationevent`" - + `[DeviceOrientationEvent](https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion)` - + "`dragevent`" - + `[DragEvent](https://html.spec.whatwg.org/multipage/dnd.html#dragevent)` - + [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) - + "`event`" - + `[Event](https://dom.spec.whatwg.org/#event)` - + "`events`" - + "`focusevent`" - + `[FocusEvent](https://www.w3.org/TR/uievents/#focusevent)` - + [\[UIEVENTS\]](https://dom.spec.whatwg.org/#biblio-uievents) - + "`hashchangeevent`" - + `[HashChangeEvent](https://html.spec.whatwg.org/multipage/browsing-the-web.html#hashchangeevent)` - + [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) - + "`htmlevents`" - + `[Event](https://dom.spec.whatwg.org/#event)` - + "`keyboardevent`" - + `[KeyboardEvent](https://www.w3.org/TR/uievents/#keyboardevent)` - + [\[UIEVENTS\]](https://dom.spec.whatwg.org/#biblio-uievents) - + "`messageevent`" - + `[MessageEvent](https://html.spec.whatwg.org/multipage/comms.html#messageevent)` - + [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) - + "`mouseevent`" - + `[MouseEvent](https://www.w3.org/TR/uievents/#mouseevent)` - + [\[UIEVENTS\]](https://dom.spec.whatwg.org/#biblio-uievents) - + "`mouseevents`" - + "`storageevent`" - + `[StorageEvent](https://html.spec.whatwg.org/multipage/webstorage.html#storageevent)` - + [\[HTML\]](https://dom.spec.whatwg.org/#biblio-html) - + "`svgevents`" - + `[Event](https://dom.spec.whatwg.org/#event)` - + "`textevent`" - + `[CompositionEvent](https://www.w3.org/TR/uievents/#compositionevent)` - + [\[UIEVENTS\]](https://dom.spec.whatwg.org/#biblio-uievents) - + "`touchevent`" - + `[TouchEvent](https://w3c.github.io/touch-events/#idl-def-touchevent)` - + [\[TOUCH-EVENTS\]](https://dom.spec.whatwg.org/#biblio-touch-events) - + "`uievent`" - + `[UIEvent](https://www.w3.org/TR/uievents/#uievent)` - + [\[UIEVENTS\]](https://dom.spec.whatwg.org/#biblio-uievents) - + "`uievents`" - + 3. If constructor is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 4. If the interface indicated by constructor is not exposed on the [relevant global object](https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-global) of [this](https://webidl.spec.whatwg.org/#this), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + Typically user agents disable support for touch events in some configurations, in which case this clause would be triggered for the interface `[TouchEvent](https://w3c.github.io/touch-events/#idl-def-touchevent)`. - + 5. Let event be the result of [creating an event](https://dom.spec.whatwg.org/#concept-event-create) given constructor. - 6. Initialize event’s `[type](https://dom.spec.whatwg.org/#dom-event-type)` attribute to the empty string. - 7. Initialize event’s `[timeStamp](https://dom.spec.whatwg.org/#dom-event-timestamp)` attribute to the result of calling [current high resolution time](https://w3c.github.io/hr-time/#dfn-current-high-resolution-time) with [this](https://webidl.spec.whatwg.org/#this)’s [relevant global object](https://html.spec.whatwg.org/multipage/webappapis.html#concept-relevant-global). - 8. Initialize event’s `[isTrusted](https://dom.spec.whatwg.org/#dom-event-istrusted)` attribute to false. - 9. Unset event’s [initialized flag](https://dom.spec.whatwg.org/#initialized-flag). - -10. Return event. - +10. Return event. [Event](https://dom.spec.whatwg.org/#concept-event) constructors ought to be used instead. -___ +--- -[Document/createRange](https://developer.mozilla.org/en-US/docs/Web/API/Document/createRange "The Document.createRange() method returns a new Range object.") +[Document/createRange](https://developer.mozilla.org/en-US/docs/Web/API/Document/createRange 'The Document.createRange() method returns a new Range object.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -6439,88 +6006,78 @@ The `createRange()` method steps are to return a new [live range](https://dom.sp The `[Range()](https://dom.spec.whatwg.org/#dom-range-range)` constructor can be used instead. -___ +--- -[Document/createNodeIterator](https://developer.mozilla.org/en-US/docs/Web/API/Document/createNodeIterator "Returns a new NodeIterator object.") +[Document/createNodeIterator](https://developer.mozilla.org/en-US/docs/Web/API/Document/createNodeIterator 'Returns a new NodeIterator object.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera MobileYes The `createNodeIterator(root, whatToShow, filter)` method steps are: 1. Let iterator be a new `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)` object. - 2. Set iterator’s [root](https://dom.spec.whatwg.org/#concept-traversal-root) and iterator’s [reference](https://dom.spec.whatwg.org/#nodeiterator-reference) to root. - 3. Set iterator’s [pointer before reference](https://dom.spec.whatwg.org/#nodeiterator-pointer-before-reference) to true. - 4. Set iterator’s [whatToShow](https://dom.spec.whatwg.org/#concept-traversal-whattoshow) to whatToShow. - 5. Set iterator’s [filter](https://dom.spec.whatwg.org/#concept-traversal-filter) to filter. - 6. Return iterator. - -[Document/createTreeWalker](https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker "The Document.createTreeWalker() creator method returns a newly created TreeWalker object.") +[Document/createTreeWalker](https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker 'The Document.createTreeWalker() creator method returns a newly created TreeWalker object.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `createTreeWalker(root, whatToShow, filter)` method steps are: 1. Let walker be a new `[TreeWalker](https://dom.spec.whatwg.org/#treewalker)` object. - 2. Set walker’s [root](https://dom.spec.whatwg.org/#concept-traversal-root) and walker’s [current](https://dom.spec.whatwg.org/#treewalker-current) to root. - 3. Set walker’s [whatToShow](https://dom.spec.whatwg.org/#concept-traversal-whattoshow) to whatToShow. - 4. Set walker’s [filter](https://dom.spec.whatwg.org/#concept-traversal-filter) to filter. - 5. Return walker. #### 4.5.1. Interface `[DOMImplementation](https://dom.spec.whatwg.org/#domimplementation)`[](https://dom.spec.whatwg.org/#interface-domimplementation) -[DOMImplementation](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation "The DOMImplementation interface represents an object providing methods which are not dependent on any particular document. Such an object is returned by the Document.implementation property.") +[DOMImplementation](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation 'The DOMImplementation interface represents an object providing methods which are not dependent on any particular document. Such an object is returned by the Document.implementation property.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -6528,145 +6085,127 @@ User agents must create a `[DOMImplementation](https://dom.spec.whatwg.org/#domi \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `DOMImplementation` { - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentType](https://dom.spec.whatwg.org/#documenttype) [createDocumentType](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype-qualifiedname-publicid-systemid-qualifiedname), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `publicId`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype-qualifiedname-publicid-systemid-publicid), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `systemId`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype-qualifiedname-publicid-systemid-systemid)); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [XMLDocument](https://dom.spec.whatwg.org/#xmldocument) [createDocument](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument-namespace-qualifiedname-doctype-namespace), \[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument-namespace-qualifiedname-doctype-qualifiedname), optional [DocumentType](https://dom.spec.whatwg.org/#documenttype)? `doctype`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument-namespace-qualifiedname-doctype-doctype) = null); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Document](https://dom.spec.whatwg.org/#document) [createHTMLDocument](https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument)(optional [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `title`[](https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument-title-title)); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentType](https://dom.spec.whatwg.org/#documenttype) [createDocumentType](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype-qualifiedname-publicid-systemid-qualifiedname), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `publicId`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype-qualifiedname-publicid-systemid-publicid), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `systemId`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype-qualifiedname-publicid-systemid-systemid)); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [XMLDocument](https://dom.spec.whatwg.org/#xmldocument) [createDocument](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument-namespace-qualifiedname-doctype-namespace), \[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument-namespace-qualifiedname-doctype-qualifiedname), optional [DocumentType](https://dom.spec.whatwg.org/#documenttype)? `doctype`[](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument-namespace-qualifiedname-doctype-doctype) = null); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Document](https://dom.spec.whatwg.org/#document) [createHTMLDocument](https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument)(optional [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `title`[](https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument-title-title)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasFeature](https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature)(); // useless; always returns true +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasFeature](https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature)(); // useless; always returns true }; -[DOMImplementation/createDocumentType](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType "The DOMImplementation.createDocumentType() method returns a DocumentType object which can either be used with DOMImplementation.createDocument upon document creation or can be put into the document via methods like Node.insertBefore() or Node.replaceChild().") +[DOMImplementation/createDocumentType](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType 'The DOMImplementation.createDocumentType() method returns a DocumentType object which can either be used with DOMImplementation.createDocument upon document creation or can be put into the document via methods like Node.insertBefore() or Node.replaceChild().') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``doctype = document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` . `[createDocumentType(qualifiedName, publicId, systemId)](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype)` `` +`` doctype = document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` . `[createDocumentType(qualifiedName, publicId, systemId)](https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype)` `` Returns a [doctype](https://dom.spec.whatwg.org/#concept-doctype), with the given qualifiedName, publicId, and systemId. If qualifiedName does not match the `[Name](https://www.w3.org/TR/xml/#NT-Name)` production, an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` is thrown, and if it does not match the `[QName](https://www.w3.org/TR/xml-names/#NT-QName)` production, a "`[NamespaceError](https://webidl.spec.whatwg.org/#namespaceerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` is thrown. -[DOMImplementation/createDocument](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument "The DOMImplementation.createDocument() method creates and returns an XMLDocument.") +[DOMImplementation/createDocument](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument 'The DOMImplementation.createDocument() method creates and returns an XMLDocument.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``doc = document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` . [createDocument(namespace, qualifiedName [, doctype = null])](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument)`` +`` doc = document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` . [createDocument(namespace, qualifiedName [, doctype = null])](https://dom.spec.whatwg.org/#dom-domimplementation-createdocument) `` Returns an `[XMLDocument](https://dom.spec.whatwg.org/#xmldocument)`, with a [document element](https://dom.spec.whatwg.org/#document-element) whose [local name](https://dom.spec.whatwg.org/#concept-element-local-name) is qualifiedName and whose [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is namespace (unless qualifiedName is the empty string), and with doctype, if it is given, as its [doctype](https://dom.spec.whatwg.org/#concept-doctype). This method throws the same exceptions as the `[createElementNS()](https://dom.spec.whatwg.org/#dom-document-createelementns)` method, when invoked with namespace and qualifiedName. -[DOMImplementation/createHTMLDocument](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createHTMLDocument "The DOMImplementation.createHTMLDocument() method creates a new HTML Document.") +[DOMImplementation/createHTMLDocument](https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createHTMLDocument 'The DOMImplementation.createHTMLDocument() method creates a new HTML Document.') In all current engines. Firefox4+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -``doc = document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` . [createHTMLDocument([title])](https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument)`` +`` doc = document . `[implementation](https://dom.spec.whatwg.org/#dom-document-implementation)` . [createHTMLDocument([title])](https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument) `` Returns a [document](https://dom.spec.whatwg.org/#concept-document), with a basic [tree](https://dom.spec.whatwg.org/#concept-tree) already constructed including a `[title](https://html.spec.whatwg.org/multipage/semantics.html#the-title-element)` element, unless the title argument is omitted. The `createDocumentType(qualifiedName, publicId, systemId)` method steps are: 1. [Validate](https://dom.spec.whatwg.org/#validate) qualifiedName. - 2. Return a new [doctype](https://dom.spec.whatwg.org/#concept-doctype), with qualifiedName as its [name](https://dom.spec.whatwg.org/#concept-doctype-name), publicId as its [public ID](https://dom.spec.whatwg.org/#concept-doctype-publicid), and systemId as its [system ID](https://dom.spec.whatwg.org/#concept-doctype-systemid), and with its [node document](https://dom.spec.whatwg.org/#concept-node-document) set to the associated [document](https://dom.spec.whatwg.org/#concept-document) of [this](https://webidl.spec.whatwg.org/#this). - No check is performed that publicId code points match the `[PubidChar](https://www.w3.org/TR/xml/#NT-PubidChar)` production or that systemId does not contain both a '`"`' and a "`'`". The `createDocument(namespace, qualifiedName, doctype)` method steps are: 1. Let document be a new `[XMLDocument](https://dom.spec.whatwg.org/#xmldocument)`. - 2. Let element be null. - 3. If qualifiedName is not the empty string, then set element to the result of running the [internal `createElementNS` steps](https://dom.spec.whatwg.org/#internal-createelementns-steps), given document, namespace, qualifiedName, and an empty dictionary. - 4. If doctype is non-null, [append](https://dom.spec.whatwg.org/#concept-node-append) doctype to document. - 5. If element is non-null, [append](https://dom.spec.whatwg.org/#concept-node-append) element to document. - 6. document’s [origin](https://dom.spec.whatwg.org/#concept-document-origin) is [this](https://webidl.spec.whatwg.org/#this)’s associated [document](https://dom.spec.whatwg.org/#concept-document)’s [origin](https://dom.spec.whatwg.org/#concept-document-origin). - 7. document’s [content type](https://dom.spec.whatwg.org/#concept-document-content-type) is determined by namespace: - + [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) - + `application/xhtml+xml` - + [SVG namespace](https://infra.spec.whatwg.org/#svg-namespace) - + `image/svg+xml` - + Any other namespace - + `application/xml` - + 8. Return document. - The `createHTMLDocument(title)` method steps are: 1. Let doc be a new [document](https://dom.spec.whatwg.org/#concept-document) that is an [HTML document](https://dom.spec.whatwg.org/#html-document). - 2. Set doc’s [content type](https://dom.spec.whatwg.org/#concept-document-content-type) to "`text/html`". - 3. [Append](https://dom.spec.whatwg.org/#concept-node-append) a new [doctype](https://dom.spec.whatwg.org/#concept-doctype), with "`html`" as its [name](https://dom.spec.whatwg.org/#concept-doctype-name) and with its [node document](https://dom.spec.whatwg.org/#concept-node-document) set to doc, to doc. - 4. [Append](https://dom.spec.whatwg.org/#concept-node-append) the result of [creating an element](https://dom.spec.whatwg.org/#concept-create-element) given doc, `[html](https://html.spec.whatwg.org/multipage/semantics.html#the-html-element)`, and the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), to doc. - 5. [Append](https://dom.spec.whatwg.org/#concept-node-append) the result of [creating an element](https://dom.spec.whatwg.org/#concept-create-element) given doc, `[head](https://html.spec.whatwg.org/multipage/semantics.html#the-head-element)`, and the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), to the `[html](https://html.spec.whatwg.org/multipage/semantics.html#the-html-element)` element created earlier. - 6. If title is given: - + 1. [Append](https://dom.spec.whatwg.org/#concept-node-append) the result of [creating an element](https://dom.spec.whatwg.org/#concept-create-element) given doc, `[title](https://html.spec.whatwg.org/multipage/semantics.html#the-title-element)`, and the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), to the `[head](https://html.spec.whatwg.org/multipage/semantics.html#the-head-element)` element created earlier. - 2. [Append](https://dom.spec.whatwg.org/#concept-node-append) a new `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node), with its [data](https://dom.spec.whatwg.org/#concept-cd-data) set to title (which could be the empty string) and its [node document](https://dom.spec.whatwg.org/#concept-node-document) set to doc, to the `[title](https://html.spec.whatwg.org/multipage/semantics.html#the-title-element)` element created earlier. - + 7. [Append](https://dom.spec.whatwg.org/#concept-node-append) the result of [creating an element](https://dom.spec.whatwg.org/#concept-create-element) given doc, `[body](https://html.spec.whatwg.org/multipage/sections.html#the-body-element)`, and the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), to the `[html](https://html.spec.whatwg.org/multipage/semantics.html#the-html-element)` element created earlier. - 8. doc’s [origin](https://dom.spec.whatwg.org/#concept-document-origin) is [this](https://webidl.spec.whatwg.org/#this)’s associated [document](https://dom.spec.whatwg.org/#concept-document)’s [origin](https://dom.spec.whatwg.org/#concept-document-origin). - 9. Return doc. - The `hasFeature()` method steps are to return true. @@ -6674,29 +6213,29 @@ The `hasFeature()` method steps are to return true. ### 4.6. Interface `[DocumentType](https://dom.spec.whatwg.org/#documenttype)`[](https://dom.spec.whatwg.org/#interface-documenttype) -[DocumentType](https://developer.mozilla.org/en-US/docs/Web/API/DocumentType "The DocumentType interface represents a Node containing a doctype.") +[DocumentType](https://developer.mozilla.org/en-US/docs/Web/API/DocumentType 'The DocumentType interface represents a Node containing a doctype.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `DocumentType` : [Node](https://dom.spec.whatwg.org/#node) { - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [name](https://dom.spec.whatwg.org/#dom-documenttype-name); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [publicId](https://dom.spec.whatwg.org/#dom-documenttype-publicid); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [systemId](https://dom.spec.whatwg.org/#dom-documenttype-systemid); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [name](https://dom.spec.whatwg.org/#dom-documenttype-name); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [publicId](https://dom.spec.whatwg.org/#dom-documenttype-publicid); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [systemId](https://dom.spec.whatwg.org/#dom-documenttype-systemid); }; `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` [nodes](https://dom.spec.whatwg.org/#concept-node) are simply known as doctypes. @@ -6713,27 +6252,27 @@ The `systemId` getter steps are to return [this](https://webidl.spec.whatwg.org/ ### 4.7. Interface `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)`[](https://dom.spec.whatwg.org/#interface-documentfragment) -[DocumentFragment](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment "The DocumentFragment interface represents a minimal document object that has no parent.") +[DocumentFragment](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment 'The DocumentFragment interface represents a minimal document object that has no parent.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `DocumentFragment` : [Node](https://dom.spec.whatwg.org/#node) { - [constructor](https://dom.spec.whatwg.org/#dom-documentfragment-documentfragment)(); +[constructor](https://dom.spec.whatwg.org/#dom-documentfragment-documentfragment)(); }; A `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node) has an associated host (null or an [element](https://dom.spec.whatwg.org/#concept-element) in a different [node tree](https://dom.spec.whatwg.org/#concept-node-tree)). It is null unless otherwise stated. @@ -6742,25 +6281,25 @@ An object A is a host-including inclusive ancestor of an object B, if either A i The `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node)’s [host](https://dom.spec.whatwg.org/#concept-documentfragment-host) concept is useful for HTML’s `[template](https://html.spec.whatwg.org/multipage/scripting.html#the-template-element)` element and for [shadow roots](https://dom.spec.whatwg.org/#concept-shadow-root), and impacts the [pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) and [replace](https://dom.spec.whatwg.org/#concept-node-replace) algorithms. -[DocumentFragment/DocumentFragment](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/DocumentFragment "The DocumentFragment() constructor returns a new, empty DocumentFragment object .") +[DocumentFragment/DocumentFragment](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment/DocumentFragment 'The DocumentFragment() constructor returns a new, empty DocumentFragment object .') In all current engines. Firefox24+Safari8+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android24+iOS Safari8+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ -``tree = new `[DocumentFragment()](https://dom.spec.whatwg.org/#dom-documentfragment-documentfragment)` `` +`` tree = new `[DocumentFragment()](https://dom.spec.whatwg.org/#dom-documentfragment-documentfragment)` `` Returns a new `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node). @@ -6774,25 +6313,25 @@ In all current engines. Firefox63+Safari10.1+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10.3+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `ShadowRoot` : [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) { - readonly attribute [ShadowRootMode](https://dom.spec.whatwg.org/#enumdef-shadowrootmode) [mode](https://dom.spec.whatwg.org/#dom-shadowroot-mode); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [delegatesFocus](https://dom.spec.whatwg.org/#dom-shadowroot-delegatesfocus); - readonly attribute [SlotAssignmentMode](https://dom.spec.whatwg.org/#enumdef-slotassignmentmode) [slotAssignment](https://dom.spec.whatwg.org/#dom-shadowroot-slotassignment); - readonly attribute [Element](https://dom.spec.whatwg.org/#element) [host](https://dom.spec.whatwg.org/#dom-shadowroot-host); - attribute [EventHandler](https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler) [onslotchange](https://dom.spec.whatwg.org/#dom-shadowroot-onslotchange); +readonly attribute [ShadowRootMode](https://dom.spec.whatwg.org/#enumdef-shadowrootmode) [mode](https://dom.spec.whatwg.org/#dom-shadowroot-mode); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [delegatesFocus](https://dom.spec.whatwg.org/#dom-shadowroot-delegatesfocus); +readonly attribute [SlotAssignmentMode](https://dom.spec.whatwg.org/#enumdef-slotassignmentmode) [slotAssignment](https://dom.spec.whatwg.org/#dom-shadowroot-slotassignment); +readonly attribute [Element](https://dom.spec.whatwg.org/#element) [host](https://dom.spec.whatwg.org/#dom-shadowroot-host); +attribute [EventHandler](https://html.spec.whatwg.org/multipage/webappapis.html#eventhandler) [onslotchange](https://dom.spec.whatwg.org/#dom-shadowroot-onslotchange); }; enum `ShadowRootMode` { `"open"`[](https://dom.spec.whatwg.org/#dom-shadowrootmode-open), `"closed"`[](https://dom.spec.whatwg.org/#dom-shadowrootmode-closed) }; @@ -6802,21 +6341,21 @@ enum `SlotAssignmentMode` { `"manual"`[](https://dom.spec.whatwg.org/#dom-slotas [Shadow roots](https://dom.spec.whatwg.org/#concept-shadow-root) have an associated mode ("`open`" or "`closed`"). -[ShadowRoot/delegatesFocus](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/delegatesFocus "The delegatesFocus read-only property of the ShadowRoot interface returns true if the shadow root delegates focus, and false otherwise.") +[ShadowRoot/delegatesFocus](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/delegatesFocus 'The delegatesFocus read-only property of the ShadowRoot interface returns true if the shadow root delegates focus, and false otherwise.') In all current engines. Firefox94+Safari15+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android94+iOS Safari15+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ @@ -6836,15 +6375,15 @@ In all current engines. Firefox63+Safari10.1+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10.3+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ @@ -6854,21 +6393,21 @@ The `delegatesFocus` getter steps are to return [this](https://webidl.spec.whatw The `slotAssignment` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [slot assignment](https://dom.spec.whatwg.org/#shadowroot-slot-assignment). -[ShadowRoot/host](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/host "The host read-only property of the ShadowRoot returns a reference to the DOM element the ShadowRoot is attached to.") +[ShadowRoot/host](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/host 'The host read-only property of the ShadowRoot returns a reference to the DOM element the ShadowRoot is attached to.') In all current engines. Firefox63+Safari10.1+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10.3+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ @@ -6876,7 +6415,7 @@ The `host` getter steps are to return [this](https://webidl.spec.whatwg.org/#thi The `onslotchange` attribute is an [event handler IDL attribute](https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-idl-attributes) for the `onslotchange`[](https://dom.spec.whatwg.org/#shadowroot-onslotchange) [event handler](https://html.spec.whatwg.org/multipage/webappapis.html#event-handlers), whose [event handler event type](https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-event-type) is `[slotchange](https://html.spec.whatwg.org/multipage/indices.html#event-slotchange)`. -___ +--- In shadow-including tree order is [shadow-including preorder, depth-first traversal](https://dom.spec.whatwg.org/#shadow-including-preorder-depth-first-traversal) of a [node tree](https://dom.spec.whatwg.org/#concept-node-tree). Shadow-including preorder, depth-first traversal of a [node tree](https://dom.spec.whatwg.org/#concept-node-tree) tree is preorder, depth-first traversal of tree, with for each [shadow host](https://dom.spec.whatwg.org/#element-shadow-host) encountered in tree, [shadow-including preorder, depth-first traversal](https://dom.spec.whatwg.org/#shadow-including-preorder-depth-first-traversal) of that [element](https://dom.spec.whatwg.org/#concept-element)’s [shadow root](https://dom.spec.whatwg.org/#concept-element-shadow-root)’s [node tree](https://dom.spec.whatwg.org/#concept-node-tree) just after it is encountered. @@ -6893,97 +6432,93 @@ A shadow-including inclusive ancestor is an object or one of its [shadow-includi A [node](https://dom.spec.whatwg.org/#concept-node) A is closed-shadow-hidden from a [node](https://dom.spec.whatwg.org/#concept-node) B if all of the following conditions are true: - A’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root). - - A’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is not a [shadow-including inclusive ancestor](https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-ancestor) of B. - - A’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root) whose [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is "`closed`" or A’s [root](https://dom.spec.whatwg.org/#concept-tree-root)’s [host](https://dom.spec.whatwg.org/#concept-documentfragment-host) is [closed-shadow-hidden](https://dom.spec.whatwg.org/#concept-closed-shadow-hidden) from B. - To retarget an object A against an object B, repeat these steps until they return an object: 1. If one of the following is true - + - A is not a [node](https://dom.spec.whatwg.org/#concept-node) - A’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is not a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root) - B is a [node](https://dom.spec.whatwg.org/#concept-node) and A’s [root](https://dom.spec.whatwg.org/#concept-tree-root) is a [shadow-including inclusive ancestor](https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-ancestor) of B - + then return A. - + 2. Set A to A’s [root](https://dom.spec.whatwg.org/#concept-tree-root)’s [host](https://dom.spec.whatwg.org/#concept-documentfragment-host). - The [retargeting](https://dom.spec.whatwg.org/#retarget) algorithm is used by [event dispatch](https://dom.spec.whatwg.org/#concept-event-dispatch) as well as other specifications, such as Fullscreen. [\[FULLSCREEN\]](https://dom.spec.whatwg.org/#biblio-fullscreen) ### 4.9. Interface `[Element](https://dom.spec.whatwg.org/#element)`[](https://dom.spec.whatwg.org/#interface-element) -[Element](https://developer.mozilla.org/en-US/docs/Web/API/Element "Element is the most general base class from which all element objects (i.e. objects that represent elements) in a Document inherit. It only has methods and properties common to all kinds of elements. More specific classes inherit from Element.") +[Element](https://developer.mozilla.org/en-US/docs/Web/API/Element 'Element is the most general base class from which all element objects (i.e. objects that represent elements) in a Document inherit. It only has methods and properties common to all kinds of elements. More specific classes inherit from Element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE4+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `Element` : [Node](https://dom.spec.whatwg.org/#node) { - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [namespaceURI](https://dom.spec.whatwg.org/#dom-element-namespaceuri); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [prefix](https://dom.spec.whatwg.org/#dom-element-prefix); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [localName](https://dom.spec.whatwg.org/#dom-element-localname); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [tagName](https://dom.spec.whatwg.org/#dom-element-tagname); - - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [id](https://dom.spec.whatwg.org/#dom-element-id); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [className](https://dom.spec.whatwg.org/#dom-element-classname); - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject), [PutForwards](https://webidl.spec.whatwg.org/#PutForwards)\=[value](https://dom.spec.whatwg.org/#dom-domtokenlist-value)\] readonly attribute [DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist) [classList](https://dom.spec.whatwg.org/#dom-element-classlist); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [slot](https://dom.spec.whatwg.org/#dom-element-slot); - - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasAttributes](https://dom.spec.whatwg.org/#dom-element-hasattributes)(); - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap) [attributes](https://dom.spec.whatwg.org/#dom-element-attributes); - [sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)\> [getAttributeNames](https://dom.spec.whatwg.org/#dom-element-getattributenames)(); - [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [getAttribute](https://dom.spec.whatwg.org/#dom-element-getattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-getattribute-qualifiedname-qualifiedname)); - [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [getAttributeNS](https://dom.spec.whatwg.org/#dom-element-getattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-getattributens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-getattributens-namespace-localname-localname)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setAttribute](https://dom.spec.whatwg.org/#dom-element-setattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-setattribute-qualifiedname-value-qualifiedname), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `value`[](https://dom.spec.whatwg.org/#dom-element-setattribute-qualifiedname-value-value)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setAttributeNS](https://dom.spec.whatwg.org/#dom-element-setattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-setattributens-namespace-qualifiedname-value-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-setattributens-namespace-qualifiedname-value-qualifiedname), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `value`[](https://dom.spec.whatwg.org/#dom-element-setattributens-namespace-qualifiedname-value-value)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [removeAttribute](https://dom.spec.whatwg.org/#dom-element-removeattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-removeattribute-qualifiedname-qualifiedname)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [removeAttributeNS](https://dom.spec.whatwg.org/#dom-element-removeattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-removeattributens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-removeattributens-namespace-localname-localname)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [toggleAttribute](https://dom.spec.whatwg.org/#dom-element-toggleattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-toggleattribute-qualifiedname-force-qualifiedname), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `force`[](https://dom.spec.whatwg.org/#dom-element-toggleattribute-qualifiedname-force-force)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasAttribute](https://dom.spec.whatwg.org/#dom-element-hasattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-hasattribute-qualifiedname-qualifiedname)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasAttributeNS](https://dom.spec.whatwg.org/#dom-element-hasattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-hasattributens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-hasattributens-namespace-localname-localname)); - - [Attr](https://dom.spec.whatwg.org/#attr)? [getAttributeNode](https://dom.spec.whatwg.org/#dom-element-getattributenode)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-getattributenode-qualifiedname-qualifiedname)); - [Attr](https://dom.spec.whatwg.org/#attr)? [getAttributeNodeNS](https://dom.spec.whatwg.org/#dom-element-getattributenodens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-getattributenodens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-getattributenodens-namespace-localname-localname)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setAttributeNode](https://dom.spec.whatwg.org/#dom-element-setattributenode)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-element-setattributenode-attr-attr)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setAttributeNodeNS](https://dom.spec.whatwg.org/#dom-element-setattributenodens)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-element-setattributenodens-attr-attr)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr) [removeAttributeNode](https://dom.spec.whatwg.org/#dom-element-removeattributenode)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-element-removeattributenode-attr-attr)); - - [ShadowRoot](https://dom.spec.whatwg.org/#shadowroot) [attachShadow](https://dom.spec.whatwg.org/#dom-element-attachshadow)([ShadowRootInit](https://dom.spec.whatwg.org/#dictdef-shadowrootinit) `init`[](https://dom.spec.whatwg.org/#dom-element-attachshadow-init-init)); - readonly attribute [ShadowRoot](https://dom.spec.whatwg.org/#shadowroot)? [shadowRoot](https://dom.spec.whatwg.org/#dom-element-shadowroot); - - [Element](https://dom.spec.whatwg.org/#element)? [closest](https://dom.spec.whatwg.org/#dom-element-closest)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-element-closest-selectors-selectors)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [matches](https://dom.spec.whatwg.org/#dom-element-matches)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-element-matches-selectors-selectors)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [webkitMatchesSelector](https://dom.spec.whatwg.org/#dom-element-webkitmatchesselector)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-element-webkitmatchesselector-selectors-selectors)); // legacy alias of .matches - - [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagName](https://dom.spec.whatwg.org/#dom-element-getelementsbytagname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-getelementsbytagname-qualifiedname-qualifiedname)); - [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagNameNS](https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens-namespace-localname-localname)); - [HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByClassName](https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `classNames`[](https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames)); - - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Element](https://dom.spec.whatwg.org/#element)? [insertAdjacentElement](https://dom.spec.whatwg.org/#dom-element-insertadjacentelement)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `where`[](https://dom.spec.whatwg.org/#dom-element-insertadjacentelement-where-element-where), [Element](https://dom.spec.whatwg.org/#element) `element`[](https://dom.spec.whatwg.org/#dom-element-insertadjacentelement-where-element-element)); // legacy - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [insertAdjacentText](https://dom.spec.whatwg.org/#dom-element-insertadjacenttext)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `where`[](https://dom.spec.whatwg.org/#dom-element-insertadjacenttext-where-data-where), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-element-insertadjacenttext-where-data-data)); // legacy +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [namespaceURI](https://dom.spec.whatwg.org/#dom-element-namespaceuri); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [prefix](https://dom.spec.whatwg.org/#dom-element-prefix); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [localName](https://dom.spec.whatwg.org/#dom-element-localname); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [tagName](https://dom.spec.whatwg.org/#dom-element-tagname); + +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [id](https://dom.spec.whatwg.org/#dom-element-id); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [className](https://dom.spec.whatwg.org/#dom-element-classname); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject), [PutForwards](https://webidl.spec.whatwg.org/#PutForwards)\=[value](https://dom.spec.whatwg.org/#dom-domtokenlist-value)\] readonly attribute [DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist) [classList](https://dom.spec.whatwg.org/#dom-element-classlist); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [Unscopable](https://webidl.spec.whatwg.org/#Unscopable)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [slot](https://dom.spec.whatwg.org/#dom-element-slot); + +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasAttributes](https://dom.spec.whatwg.org/#dom-element-hasattributes)(); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap) [attributes](https://dom.spec.whatwg.org/#dom-element-attributes); +[sequence](https://webidl.spec.whatwg.org/#idl-sequence)<[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)\> [getAttributeNames](https://dom.spec.whatwg.org/#dom-element-getattributenames)(); +[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [getAttribute](https://dom.spec.whatwg.org/#dom-element-getattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-getattribute-qualifiedname-qualifiedname)); +[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [getAttributeNS](https://dom.spec.whatwg.org/#dom-element-getattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-getattributens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-getattributens-namespace-localname-localname)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setAttribute](https://dom.spec.whatwg.org/#dom-element-setattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-setattribute-qualifiedname-value-qualifiedname), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `value`[](https://dom.spec.whatwg.org/#dom-element-setattribute-qualifiedname-value-value)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setAttributeNS](https://dom.spec.whatwg.org/#dom-element-setattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-setattributens-namespace-qualifiedname-value-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-setattributens-namespace-qualifiedname-value-qualifiedname), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `value`[](https://dom.spec.whatwg.org/#dom-element-setattributens-namespace-qualifiedname-value-value)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [removeAttribute](https://dom.spec.whatwg.org/#dom-element-removeattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-removeattribute-qualifiedname-qualifiedname)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [removeAttributeNS](https://dom.spec.whatwg.org/#dom-element-removeattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-removeattributens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-removeattributens-namespace-localname-localname)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [toggleAttribute](https://dom.spec.whatwg.org/#dom-element-toggleattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-toggleattribute-qualifiedname-force-qualifiedname), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `force`[](https://dom.spec.whatwg.org/#dom-element-toggleattribute-qualifiedname-force-force)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasAttribute](https://dom.spec.whatwg.org/#dom-element-hasattribute)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-hasattribute-qualifiedname-qualifiedname)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [hasAttributeNS](https://dom.spec.whatwg.org/#dom-element-hasattributens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-hasattributens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-hasattributens-namespace-localname-localname)); + +[Attr](https://dom.spec.whatwg.org/#attr)? [getAttributeNode](https://dom.spec.whatwg.org/#dom-element-getattributenode)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-getattributenode-qualifiedname-qualifiedname)); +[Attr](https://dom.spec.whatwg.org/#attr)? [getAttributeNodeNS](https://dom.spec.whatwg.org/#dom-element-getattributenodens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-getattributenodens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-getattributenodens-namespace-localname-localname)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setAttributeNode](https://dom.spec.whatwg.org/#dom-element-setattributenode)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-element-setattributenode-attr-attr)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setAttributeNodeNS](https://dom.spec.whatwg.org/#dom-element-setattributenodens)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-element-setattributenodens-attr-attr)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr) [removeAttributeNode](https://dom.spec.whatwg.org/#dom-element-removeattributenode)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-element-removeattributenode-attr-attr)); + +[ShadowRoot](https://dom.spec.whatwg.org/#shadowroot) [attachShadow](https://dom.spec.whatwg.org/#dom-element-attachshadow)([ShadowRootInit](https://dom.spec.whatwg.org/#dictdef-shadowrootinit) `init`[](https://dom.spec.whatwg.org/#dom-element-attachshadow-init-init)); +readonly attribute [ShadowRoot](https://dom.spec.whatwg.org/#shadowroot)? [shadowRoot](https://dom.spec.whatwg.org/#dom-element-shadowroot); + +[Element](https://dom.spec.whatwg.org/#element)? [closest](https://dom.spec.whatwg.org/#dom-element-closest)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-element-closest-selectors-selectors)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [matches](https://dom.spec.whatwg.org/#dom-element-matches)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-element-matches-selectors-selectors)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [webkitMatchesSelector](https://dom.spec.whatwg.org/#dom-element-webkitmatchesselector)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `selectors`[](https://dom.spec.whatwg.org/#dom-element-webkitmatchesselector-selectors-selectors)); // legacy alias of .matches + +[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagName](https://dom.spec.whatwg.org/#dom-element-getelementsbytagname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-element-getelementsbytagname-qualifiedname-qualifiedname)); +[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByTagNameNS](https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens-namespace-localname-localname)); +[HTMLCollection](https://dom.spec.whatwg.org/#htmlcollection) [getElementsByClassName](https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `classNames`[](https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames)); + +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Element](https://dom.spec.whatwg.org/#element)? [insertAdjacentElement](https://dom.spec.whatwg.org/#dom-element-insertadjacentelement)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `where`[](https://dom.spec.whatwg.org/#dom-element-insertadjacentelement-where-element-where), [Element](https://dom.spec.whatwg.org/#element) `element`[](https://dom.spec.whatwg.org/#dom-element-insertadjacentelement-where-element-element)); // legacy +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [insertAdjacentText](https://dom.spec.whatwg.org/#dom-element-insertadjacenttext)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `where`[](https://dom.spec.whatwg.org/#dom-element-insertadjacenttext-where-data-where), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-element-insertadjacenttext-where-data-data)); // legacy }; dictionary `ShadowRootInit` { - required [ShadowRootMode](https://dom.spec.whatwg.org/#enumdef-shadowrootmode) `mode`; - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `delegatesFocus` = false; - [SlotAssignmentMode](https://dom.spec.whatwg.org/#enumdef-slotassignmentmode) `slotAssignment` = "named"; +required [ShadowRootMode](https://dom.spec.whatwg.org/#enumdef-shadowrootmode) `mode`; +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) `delegatesFocus` = false; +[SlotAssignmentMode](https://dom.spec.whatwg.org/#enumdef-slotassignmentmode) `slotAssignment` = "named"; }; `[Element](https://dom.spec.whatwg.org/#element)` [nodes](https://dom.spec.whatwg.org/#concept-node) are simply known as elements. @@ -7032,9 +6567,7 @@ An [element](https://dom.spec.whatwg.org/#concept-element)’s qualified name is An [element](https://dom.spec.whatwg.org/#concept-element)’s HTML-uppercased qualified name is the return value of these steps: 1. Let qualifiedName be [this](https://webidl.spec.whatwg.org/#this)’s [qualified name](https://dom.spec.whatwg.org/#concept-element-qualified-name). - 2. If [this](https://webidl.spec.whatwg.org/#this) is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and its [node document](https://dom.spec.whatwg.org/#concept-node-document) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then set qualifiedName to qualifiedName in [ASCII uppercase](https://infra.spec.whatwg.org/#ascii-uppercase). - 3. Return qualifiedName. User agents could optimize [qualified name](https://dom.spec.whatwg.org/#concept-element-qualified-name) and [HTML-uppercased qualified name](https://dom.spec.whatwg.org/#element-html-uppercased-qualified-name) by storing them in internal slots. @@ -7042,83 +6575,61 @@ User agents could optimize [qualified name](https://dom.spec.whatwg.org/#concept To create an element, given a document, localName, namespace, and optional prefix, is, and synchronous custom elements flag, run these steps: 1. If prefix was not given, let prefix be null. - 2. If is was not given, let is be null. - 3. Let result be null. - 4. Let definition be the result of [looking up a custom element definition](https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition) given document, namespace, localName, and is. - 5. If definition is non-null, and definition’s [name](https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-name) is not equal to its [local name](https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-local-name) (i.e., definition represents a [customized built-in element](https://html.spec.whatwg.org/multipage/custom-elements.html#customized-built-in-element)), then: - + 1. Let interface be the [element interface](https://dom.spec.whatwg.org/#concept-element-interface) for localName and the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace). - 2. Set result to a new [element](https://dom.spec.whatwg.org/#concept-element) that implements interface, with no attributes, [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) set to the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) set to prefix, [local name](https://dom.spec.whatwg.org/#concept-element-local-name) set to localName, [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) set to "`undefined`", [custom element definition](https://dom.spec.whatwg.org/#concept-element-custom-element-definition) set to null, [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value) set to is, and [node document](https://dom.spec.whatwg.org/#concept-node-document) set to document. - 3. If the synchronous custom elements flag is set, then run this step while catching any exceptions: - + 1. [Upgrade](https://html.spec.whatwg.org/multipage/custom-elements.html#concept-upgrade-an-element) element using definition. - - + If this step threw an exception, then: - + 1. [Report the exception](https://html.spec.whatwg.org/multipage/webappapis.html#report-the-exception). - 2. Set result’s [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) to "`failed`". - + 4. Otherwise, [enqueue a custom element upgrade reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-upgrade-reaction) given result and definition. - + 6. Otherwise, if definition is non-null, then: - + 1. If the synchronous custom elements flag is set, then run these steps while catching any exceptions: - + 1. Let C be definition’s [constructor](https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-constructor). - 2. Set result to the result of [constructing](https://webidl.spec.whatwg.org/#construct-a-callback-function) C, with no arguments. - 3. Assert: result’s [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) and [custom element definition](https://dom.spec.whatwg.org/#concept-element-custom-element-definition) are initialized. - 4. Assert: result’s [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace). - + IDL enforces that result is an `[HTMLElement](https://html.spec.whatwg.org/multipage/dom.html#htmlelement)` object, which all use the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace). - + 5. If result’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) [is not empty](https://infra.spec.whatwg.org/#list-is-empty), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 6. If result has [children](https://dom.spec.whatwg.org/#concept-tree-child), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 7. If result’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is not null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 8. If result’s [node document](https://dom.spec.whatwg.org/#concept-node-document) is not document, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 9. If result’s [local name](https://dom.spec.whatwg.org/#concept-element-local-name) is not equal to localName, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - - 10. Set result’s [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) to prefix. - - 11. Set result’s [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value) to null. - - + 10. Set result’s [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) to prefix. + + 11. Set result’s [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value) to null. + If any of these steps threw an exception, then: - + 1. [Report the exception](https://html.spec.whatwg.org/multipage/webappapis.html#report-the-exception). - 2. Set result to a new [element](https://dom.spec.whatwg.org/#concept-element) that implements the `[HTMLUnknownElement](https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement)` interface, with no attributes, [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) set to the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) set to prefix, [local name](https://dom.spec.whatwg.org/#concept-element-local-name) set to localName, [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) set to "`failed`", [custom element definition](https://dom.spec.whatwg.org/#concept-element-custom-element-definition) set to null, [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value) set to null, and [node document](https://dom.spec.whatwg.org/#concept-node-document) set to document. - + 2. Otherwise: - + 1. Set result to a new [element](https://dom.spec.whatwg.org/#concept-element) that implements the `[HTMLElement](https://html.spec.whatwg.org/multipage/dom.html#htmlelement)` interface, with no attributes, [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) set to the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) set to prefix, [local name](https://dom.spec.whatwg.org/#concept-element-local-name) set to localName, [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) set to "`undefined`", [custom element definition](https://dom.spec.whatwg.org/#concept-element-custom-element-definition) set to null, [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value) set to null, and [node document](https://dom.spec.whatwg.org/#concept-node-document) set to document. - 2. [Enqueue a custom element upgrade reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-upgrade-reaction) given result and definition. - + 7. Otherwise: - + 1. Let interface be the [element interface](https://dom.spec.whatwg.org/#concept-element-interface) for localName and namespace. - 2. Set result to a new [element](https://dom.spec.whatwg.org/#concept-element) that implements interface, with no attributes, [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) set to namespace, [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix) set to prefix, [local name](https://dom.spec.whatwg.org/#concept-element-local-name) set to localName, [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) set to "`uncustomized`", [custom element definition](https://dom.spec.whatwg.org/#concept-element-custom-element-definition) set to null, [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value) set to is, and [node document](https://dom.spec.whatwg.org/#concept-node-document) set to document. - 3. If namespace is the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), and either localName is a [valid custom element name](https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name) or is is non-null, then set result’s [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) to "`undefined`". - + 8. Return result. - [Elements](https://dom.spec.whatwg.org/#concept-element) also have an attribute list, which is a [list](https://infra.spec.whatwg.org/#list) exposed through a `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)`. Unless explicitly given when an [element](https://dom.spec.whatwg.org/#concept-element) is created, its [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) [is empty](https://infra.spec.whatwg.org/#list-is-empty). @@ -7129,86 +6640,59 @@ This and [other specifications](https://dom.spec.whatwg.org/#other-applicable-sp To handle attribute changes for an [attribute](https://dom.spec.whatwg.org/#concept-attribute) attribute with element, oldValue, and newValue, run these steps: 1. [Queue a mutation record](https://dom.spec.whatwg.org/#queue-a-mutation-record) of "`attributes`" for element with attribute’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), attribute’s [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace), oldValue, « », « », null, and null. - 2. If element is [custom](https://dom.spec.whatwg.org/#concept-element-custom), then [enqueue a custom element callback reaction](https://html.spec.whatwg.org/multipage/custom-elements.html#enqueue-a-custom-element-callback-reaction) with element, callback name "`attributeChangedCallback`", and an argument list containing attribute’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), oldValue, newValue, and attribute’s [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace). - 3. Run the [attribute change steps](https://dom.spec.whatwg.org/#concept-element-attributes-change-ext) with element, attribute’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), oldValue, newValue, and attribute’s [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace). - To change an [attribute](https://dom.spec.whatwg.org/#concept-attribute) attribute to value, run these steps: 1. [Handle attribute changes](https://dom.spec.whatwg.org/#handle-attribute-changes) for attribute with attribute’s [element](https://dom.spec.whatwg.org/#concept-attribute-element), attribute’s [value](https://dom.spec.whatwg.org/#concept-attribute-value), and value. - 2. Set attribute’s [value](https://dom.spec.whatwg.org/#concept-attribute-value) to value. - To append an [attribute](https://dom.spec.whatwg.org/#concept-attribute) attribute to an [element](https://dom.spec.whatwg.org/#concept-element) element, run these steps: 1. [Handle attribute changes](https://dom.spec.whatwg.org/#handle-attribute-changes) for attribute with element, null, and attribute’s [value](https://dom.spec.whatwg.org/#concept-attribute-value). - 2. [Append](https://infra.spec.whatwg.org/#list-append) attribute to element’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute). - 3. Set attribute’s [element](https://dom.spec.whatwg.org/#concept-attribute-element) to element. - To remove an [attribute](https://dom.spec.whatwg.org/#concept-attribute) attribute, run these steps: 1. [Handle attribute changes](https://dom.spec.whatwg.org/#handle-attribute-changes) for attribute with attribute’s [element](https://dom.spec.whatwg.org/#concept-attribute-element), attribute’s [value](https://dom.spec.whatwg.org/#concept-attribute-value), and null. - 2. [Remove](https://infra.spec.whatwg.org/#list-remove) attribute from attribute’s [element](https://dom.spec.whatwg.org/#concept-attribute-element)’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute). 3. Set attribute’s [element](https://dom.spec.whatwg.org/#concept-attribute-element) to null. - To replace an [attribute](https://dom.spec.whatwg.org/#concept-attribute) oldAttr with an [attribute](https://dom.spec.whatwg.org/#concept-attribute) newAttr, run these steps: 1. [Handle attribute changes](https://dom.spec.whatwg.org/#handle-attribute-changes) for oldAttr with oldAttr’s [element](https://dom.spec.whatwg.org/#concept-attribute-element), oldAttr’s [value](https://dom.spec.whatwg.org/#concept-attribute-value), and newAttr’s [value](https://dom.spec.whatwg.org/#concept-attribute-value). - 2. [Replace](https://infra.spec.whatwg.org/#list-replace) oldAttr by newAttr in oldAttr’s [element](https://dom.spec.whatwg.org/#concept-attribute-element)’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute). - 3. Set newAttr’s [element](https://dom.spec.whatwg.org/#concept-attribute-element) to oldAttr’s [element](https://dom.spec.whatwg.org/#concept-attribute-element). - 4. Set oldAttr’s [element](https://dom.spec.whatwg.org/#concept-attribute-element) to null. - -___ +--- To get an attribute by name given a qualifiedName and [element](https://dom.spec.whatwg.org/#concept-element) element, run these steps: 1. If element is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and its [node document](https://dom.spec.whatwg.org/#concept-node-document) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then set qualifiedName to qualifiedName in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - 2. Return the first [attribute](https://dom.spec.whatwg.org/#concept-attribute) in element’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) whose [qualified name](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) is qualifiedName; otherwise null. - To get an attribute by namespace and local name given a namespace, localName, and [element](https://dom.spec.whatwg.org/#concept-element) element, run these steps: 1. If namespace is the empty string, then set it to null. - 2. Return the [attribute](https://dom.spec.whatwg.org/#concept-attribute) in element’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is namespace and [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName, if any; otherwise null. - To get an attribute value given an [element](https://dom.spec.whatwg.org/#concept-element) element, localName, and optionally a namespace (null unless stated otherwise), run these steps: 1. Let attr be the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace) given namespace, localName, and element. - 2. If attr is null, then return the empty string. - 3. Return attr’s [value](https://dom.spec.whatwg.org/#concept-attribute-value). - To set an attribute given an attr and element, run these steps: 1. If attr’s [element](https://dom.spec.whatwg.org/#concept-attribute-element) is neither null nor element, [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InUseAttributeError](https://webidl.spec.whatwg.org/#inuseattributeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. Let oldAttr be the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace) given attr’s [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace), attr’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), and element. - 3. If oldAttr is attr, return attr. - 4. If oldAttr is non-null, then [replace](https://dom.spec.whatwg.org/#concept-element-attributes-replace) oldAttr with attr. - 5. Otherwise, [append](https://dom.spec.whatwg.org/#concept-element-attributes-append) attr to element. - 6. Return oldAttr. - To set an attribute value for an [element](https://dom.spec.whatwg.org/#concept-element) element, using a localName and value, and an optional prefix, and namespace, run these steps: @@ -7217,27 +6701,20 @@ To set an attribute value for an [element](https://dom.spec.whatwg.org/#concept- 3. Let attribute be the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace) given namespace, localName, and element. 4. If attribute is null, create an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is namespace, [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix) is prefix, [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName, [value](https://dom.spec.whatwg.org/#concept-attribute-value) is value, and [node document](https://dom.spec.whatwg.org/#concept-node-document) is element’s [node document](https://dom.spec.whatwg.org/#concept-node-document), then [append](https://dom.spec.whatwg.org/#concept-element-attributes-append) this [attribute](https://dom.spec.whatwg.org/#concept-attribute) to element, and then return. 5. [Change](https://dom.spec.whatwg.org/#concept-element-attributes-change) attribute to value. - To remove an attribute by name given a qualifiedName and [element](https://dom.spec.whatwg.org/#concept-element) element, run these steps: 1. Let attr be the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name) given qualifiedName and element. - 2. If attr is non-null, then [remove](https://dom.spec.whatwg.org/#concept-element-attributes-remove) attr. - 3. Return attr. - To remove an attribute by namespace and local name given a namespace, localName, and [element](https://dom.spec.whatwg.org/#concept-element) element, run these steps: 1. Let attr be the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace) given namespace, localName, and element. - 2. If attr is non-null, then [remove](https://dom.spec.whatwg.org/#concept-element-attributes-remove) attr. - 3. Return attr. - -___ +--- An [element](https://dom.spec.whatwg.org/#concept-element) can have an associated unique identifier (ID) @@ -7246,33 +6723,31 @@ Historically [elements](https://dom.spec.whatwg.org/#concept-element) could have Use these [attribute change steps](https://dom.spec.whatwg.org/#concept-element-attributes-change-ext) to update an [element](https://dom.spec.whatwg.org/#concept-element)’s [ID](https://dom.spec.whatwg.org/#concept-id): 1. If localName is `id`, namespace is null, and value is null or the empty string, then unset element’s [ID](https://dom.spec.whatwg.org/#concept-id). - 2. Otherwise, if localName is `id`, namespace is null, then set element’s [ID](https://dom.spec.whatwg.org/#concept-id) to value. - While this specification defines requirements for `class`, `id`, and `slot` [attributes](https://dom.spec.whatwg.org/#concept-attribute) on any [element](https://dom.spec.whatwg.org/#concept-element), it makes no claims as to whether using them is conforming or not. -___ +--- A [node](https://dom.spec.whatwg.org/#concept-node)’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) of type `[Element](https://dom.spec.whatwg.org/#element)` is known as its parent element. If the [node](https://dom.spec.whatwg.org/#concept-node) has a [parent](https://dom.spec.whatwg.org/#concept-tree-parent) of a different type, its [parent element](https://dom.spec.whatwg.org/#parent-element) is null. -___ +--- -[Element/namespaceURI](https://developer.mozilla.org/en-US/docs/Web/API/Element/namespaceURI "The Element.namespaceURI read-only property returns the namespace URI of the element, or null if the element is not in a namespace.") +[Element/namespaceURI](https://developer.mozilla.org/en-US/docs/Web/API/Element/namespaceURI 'The Element.namespaceURI read-only property returns the namespace URI of the element, or null if the element is not in a namespace.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7280,21 +6755,21 @@ namespace = element . `[namespaceURI](https://dom.spec.whatwg.org/#dom-element-n Returns the [namespace](https://dom.spec.whatwg.org/#concept-element-namespace). -[Element/prefix](https://developer.mozilla.org/en-US/docs/Web/API/Element/prefix "The Element.prefix read-only property returns the namespace prefix of the specified element, or null if no prefix is specified.") +[Element/prefix](https://developer.mozilla.org/en-US/docs/Web/API/Element/prefix 'The Element.prefix read-only property returns the namespace prefix of the specified element, or null if no prefix is specified.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7302,21 +6777,21 @@ prefix = element . `[prefix](https://dom.spec.whatwg.org/#dom-element-prefix)` Returns the [namespace prefix](https://dom.spec.whatwg.org/#concept-element-namespace-prefix). -[Element/localName](https://developer.mozilla.org/en-US/docs/Web/API/Element/localName "The Element.localName read-only property returns the local part of the qualified name of an element.") +[Element/localName](https://developer.mozilla.org/en-US/docs/Web/API/Element/localName 'The Element.localName read-only property returns the local part of the qualified name of an element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7330,15 +6805,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -7354,7 +6829,7 @@ The `localName` getter steps are to return [this](https://webidl.spec.whatwg.org The `tagName` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [HTML-uppercased qualified name](https://dom.spec.whatwg.org/#element-html-uppercased-qualified-name). -___ +--- [Element/id](https://developer.mozilla.org/en-US/docs/Web/API/Element/id "The id property of the Element interface represents the element's identifier, reflecting the id global attribute.") @@ -7362,15 +6837,15 @@ In all current engines. Firefox1+Safari1+Chrome23+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android25+Android WebView37+Samsung Internet1.5+Opera Mobile12.1+ @@ -7378,21 +6853,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android25+Android WebView37+Samsung Returns the value of element’s `id` content attribute. Can be set to change it. -[Element/className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className "The className property of the Element interface gets and sets the value of the class attribute of the specified element.") +[Element/className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className 'The className property of the Element interface gets and sets the value of the class attribute of the specified element.') In all current engines. Firefox1+Safari1+Chrome22+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android25+Android WebView37+Samsung Internet1.5+Opera Mobile10.1+ @@ -7400,21 +6875,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android25+Android WebView37+Samsung Returns the value of element’s `class` content attribute. Can be set to change it. -[Element/classList](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList "The Element.classList is a read-only property that returns a live DOMTokenList collection of the class attributes of the element. This can then be used to manipulate the class list.") +[Element/classList](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList 'The Element.classList is a read-only property that returns a live DOMTokenList collection of the class attributes of the element. This can then be used to manipulate the class list.') In all current engines. Firefox3.6+Safari7+Chrome22+ -___ +--- Opera11.5+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android4+iOS Safari7+Chrome for Android25+Android WebView4.4+Samsung Internet1.5+Opera Mobile11.5+ @@ -7422,39 +6897,39 @@ Firefox for Android4+iOS Safari7+Chrome for Android25+Android WebView4.4+Samsung Allows for manipulation of element’s `class` content attribute as a set of whitespace-separated tokens through a `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object. -[Element/slot](https://developer.mozilla.org/en-US/docs/Web/API/Element/slot "The slot property of the Element interface returns the name of the shadow DOM slot the element is inserted in.") +[Element/slot](https://developer.mozilla.org/en-US/docs/Web/API/Element/slot 'The slot property of the Element interface returns the name of the shadow DOM slot the element is inserted in.') In all current engines. Firefox63+Safari10+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ -[Global\_attributes/slot](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/slot "The slot global attribute assigns a slot in a shadow DOM shadow tree to an element: An element with a slot attribute is assigned to the slot created by the element whose name attribute's value matches that slot attribute's value.") +[Global_attributes/slot](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/slot "The slot global attribute assigns a slot in a shadow DOM shadow tree to an element: An element with a slot attribute is assigned to the slot created by the element whose name attribute's value matches that slot attribute's value.") In all current engines. Firefox63+Safari10+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIE? -___ +--- Firefox for Android63+iOS Safari10+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ @@ -7482,23 +6957,23 @@ The `slot` attribute must [reflect](https://dom.spec.whatwg.org/#concept-reflect `id`, `class`, and `slot` are effectively superglobal attributes as they can appear on any element, regardless of that element’s namespace. -___ +--- -[Element/hasAttributes](https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttributes "The hasAttributes() method of the Element interface returns a boolean value indicating whether the current element has any attributes or not.") +[Element/hasAttributes](https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttributes 'The hasAttributes() method of the Element interface returns a boolean value indicating whether the current element has any attributes or not.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE8+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7506,21 +6981,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Returns true if element has attributes; otherwise false. -[Element/getAttributeNames](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNames "The getAttributeNames() method of the Element interface returns the attribute names of the element as an Array of strings. If the element has no attributes it returns an empty array.") +[Element/getAttributeNames](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNames 'The getAttributeNames() method of the Element interface returns the attribute names of the element as an Array of strings. If the element has no attributes it returns an empty array.') In all current engines. Firefox45+Safari10.1+Chrome61+ -___ +--- Opera48+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for Android45+iOS Safari10.3+Chrome for Android61+Android WebView61+Samsung Internet8.0+Opera Mobile45+ @@ -7528,21 +7003,21 @@ Firefox for Android45+iOS Safari10.3+Chrome for Android61+Android WebView61+Sams Returns the [qualified names](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) of all element’s [attributes](https://dom.spec.whatwg.org/#concept-attribute). Can contain duplicates. -[Element/getAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute "The getAttribute() method of the Element interface returns the value of a specified attribute on the element.") +[Element/getAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute 'The getAttribute() method of the Element interface returns the value of a specified attribute on the element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -7556,15 +7031,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7572,21 +7047,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Returns element’s [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is namespace and [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName, and null if there is no such [attribute](https://dom.spec.whatwg.org/#concept-attribute) otherwise. -[Element/setAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute "Sets the value of an attribute on the specified element. If the attribute already exists, the value is updated; otherwise a new attribute is added with the specified name and value.") +[Element/setAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute 'Sets the value of an attribute on the specified element. If the attribute already exists, the value is updated; otherwise a new attribute is added with the specified name and value.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -7594,21 +7069,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Sets the [value](https://dom.spec.whatwg.org/#concept-attribute-value) of element’s first [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [qualified name](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) is qualifiedName to value. -[Element/setAttributeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttributeNS "setAttributeNS adds a new attribute or changes the value of an attribute with the given namespace and name.") +[Element/setAttributeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttributeNS 'setAttributeNS adds a new attribute or changes the value of an attribute with the given namespace and name.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7616,21 +7091,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Sets the [value](https://dom.spec.whatwg.org/#concept-attribute-value) of element’s [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is namespace and [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName to value. -[Element/removeAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute "The Element method removeAttribute() removes the attribute with the specified name from the element.") +[Element/removeAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute 'The Element method removeAttribute() removes the attribute with the specified name from the element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -7638,21 +7113,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Removes element’s first [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [qualified name](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) is qualifiedName. -[Element/removeAttributeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttributeNS "The removeAttributeNS() method of the Element interface removes the specified attribute from an element.") +[Element/removeAttributeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttributeNS 'The removeAttributeNS() method of the Element interface removes the specified attribute from an element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7660,21 +7135,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Removes element’s [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is namespace and [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName. -[Element/toggleAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/toggleAttribute "The toggleAttribute() method of the Element interface toggles a Boolean attribute (removing it if it is present and adding it if it is not present) on the given element.") +[Element/toggleAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/toggleAttribute 'The toggleAttribute() method of the Element interface toggles a Boolean attribute (removing it if it is present and adding it if it is not present) on the given element.') In all current engines. Firefox63+Safari12+Chrome69+ -___ +--- Opera56+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for Android63+iOS Safari12+Chrome for Android69+Android WebView69+Samsung Internet10.0+Opera Mobile48+ @@ -7684,21 +7159,21 @@ If force is not given, "toggles" qualifiedName, removing it if it is present and Returns true if qualifiedName is now present; otherwise false. -[Element/hasAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttribute "The Element.hasAttribute() method returns a Boolean value indicating whether the specified element has the specified attribute or not.") +[Element/hasAttribute](https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttribute 'The Element.hasAttribute() method returns a Boolean value indicating whether the specified element has the specified attribute or not.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE8+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -7706,21 +7181,21 @@ Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung I Returns true if element has an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [qualified name](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) is qualifiedName; otherwise false. -[Element/hasAttributeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttributeNS "hasAttributeNS returns a boolean value indicating whether the current element has the specified attribute.") +[Element/hasAttributeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttributeNS 'hasAttributeNS returns a boolean value indicating whether the current element has the specified attribute.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -7736,15 +7211,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5.5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -7757,40 +7232,27 @@ These are not guaranteed to be unique. The `getAttribute(qualifiedName)` method steps are: 1. Let attr be the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name) given qualifiedName and [this](https://webidl.spec.whatwg.org/#this). - 2. If attr is null, return null. - 3. Return attr’s [value](https://dom.spec.whatwg.org/#concept-attribute-value). - The `getAttributeNS(namespace, localName)` method steps are: 1. Let attr be the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace) given namespace, localName, and [this](https://webidl.spec.whatwg.org/#this). - 2. If attr is null, return null. - 3. Return attr’s [value](https://dom.spec.whatwg.org/#concept-attribute-value). - The `setAttribute(qualifiedName, value)` method steps are: 1. If qualifiedName does not match the `[Name](https://www.w3.org/TR/xml/#NT-Name)` production in XML, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If [this](https://webidl.spec.whatwg.org/#this) is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and its [node document](https://dom.spec.whatwg.org/#concept-node-document) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then set qualifiedName to qualifiedName in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - 3. Let attribute be the first [attribute](https://dom.spec.whatwg.org/#concept-attribute) in [this](https://webidl.spec.whatwg.org/#this)’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) whose [qualified name](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) is qualifiedName, and null otherwise. - 4. If attribute is null, create an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is qualifiedName, [value](https://dom.spec.whatwg.org/#concept-attribute-value) is value, and [node document](https://dom.spec.whatwg.org/#concept-node-document) is [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document), then [append](https://dom.spec.whatwg.org/#concept-element-attributes-append) this [attribute](https://dom.spec.whatwg.org/#concept-attribute) to [this](https://webidl.spec.whatwg.org/#this), and then return. - 5. [Change](https://dom.spec.whatwg.org/#concept-element-attributes-change) attribute to value. - The `setAttributeNS(namespace, qualifiedName, value)` method steps are: 1. Let namespace, prefix, and localName be the result of passing namespace and qualifiedName to [validate and extract](https://dom.spec.whatwg.org/#validate-and-extract). - 2. [Set an attribute value](https://dom.spec.whatwg.org/#concept-element-attributes-set-value) for [this](https://webidl.spec.whatwg.org/#this) using localName, value, and also prefix and namespace. - The `removeAttribute(qualifiedName)` method steps are to [remove an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name) given qualifiedName and [this](https://webidl.spec.whatwg.org/#this), and then return undefined. @@ -7799,250 +7261,226 @@ The `removeAttributeNS(namespace, localName)` method steps are to [remove an att The `hasAttribute(qualifiedName)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this) is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and its [node document](https://dom.spec.whatwg.org/#concept-node-document) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then set qualifiedName to qualifiedName in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - 2. Return true if [this](https://webidl.spec.whatwg.org/#this) [has](https://dom.spec.whatwg.org/#concept-element-attribute-has) an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [qualified name](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) is qualifiedName; otherwise false. - The `toggleAttribute(qualifiedName, force)` method steps are: 1. If qualifiedName does not match the `[Name](https://www.w3.org/TR/xml/#NT-Name)` production in XML, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If [this](https://webidl.spec.whatwg.org/#this) is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and its [node document](https://dom.spec.whatwg.org/#concept-node-document) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then set qualifiedName to qualifiedName in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - 3. Let attribute be the first [attribute](https://dom.spec.whatwg.org/#concept-attribute) in [this](https://webidl.spec.whatwg.org/#this)’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) whose [qualified name](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) is qualifiedName, and null otherwise. - 4. If attribute is null, then: - + 1. If force is not given or is true, create an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is qualifiedName, [value](https://dom.spec.whatwg.org/#concept-attribute-value) is the empty string, and [node document](https://dom.spec.whatwg.org/#concept-node-document) is [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document), then [append](https://dom.spec.whatwg.org/#concept-element-attributes-append) this [attribute](https://dom.spec.whatwg.org/#concept-attribute) to [this](https://webidl.spec.whatwg.org/#this), and then return true. - 2. Return false. - + 5. Otherwise, if force is not given or is false, [remove an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name) given qualifiedName and [this](https://webidl.spec.whatwg.org/#this), and then return false. - 6. Return true. - The `hasAttributeNS(namespace, localName)` method steps are: 1. If namespace is the empty string, then set it to null. - 2. Return true if [this](https://webidl.spec.whatwg.org/#this) [has](https://dom.spec.whatwg.org/#concept-element-attribute-has) an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) is namespace and [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is localName; otherwise false. -___ +--- -[Element/getAttributeNode](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNode "Returns the specified attribute of the specified element, as an Attr node.") +[Element/getAttributeNode](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNode 'Returns the specified attribute of the specified element, as an Attr node.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `getAttributeNode(qualifiedName)` method steps are to return the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name) given qualifiedName and [this](https://webidl.spec.whatwg.org/#this). -[Element/getAttributeNodeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNodeNS "Returns the Attr node for the attribute with the given namespace and name.") +[Element/getAttributeNodeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNodeNS 'Returns the Attr node for the attribute with the given namespace and name.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `getAttributeNodeNS(namespace, localName)` method steps are to return the result of [getting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace) given namespace, localName, and [this](https://webidl.spec.whatwg.org/#this). -[Element/setAttributeNode](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttributeNode "The setAttributeNode() method adds a new Attr node to the specified element.") +[Element/setAttributeNode](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttributeNode 'The setAttributeNode() method adds a new Attr node to the specified element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[Element/setAttributeNodeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttributeNodeNS "setAttributeNodeNS adds a new namespaced attribute node to an element.") +[Element/setAttributeNodeNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttributeNodeNS 'setAttributeNodeNS adds a new namespaced attribute node to an element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `setAttributeNode(attr)` and `setAttributeNodeNS(attr)` methods steps are to return the result of [setting an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-set) given attr and [this](https://webidl.spec.whatwg.org/#this). -[Element/removeAttributeNode](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttributeNode "The removeAttributeNode() method of the Element object removes the specified attribute from the current element.") +[Element/removeAttributeNode](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttributeNode 'The removeAttributeNode() method of the Element object removes the specified attribute from the current element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `removeAttributeNode(attr)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this)’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute) does not [contain](https://infra.spec.whatwg.org/#list-contain) attr, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotFoundError](https://webidl.spec.whatwg.org/#notfounderror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. [Remove](https://dom.spec.whatwg.org/#concept-element-attributes-remove) attr. - 3. Return attr. - -___ +--- -[Element/attachShadow](https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow "The Element.attachShadow() method attaches a shadow DOM tree to the specified element and returns a reference to its ShadowRoot.") +[Element/attachShadow](https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow 'The Element.attachShadow() method attaches a shadow DOM tree to the specified element and returns a reference to its ShadowRoot.') In all current engines. Firefox63+Safari10+Chrome53+ -___ +--- Opera40+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10+Chrome for Android53+Android WebView53+Samsung Internet6.0+Opera Mobile41+ -``var shadow = element . `[attachShadow(init)](https://dom.spec.whatwg.org/#dom-element-attachshadow)` `` +`` var shadow = element . `[attachShadow(init)](https://dom.spec.whatwg.org/#dom-element-attachshadow)` `` Creates a [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root) for element and returns it. -[Element/shadowRoot](https://developer.mozilla.org/en-US/docs/Web/API/Element/shadowRoot "The Element.shadowRoot read-only property represents the shadow root hosted by the element.") +[Element/shadowRoot](https://developer.mozilla.org/en-US/docs/Web/API/Element/shadowRoot 'The Element.shadowRoot read-only property represents the shadow root hosted by the element.') In all current engines. Firefox63+Safari10+Chrome35+ -___ +--- Opera22+Edge79+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for Android63+iOS Safari10+Chrome for Android35+Android WebView37+Samsung Internet3.0+Opera Mobile22+ -``var shadow = element . `[shadowRoot](https://dom.spec.whatwg.org/#dom-element-shadowroot)` `` +`` var shadow = element . `[shadowRoot](https://dom.spec.whatwg.org/#dom-element-shadowroot)` `` Returns element’s [shadow root](https://dom.spec.whatwg.org/#concept-element-shadow-root), if any, and if [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root)’s [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is "`open`", and null otherwise. The `attachShadow(init)` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this)’s [namespace](https://dom.spec.whatwg.org/#concept-element-namespace) is not the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If [this](https://webidl.spec.whatwg.org/#this)’s [local name](https://dom.spec.whatwg.org/#concept-element-local-name) is not one of the following: - + - a [valid custom element name](https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name) - "`article`", "`aside`", "`blockquote`", "`body`", "`div`", "`footer`", "`h1`", "`h2`", "`h3`", "`h4`", "`h5`", "`h6`", "`header`", "`main`", "`nav`", "`p`", "`section`", or "`span`" - + then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + 3. If [this](https://webidl.spec.whatwg.org/#this)’s [local name](https://dom.spec.whatwg.org/#concept-element-local-name) is a [valid custom element name](https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name), or [this](https://webidl.spec.whatwg.org/#this)’s [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value) is not null, then: - + 1. Let definition be the result of [looking up a custom element definition](https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition) given [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document), its [namespace](https://dom.spec.whatwg.org/#concept-element-namespace), its [local name](https://dom.spec.whatwg.org/#concept-element-local-name), and its [`is` value](https://dom.spec.whatwg.org/#concept-element-is-value). - 2. If definition is not null and definition’s [disable shadow](https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-disable-shadow) is true, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + 4. If [this](https://webidl.spec.whatwg.org/#this) is a [shadow host](https://dom.spec.whatwg.org/#element-shadow-host), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 5. Let shadow be a new [shadow root](https://dom.spec.whatwg.org/#concept-shadow-root) whose [node document](https://dom.spec.whatwg.org/#concept-node-document) is [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document), [host](https://dom.spec.whatwg.org/#concept-documentfragment-host) is [this](https://webidl.spec.whatwg.org/#this), and [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is init\["`[mode](https://dom.spec.whatwg.org/#dom-shadowrootinit-mode)`"\]. - 6. Set shadow’s [delegates focus](https://dom.spec.whatwg.org/#shadowroot-delegates-focus) to init\["`[delegatesFocus](https://dom.spec.whatwg.org/#dom-shadowrootinit-delegatesfocus)`"\]. - 7. If [this](https://webidl.spec.whatwg.org/#this)’s [custom element state](https://dom.spec.whatwg.org/#concept-element-custom-element-state) is "`precustomized`" or "`custom`", then set shadow’s [available to element internals](https://dom.spec.whatwg.org/#shadowroot-available-to-element-internals) to true. - 8. Set shadow’s [slot assignment](https://dom.spec.whatwg.org/#shadowroot-slot-assignment) to init\["`[slotAssignment](https://dom.spec.whatwg.org/#dom-shadowrootinit-slotassignment)`"\]. - 9. Set [this](https://webidl.spec.whatwg.org/#this)’s [shadow root](https://dom.spec.whatwg.org/#concept-element-shadow-root) to shadow. - -10. Return shadow. - +10. Return shadow. The `shadowRoot` getter steps are: 1. Let shadow be [this](https://webidl.spec.whatwg.org/#this)’s [shadow root](https://dom.spec.whatwg.org/#concept-element-shadow-root). - 2. If shadow is null or its [mode](https://dom.spec.whatwg.org/#shadowroot-mode) is "`closed`", then return null. - 3. Return shadow. - -___ +--- -[Element/closest](https://developer.mozilla.org/en-US/docs/Web/API/Element/closest "The closest() method traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string. Will return itself or the matching ancestor. If no such element exists, it returns null.") +[Element/closest](https://developer.mozilla.org/en-US/docs/Web/API/Element/closest 'The closest() method traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string. Will return itself or the matching ancestor. If no such element exists, it returns null.') In all current engines. Firefox35+Safari6+Chrome41+ -___ +--- Opera28+Edge79+ -___ +--- Edge (Legacy)15+IENone -___ +--- Firefox for Android35+iOS Safari9+Chrome for Android41+Android WebView41+Samsung Internet4.0+Opera Mobile28+ -``element . `[closest(selectors)](https://dom.spec.whatwg.org/#dom-element-closest)` `` +`` element . `[closest(selectors)](https://dom.spec.whatwg.org/#dom-element-closest)` `` Returns the first (starting at element) [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) that matches selectors, and null otherwise. @@ -8052,19 +7490,19 @@ In all current engines. Firefox34+Safari7+Chrome33+ -___ +--- Opera21+Edge79+ -___ +--- Edge (Legacy)15+IENone -___ +--- Firefox for Android34+iOS Safari8+Chrome for Android33+Android WebView4.4+Samsung Internet2.0+Opera Mobile21+ -``element . `[matches(selectors)](https://dom.spec.whatwg.org/#dom-element-matches)` `` +`` element . `[matches(selectors)](https://dom.spec.whatwg.org/#dom-element-matches)` `` Returns true if matching selectors against element’s [root](https://dom.spec.whatwg.org/#concept-tree-root) yields element; otherwise false. @@ -8079,49 +7517,46 @@ The `closest(selectors)` method steps are: The `matches(selectors)` and `webkitMatchesSelector(selectors)` method steps are: 1. Let s be the result of [parse a selector](https://drafts.csswg.org/selectors-4/#parse-a-selector) from selectors. [\[SELECTORS4\]](https://dom.spec.whatwg.org/#biblio-selectors4) - 2. If s is failure, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. If the result of [match a selector against an element](https://drafts.csswg.org/selectors-4/#match-a-selector-against-an-element), using s, [this](https://webidl.spec.whatwg.org/#this), and [:scope element](https://drafts.csswg.org/selectors-4/#scope-element) [this](https://webidl.spec.whatwg.org/#this), returns success, then return true; otherwise, return false. [\[SELECTORS4\]](https://dom.spec.whatwg.org/#biblio-selectors4) - -___ +--- -[Element/getElementsByTagName](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName "The Element.getElementsByTagName() method returns a live HTMLCollection of elements with the given tag name.") +[Element/getElementsByTagName](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName 'The Element.getElementsByTagName() method returns a live HTMLCollection of elements with the given tag name.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5.5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `getElementsByTagName(qualifiedName)` method steps are to return the [list of elements with qualified name qualifiedName](https://dom.spec.whatwg.org/#concept-getelementsbytagname) for [this](https://webidl.spec.whatwg.org/#this). -[Element/getElementsByTagNameNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagNameNS "The Element.getElementsByTagNameNS() method returns a live HTMLCollection of elements with the given tag name belonging to the given namespace. It is similar to Document.getElementsByTagNameNS, except that its search is restricted to descendants of the specified element.") +[Element/getElementsByTagNameNS](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagNameNS 'The Element.getElementsByTagNameNS() method returns a live HTMLCollection of elements with the given tag name belonging to the given namespace. It is similar to Document.getElementsByTagNameNS, except that its search is restricted to descendants of the specified element.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -8129,7 +7564,7 @@ The `getElementsByTagNameNS(namespace, localName)` method steps are to return th The `getElementsByClassName(classNames)` method steps are to return the [list of elements with class names classNames](https://dom.spec.whatwg.org/#concept-getelementsbyclassname) for [this](https://webidl.spec.whatwg.org/#this). -___ +--- To insert adjacent, given an [element](https://dom.spec.whatwg.org/#concept-element) element, string where, and a [node](https://dom.spec.whatwg.org/#concept-node) node, run the steps associated with the first [ASCII case-insensitive](https://infra.spec.whatwg.org/#ascii-case-insensitive) match for where: @@ -8157,91 +7592,89 @@ Otherwise [Throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. -[Element/insertAdjacentElement](https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement "The insertAdjacentElement() method of the Element interface inserts a given element node at a given position relative to the element it is invoked upon.") +[Element/insertAdjacentElement](https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement 'The insertAdjacentElement() method of the Element interface inserts a given element node at a given position relative to the element it is invoked upon.') In all current engines. Firefox48+Safari3+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android48+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `insertAdjacentElement(where, element)` method steps are to return the result of running [insert adjacent](https://dom.spec.whatwg.org/#insert-adjacent), give [this](https://webidl.spec.whatwg.org/#this), where, and element. -[Element/insertAdjacentText](https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentText "The insertAdjacentText() method of the Element interface inserts a given text node at a given position relative to the element it is invoked upon.") +[Element/insertAdjacentText](https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentText 'The insertAdjacentText() method of the Element interface inserts a given text node at a given position relative to the element it is invoked upon.') In all current engines. Firefox48+Safari4+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android48+iOS Safari4+Chrome for Android18+Android WebView2.2+Samsung Internet1.0+Opera Mobile12.1+ The `insertAdjacentText(where, data)` method steps are: 1. Let text be a new `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is data and [node document](https://dom.spec.whatwg.org/#concept-node-document) is [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. Run [insert adjacent](https://dom.spec.whatwg.org/#insert-adjacent), given [this](https://webidl.spec.whatwg.org/#this), where, and text. - This method returns nothing because it existed before we had a chance to design it. #### 4.9.1. Interface `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)`[](https://dom.spec.whatwg.org/#interface-namednodemap) -[NamedNodeMap](https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap "The NamedNodeMap interface represents a collection of Attr objects. Objects inside a NamedNodeMap are not in any particular order, unlike NodeList, although they may be accessed by an index as in an array.") +[NamedNodeMap](https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap 'The NamedNodeMap interface represents a collection of Attr objects. Objects inside a NamedNodeMap are not in any particular order, unlike NodeList, although they may be accessed by an index as in an array.') In all current engines. Firefox34+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android34+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window, - [LegacyUnenumerableNamedProperties](https://webidl.spec.whatwg.org/#LegacyUnenumerableNamedProperties)\] +[LegacyUnenumerableNamedProperties](https://webidl.spec.whatwg.org/#LegacyUnenumerableNamedProperties)\] interface `NamedNodeMap` { - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-namednodemap-length); - getter [Attr](https://dom.spec.whatwg.org/#attr)? [item](https://dom.spec.whatwg.org/#dom-namednodemap-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-namednodemap-item-index-index)); - getter [Attr](https://dom.spec.whatwg.org/#attr)? [getNamedItem](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditem)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditem-qualifiedname-qualifiedname)); - [Attr](https://dom.spec.whatwg.org/#attr)? [getNamedItemNS](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns-namespace-localname-localname)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setNamedItem](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditem)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditem-attr-attr)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setNamedItemNS](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditemns)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditemns-attr-attr)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr) [removeNamedItem](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem-qualifiedname-qualifiedname)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr) [removeNamedItemNS](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns-namespace-localname-localname)); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-namednodemap-length); +getter [Attr](https://dom.spec.whatwg.org/#attr)? [item](https://dom.spec.whatwg.org/#dom-namednodemap-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-namednodemap-item-index-index)); +getter [Attr](https://dom.spec.whatwg.org/#attr)? [getNamedItem](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditem)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditem-qualifiedname-qualifiedname)); +[Attr](https://dom.spec.whatwg.org/#attr)? [getNamedItemNS](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns-namespace-localname-localname)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setNamedItem](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditem)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditem-attr-attr)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr)? [setNamedItemNS](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditemns)([Attr](https://dom.spec.whatwg.org/#attr) `attr`[](https://dom.spec.whatwg.org/#dom-namednodemap-setnameditemns-attr-attr)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr) [removeNamedItem](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `qualifiedName`[](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem-qualifiedname-qualifiedname)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Attr](https://dom.spec.whatwg.org/#attr) [removeNamedItemNS](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `namespace`[](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns-namespace-localname-namespace), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns-namespace-localname-localname)); }; A `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)` has an associated element (an [element](https://dom.spec.whatwg.org/#concept-element)). A `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)` object’s attribute list is its [element](https://dom.spec.whatwg.org/#concept-namednodemap-element)’s [attribute list](https://dom.spec.whatwg.org/#concept-element-attribute). -___ +--- A `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)` object’s [supported property indices](https://webidl.spec.whatwg.org/#dfn-supported-property-indices) are the numbers in the range zero to its [attribute list](https://dom.spec.whatwg.org/#concept-namednodemap-attribute)’s [size](https://infra.spec.whatwg.org/#list-size) minus one, unless the [attribute list](https://dom.spec.whatwg.org/#concept-namednodemap-attribute) [is empty](https://infra.spec.whatwg.org/#list-is-empty), in which case there are no [supported property indices](https://webidl.spec.whatwg.org/#dfn-supported-property-indices). @@ -8250,38 +7683,33 @@ The `length` getter steps are to return the [attribute list](https://dom.spec.wh The `item(index)` method steps are: 1. If index is equal to or greater than [this](https://webidl.spec.whatwg.org/#this)’s [attribute list](https://dom.spec.whatwg.org/#concept-namednodemap-attribute)’s [size](https://infra.spec.whatwg.org/#list-size), then return null. - 2. Otherwise, return [this](https://webidl.spec.whatwg.org/#this)’s [attribute list](https://dom.spec.whatwg.org/#concept-namednodemap-attribute)\[index\]. - A `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)` object’s [supported property names](https://webidl.spec.whatwg.org/#dfn-supported-property-names) are the return value of running these steps: 1. Let names be the [qualified names](https://dom.spec.whatwg.org/#concept-attribute-qualified-name) of the [attributes](https://dom.spec.whatwg.org/#concept-attribute) in this `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)` object’s [attribute list](https://dom.spec.whatwg.org/#concept-namednodemap-attribute), with duplicates omitted, in order. - 2. If this `[NamedNodeMap](https://dom.spec.whatwg.org/#namednodemap)` object’s [element](https://dom.spec.whatwg.org/#concept-namednodemap-element) is in the [HTML namespace](https://infra.spec.whatwg.org/#html-namespace) and its [node document](https://dom.spec.whatwg.org/#concept-node-document) is an [HTML document](https://dom.spec.whatwg.org/#html-document), then [for each](https://infra.spec.whatwg.org/#list-iterate) name in names: - + 1. Let lowercaseName be name, in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - 2. If lowercaseName is not equal to name, remove name from names. - + 3. Return names. - -[NamedNodeMap/getNamedItem](https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap/getNamedItem "The getNamedItem() method of the NamedNodeMap interface returns the Attr corresponding to the given name, or null if there is no corresponding attribute.") +[NamedNodeMap/getNamedItem](https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap/getNamedItem 'The getNamedItem() method of the NamedNodeMap interface returns the Attr corresponding to the given name, or null if there is no corresponding attribute.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -8294,20 +7722,14 @@ The `setNamedItem(attr)` and `setNamedItemNS(attr)` method steps are to return t The `removeNamedItem(qualifiedName)` method steps are: 1. Let attr be the result of [removing an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name) given qualifiedName and [element](https://dom.spec.whatwg.org/#concept-namednodemap-element). - 2. If attr is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotFoundError](https://webidl.spec.whatwg.org/#notfounderror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. Return attr. - The `removeNamedItemNS(namespace, localName)` method steps are: 1. Let attr be the result of [removing an attribute](https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-namespace) given namespace, localName, and [element](https://dom.spec.whatwg.org/#concept-namednodemap-element). - 2. If attr is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotFoundError](https://webidl.spec.whatwg.org/#notfounderror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. Return attr. - #### 4.9.2. Interface `[Attr](https://dom.spec.whatwg.org/#attr)`[](https://dom.spec.whatwg.org/#interface-attr) @@ -8317,29 +7739,29 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera8+Edge79+ -___ +--- Edge (Legacy)12+IE5.5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `Attr` : [Node](https://dom.spec.whatwg.org/#node) { - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [namespaceURI](https://dom.spec.whatwg.org/#dom-attr-namespaceuri); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [prefix](https://dom.spec.whatwg.org/#dom-attr-prefix); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [localName](https://dom.spec.whatwg.org/#dom-attr-localname); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [name](https://dom.spec.whatwg.org/#dom-attr-name); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [value](https://dom.spec.whatwg.org/#dom-attr-value); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [namespaceURI](https://dom.spec.whatwg.org/#dom-attr-namespaceuri); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [prefix](https://dom.spec.whatwg.org/#dom-attr-prefix); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [localName](https://dom.spec.whatwg.org/#dom-attr-localname); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [name](https://dom.spec.whatwg.org/#dom-attr-name); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [value](https://dom.spec.whatwg.org/#dom-attr-value); - readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [ownerElement](https://dom.spec.whatwg.org/#dom-attr-ownerelement); +readonly attribute [Element](https://dom.spec.whatwg.org/#element)? [ownerElement](https://dom.spec.whatwg.org/#dom-attr-ownerelement); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [specified](https://dom.spec.whatwg.org/#dom-attr-specified); // useless; always returns true +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [specified](https://dom.spec.whatwg.org/#dom-attr-specified); // useless; always returns true }; `[Attr](https://dom.spec.whatwg.org/#attr)` [nodes](https://dom.spec.whatwg.org/#concept-node) are simply known as attributes. They are sometimes referred to as _content attributes_ to avoid confusion with IDL attributes. @@ -8356,63 +7778,63 @@ When an [attribute](https://dom.spec.whatwg.org/#concept-attribute) is created, An `A` attribute is an [attribute](https://dom.spec.whatwg.org/#concept-attribute) whose [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) is `A` and whose [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace) and [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix) are null. -___ +--- -[Attr/namespaceURI](https://developer.mozilla.org/en-US/docs/Web/API/Attr/namespaceURI "The Attr.namespaceURI read-only property returns the namespace URI of the attribute, or null if the element is not in a namespace.") +[Attr/namespaceURI](https://developer.mozilla.org/en-US/docs/Web/API/Attr/namespaceURI 'The Attr.namespaceURI read-only property returns the namespace URI of the attribute, or null if the element is not in a namespace.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `namespaceURI` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [namespace](https://dom.spec.whatwg.org/#concept-attribute-namespace). -[Attr/prefix](https://developer.mozilla.org/en-US/docs/Web/API/Attr/prefix "The Attr.prefix read-only property returns the namespace prefix of the specified attribute, or null if no prefix is specified.") +[Attr/prefix](https://developer.mozilla.org/en-US/docs/Web/API/Attr/prefix 'The Attr.prefix read-only property returns the namespace prefix of the specified attribute, or null if no prefix is specified.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `prefix` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [namespace prefix](https://dom.spec.whatwg.org/#concept-attribute-namespace-prefix). -[Attr/localName](https://developer.mozilla.org/en-US/docs/Web/API/Attr/localName "The Attr.localName read-only property returns the local part of the qualified name of an attribute.") +[Attr/localName](https://developer.mozilla.org/en-US/docs/Web/API/Attr/localName 'The Attr.localName read-only property returns the local part of the qualified name of an attribute.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -8425,17 +7847,15 @@ The `value` getter steps are to return [this](https://webidl.spec.whatwg.org/#th To set an existing attribute value, given an [attribute](https://dom.spec.whatwg.org/#concept-attribute) attribute and string value, run these steps: 1. If attribute’s [element](https://dom.spec.whatwg.org/#concept-attribute-element) is null, then set attribute’s [value](https://dom.spec.whatwg.org/#concept-attribute-value) to value. - 2. Otherwise, [change](https://dom.spec.whatwg.org/#concept-element-attributes-change) attribute to value. - The `[value](https://dom.spec.whatwg.org/#dom-attr-value)` setter steps are to [set an existing attribute value](https://dom.spec.whatwg.org/#set-an-existing-attribute-value) with [this](https://webidl.spec.whatwg.org/#this) and the given value. -___ +--- The `ownerElement` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [element](https://dom.spec.whatwg.org/#concept-attribute-element). -___ +--- The `specified` getter steps are to return true. @@ -8447,27 +7867,27 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `CharacterData` : [Node](https://dom.spec.whatwg.org/#node) { - attribute \[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [data](https://dom.spec.whatwg.org/#dom-characterdata-data); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-characterdata-length); - [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [substringData](https://dom.spec.whatwg.org/#dom-characterdata-substringdata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-substringdata-offset-count-offset), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `count`[](https://dom.spec.whatwg.org/#dom-characterdata-substringdata-offset-count-count)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [appendData](https://dom.spec.whatwg.org/#dom-characterdata-appenddata)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-characterdata-appenddata-data-data)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [insertData](https://dom.spec.whatwg.org/#dom-characterdata-insertdata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-insertdata-offset-data-offset), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-characterdata-insertdata-offset-data-data)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [deleteData](https://dom.spec.whatwg.org/#dom-characterdata-deletedata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-deletedata-offset-count-offset), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `count`[](https://dom.spec.whatwg.org/#dom-characterdata-deletedata-offset-count-count)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [replaceData](https://dom.spec.whatwg.org/#dom-characterdata-replacedata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-replacedata-offset-count-data-offset), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `count`[](https://dom.spec.whatwg.org/#dom-characterdata-replacedata-offset-count-data-count), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-characterdata-replacedata-offset-count-data-data)); +attribute \[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [data](https://dom.spec.whatwg.org/#dom-characterdata-data); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-characterdata-length); +[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [substringData](https://dom.spec.whatwg.org/#dom-characterdata-substringdata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-substringdata-offset-count-offset), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `count`[](https://dom.spec.whatwg.org/#dom-characterdata-substringdata-offset-count-count)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [appendData](https://dom.spec.whatwg.org/#dom-characterdata-appenddata)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-characterdata-appenddata-data-data)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [insertData](https://dom.spec.whatwg.org/#dom-characterdata-insertdata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-insertdata-offset-data-offset), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-characterdata-insertdata-offset-data-data)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [deleteData](https://dom.spec.whatwg.org/#dom-characterdata-deletedata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-deletedata-offset-count-offset), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `count`[](https://dom.spec.whatwg.org/#dom-characterdata-deletedata-offset-count-count)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [replaceData](https://dom.spec.whatwg.org/#dom-characterdata-replacedata)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-characterdata-replacedata-offset-count-data-offset), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `count`[](https://dom.spec.whatwg.org/#dom-characterdata-replacedata-offset-count-data-count), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-characterdata-replacedata-offset-count-data-data)); }; `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` is an abstract interface. You cannot get a direct instance of it. It is used by `[Text](https://dom.spec.whatwg.org/#text)`, `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)`, and `[Comment](https://dom.spec.whatwg.org/#comment)` [nodes](https://dom.spec.whatwg.org/#concept-node). @@ -8480,19 +7900,16 @@ To replace data of node node with offset offset, count count, and data data, run 2. If offset is greater than length, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[IndexSizeError](https://webidl.spec.whatwg.org/#indexsizeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. 3. If offset plus count is greater than length, then set count to length minus offset. 4. [Queue a mutation record](https://dom.spec.whatwg.org/#queue-a-mutation-record) of "`characterData`" for node with null, null, node’s [data](https://dom.spec.whatwg.org/#concept-cd-data), « », « », null, and null. - 5. Insert data into node’s [data](https://dom.spec.whatwg.org/#concept-cd-data) after offset [code units](https://infra.spec.whatwg.org/#code-unit). 6. Let delete offset be offset + data’s [length](https://infra.spec.whatwg.org/#string-length). 7. Starting from delete offset [code units](https://infra.spec.whatwg.org/#code-unit), remove count [code units](https://infra.spec.whatwg.org/#code-unit) from node’s [data](https://dom.spec.whatwg.org/#concept-cd-data). 8. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is node and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is greater than offset but less than or equal to offset plus count, set its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) to offset. - 9. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is node and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is greater than offset but less than or equal to offset plus count, set its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) to offset. - -10. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is node and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is greater than offset plus count, increase its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) by data’s [length](https://infra.spec.whatwg.org/#string-length) and decrease it by count. - -11. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is node and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is greater than offset plus count, increase its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) by data’s [length](https://infra.spec.whatwg.org/#string-length) and decrease it by count. - -12. If node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is non-null, then run the [children changed steps](https://dom.spec.whatwg.org/#concept-node-children-changed-ext) for node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). +10. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is node and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is greater than offset plus count, increase its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) by data’s [length](https://infra.spec.whatwg.org/#string-length) and decrease it by count. + +11. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is node and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is greater than offset plus count, increase its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) by data’s [length](https://infra.spec.whatwg.org/#string-length) and decrease it by count. + +12. If node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is non-null, then run the [children changed steps](https://dom.spec.whatwg.org/#concept-node-children-changed-ext) for node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). To substring data with node node, offset offset, and count count, run these steps: @@ -8507,55 +7924,55 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `data` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [data](https://dom.spec.whatwg.org/#concept-cd-data). Its setter must [replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node [this](https://webidl.spec.whatwg.org/#this), offset 0, count [this](https://webidl.spec.whatwg.org/#this)’s [length](https://dom.spec.whatwg.org/#concept-node-length), and data new value. -[CharacterData/length](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/length "The read-only CharacterData.length property returns the number of characters in the contained data, as a positive integer.") +[CharacterData/length](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/length 'The read-only CharacterData.length property returns the number of characters in the contained data, as a positive integer.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `length` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [length](https://dom.spec.whatwg.org/#concept-node-length). -[CharacterData/substringData](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/substringData "The substringData() method of the CharacterData interface returns a portion of the existing data, starting at the specified index and extending for a given number of characters afterwards.") +[CharacterData/substringData](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/substringData 'The substringData() method of the CharacterData interface returns a portion of the existing data, starting at the specified index and extending for a given number of characters afterwards.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -8567,15 +7984,15 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -8587,55 +8004,55 @@ In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `insertData(offset, data)` method steps are to [replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node [this](https://webidl.spec.whatwg.org/#this), offset offset, count 0, and data data. -[CharacterData/deleteData](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/deleteData "The deleteData() method of the CharacterData interface removes all or part of the data from this CharacterData node.") +[CharacterData/deleteData](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/deleteData 'The deleteData() method of the CharacterData interface removes all or part of the data from this CharacterData node.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `deleteData(offset, count)` method steps are to [replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node [this](https://webidl.spec.whatwg.org/#this), offset offset, count count, and data the empty string. -[CharacterData/replaceData](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/replaceData "The replaceData() of the CharacterData interface replace a part of the data inside the node with the string given in paramater.") +[CharacterData/replaceData](https://developer.mozilla.org/en-US/docs/Web/API/CharacterData/replaceData 'The replaceData() of the CharacterData interface replace a part of the data inside the node with the string given in paramater.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE6+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -8643,47 +8060,47 @@ The `replaceData(offset, count, data)` method steps are to [replace data](https: ### 4.11. Interface `[Text](https://dom.spec.whatwg.org/#text)`[](https://dom.spec.whatwg.org/#interface-text) -[Text](https://developer.mozilla.org/en-US/docs/Web/API/Text "The Text interface represents a text node in a DOM tree.") +[Text](https://developer.mozilla.org/en-US/docs/Web/API/Text 'The Text interface represents a text node in a DOM tree.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera MobileYes \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `Text` : [CharacterData](https://dom.spec.whatwg.org/#characterdata) { - [constructor](https://dom.spec.whatwg.org/#dom-text-text)(optional [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-text-text-data-data) = ""); +[constructor](https://dom.spec.whatwg.org/#dom-text-text)(optional [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `data`[](https://dom.spec.whatwg.org/#dom-text-text-data-data) = ""); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Text](https://dom.spec.whatwg.org/#text) [splitText](https://dom.spec.whatwg.org/#dom-text-splittext)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-text-splittext-offset-offset)); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [wholeText](https://dom.spec.whatwg.org/#dom-text-wholetext); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Text](https://dom.spec.whatwg.org/#text) [splitText](https://dom.spec.whatwg.org/#dom-text-splittext)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-text-splittext-offset-offset)); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [wholeText](https://dom.spec.whatwg.org/#dom-text-wholetext); }; -[Text/Text](https://developer.mozilla.org/en-US/docs/Web/API/Text/Text "The Text() constructor returns a new Text object with the optional string given in parameter as its textual content.") +[Text/Text](https://developer.mozilla.org/en-US/docs/Web/API/Text/Text 'The Text() constructor returns a new Text object with the optional string given in parameter as its textual content.') In all current engines. Firefox24+Safari8+Chrome28+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android24+iOS Safari8+Chrome for Android28+Android WebView37+Samsung Internet2.0+Opera Mobile14+ @@ -8691,51 +8108,51 @@ Firefox for Android24+iOS Safari8+Chrome for Android28+Android WebView37+Samsung Returns a new `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) whose [data](https://dom.spec.whatwg.org/#concept-cd-data) is data. -[Text/splitText](https://developer.mozilla.org/en-US/docs/Web/API/Text/splitText "The splitText() method of the Text interface breaks the Text node into two nodes at the specified offset, keeping both nodes in the tree as siblings.") +[Text/splitText](https://developer.mozilla.org/en-US/docs/Web/API/Text/splitText 'The splitText() method of the Text interface breaks the Text node into two nodes at the specified offset, keeping both nodes in the tree as siblings.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE5+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera MobileYes -``text . `[splitText(offset)](https://dom.spec.whatwg.org/#dom-text-splittext)` `` +`` text . `[splitText(offset)](https://dom.spec.whatwg.org/#dom-text-splittext)` `` Splits [data](https://dom.spec.whatwg.org/#concept-cd-data) at the given offset and returns the remainder as `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node). -[Text/wholeText](https://developer.mozilla.org/en-US/docs/Web/API/Text/wholeText "The read-only wholeText property of the Text interface returns the full text of all Text nodes logically adjacent to the node. The text is concatenated in document order. This allows specifying any text node and obtaining all adjacent text as a single string.") +[Text/wholeText](https://developer.mozilla.org/en-US/docs/Web/API/Text/wholeText 'The read-only wholeText property of the Text interface returns the full text of all Text nodes logically adjacent to the node. The text is concatenated in document order. This allows specifying any text node and obtaining all adjacent text as a single string.') In all current engines. Firefox3.5+Safari4+Chrome1+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3.2+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera MobileYes -``text . `[wholeText](https://dom.spec.whatwg.org/#dom-text-wholetext)` `` +`` text . `[wholeText](https://dom.spec.whatwg.org/#dom-text-wholetext)` `` Returns the combined [data](https://dom.spec.whatwg.org/#concept-cd-data) of all direct `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) [siblings](https://dom.spec.whatwg.org/#concept-tree-sibling). -___ +--- An exclusive `[Text](https://dom.spec.whatwg.org/#text)` node is a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) that is not a `[CDATASection](https://dom.spec.whatwg.org/#cdatasection)` [node](https://dom.spec.whatwg.org/#concept-node). @@ -8747,7 +8164,7 @@ The child text content[](https://dom.spec.whatwg.org/#concept-child-text-content The descendant text content of a [node](https://dom.spec.whatwg.org/#concept-node) node is the [concatenation](https://infra.spec.whatwg.org/#string-concatenate) of the [data](https://dom.spec.whatwg.org/#concept-cd-data) of all the `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) [descendants](https://dom.spec.whatwg.org/#concept-tree-descendant) of node, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). -___ +--- The `new Text(data)` constructor steps are to set [this](https://webidl.spec.whatwg.org/#this)’s [data](https://dom.spec.whatwg.org/#concept-cd-data) to data and [this](https://webidl.spec.whatwg.org/#this)’s [node document](https://dom.spec.whatwg.org/#concept-node-document) to [current global object](https://html.spec.whatwg.org/multipage/webappapis.html#current-global-object)’s [associated `Document`](https://html.spec.whatwg.org/multipage/window-object.html#concept-document-window). @@ -8760,17 +8177,13 @@ To split a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.w 5. Let new node be a new `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node), with the same [node document](https://dom.spec.whatwg.org/#concept-node-document) as node. Set new node’s [data](https://dom.spec.whatwg.org/#concept-cd-data) to new data. 6. Let parent be node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). 7. If parent is not null, then: - + 1. [Insert](https://dom.spec.whatwg.org/#concept-node-insert) new node into parent before node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - 2. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is node and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is greater than offset, set its [start node](https://dom.spec.whatwg.org/#concept-range-start-node) to new node and decrease its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) by offset. - 3. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is node and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is greater than offset, set its [end node](https://dom.spec.whatwg.org/#concept-range-end-node) to new node and decrease its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) by offset. - 4. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is parent and [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is equal to the [index](https://dom.spec.whatwg.org/#concept-tree-index) of node plus 1, increase its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) by 1. - 5. For each [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is parent and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is equal to the [index](https://dom.spec.whatwg.org/#concept-tree-index) of node plus 1, increase its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) by 1. - + 8. [Replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node node, offset offset, count count, and data the empty string. 9. Return new node. @@ -8786,15 +8199,15 @@ In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12.1+ @@ -8810,83 +8223,83 @@ In all current engines. Firefox1+Safari4+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `ProcessingInstruction` : [CharacterData](https://dom.spec.whatwg.org/#characterdata) { - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [target](https://dom.spec.whatwg.org/#dom-processinginstruction-target); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [target](https://dom.spec.whatwg.org/#dom-processinginstruction-target); }; `[ProcessingInstruction](https://dom.spec.whatwg.org/#processinginstruction)` [nodes](https://dom.spec.whatwg.org/#concept-node) have an associated target. -[ProcessingInstruction/target](https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction/target "The read-only target property of the ProcessingInstruction interface represent the application to which the ProcessingInstruction is targeted.") +[ProcessingInstruction/target](https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction/target 'The read-only target property of the ProcessingInstruction interface represent the application to which the ProcessingInstruction is targeted.') In all current engines. Firefox1+Safari4+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ The `target` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [target](https://dom.spec.whatwg.org/#concept-pi-target). -[Comment](https://developer.mozilla.org/en-US/docs/Web/API/Comment "The Comment interface represents textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.") +[Comment](https://developer.mozilla.org/en-US/docs/Web/API/Comment 'The Comment interface represents textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for AndroidYesiOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] -interface : [CharacterData](https://dom.spec.whatwg.org/#characterdata) { - [constructor](https://dom.spec.whatwg.org/#dom-comment-comment)(optional [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) = ""); +interface : [CharacterData](https://dom.spec.whatwg.org/#characterdata) { +[constructor](https://dom.spec.whatwg.org/#dom-comment-comment)(optional [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) = ""); }; -[Comment/Comment](https://developer.mozilla.org/en-US/docs/Web/API/Comment/Comment "The Comment() constructor returns a newly created Comment object with the optional string given in parameter as its textual content.") +[Comment/Comment](https://developer.mozilla.org/en-US/docs/Web/API/Comment/Comment 'The Comment() constructor returns a newly created Comment object with the optional string given in parameter as its textual content.') In all current engines. Firefox24+Safari7+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)16+IENone -___ +--- Firefox for Android24+iOS Safari7+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -8906,7 +8319,7 @@ The constructor steps are to set [this](https://webidl.spec.whatwg.org/#this)’ - `[Element](https://dom.spec.whatwg.org/#element)`: `p` - `[Element](https://dom.spec.whatwg.org/#element)`: `Little-endian BOM; decode as big-endian!` - - `[Text](https://dom.spec.whatwg.org/#text)`: CSS 2.1 syndata is + - `[Text](https://dom.spec.whatwg.org/#text)`: CSS 2.1 syndata is - `[Element](https://dom.spec.whatwg.org/#element)`: `` - `[Text](https://dom.spec.whatwg.org/#text)`: awesome - `[Text](https://dom.spec.whatwg.org/#text)`: ! @@ -8941,48 +8354,43 @@ A correct [boundary point](https://dom.spec.whatwg.org/#concept-range-bp)’s [o The position of a [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (nodeA, offsetA) relative to a [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (nodeB, offsetB) is before, equal, or after, as returned by these steps: 1. Assert: nodeA and nodeB have the same [root](https://dom.spec.whatwg.org/#concept-tree-root). - 2. If nodeA is nodeB, then return [equal](https://dom.spec.whatwg.org/#concept-range-bp-equal) if offsetA is offsetB, [before](https://dom.spec.whatwg.org/#concept-range-bp-before) if offsetA is less than offsetB, and [after](https://dom.spec.whatwg.org/#concept-range-bp-after) if offsetA is greater than offsetB. 3. If nodeA is [following](https://dom.spec.whatwg.org/#concept-tree-following) nodeB, then if the [position](https://dom.spec.whatwg.org/#concept-range-bp-position) of (nodeB, offsetB) relative to (nodeA, offsetA) is [before](https://dom.spec.whatwg.org/#concept-range-bp-before), return [after](https://dom.spec.whatwg.org/#concept-range-bp-after), and if it is [after](https://dom.spec.whatwg.org/#concept-range-bp-after), return [before](https://dom.spec.whatwg.org/#concept-range-bp-before). - 4. If nodeA is an [ancestor](https://dom.spec.whatwg.org/#concept-tree-ancestor) of nodeB: - + 1. Let child be nodeB. - 2. While child is not a [child](https://dom.spec.whatwg.org/#concept-tree-child) of nodeA, set child to its [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 3. If child’s [index](https://dom.spec.whatwg.org/#concept-tree-index) is less than offsetA, then return [after](https://dom.spec.whatwg.org/#concept-range-bp-after). - + 5. Return [before](https://dom.spec.whatwg.org/#concept-range-bp-before). - ### 5.3. Interface `[AbstractRange](https://dom.spec.whatwg.org/#abstractrange)`[](https://dom.spec.whatwg.org/#interface-abstractrange) -[AbstractRange](https://developer.mozilla.org/en-US/docs/Web/API/AbstractRange "The AbstractRange abstract interface is the base class upon which all DOM range types are defined. A range is an object that indicates the start and end points of a section of content within the document.") +[AbstractRange](https://developer.mozilla.org/en-US/docs/Web/API/AbstractRange 'The AbstractRange abstract interface is the base class upon which all DOM range types are defined. A range is an object that indicates the start and end points of a section of content within the document.') In all current engines. Firefox69+Safari14.1+Chrome90+ -___ +--- Opera76+Edge90+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for AndroidNoneiOS Safari14.5+Chrome for Android90+Android WebView90+Samsung Internet15.0+Opera Mobile64+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `AbstractRange` { - readonly attribute [Node](https://dom.spec.whatwg.org/#node) [startContainer](https://dom.spec.whatwg.org/#dom-range-startcontainer); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [startOffset](https://dom.spec.whatwg.org/#dom-range-startoffset); - readonly attribute [Node](https://dom.spec.whatwg.org/#node) [endContainer](https://dom.spec.whatwg.org/#dom-range-endcontainer); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [endOffset](https://dom.spec.whatwg.org/#dom-range-endoffset); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [collapsed](https://dom.spec.whatwg.org/#dom-range-collapsed); +readonly attribute [Node](https://dom.spec.whatwg.org/#node) [startContainer](https://dom.spec.whatwg.org/#dom-range-startcontainer); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [startOffset](https://dom.spec.whatwg.org/#dom-range-startoffset); +readonly attribute [Node](https://dom.spec.whatwg.org/#node) [endContainer](https://dom.spec.whatwg.org/#dom-range-endcontainer); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [endOffset](https://dom.spec.whatwg.org/#dom-range-endoffset); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [collapsed](https://dom.spec.whatwg.org/#dom-range-collapsed); }; Objects implementing the `[AbstractRange](https://dom.spec.whatwg.org/#abstractrange)` interface are known as ranges. @@ -8993,57 +8401,57 @@ For convenience, a [range](https://dom.spec.whatwg.org/#concept-range)’s start A [range](https://dom.spec.whatwg.org/#concept-range) is collapsed if its [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is its [end node](https://dom.spec.whatwg.org/#concept-range-end-node) and its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset). -[AbstractRange/startContainer](https://developer.mozilla.org/en-US/docs/Web/API/AbstractRange/startContainer "The read-only startContainer property of the AbstractRange interface returns the start Node for the range.") +[AbstractRange/startContainer](https://developer.mozilla.org/en-US/docs/Web/API/AbstractRange/startContainer 'The read-only startContainer property of the AbstractRange interface returns the start Node for the range.') In all current engines. Firefox69+Safari14.1+Chrome90+ -___ +--- Opera76+Edge90+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for AndroidNoneiOS Safari14.5+Chrome for Android90+Android WebView90+Samsung Internet15.0+Opera Mobile64+ -[Range/startContainer](https://developer.mozilla.org/en-US/docs/Web/API/Range/startContainer "The Range.startContainer read-only property returns the Node within which the Range starts. To change the start position of a node, use one of the Range.setStart() methods.") +[Range/startContainer](https://developer.mozilla.org/en-US/docs/Web/API/Range/startContainer 'The Range.startContainer read-only property returns the Node within which the Range starts. To change the start position of a node, use one of the Range.setStart() methods.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -[StaticRange/startContainer](https://developer.mozilla.org/en-US/docs/Web/API/StaticRange/startContainer "The read-only startContainer property of the StaticRange interface returns the start Node for the range.") +[StaticRange/startContainer](https://developer.mozilla.org/en-US/docs/Web/API/StaticRange/startContainer 'The read-only startContainer property of the StaticRange interface returns the start Node for the range.') In all current engines. Firefox69+Safari10.1+Chrome60+ -___ +--- Opera47+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for AndroidNoneiOS Safari10.3+Chrome for Android60+Android WebView60+Samsung Internet8.0+Opera Mobile44+ @@ -9057,33 +8465,33 @@ In all current engines. Firefox69+Safari14.1+Chrome90+ -___ +--- Opera76+Edge90+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for AndroidNoneiOS Safari14.5+Chrome for Android90+Android WebView90+Samsung Internet15.0+Opera Mobile64+ -[Range/startOffset](https://developer.mozilla.org/en-US/docs/Web/API/Range/startOffset "The Range.startOffset read-only property returns a number representing where in the startContainer the Range starts.") +[Range/startOffset](https://developer.mozilla.org/en-US/docs/Web/API/Range/startOffset 'The Range.startOffset read-only property returns a number representing where in the startContainer the Range starts.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9093,15 +8501,15 @@ In all current engines. Firefox69+Safari10.1+Chrome60+ -___ +--- Opera47+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for AndroidNoneiOS Safari10.3+Chrome for Android60+Android WebView60+Samsung Internet8.0+Opera Mobile44+ @@ -9109,57 +8517,57 @@ Firefox for AndroidNoneiOS Safari10.3+Chrome for Android60+Android WebView60+Sam Returns range’s [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset). -[AbstractRange/endContainer](https://developer.mozilla.org/en-US/docs/Web/API/AbstractRange/endContainer "The endContainer property of the AbstractRange interface returns the Node in which the end of the range is located.") +[AbstractRange/endContainer](https://developer.mozilla.org/en-US/docs/Web/API/AbstractRange/endContainer 'The endContainer property of the AbstractRange interface returns the Node in which the end of the range is located.') In all current engines. Firefox69+Safari14.1+Chrome90+ -___ +--- Opera76+Edge90+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for AndroidNoneiOS Safari14.5+Chrome for Android90+Android WebView90+Samsung Internet15.0+Opera Mobile64+ -[Range/endContainer](https://developer.mozilla.org/en-US/docs/Web/API/Range/endContainer "The Range.endContainer read-only property returns the Node within which the Range ends. To change the end position of a node, use the Range.setEnd() method or a similar one.") +[Range/endContainer](https://developer.mozilla.org/en-US/docs/Web/API/Range/endContainer 'The Range.endContainer read-only property returns the Node within which the Range ends. To change the end position of a node, use the Range.setEnd() method or a similar one.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -[StaticRange/endContainer](https://developer.mozilla.org/en-US/docs/Web/API/StaticRange/endContainer "The endContainer property of the StaticRange interface returns the end Node for the range.") +[StaticRange/endContainer](https://developer.mozilla.org/en-US/docs/Web/API/StaticRange/endContainer 'The endContainer property of the StaticRange interface returns the end Node for the range.') In all current engines. Firefox69+Safari10.1+Chrome60+ -___ +--- Opera47+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for AndroidNoneiOS Safari10.3+Chrome for Android60+Android WebView60+Samsung Internet8.0+Opera Mobile44+ @@ -9173,33 +8581,33 @@ In all current engines. Firefox69+Safari14.1+Chrome90+ -___ +--- Opera76+Edge90+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for AndroidNoneiOS Safari14.5+Chrome for Android90+Android WebView90+Samsung Internet15.0+Opera Mobile64+ -[Range/endOffset](https://developer.mozilla.org/en-US/docs/Web/API/Range/endOffset "The Range.endOffset read-only property returns a number representing where in the Range.endContainer the Range ends.") +[Range/endOffset](https://developer.mozilla.org/en-US/docs/Web/API/Range/endOffset 'The Range.endOffset read-only property returns a number representing where in the Range.endContainer the Range ends.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9209,15 +8617,15 @@ In all current engines. Firefox69+Safari10.1+Chrome60+ -___ +--- Opera47+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for AndroidNoneiOS Safari10.3+Chrome for Android60+Android WebView60+Samsung Internet8.0+Opera Mobile44+ @@ -9231,33 +8639,33 @@ In all current engines. Firefox69+Safari14.1+Chrome90+ -___ +--- Opera76+Edge90+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for AndroidNoneiOS Safari14.5+Chrome for Android90+Android WebView90+Samsung Internet15.0+Opera Mobile64+ -[Range/collapsed](https://developer.mozilla.org/en-US/docs/Web/API/Range/collapsed "The Range.collapsed read-only property returns a boolean flag indicating whether the start and end points of the Range are at the same position. It returns true if the start and end boundary points of the Range are the same point in the DOM, false if not.") +[Range/collapsed](https://developer.mozilla.org/en-US/docs/Web/API/Range/collapsed 'The Range.collapsed read-only property returns a boolean flag indicating whether the start and end points of the Range are at the same position. It returns true if the start and end boundary points of the Range are the same point in the DOM, false if not.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9267,15 +8675,15 @@ In all current engines. Firefox69+Safari10.1+Chrome60+ -___ +--- Opera47+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for AndroidNoneiOS Safari10.3+Chrome for Android60+Android WebView60+Samsung Internet8.0+Opera Mobile44+ @@ -9301,45 +8709,45 @@ In all current engines. Firefox69+Safari10.1+Chrome60+ -___ +--- Opera47+Edge79+ -___ +--- Edge (Legacy)18IENone -___ +--- Firefox for AndroidNoneiOS Safari10.3+Chrome for Android60+Android WebView60+Samsung Internet8.0+Opera Mobile44+ dictionary `StaticRangeInit` { - required [Node](https://dom.spec.whatwg.org/#node) `startContainer`; - required [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `startOffset`; - required [Node](https://dom.spec.whatwg.org/#node) `endContainer`; - required [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `endOffset`; +required [Node](https://dom.spec.whatwg.org/#node) `startContainer`; +required [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `startOffset`; +required [Node](https://dom.spec.whatwg.org/#node) `endContainer`; +required [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `endOffset`; }; \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `StaticRange` : [AbstractRange](https://dom.spec.whatwg.org/#abstractrange) { - [constructor](https://dom.spec.whatwg.org/#dom-staticrange-staticrange)([StaticRangeInit](https://dom.spec.whatwg.org/#dictdef-staticrangeinit) `init`[](https://dom.spec.whatwg.org/#dom-staticrange-staticrange-init-init)); +[constructor](https://dom.spec.whatwg.org/#dom-staticrange-staticrange)([StaticRangeInit](https://dom.spec.whatwg.org/#dictdef-staticrangeinit) `init`[](https://dom.spec.whatwg.org/#dom-staticrange-staticrange-init-init)); }; -[StaticRange/StaticRange](https://developer.mozilla.org/en-US/docs/Web/API/StaticRange/StaticRange "The StaticRange() constructor creates a new StaticRange object representing a span of content within the DOM.") +[StaticRange/StaticRange](https://developer.mozilla.org/en-US/docs/Web/API/StaticRange/StaticRange 'The StaticRange() constructor creates a new StaticRange object representing a span of content within the DOM.') In all current engines. Firefox71+Safari13.1+Chrome90+ -___ +--- Opera76+Edge90+ -___ +--- Edge (Legacy)NoneIENone -___ +--- Firefox for AndroidNoneiOS Safari13.4+Chrome for Android90+Android WebView90+Samsung Internet15.0+Opera Mobile64+ @@ -9350,78 +8758,72 @@ Returns a new [range](https://dom.spec.whatwg.org/#concept-range) object that do The `new StaticRange(init)` constructor steps are: 1. If init\["`[startContainer](https://dom.spec.whatwg.org/#dom-staticrangeinit-startcontainer)`"\] or init\["`[endContainer](https://dom.spec.whatwg.org/#dom-staticrangeinit-endcontainer)`"\] is a `[DocumentType](https://dom.spec.whatwg.org/#documenttype)` or `[Attr](https://dom.spec.whatwg.org/#attr)` [node](https://dom.spec.whatwg.org/#concept-node), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidNodeTypeError](https://webidl.spec.whatwg.org/#invalidnodetypeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. Set [this](https://webidl.spec.whatwg.org/#this)’s [start](https://dom.spec.whatwg.org/#concept-range-start) to (init\["`[startContainer](https://dom.spec.whatwg.org/#dom-staticrangeinit-startcontainer)`"\], init\["`[startOffset](https://dom.spec.whatwg.org/#dom-staticrangeinit-startoffset)`"\]) and [end](https://dom.spec.whatwg.org/#concept-range-end) to (init\["`[endContainer](https://dom.spec.whatwg.org/#dom-staticrangeinit-endcontainer)`"\], init\["`[endOffset](https://dom.spec.whatwg.org/#dom-staticrangeinit-endoffset)`"\]). - A `[StaticRange](https://dom.spec.whatwg.org/#staticrange)` is valid[](https://dom.spec.whatwg.org/#staticrange-valid) if all of the following are true: - Its [start](https://dom.spec.whatwg.org/#concept-range-start) and [end](https://dom.spec.whatwg.org/#concept-range-end) are in the same [node tree](https://dom.spec.whatwg.org/#concept-node-tree). - - Its [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) is between 0 and its [start node](https://dom.spec.whatwg.org/#concept-range-start-node)’s [length](https://dom.spec.whatwg.org/#concept-node-length), inclusive. - - Its [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) is between 0 and its [end node](https://dom.spec.whatwg.org/#concept-range-end-node)’s [length](https://dom.spec.whatwg.org/#concept-node-length), inclusive. - - Its [start](https://dom.spec.whatwg.org/#concept-range-start) is [before](https://dom.spec.whatwg.org/#concept-range-bp-before) or [equal](https://dom.spec.whatwg.org/#concept-range-bp-equal) to its [end](https://dom.spec.whatwg.org/#concept-range-end). - ### 5.5. Interface `[Range](https://dom.spec.whatwg.org/#range)`[](https://dom.spec.whatwg.org/#interface-range) -[Range](https://developer.mozilla.org/en-US/docs/Web/API/Range "The Range interface represents a fragment of a document that can contain nodes and parts of text nodes.") +[Range](https://developer.mozilla.org/en-US/docs/Web/API/Range 'The Range interface represents a fragment of a document that can contain nodes and parts of text nodes.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `Range` : [AbstractRange](https://dom.spec.whatwg.org/#abstractrange) { - [constructor](https://dom.spec.whatwg.org/#dom-range-range)(); +[constructor](https://dom.spec.whatwg.org/#dom-range-range)(); - readonly attribute [Node](https://dom.spec.whatwg.org/#node) [commonAncestorContainer](https://dom.spec.whatwg.org/#dom-range-commonancestorcontainer); +readonly attribute [Node](https://dom.spec.whatwg.org/#node) [commonAncestorContainer](https://dom.spec.whatwg.org/#dom-range-commonancestorcontainer); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setStart](https://dom.spec.whatwg.org/#dom-range-setstart)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setstart-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-setstart-node-offset-offset)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setEnd](https://dom.spec.whatwg.org/#dom-range-setend)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setend-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-setend-node-offset-offset)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setStartBefore](https://dom.spec.whatwg.org/#dom-range-setstartbefore)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setstartbefore-node-node)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setStartAfter](https://dom.spec.whatwg.org/#dom-range-setstartafter)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setstartafter-node-node)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setEndBefore](https://dom.spec.whatwg.org/#dom-range-setendbefore)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setendbefore-node-node)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setEndAfter](https://dom.spec.whatwg.org/#dom-range-setendafter)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setendafter-node-node)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [collapse](https://dom.spec.whatwg.org/#dom-range-collapse)(optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `toStart`[](https://dom.spec.whatwg.org/#dom-range-collapse-tostart-tostart) = false); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [selectNode](https://dom.spec.whatwg.org/#dom-range-selectnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-selectnode-node-node)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [selectNodeContents](https://dom.spec.whatwg.org/#dom-range-selectnodecontents)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-selectnodecontents-node-node)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setStart](https://dom.spec.whatwg.org/#dom-range-setstart)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setstart-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-setstart-node-offset-offset)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setEnd](https://dom.spec.whatwg.org/#dom-range-setend)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setend-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-setend-node-offset-offset)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setStartBefore](https://dom.spec.whatwg.org/#dom-range-setstartbefore)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setstartbefore-node-node)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setStartAfter](https://dom.spec.whatwg.org/#dom-range-setstartafter)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setstartafter-node-node)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setEndBefore](https://dom.spec.whatwg.org/#dom-range-setendbefore)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setendbefore-node-node)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [setEndAfter](https://dom.spec.whatwg.org/#dom-range-setendafter)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-setendafter-node-node)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [collapse](https://dom.spec.whatwg.org/#dom-range-collapse)(optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `toStart`[](https://dom.spec.whatwg.org/#dom-range-collapse-tostart-tostart) = false); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [selectNode](https://dom.spec.whatwg.org/#dom-range-selectnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-selectnode-node-node)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [selectNodeContents](https://dom.spec.whatwg.org/#dom-range-selectnodecontents)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-selectnodecontents-node-node)); - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `START_TO_START` = 0; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `START_TO_END` = 1; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `END_TO_END` = 2; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `END_TO_START` = 3; - [short](https://webidl.spec.whatwg.org/#idl-short) [compareBoundaryPoints](https://dom.spec.whatwg.org/#dom-range-compareboundarypoints)([unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `how`[](https://dom.spec.whatwg.org/#dom-range-compareboundarypoints-how-sourcerange-how), [Range](https://dom.spec.whatwg.org/#range) `sourceRange`[](https://dom.spec.whatwg.org/#dom-range-compareboundarypoints-how-sourcerange-sourcerange)); +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `START_TO_START` = 0; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `START_TO_END` = 1; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `END_TO_END` = 2; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `END_TO_START` = 3; +[short](https://webidl.spec.whatwg.org/#idl-short) [compareBoundaryPoints](https://dom.spec.whatwg.org/#dom-range-compareboundarypoints)([unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `how`[](https://dom.spec.whatwg.org/#dom-range-compareboundarypoints-how-sourcerange-how), [Range](https://dom.spec.whatwg.org/#range) `sourceRange`[](https://dom.spec.whatwg.org/#dom-range-compareboundarypoints-how-sourcerange-sourcerange)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [deleteContents](https://dom.spec.whatwg.org/#dom-range-deletecontents)(); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) [extractContents](https://dom.spec.whatwg.org/#dom-range-extractcontents)(); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) [cloneContents](https://dom.spec.whatwg.org/#dom-range-clonecontents)(); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [insertNode](https://dom.spec.whatwg.org/#dom-range-insertnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-insertnode-node-node)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [surroundContents](https://dom.spec.whatwg.org/#dom-range-surroundcontents)([Node](https://dom.spec.whatwg.org/#node) `newParent`[](https://dom.spec.whatwg.org/#dom-range-surroundcontents-newparent-newparent)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [deleteContents](https://dom.spec.whatwg.org/#dom-range-deletecontents)(); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) [extractContents](https://dom.spec.whatwg.org/#dom-range-extractcontents)(); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions), [NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) [cloneContents](https://dom.spec.whatwg.org/#dom-range-clonecontents)(); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [insertNode](https://dom.spec.whatwg.org/#dom-range-insertnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-insertnode-node-node)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [surroundContents](https://dom.spec.whatwg.org/#dom-range-surroundcontents)([Node](https://dom.spec.whatwg.org/#node) `newParent`[](https://dom.spec.whatwg.org/#dom-range-surroundcontents-newparent-newparent)); - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Range](https://dom.spec.whatwg.org/#range) [cloneRange](https://dom.spec.whatwg.org/#dom-range-clonerange)(); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [detach](https://dom.spec.whatwg.org/#dom-range-detach)(); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [Range](https://dom.spec.whatwg.org/#range) [cloneRange](https://dom.spec.whatwg.org/#dom-range-clonerange)(); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [detach](https://dom.spec.whatwg.org/#dom-range-detach)(); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isPointInRange](https://dom.spec.whatwg.org/#dom-range-ispointinrange)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-ispointinrange-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-ispointinrange-node-offset-offset)); - [short](https://webidl.spec.whatwg.org/#idl-short) [comparePoint](https://dom.spec.whatwg.org/#dom-range-comparepoint)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-comparepoint-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-comparepoint-node-offset-offset)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [isPointInRange](https://dom.spec.whatwg.org/#dom-range-ispointinrange)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-ispointinrange-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-ispointinrange-node-offset-offset)); +[short](https://webidl.spec.whatwg.org/#idl-short) [comparePoint](https://dom.spec.whatwg.org/#dom-range-comparepoint)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-comparepoint-node-offset-node), [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `offset`[](https://dom.spec.whatwg.org/#dom-range-comparepoint-node-offset-offset)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [intersectsNode](https://dom.spec.whatwg.org/#dom-range-intersectsnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-intersectsnode-node-node)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [intersectsNode](https://dom.spec.whatwg.org/#dom-range-intersectsnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-range-intersectsnode-node-node)); - [stringifier](https://dom.spec.whatwg.org/#dom-range-stringifier); +[stringifier](https://dom.spec.whatwg.org/#dom-range-stringifier); }; Objects implementing the `[Range](https://dom.spec.whatwg.org/#range)` interface are known as live ranges. @@ -9437,41 +8839,32 @@ A [node](https://dom.spec.whatwg.org/#concept-node) is partially contained in a Some facts to better understand these definitions: - The content that one would think of as being within the [live range](https://dom.spec.whatwg.org/#concept-live-range) consists of all [contained](https://dom.spec.whatwg.org/#contained) [nodes](https://dom.spec.whatwg.org/#concept-node), plus possibly some of the contents of the [start node](https://dom.spec.whatwg.org/#concept-range-start-node) and [end node](https://dom.spec.whatwg.org/#concept-range-end-node) if those are `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [nodes](https://dom.spec.whatwg.org/#concept-node). - - The [nodes](https://dom.spec.whatwg.org/#concept-node) that are contained in a [live range](https://dom.spec.whatwg.org/#concept-live-range) will generally not be contiguous, because the [parent](https://dom.spec.whatwg.org/#concept-tree-parent) of a [contained](https://dom.spec.whatwg.org/#contained) [node](https://dom.spec.whatwg.org/#concept-node) will not always be [contained](https://dom.spec.whatwg.org/#contained). - - However, the [descendants](https://dom.spec.whatwg.org/#concept-tree-descendant) of a [contained](https://dom.spec.whatwg.org/#contained) [node](https://dom.spec.whatwg.org/#concept-node) are [contained](https://dom.spec.whatwg.org/#contained), and if two [siblings](https://dom.spec.whatwg.org/#concept-tree-sibling) are [contained](https://dom.spec.whatwg.org/#contained), so are any [siblings](https://dom.spec.whatwg.org/#concept-tree-sibling) that lie between them. - - The [start node](https://dom.spec.whatwg.org/#concept-range-start-node) and [end node](https://dom.spec.whatwg.org/#concept-range-end-node) of a [live range](https://dom.spec.whatwg.org/#concept-live-range) are never [contained](https://dom.spec.whatwg.org/#contained) within it. - - The first [contained](https://dom.spec.whatwg.org/#contained) [node](https://dom.spec.whatwg.org/#concept-node) (if there are any) will always be after the [start node](https://dom.spec.whatwg.org/#concept-range-start-node), and the last [contained](https://dom.spec.whatwg.org/#contained) [node](https://dom.spec.whatwg.org/#concept-node) will always be equal to or before the [end node](https://dom.spec.whatwg.org/#concept-range-end-node)’s last [descendant](https://dom.spec.whatwg.org/#concept-tree-descendant). - - There exists a [partially contained](https://dom.spec.whatwg.org/#partially-contained) [node](https://dom.spec.whatwg.org/#concept-node) if and only if the [start node](https://dom.spec.whatwg.org/#concept-range-start-node) and [end node](https://dom.spec.whatwg.org/#concept-range-end-node) are different. - - The `[commonAncestorContainer](https://dom.spec.whatwg.org/#dom-range-commonancestorcontainer)` attribute value is neither [contained](https://dom.spec.whatwg.org/#contained) nor [partially contained](https://dom.spec.whatwg.org/#partially-contained). - - If the [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is an [ancestor](https://dom.spec.whatwg.org/#concept-tree-ancestor) of the [end node](https://dom.spec.whatwg.org/#concept-range-end-node), the common [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) will be the [start node](https://dom.spec.whatwg.org/#concept-range-start-node). Exactly one of its [children](https://dom.spec.whatwg.org/#concept-tree-child) will be [partially contained](https://dom.spec.whatwg.org/#partially-contained), and a [child](https://dom.spec.whatwg.org/#concept-tree-child) will be [contained](https://dom.spec.whatwg.org/#contained) if and only if it [precedes](https://dom.spec.whatwg.org/#concept-tree-preceding) the [partially contained](https://dom.spec.whatwg.org/#partially-contained) [child](https://dom.spec.whatwg.org/#concept-tree-child). If the [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is an [ancestor](https://dom.spec.whatwg.org/#concept-tree-ancestor) of the [start node](https://dom.spec.whatwg.org/#concept-range-start-node), the opposite holds. - - If the [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of the [end node](https://dom.spec.whatwg.org/#concept-range-end-node), nor vice versa, the common [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) will be distinct from both of them. Exactly two of its [children](https://dom.spec.whatwg.org/#concept-tree-child) will be [partially contained](https://dom.spec.whatwg.org/#partially-contained), and a [child](https://dom.spec.whatwg.org/#concept-tree-child) will be contained if and only if it lies between those two. - -___ +--- -[Range/Range](https://developer.mozilla.org/en-US/docs/Web/API/Range/Range "The Range() constructor returns a newly created Range object whose start and end is the global Document object.") +[Range/Range](https://developer.mozilla.org/en-US/docs/Web/API/Range/Range 'The Range() constructor returns a newly created Range object whose start and end is the global Document object.') In all current engines. Firefox24+Safari8+Chrome29+ -___ +--- Opera16+Edge79+ -___ +--- Edge (Legacy)15+IENone -___ +--- Firefox for Android24+iOS Safari8+Chrome for Android29+Android WebView37+Samsung Internet2.0+Opera Mobile16+ @@ -9481,23 +8874,23 @@ Returns a new [live range](https://dom.spec.whatwg.org/#concept-live-range). The `new Range()` constructor steps are to set [this](https://webidl.spec.whatwg.org/#this)’s [start](https://dom.spec.whatwg.org/#concept-range-start) and [end](https://dom.spec.whatwg.org/#concept-range-end) to ([current global object](https://html.spec.whatwg.org/multipage/webappapis.html#current-global-object)’s [associated `Document`](https://html.spec.whatwg.org/multipage/window-object.html#concept-document-window), 0). -___ +--- -[Range/commonAncestorContainer](https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer "The Range.commonAncestorContainer read-only property returns the deepest — or furthest down the document tree — Node that contains both boundary points of the Range. This means that if Range.startContainer and Range.endContainer both refer to the same node, this node is the common ancestor container.") +[Range/commonAncestorContainer](https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer 'The Range.commonAncestorContainer read-only property returns the deepest — or furthest down the document tree — Node that contains both boundary points of the Range. This means that if Range.startContainer and Range.endContainer both refer to the same node, this node is the common ancestor container.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9511,7 +8904,7 @@ The `commonAncestorContainer` getter steps are: 2. While container is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of [end node](https://dom.spec.whatwg.org/#concept-range-end-node), let container be container’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). 3. Return container. -___ +--- To set the start or end of a range to a [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (node, offset), run these steps: @@ -9519,71 +8912,70 @@ To set the start or end of a range to a [boundary point](https://dom.spec.whatwg 2. If offset is greater than node’s [length](https://dom.spec.whatwg.org/#concept-node-length), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[IndexSizeError](https://webidl.spec.whatwg.org/#indexsizeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. 3. Let bp be the [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (node, offset). 4. If these steps were invoked as "set the start" - + 1. If range’s [root](https://dom.spec.whatwg.org/#concept-range-root) is not equal to node’s [root](https://dom.spec.whatwg.org/#concept-tree-root), or if bp is [after](https://dom.spec.whatwg.org/#concept-range-bp-after) the range’s [end](https://dom.spec.whatwg.org/#concept-range-end), set range’s [end](https://dom.spec.whatwg.org/#concept-range-end) to bp. 2. Set range’s [start](https://dom.spec.whatwg.org/#concept-range-start) to bp. - + If these steps were invoked as "set the end" - + 1. If range’s [root](https://dom.spec.whatwg.org/#concept-range-root) is not equal to node’s [root](https://dom.spec.whatwg.org/#concept-tree-root), or if bp is [before](https://dom.spec.whatwg.org/#concept-range-bp-before) the range’s [start](https://dom.spec.whatwg.org/#concept-range-start), set range’s [start](https://dom.spec.whatwg.org/#concept-range-start) to bp. 2. Set range’s [end](https://dom.spec.whatwg.org/#concept-range-end) to bp. - -[Range/setStart](https://developer.mozilla.org/en-US/docs/Web/API/Range/setStart "The Range.setStart() method sets the start position of a Range.") +[Range/setStart](https://developer.mozilla.org/en-US/docs/Web/API/Range/setStart 'The Range.setStart() method sets the start position of a Range.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `setStart(node, offset)` method steps are to [set the start](https://dom.spec.whatwg.org/#concept-range-bp-set) of [this](https://webidl.spec.whatwg.org/#this) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (node, offset). -[Range/setEnd](https://developer.mozilla.org/en-US/docs/Web/API/Range/setEnd "The Range.setEnd() method sets the end position of a Range to be located at the given offset into the specified node x.Setting the end point above (higher in the document) than the start point will result in a collapsed range with the start and end points both set to the specified end position.") +[Range/setEnd](https://developer.mozilla.org/en-US/docs/Web/API/Range/setEnd 'The Range.setEnd() method sets the end position of a Range to be located at the given offset into the specified node x.Setting the end point above (higher in the document) than the start point will result in a collapsed range with the start and end points both set to the specified end position.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `setEnd(node, offset)` method steps are to [set the end](https://dom.spec.whatwg.org/#concept-range-bp-set) of [this](https://webidl.spec.whatwg.org/#this) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (node, offset). -[Range/setStartBefore](https://developer.mozilla.org/en-US/docs/Web/API/Range/setStartBefore "The Range.setStartBefore() method sets the start position of a Range relative to another Node. The parent Node of the start of the Range will be the same as that for the referenceNode.") +[Range/setStartBefore](https://developer.mozilla.org/en-US/docs/Web/API/Range/setStartBefore 'The Range.setStartBefore() method sets the start position of a Range relative to another Node. The parent Node of the start of the Range will be the same as that for the referenceNode.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9593,48 +8985,45 @@ The `setStartBefore(node)` method steps are: 2. If parent is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidNodeTypeError](https://webidl.spec.whatwg.org/#invalidnodetypeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. 3. [Set the start](https://dom.spec.whatwg.org/#concept-range-bp-set) of [this](https://webidl.spec.whatwg.org/#this) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (parent, node’s [index](https://dom.spec.whatwg.org/#concept-tree-index)). -[Range/setStartAfter](https://developer.mozilla.org/en-US/docs/Web/API/Range/setStartAfter "The Range.setStartAfter() method sets the start position of a Range relative to a Node. The parent Node of the start of the Range will be the same as that for the referenceNode.") +[Range/setStartAfter](https://developer.mozilla.org/en-US/docs/Web/API/Range/setStartAfter 'The Range.setStartAfter() method sets the start position of a Range relative to a Node. The parent Node of the start of the Range will be the same as that for the referenceNode.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `setStartAfter(node)` method steps are: 1. Let parent be node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 2. If parent is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidNodeTypeError](https://webidl.spec.whatwg.org/#invalidnodetypeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. [Set the start](https://dom.spec.whatwg.org/#concept-range-bp-set) of [this](https://webidl.spec.whatwg.org/#this) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (parent, node’s [index](https://dom.spec.whatwg.org/#concept-tree-index) plus 1). - -[Range/setEndBefore](https://developer.mozilla.org/en-US/docs/Web/API/Range/setEndBefore "The Range.setEndBefore() method sets the end position of a Range relative to another Node. The parent Node of end of the Range will be the same as that for the referenceNode.") +[Range/setEndBefore](https://developer.mozilla.org/en-US/docs/Web/API/Range/setEndBefore 'The Range.setEndBefore() method sets the end position of a Range relative to another Node. The parent Node of end of the Range will be the same as that for the referenceNode.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9644,48 +9033,45 @@ The `setEndBefore(node)` method steps are: 2. If parent is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidNodeTypeError](https://webidl.spec.whatwg.org/#invalidnodetypeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. 3. [Set the end](https://dom.spec.whatwg.org/#concept-range-bp-set) of [this](https://webidl.spec.whatwg.org/#this) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (parent, node’s [index](https://dom.spec.whatwg.org/#concept-tree-index)). -[Range/setEndAfter](https://developer.mozilla.org/en-US/docs/Web/API/Range/setEndAfter "The Range.setEndAfter() method sets the end position of a Range relative to another Node. The parent Node of end of the Range will be the same as that for the referenceNode.") +[Range/setEndAfter](https://developer.mozilla.org/en-US/docs/Web/API/Range/setEndAfter 'The Range.setEndAfter() method sets the end position of a Range relative to another Node. The parent Node of end of the Range will be the same as that for the referenceNode.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `setEndAfter(node)` method steps are: 1. Let parent be node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 2. If parent is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidNodeTypeError](https://webidl.spec.whatwg.org/#invalidnodetypeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. [Set the end](https://dom.spec.whatwg.org/#concept-range-bp-set) of [this](https://webidl.spec.whatwg.org/#this) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (parent, node’s [index](https://dom.spec.whatwg.org/#concept-tree-index) plus 1). - -[Range/collapse](https://developer.mozilla.org/en-US/docs/Web/API/Range/collapse "The Range.collapse() method collapses the Range to one of its boundary points.") +[Range/collapse](https://developer.mozilla.org/en-US/docs/Web/API/Range/collapse 'The Range.collapse() method collapses the Range to one of its boundary points.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9694,51 +9080,46 @@ The `collapse(toStart)` method steps are to, if toStart is true, set [end](https To select a [node](https://dom.spec.whatwg.org/#concept-node) node within a [range](https://dom.spec.whatwg.org/#concept-range) range, run these steps: 1. Let parent be node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 2. If parent is null, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidNodeTypeError](https://webidl.spec.whatwg.org/#invalidnodetypeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. Let index be node’s [index](https://dom.spec.whatwg.org/#concept-tree-index). - 4. Set range’s [start](https://dom.spec.whatwg.org/#concept-range-start) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (parent, index). - 5. Set range’s [end](https://dom.spec.whatwg.org/#concept-range-end) to [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (parent, index plus 1). - -[Range/selectNode](https://developer.mozilla.org/en-US/docs/Web/API/Range/selectNode "The Range.selectNode() method sets the Range to contain the Node and its contents. The parent Node of the start and end of the Range will be the same as the parent of the referenceNode.") +[Range/selectNode](https://developer.mozilla.org/en-US/docs/Web/API/Range/selectNode 'The Range.selectNode() method sets the Range to contain the Node and its contents. The parent Node of the start and end of the Range will be the same as the parent of the referenceNode.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `selectNode(node)` method steps are to [select](https://dom.spec.whatwg.org/#concept-range-select) node within [this](https://webidl.spec.whatwg.org/#this). -[Range/selectNodeContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/selectNodeContents "The Range.selectNodeContents() method sets the Range to contain the contents of a Node.") +[Range/selectNodeContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/selectNodeContents 'The Range.selectNodeContents() method sets the Range to contain the contents of a Node.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9749,198 +9130,192 @@ The `selectNodeContents(node)` method steps are: 3. Set [start](https://dom.spec.whatwg.org/#concept-range-start) to the [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (node, 0). 4. Set [end](https://dom.spec.whatwg.org/#concept-range-end) to the [boundary point](https://dom.spec.whatwg.org/#concept-range-bp) (node, length). -___ +--- -[Range/compareBoundaryPoints](https://developer.mozilla.org/en-US/docs/Web/API/Range/compareBoundaryPoints "The Range.compareBoundaryPoints() method compares the boundary points of the Range with those of another range.") +[Range/compareBoundaryPoints](https://developer.mozilla.org/en-US/docs/Web/API/Range/compareBoundaryPoints 'The Range.compareBoundaryPoints() method compares the boundary points of the Range with those of another range.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `compareBoundaryPoints(how, sourceRange)` method steps are: 1. If how is not one of - + - `[START_TO_START](https://dom.spec.whatwg.org/#dom-range-start_to_start)`, - `[START_TO_END](https://dom.spec.whatwg.org/#dom-range-start_to_end)`, - `[END_TO_END](https://dom.spec.whatwg.org/#dom-range-end_to_end)`, and - `[END_TO_START](https://dom.spec.whatwg.org/#dom-range-end_to_start)`, - + then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[NotSupportedError](https://webidl.spec.whatwg.org/#notsupportederror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + 2. If [this](https://webidl.spec.whatwg.org/#this)’s [root](https://dom.spec.whatwg.org/#concept-range-root) is not the same as sourceRange’s [root](https://dom.spec.whatwg.org/#concept-range-root), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[WrongDocumentError](https://webidl.spec.whatwg.org/#wrongdocumenterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. 3. If how is: - + `[START_TO_START](https://dom.spec.whatwg.org/#dom-range-start_to_start)`: - + Let this point be [this](https://webidl.spec.whatwg.org/#this)’s [start](https://dom.spec.whatwg.org/#concept-range-start). Let other point be sourceRange’s [start](https://dom.spec.whatwg.org/#concept-range-start). - + `[START_TO_END](https://dom.spec.whatwg.org/#dom-range-start_to_end)`: - + Let this point be [this](https://webidl.spec.whatwg.org/#this)’s [end](https://dom.spec.whatwg.org/#concept-range-end). Let other point be sourceRange’s [start](https://dom.spec.whatwg.org/#concept-range-start). - + `[END_TO_END](https://dom.spec.whatwg.org/#dom-range-end_to_end)`: - + Let this point be [this](https://webidl.spec.whatwg.org/#this)’s [end](https://dom.spec.whatwg.org/#concept-range-end). Let other point be sourceRange’s [end](https://dom.spec.whatwg.org/#concept-range-end). - + `[END_TO_START](https://dom.spec.whatwg.org/#dom-range-end_to_start)`: - + Let this point be [this](https://webidl.spec.whatwg.org/#this)’s [start](https://dom.spec.whatwg.org/#concept-range-start). Let other point be sourceRange’s [end](https://dom.spec.whatwg.org/#concept-range-end). - + 4. If the [position](https://dom.spec.whatwg.org/#concept-range-bp-position) of this point relative to other point is - + [before](https://dom.spec.whatwg.org/#concept-range-bp-before) - + Return −1. - + [equal](https://dom.spec.whatwg.org/#concept-range-bp-equal) - + Return 0. - + [after](https://dom.spec.whatwg.org/#concept-range-bp-after) - + Return 1. - -[Range/deleteContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/deleteContents "The Range.deleteContents() method removes the contents of the Range from the Document.") +[Range/deleteContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/deleteContents 'The Range.deleteContents() method removes the contents of the Range from the Document.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `deleteContents()` method steps are: 1. If [this](https://webidl.spec.whatwg.org/#this) is [collapsed](https://dom.spec.whatwg.org/#range-collapsed), then return. - 2. Let original start node, original start offset, original end node, and original end offset be [this](https://webidl.spec.whatwg.org/#this)’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node), [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset), [end node](https://dom.spec.whatwg.org/#concept-range-end-node), and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset), respectively. 3. If original start node is original end node and it is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then [replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node original start node, offset original start offset, count original end offset minus original start offset, and data the empty string, and then return. - 4. Let nodes to remove be a list of all the [nodes](https://dom.spec.whatwg.org/#concept-node) that are [contained](https://dom.spec.whatwg.org/#contained) in [this](https://webidl.spec.whatwg.org/#this), in [tree order](https://dom.spec.whatwg.org/#concept-tree-order), omitting any [node](https://dom.spec.whatwg.org/#concept-node) whose [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is also [contained](https://dom.spec.whatwg.org/#contained) in [this](https://webidl.spec.whatwg.org/#this). 5. If original start node is an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set new node to original start node and new offset to original start offset. 6. Otherwise: + 1. Let reference node equal original start node. 2. While reference node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is not null and is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set reference node to its [parent](https://dom.spec.whatwg.org/#concept-tree-parent). 3. Set new node to the [parent](https://dom.spec.whatwg.org/#concept-tree-parent) of reference node, and new offset to one plus the [index](https://dom.spec.whatwg.org/#concept-tree-index) of reference node. - + If reference node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) were null, it would be the [root](https://dom.spec.whatwg.org/#concept-range-root) of [this](https://webidl.spec.whatwg.org/#this), so would be an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, and we could not reach this point. - + 7. If original start node is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then [replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node original start node, offset original start offset, count original start node’s [length](https://dom.spec.whatwg.org/#concept-node-length) minus original start offset, data the empty string. - 8. For each node in nodes to remove, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order), [remove](https://dom.spec.whatwg.org/#concept-node-remove) node. - 9. If original end node is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then [replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node original end node, offset 0, count original end offset and data the empty string. - -10. Set [start](https://dom.spec.whatwg.org/#concept-range-start) and [end](https://dom.spec.whatwg.org/#concept-range-end) to (new node, new offset). +10. Set [start](https://dom.spec.whatwg.org/#concept-range-start) and [end](https://dom.spec.whatwg.org/#concept-range-end) to (new node, new offset). To a [live range](https://dom.spec.whatwg.org/#concept-live-range) range, run these steps: 1. Let fragment be a new `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node) whose [node document](https://dom.spec.whatwg.org/#concept-node-document) is range’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. If range is [collapsed](https://dom.spec.whatwg.org/#range-collapsed), then return fragment. - 3. Let original start node, original start offset, original end node, and original end offset be range’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node), [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset), [end node](https://dom.spec.whatwg.org/#concept-range-end-node), and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset), respectively. 4. If original start node is original end node and it is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: - + 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of original start node. 2. Set the [data](https://dom.spec.whatwg.org/#concept-cd-data) of clone to the result of [substringing data](https://dom.spec.whatwg.org/#concept-cd-substring) with node original start node, offset original start offset, and count original end offset minus original start offset. 3. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. 4. [Replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node original start node, offset original start offset, count original end offset minus original start offset, and data the empty string. 5. Return fragment. + 5. Let common ancestor be original start node. 6. While common ancestor is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set common ancestor to its own [parent](https://dom.spec.whatwg.org/#concept-tree-parent). 7. Let first partially contained child be null. 8. If original start node is _not_ an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set first partially contained child to the first [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that is [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range. 9. Let last partially contained child be null. -10. If original end node is _not_ an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original start node, set last partially contained child to the last [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that is [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range. - +10. If original end node is _not_ an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original start node, set last partially contained child to the last [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that is [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range. + These variable assignments do actually always make sense. For instance, if original start node is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, original start node is itself [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range, and so are all its [ancestors](https://dom.spec.whatwg.org/#concept-tree-ancestor) up until a [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor. common ancestor cannot be original start node, because it has to be an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node. The other case is similar. Also, notice that the two [children](https://dom.spec.whatwg.org/#concept-tree-child) will never be equal if both are defined. - -11. Let contained children be a list of all [children](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that are [contained](https://dom.spec.whatwg.org/#contained) in range, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). -12. If any member of contained children is a [doctype](https://dom.spec.whatwg.org/#concept-doctype), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + +11. Let contained children be a list of all [children](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that are [contained](https://dom.spec.whatwg.org/#contained) in range, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). +12. If any member of contained children is a [doctype](https://dom.spec.whatwg.org/#concept-doctype), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. + We do not have to worry about the first or last partially contained node, because a [doctype](https://dom.spec.whatwg.org/#concept-doctype) can never be partially contained. It cannot be a boundary point of a range, and it cannot be the ancestor of anything. - -13. If original start node is an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set new node to original start node and new offset to original start offset. -14. Otherwise: - 1. Let reference node equal original start node. - 2. While reference node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is not null and is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set reference node to its [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 3. Set new node to the [parent](https://dom.spec.whatwg.org/#concept-tree-parent) of reference node, and new offset to one plus reference node’s [index](https://dom.spec.whatwg.org/#concept-tree-index). - - If reference node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is null, it would be the [root](https://dom.spec.whatwg.org/#concept-range-root) of range, so would be an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, and we could not reach this point. - -15. If first partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: - + +13. If original start node is an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set new node to original start node and new offset to original start offset. +14. Otherwise: +15. Let reference node equal original start node. +16. While reference node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is not null and is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set reference node to its [parent](https://dom.spec.whatwg.org/#concept-tree-parent). +17. Set new node to the [parent](https://dom.spec.whatwg.org/#concept-tree-parent) of reference node, and new offset to one plus reference node’s [index](https://dom.spec.whatwg.org/#concept-tree-index). + + If reference node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is null, it would be the [root](https://dom.spec.whatwg.org/#concept-range-root) of range, so would be an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, and we could not reach this point. + +18. If first partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: + In this case, first partially contained child is original start node. - + 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of original start node. 2. Set the [data](https://dom.spec.whatwg.org/#concept-cd-data) of clone to the result of [substringing data](https://dom.spec.whatwg.org/#concept-cd-substring) with node original start node, offset original start offset, and count original start node’s [length](https://dom.spec.whatwg.org/#concept-node-length) minus original start offset. 3. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. 4. [Replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node original start node, offset original start offset, count original start node’s [length](https://dom.spec.whatwg.org/#concept-node-length) minus original start offset, and data the empty string. -16. Otherwise, if first partially contained child is not null: - 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of first partially contained child. - 2. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. - 3. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (original start node, original start offset) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (first partially contained child, first partially contained child’s [length](https://dom.spec.whatwg.org/#concept-node-length)). - 4. Let subfragment be the result of [extracting](https://dom.spec.whatwg.org/#concept-range-extract) subrange. - - 5. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. -17. For each contained child in contained children, [append](https://dom.spec.whatwg.org/#concept-node-append) contained child to fragment. -18. If last partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: - + +19. Otherwise, if first partially contained child is not null: +20. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of first partially contained child. +21. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. +22. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (original start node, original start offset) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (first partially contained child, first partially contained child’s [length](https://dom.spec.whatwg.org/#concept-node-length)). +23. Let subfragment be the result of [extracting](https://dom.spec.whatwg.org/#concept-range-extract) subrange. +24. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. +25. For each contained child in contained children, [append](https://dom.spec.whatwg.org/#concept-node-append) contained child to fragment. +26. If last partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: + In this case, last partially contained child is original end node. - + 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of original end node. 2. Set the [data](https://dom.spec.whatwg.org/#concept-cd-data) of clone to the result of [substringing data](https://dom.spec.whatwg.org/#concept-cd-substring) with node original end node, offset 0, and count original end offset. 3. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. 4. [Replace data](https://dom.spec.whatwg.org/#concept-cd-replace) with node original end node, offset 0, count original end offset, and data the empty string. -19. Otherwise, if last partially contained child is not null: - 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of last partially contained child. - 2. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. - 3. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (last partially contained child, 0) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (original end node, original end offset). - 4. Let subfragment be the result of [extracting](https://dom.spec.whatwg.org/#concept-range-extract) subrange. - - 5. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. -20. Set range’s [start](https://dom.spec.whatwg.org/#concept-range-start) and [end](https://dom.spec.whatwg.org/#concept-range-end) to (new node, new offset). -21. Return fragment. -[Range/extractContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/extractContents "The Range.extractContents() method moves contents of the Range from the document tree into a DocumentFragment.") +27. Otherwise, if last partially contained child is not null: +28. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of last partially contained child. +29. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. +30. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (last partially contained child, 0) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (original end node, original end offset). +31. Let subfragment be the result of [extracting](https://dom.spec.whatwg.org/#concept-range-extract) subrange. +32. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. +33. Set range’s [start](https://dom.spec.whatwg.org/#concept-range-start) and [end](https://dom.spec.whatwg.org/#concept-range-end) to (new node, new offset). +34. Return fragment. + +[Range/extractContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/extractContents 'The Range.extractContents() method moves contents of the Range from the document tree into a DocumentFragment.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -9949,78 +9324,77 @@ The `extractContents()` method steps are to return the result of [extracting](ht To clone the contents of a [live range](https://dom.spec.whatwg.org/#concept-live-range) range, run these steps: 1. Let fragment be a new `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node) whose [node document](https://dom.spec.whatwg.org/#concept-node-document) is range’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node)’s [node document](https://dom.spec.whatwg.org/#concept-node-document). - 2. If range is [collapsed](https://dom.spec.whatwg.org/#range-collapsed), then return fragment. - 3. Let original start node, original start offset, original end node, and original end offset be range’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node), [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset), [end node](https://dom.spec.whatwg.org/#concept-range-end-node), and [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset), respectively. 4. If original start node is original end node and it is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: - + 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of original start node. 2. Set the [data](https://dom.spec.whatwg.org/#concept-cd-data) of clone to the result of [substringing data](https://dom.spec.whatwg.org/#concept-cd-substring) with node original start node, offset original start offset, and count original end offset minus original start offset. 3. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. 4. Return fragment. + 5. Let common ancestor be original start node. 6. While common ancestor is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set common ancestor to its own [parent](https://dom.spec.whatwg.org/#concept-tree-parent). 7. Let first partially contained child be null. 8. If original start node is _not_ an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, set first partially contained child to the first [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that is [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range. 9. Let last partially contained child be null. -10. If original end node is _not_ an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original start node, set last partially contained child to the last [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that is [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range. - +10. If original end node is _not_ an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original start node, set last partially contained child to the last [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that is [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range. + These variable assignments do actually always make sense. For instance, if original start node is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node, original start node is itself [partially contained](https://dom.spec.whatwg.org/#partially-contained) in range, and so are all its [ancestors](https://dom.spec.whatwg.org/#concept-tree-ancestor) up until a [child](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor. common ancestor cannot be original start node, because it has to be an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of original end node. The other case is similar. Also, notice that the two [children](https://dom.spec.whatwg.org/#concept-tree-child) will never be equal if both are defined. - -11. Let contained children be a list of all [children](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that are [contained](https://dom.spec.whatwg.org/#contained) in range, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). -12. If any member of contained children is a [doctype](https://dom.spec.whatwg.org/#concept-doctype), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + +11. Let contained children be a list of all [children](https://dom.spec.whatwg.org/#concept-tree-child) of common ancestor that are [contained](https://dom.spec.whatwg.org/#contained) in range, in [tree order](https://dom.spec.whatwg.org/#concept-tree-order). +12. If any member of contained children is a [doctype](https://dom.spec.whatwg.org/#concept-doctype), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[HierarchyRequestError](https://webidl.spec.whatwg.org/#hierarchyrequesterror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. + We do not have to worry about the first or last partially contained node, because a [doctype](https://dom.spec.whatwg.org/#concept-doctype) can never be partially contained. It cannot be a boundary point of a range, and it cannot be the ancestor of anything. - -13. If first partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: - + +13. If first partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: + In this case, first partially contained child is original start node. - + 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of original start node. 2. Set the [data](https://dom.spec.whatwg.org/#concept-cd-data) of clone to the result of [substringing data](https://dom.spec.whatwg.org/#concept-cd-substring) with node original start node, offset original start offset, and count original start node’s [length](https://dom.spec.whatwg.org/#concept-node-length) minus original start offset. 3. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. -14. Otherwise, if first partially contained child is not null: - 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of first partially contained child. - 2. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. - 3. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (original start node, original start offset) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (first partially contained child, first partially contained child’s [length](https://dom.spec.whatwg.org/#concept-node-length)). - 4. Let subfragment be the result of [cloning the contents](https://dom.spec.whatwg.org/#concept-range-clone) of subrange. - - 5. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. -15. For each contained child in contained children: - 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of contained child with the _clone children flag_ set. - 2. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. -16. If last partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: - + +14. Otherwise, if first partially contained child is not null: +15. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of first partially contained child. +16. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. +17. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (original start node, original start offset) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (first partially contained child, first partially contained child’s [length](https://dom.spec.whatwg.org/#concept-node-length)). +18. Let subfragment be the result of [cloning the contents](https://dom.spec.whatwg.org/#concept-range-clone) of subrange. +19. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. +20. For each contained child in contained children: +21. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of contained child with the _clone children flag_ set. +22. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. +23. If last partially contained child is a `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [node](https://dom.spec.whatwg.org/#concept-node), then: + In this case, last partially contained child is original end node. - + 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of original end node. 2. Set the [data](https://dom.spec.whatwg.org/#concept-cd-data) of clone to the result of [substringing data](https://dom.spec.whatwg.org/#concept-cd-substring) with node original end node, offset 0, and count original end offset. 3. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. -17. Otherwise, if last partially contained child is not null: - 1. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of last partially contained child. - 2. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. - 3. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (last partially contained child, 0) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (original end node, original end offset). - 4. Let subfragment be the result of [cloning the contents](https://dom.spec.whatwg.org/#concept-range-clone) of subrange. - - 5. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. -18. Return fragment. -[Range/cloneContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/cloneContents "The Range.cloneContents() returns a DocumentFragment copying the objects of type Node included in the Range.") +24. Otherwise, if last partially contained child is not null: +25. Let clone be a [clone](https://dom.spec.whatwg.org/#concept-node-clone) of last partially contained child. +26. [Append](https://dom.spec.whatwg.org/#concept-node-append) clone to fragment. +27. Let subrange be a new [live range](https://dom.spec.whatwg.org/#concept-live-range) whose [start](https://dom.spec.whatwg.org/#concept-range-start) is (last partially contained child, 0) and whose [end](https://dom.spec.whatwg.org/#concept-range-end) is (original end node, original end offset). +28. Let subfragment be the result of [cloning the contents](https://dom.spec.whatwg.org/#concept-range-clone) of subrange. +29. [Append](https://dom.spec.whatwg.org/#concept-node-append) subfragment to clone. +30. Return fragment. + +[Range/cloneContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/cloneContents 'The Range.cloneContents() returns a DocumentFragment copying the objects of type Node included in the Range.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -10037,125 +9411,117 @@ To insert a [node](https://dom.spec.whatwg.org/#concept-node) node into a [live 7. If range’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node), set referenceNode to the result of [splitting](https://dom.spec.whatwg.org/#concept-text-split) it with offset range’s [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset). 8. If node is referenceNode, set referenceNode to its [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). 9. If node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is non-null, then [remove](https://dom.spec.whatwg.org/#concept-node-remove) node. - -10. Let newOffset be parent’s [length](https://dom.spec.whatwg.org/#concept-node-length) if referenceNode is null, and referenceNode’s [index](https://dom.spec.whatwg.org/#concept-tree-index) otherwise. -11. Increase newOffset by node’s [length](https://dom.spec.whatwg.org/#concept-node-length) if node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node), and one otherwise. -12. [Pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into parent before referenceNode. -13. If range is [collapsed](https://dom.spec.whatwg.org/#range-collapsed), then set range’s [end](https://dom.spec.whatwg.org/#concept-range-end) to (parent, newOffset). - +10. Let newOffset be parent’s [length](https://dom.spec.whatwg.org/#concept-node-length) if referenceNode is null, and referenceNode’s [index](https://dom.spec.whatwg.org/#concept-tree-index) otherwise. +11. Increase newOffset by node’s [length](https://dom.spec.whatwg.org/#concept-node-length) if node is a `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node), and one otherwise. +12. [Pre-insert](https://dom.spec.whatwg.org/#concept-node-pre-insert) node into parent before referenceNode. +13. If range is [collapsed](https://dom.spec.whatwg.org/#range-collapsed), then set range’s [end](https://dom.spec.whatwg.org/#concept-range-end) to (parent, newOffset). -[Range/insertNode](https://developer.mozilla.org/en-US/docs/Web/API/Range/insertNode "The Range.insertNode() method inserts a node at the start of the Range.") +[Range/insertNode](https://developer.mozilla.org/en-US/docs/Web/API/Range/insertNode 'The Range.insertNode() method inserts a node at the start of the Range.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `insertNode(node)` method steps are to [insert](https://dom.spec.whatwg.org/#concept-range-insert) node into [this](https://webidl.spec.whatwg.org/#this). -[Range/surroundContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/surroundContents "The Range.surroundContents() method moves content of the Range into a new node, placing the new node at the start of the specified range.") +[Range/surroundContents](https://developer.mozilla.org/en-US/docs/Web/API/Range/surroundContents 'The Range.surroundContents() method moves content of the Range into a new node, placing the new node at the start of the specified range.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `surroundContents(newParent)` method steps are: 1. If a non-`[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node) is [partially contained](https://dom.spec.whatwg.org/#partially-contained) in [this](https://webidl.spec.whatwg.org/#this), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidStateError](https://webidl.spec.whatwg.org/#invalidstateerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If newParent is a `[Document](https://dom.spec.whatwg.org/#document)`, `[DocumentType](https://dom.spec.whatwg.org/#documenttype)`, or `[DocumentFragment](https://dom.spec.whatwg.org/#documentfragment)` [node](https://dom.spec.whatwg.org/#concept-node), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidNodeTypeError](https://webidl.spec.whatwg.org/#invalidnodetypeerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + For historical reasons `[CharacterData](https://dom.spec.whatwg.org/#characterdata)` [nodes](https://dom.spec.whatwg.org/#concept-node) are not checked here and end up throwing later on as a side effect. - + 3. Let fragment be the result of [extracting](https://dom.spec.whatwg.org/#concept-live-range) [this](https://webidl.spec.whatwg.org/#this). - 4. If newParent has [children](https://dom.spec.whatwg.org/#concept-tree-child), then [replace all](https://dom.spec.whatwg.org/#concept-node-replace-all) with null within newParent. - 5. [Insert](https://dom.spec.whatwg.org/#concept-range-insert) newParent into [this](https://webidl.spec.whatwg.org/#this). - 6. [Append](https://dom.spec.whatwg.org/#concept-node-append) fragment to newParent. - 7. [Select](https://dom.spec.whatwg.org/#concept-range-select) newParent within [this](https://webidl.spec.whatwg.org/#this). - -[Range/cloneRange](https://developer.mozilla.org/en-US/docs/Web/API/Range/cloneRange "The Range.cloneRange() method returns a Range object with boundary points identical to the cloned Range.") +[Range/cloneRange](https://developer.mozilla.org/en-US/docs/Web/API/Range/cloneRange 'The Range.cloneRange() method returns a Range object with boundary points identical to the cloned Range.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `cloneRange()` method steps are to return a new [live range](https://dom.spec.whatwg.org/#concept-live-range) with the same [start](https://dom.spec.whatwg.org/#concept-range-start) and [end](https://dom.spec.whatwg.org/#concept-range-end) as [this](https://webidl.spec.whatwg.org/#this). -[Range/detach](https://developer.mozilla.org/en-US/docs/Web/API/Range/detach "The Range.detach() method does nothing. It used to disable the Range object and enable the browser to release associated resources. The method has been kept for compatibility.") +[Range/detach](https://developer.mozilla.org/en-US/docs/Web/API/Range/detach 'The Range.detach() method does nothing. It used to disable the Range object and enable the browser to release associated resources. The method has been kept for compatibility.') Firefox1–15Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4–15iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `detach()` method steps are to do nothing. Its functionality (disabling a `[Range](https://dom.spec.whatwg.org/#range)` object) was removed, but the method itself is preserved for compatibility. -___ +--- -[Range/comparePoint](https://developer.mozilla.org/en-US/docs/Web/API/Range/comparePoint "The Range.comparePoint() method returns -1, 0, or 1 depending on whether the referenceNode is before, the same as, or after the Range.") +[Range/comparePoint](https://developer.mozilla.org/en-US/docs/Web/API/Range/comparePoint 'The Range.comparePoint() method returns -1, 0, or 1 depending on whether the referenceNode is before, the same as, or after the Range.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -10163,21 +9529,21 @@ position = range . `[comparePoint(node, offset)](https://dom.spec.whatwg.org/#do Returns −1 if the point is before the range, 0 if the point is in the range, and 1 if the point is after the range. -[Range/intersectsNode](https://developer.mozilla.org/en-US/docs/Web/API/Range/intersectsNode "The Range.intersectsNode() method returns a boolean indicating whether the given Node intersects the Range.") +[Range/intersectsNode](https://developer.mozilla.org/en-US/docs/Web/API/Range/intersectsNode 'The Range.intersectsNode() method returns a boolean indicating whether the given Node intersects the Range.') In all current engines. Firefox17+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android19+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -10185,21 +9551,21 @@ intersects = range . `[intersectsNode(node)](https://dom.spec.whatwg.org/#dom-ra Returns whether range intersects node. -[Range/isPointInRange](https://developer.mozilla.org/en-US/docs/Web/API/Range/isPointInRange "The Range.isPointInRange() method returns a boolean indicating whether the given point is in the Range. It returns true if the point (cursor position) at offset within ReferenceNode is within this range.") +[Range/isPointInRange](https://developer.mozilla.org/en-US/docs/Web/API/Range/isPointInRange 'The Range.isPointInRange() method returns a boolean indicating whether the given point is in the Range. It returns true if the point (cursor position) at offset within ReferenceNode is within this range.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)15+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ @@ -10220,7 +9586,7 @@ The `comparePoint(node, offset)` method steps are: 5. If (node, offset) is [after](https://dom.spec.whatwg.org/#concept-range-bp-after) [end](https://dom.spec.whatwg.org/#concept-range-end), return 1. 6. Return 0. -___ +--- The `intersectsNode(node)` method steps are: @@ -10231,42 +9597,36 @@ The `intersectsNode(node)` method steps are: 5. If (parent, offset) is [before](https://dom.spec.whatwg.org/#concept-range-bp-before) [end](https://dom.spec.whatwg.org/#concept-range-end) and (parent, offset plus 1) is [after](https://dom.spec.whatwg.org/#concept-range-bp-after) [start](https://dom.spec.whatwg.org/#concept-range-start), return true. 6. Return false. -___ +--- -[Range/toString](https://developer.mozilla.org/en-US/docs/Web/API/Range/toString "The Range.toString() method is a stringifier returning the text of the Range.") +[Range/toString](https://developer.mozilla.org/en-US/docs/Web/API/Range/toString 'The Range.toString() method is a stringifier returning the text of the Range.') In all current engines. Firefox1+Safari1+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The stringification behavior must run these steps: 1. Let s be the empty string. - 2. If [this](https://webidl.spec.whatwg.org/#this)’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is [this](https://webidl.spec.whatwg.org/#this)’s [end node](https://dom.spec.whatwg.org/#concept-range-end-node) and it is a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node), then return the substring of that `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node)’s [data](https://dom.spec.whatwg.org/#concept-cd-data) beginning at [this](https://webidl.spec.whatwg.org/#this)’s [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) and ending at [this](https://webidl.spec.whatwg.org/#this)’s [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset). - 3. If [this](https://webidl.spec.whatwg.org/#this)’s [start node](https://dom.spec.whatwg.org/#concept-range-start-node) is a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node), then append the substring of that [node](https://dom.spec.whatwg.org/#concept-node)’s [data](https://dom.spec.whatwg.org/#concept-cd-data) from [this](https://webidl.spec.whatwg.org/#this)’s [start offset](https://dom.spec.whatwg.org/#concept-range-start-offset) until the end to s. - 4. Append the [concatenation](https://infra.spec.whatwg.org/#string-concatenate) of the [data](https://dom.spec.whatwg.org/#concept-cd-data) of all `[Text](https://dom.spec.whatwg.org/#text)` [nodes](https://dom.spec.whatwg.org/#concept-node) that are [contained](https://dom.spec.whatwg.org/#contained) in [this](https://webidl.spec.whatwg.org/#this), in [tree order](https://dom.spec.whatwg.org/#concept-tree-order), to s. - 5. If [this](https://webidl.spec.whatwg.org/#this)’s [end node](https://dom.spec.whatwg.org/#concept-range-end-node) is a `[Text](https://dom.spec.whatwg.org/#text)` [node](https://dom.spec.whatwg.org/#concept-node), then append the substring of that [node](https://dom.spec.whatwg.org/#concept-node)’s [data](https://dom.spec.whatwg.org/#concept-cd-data) from its start until [this](https://webidl.spec.whatwg.org/#this)’s [end offset](https://dom.spec.whatwg.org/#concept-range-end-offset) to s. - 6. Return s. - -___ +--- The `[createContextualFragment()](https://w3c.github.io/DOM-Parsing/#dfn-createcontextualfragment-fragment)`, `[getClientRects()](https://drafts.csswg.org/cssom-view-1/#dom-range-getclientrects)`, and `[getBoundingClientRect()](https://drafts.csswg.org/cssom-view-1/#dom-range-getboundingclientrect)` methods are defined in other specifications. [\[DOM-Parsing\]](https://dom.spec.whatwg.org/#biblio-dom-parsing) [\[CSSOM-VIEW\]](https://dom.spec.whatwg.org/#biblio-cssom-view) @@ -10281,54 +9641,46 @@ Each `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)` and `[TreeWalke To filter a [node](https://dom.spec.whatwg.org/#concept-node) node within a `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)` or `[TreeWalker](https://dom.spec.whatwg.org/#treewalker)` object traverser, run these steps: 1. If traverser’s [active flag](https://dom.spec.whatwg.org/#concept-traversal-active) is set, then throw an "`[InvalidStateError](https://webidl.spec.whatwg.org/#invalidstateerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. Let n be node’s `[nodeType](https://dom.spec.whatwg.org/#dom-node-nodetype)` attribute value − 1. - 3. If the nth bit (where 0 is the least significant bit) of traverser’s [whatToShow](https://dom.spec.whatwg.org/#concept-traversal-whattoshow) is not set, then return `[FILTER_SKIP](https://dom.spec.whatwg.org/#dom-nodefilter-filter_skip)`. - 4. If traverser’s [filter](https://dom.spec.whatwg.org/#concept-traversal-filter) is null, then return `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`. - 5. Set traverser’s [active flag](https://dom.spec.whatwg.org/#concept-traversal-active). - 6. Let result be the return value of [call a user object’s operation](https://webidl.spec.whatwg.org/#call-a-user-objects-operation) with traverser’s [filter](https://dom.spec.whatwg.org/#concept-traversal-filter), "`acceptNode`", and « node ». If this throws an exception, then unset traverser’s [active flag](https://dom.spec.whatwg.org/#concept-traversal-active) and rethrow the exception. - 7. Unset traverser’s [active flag](https://dom.spec.whatwg.org/#concept-traversal-active). - 8. Return result. - ### 6.1. Interface `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)`[](https://dom.spec.whatwg.org/#interface-nodeiterator) -[NodeIterator](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator "The NodeIterator interface represents an iterator over the members of a list of the nodes in a subtree of the DOM. The nodes will be returned in document order.") +[NodeIterator](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator 'The NodeIterator interface represents an iterator over the members of a list of the nodes in a subtree of the DOM. The nodes will be returned in document order.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `NodeIterator` { - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [Node](https://dom.spec.whatwg.org/#node) [root](https://dom.spec.whatwg.org/#dom-nodeiterator-root); - readonly attribute [Node](https://dom.spec.whatwg.org/#node) [referenceNode](https://dom.spec.whatwg.org/#dom-nodeiterator-referencenode); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [pointerBeforeReferenceNode](https://dom.spec.whatwg.org/#dom-nodeiterator-pointerbeforereferencenode); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [whatToShow](https://dom.spec.whatwg.org/#dom-nodeiterator-whattoshow); - readonly attribute [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? [filter](https://dom.spec.whatwg.org/#dom-nodeiterator-filter); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [Node](https://dom.spec.whatwg.org/#node) [root](https://dom.spec.whatwg.org/#dom-nodeiterator-root); +readonly attribute [Node](https://dom.spec.whatwg.org/#node) [referenceNode](https://dom.spec.whatwg.org/#dom-nodeiterator-referencenode); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [pointerBeforeReferenceNode](https://dom.spec.whatwg.org/#dom-nodeiterator-pointerbeforereferencenode); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [whatToShow](https://dom.spec.whatwg.org/#dom-nodeiterator-whattoshow); +readonly attribute [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? [filter](https://dom.spec.whatwg.org/#dom-nodeiterator-filter); - [Node](https://dom.spec.whatwg.org/#node)? [nextNode](https://dom.spec.whatwg.org/#dom-nodeiterator-nextnode)(); - [Node](https://dom.spec.whatwg.org/#node)? [previousNode](https://dom.spec.whatwg.org/#dom-nodeiterator-previousnode)(); +[Node](https://dom.spec.whatwg.org/#node)? [nextNode](https://dom.spec.whatwg.org/#dom-nodeiterator-nextnode)(); +[Node](https://dom.spec.whatwg.org/#node)? [previousNode](https://dom.spec.whatwg.org/#dom-nodeiterator-previousnode)(); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [detach](https://dom.spec.whatwg.org/#dom-nodeiterator-detach)(); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) [detach](https://dom.spec.whatwg.org/#dom-nodeiterator-detach)(); }; `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)` objects can be created using the `[createNodeIterator()](https://dom.spec.whatwg.org/#dom-document-createnodeiterator)` method on `[Document](https://dom.spec.whatwg.org/#document)` objects. @@ -10342,117 +9694,113 @@ As mentioned earlier, `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator) The `NodeIterator` pre-removing steps given a nodeIterator and toBeRemovedNode, are as follows: 1. If toBeRemovedNode is not an [inclusive ancestor](https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of nodeIterator’s [reference](https://dom.spec.whatwg.org/#nodeiterator-reference), or toBeRemovedNode is nodeIterator’s [root](https://dom.spec.whatwg.org/#concept-traversal-root), then return. - 2. If nodeIterator’s [pointer before reference](https://dom.spec.whatwg.org/#nodeiterator-pointer-before-reference) is true, then: - + 1. Let next be toBeRemovedNode’s first [following](https://dom.spec.whatwg.org/#concept-tree-following) [node](https://dom.spec.whatwg.org/#concept-node) that is an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) of nodeIterator’s [root](https://dom.spec.whatwg.org/#concept-traversal-root) and is not an [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) of toBeRemovedNode, and null if there is no such [node](https://dom.spec.whatwg.org/#concept-node). - 2. If next is non-null, then set nodeIterator’s [reference](https://dom.spec.whatwg.org/#nodeiterator-reference) to next and return. - 3. Otherwise, set nodeIterator’s [pointer before reference](https://dom.spec.whatwg.org/#nodeiterator-pointer-before-reference) to false. - + Steps are not terminated here. - + 3. Set nodeIterator’s [reference](https://dom.spec.whatwg.org/#nodeiterator-reference) to toBeRemovedNode’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent), if toBeRemovedNode’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling) is null, and to the [inclusive descendant](https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant) of toBeRemovedNode’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling) that appears last in [tree order](https://dom.spec.whatwg.org/#concept-tree-order) otherwise. - -___ +--- -[NodeIterator/root](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/root "The NodeIterator.root read-only property represents the Node that is the root of what the NodeIterator traverses.") +[NodeIterator/root](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/root 'The NodeIterator.root read-only property represents the Node that is the root of what the NodeIterator traverses.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `root` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [root](https://dom.spec.whatwg.org/#concept-traversal-root). -[NodeIterator/referenceNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/referenceNode "The NodeIterator.referenceNode read-only returns the Node to which the iterator is anchored; as new nodes are inserted, the iterator remains anchored to the reference node as specified by this property.") +[NodeIterator/referenceNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/referenceNode 'The NodeIterator.referenceNode read-only returns the Node to which the iterator is anchored; as new nodes are inserted, the iterator remains anchored to the reference node as specified by this property.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera MobileYes The `referenceNode` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [reference](https://dom.spec.whatwg.org/#nodeiterator-reference). -[NodeIterator/pointerBeforeReferenceNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/pointerBeforeReferenceNode "The NodeIterator.pointerBeforeReferenceNode read-only property returns a boolean flag that indicates whether the NodeFilter is anchored before (if this value is true) or after (if this value is false) the anchor node indicated by the NodeIterator.referenceNode property.") +[NodeIterator/pointerBeforeReferenceNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/pointerBeforeReferenceNode 'The NodeIterator.pointerBeforeReferenceNode read-only property returns a boolean flag that indicates whether the NodeFilter is anchored before (if this value is true) or after (if this value is false) the anchor node indicated by the NodeIterator.referenceNode property.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera MobileYes The `pointerBeforeReferenceNode` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [pointer before reference](https://dom.spec.whatwg.org/#nodeiterator-pointer-before-reference). -[NodeIterator/whatToShow](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/whatToShow "The NodeIterator.whatToShow read-only property represents an unsigned integer representing a bitmask signifying what types of nodes should be returned by the NodeIterator.") +[NodeIterator/whatToShow](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/whatToShow 'The NodeIterator.whatToShow read-only property represents an unsigned integer representing a bitmask signifying what types of nodes should be returned by the NodeIterator.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `whatToShow` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [whatToShow](https://dom.spec.whatwg.org/#concept-traversal-whattoshow). -[NodeIterator/filter](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/filter "The NodeIterator.filter read-only method returns a NodeFilter object, that is an object implement an acceptNode(node) method, used to screen nodes.") +[NodeIterator/filter](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/filter 'The NodeIterator.filter read-only method returns a NodeFilter object, that is an object implement an acceptNode(node) method, used to screen nodes.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -10461,71 +9809,65 @@ The `filter` getter steps are to return [this](https://webidl.spec.whatwg.org/#t To traverse, given a `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)` object iterator and a direction direction, run these steps: 1. Let node be iterator’s [reference](https://dom.spec.whatwg.org/#nodeiterator-reference). - 2. Let beforeNode be iterator’s [pointer before reference](https://dom.spec.whatwg.org/#nodeiterator-pointer-before-reference). - 3. While true: - + 1. Branch on direction: - + next - + If beforeNode is false, then set node to the first [node](https://dom.spec.whatwg.org/#concept-node) [following](https://dom.spec.whatwg.org/#concept-tree-following) node in iterator’s [iterator collection](https://dom.spec.whatwg.org/#iterator-collection). If there is no such [node](https://dom.spec.whatwg.org/#concept-node), then return null. - + If beforeNode is true, then set it to false. - + previous - + If beforeNode is true, then set node to the first [node](https://dom.spec.whatwg.org/#concept-node) [preceding](https://dom.spec.whatwg.org/#concept-tree-preceding) node in iterator’s [iterator collection](https://dom.spec.whatwg.org/#iterator-collection). If there is no such [node](https://dom.spec.whatwg.org/#concept-node), then return null. - + If beforeNode is false, then set it to true. - + 2. Let result be the result of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within iterator. - 3. If result is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then [break](https://infra.spec.whatwg.org/#iteration-break). - + 4. Set iterator’s [reference](https://dom.spec.whatwg.org/#nodeiterator-reference) to node. - 5. Set iterator’s [pointer before reference](https://dom.spec.whatwg.org/#nodeiterator-pointer-before-reference) to beforeNode. - 6. Return node. - -[NodeIterator/nextNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/nextNode "The NodeIterator.nextNode() method returns the next node in the set represented by the NodeIterator and advances the position of the iterator within the set. The first call to nextNode() returns the first node in the set.") +[NodeIterator/nextNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/nextNode 'The NodeIterator.nextNode() method returns the next node in the set represented by the NodeIterator and advances the position of the iterator within the set. The first call to nextNode() returns the first node in the set.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ The `nextNode()` method steps are to return the result of [traversing](https://dom.spec.whatwg.org/#concept-nodeiterator-traverse) with [this](https://webidl.spec.whatwg.org/#this) and next. -[NodeIterator/previousNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/previousNode "The NodeIterator.previousNode() method returns the previous node in the set represented by the NodeIterator and moves the position of the iterator backwards within the set.") +[NodeIterator/previousNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator/previousNode 'The NodeIterator.previousNode() method returns the previous node in the set represented by the NodeIterator and moves the position of the iterator backwards within the set.') In all current engines. Firefox3.5+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ @@ -10535,38 +9877,38 @@ The `detach()` method steps are to do nothing. Its functionality (disabling a `[ ### 6.2. Interface `[TreeWalker](https://dom.spec.whatwg.org/#treewalker)`[](https://dom.spec.whatwg.org/#interface-treewalker) -[TreeWalker](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker "The TreeWalker object represents the nodes of a document subtree and a position within them.") +[TreeWalker](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker 'The TreeWalker object represents the nodes of a document subtree and a position within them.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `TreeWalker` { - \[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [Node](https://dom.spec.whatwg.org/#node) [root](https://dom.spec.whatwg.org/#dom-treewalker-root); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [whatToShow](https://dom.spec.whatwg.org/#dom-treewalker-whattoshow); - readonly attribute [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? [filter](https://dom.spec.whatwg.org/#dom-treewalker-filter); - attribute [Node](https://dom.spec.whatwg.org/#node) [currentNode](https://dom.spec.whatwg.org/#dom-treewalker-currentnode); - - [Node](https://dom.spec.whatwg.org/#node)? [parentNode](https://dom.spec.whatwg.org/#dom-treewalker-parentnode)(); - [Node](https://dom.spec.whatwg.org/#node)? [firstChild](https://dom.spec.whatwg.org/#dom-treewalker-firstchild)(); - [Node](https://dom.spec.whatwg.org/#node)? [lastChild](https://dom.spec.whatwg.org/#dom-treewalker-lastchild)(); - [Node](https://dom.spec.whatwg.org/#node)? [previousSibling](https://dom.spec.whatwg.org/#dom-treewalker-previoussibling)(); - [Node](https://dom.spec.whatwg.org/#node)? [nextSibling](https://dom.spec.whatwg.org/#dom-treewalker-nextsibling)(); - [Node](https://dom.spec.whatwg.org/#node)? [previousNode](https://dom.spec.whatwg.org/#dom-treewalker-previousnode)(); - [Node](https://dom.spec.whatwg.org/#node)? [nextNode](https://dom.spec.whatwg.org/#dom-treewalker-nextnode)(); +\[[SameObject](https://webidl.spec.whatwg.org/#SameObject)\] readonly attribute [Node](https://dom.spec.whatwg.org/#node) [root](https://dom.spec.whatwg.org/#dom-treewalker-root); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [whatToShow](https://dom.spec.whatwg.org/#dom-treewalker-whattoshow); +readonly attribute [NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)? [filter](https://dom.spec.whatwg.org/#dom-treewalker-filter); +attribute [Node](https://dom.spec.whatwg.org/#node) [currentNode](https://dom.spec.whatwg.org/#dom-treewalker-currentnode); + +[Node](https://dom.spec.whatwg.org/#node)? [parentNode](https://dom.spec.whatwg.org/#dom-treewalker-parentnode)(); +[Node](https://dom.spec.whatwg.org/#node)? [firstChild](https://dom.spec.whatwg.org/#dom-treewalker-firstchild)(); +[Node](https://dom.spec.whatwg.org/#node)? [lastChild](https://dom.spec.whatwg.org/#dom-treewalker-lastchild)(); +[Node](https://dom.spec.whatwg.org/#node)? [previousSibling](https://dom.spec.whatwg.org/#dom-treewalker-previoussibling)(); +[Node](https://dom.spec.whatwg.org/#node)? [nextSibling](https://dom.spec.whatwg.org/#dom-treewalker-nextsibling)(); +[Node](https://dom.spec.whatwg.org/#node)? [previousNode](https://dom.spec.whatwg.org/#dom-treewalker-previousnode)(); +[Node](https://dom.spec.whatwg.org/#node)? [nextNode](https://dom.spec.whatwg.org/#dom-treewalker-nextnode)(); }; `[TreeWalker](https://dom.spec.whatwg.org/#treewalker)` objects can be created using the `[createTreeWalker()](https://dom.spec.whatwg.org/#dom-document-createtreewalker)` method on `[Document](https://dom.spec.whatwg.org/#document)` objects. @@ -10575,61 +9917,61 @@ Each `[TreeWalker](https://dom.spec.whatwg.org/#treewalker)` object has an assoc As mentioned earlier `[TreeWalker](https://dom.spec.whatwg.org/#treewalker)` objects have an associated [root](https://dom.spec.whatwg.org/#concept-traversal-root), [whatToShow](https://dom.spec.whatwg.org/#concept-traversal-whattoshow), and [filter](https://dom.spec.whatwg.org/#concept-traversal-filter) as well. -[TreeWalker/root](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/root "The TreeWalker.root read-only property returns the node that is the root of what the TreeWalker traverses.") +[TreeWalker/root](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/root 'The TreeWalker.root read-only property returns the node that is the root of what the TreeWalker traverses.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `root` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [root](https://dom.spec.whatwg.org/#concept-traversal-root). -[TreeWalker/whatToShow](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/whatToShow "The TreeWalker.whatToShow read-only property returns an unsigned long being a bitmask made of constants describing the types of Node that must to be presented. Non-matching nodes are skipped, but their children may be included, if relevant. The possible values are:") +[TreeWalker/whatToShow](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/whatToShow 'The TreeWalker.whatToShow read-only property returns an unsigned long being a bitmask made of constants describing the types of Node that must to be presented. Non-matching nodes are skipped, but their children may be included, if relevant. The possible values are:') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `whatToShow` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [whatToShow](https://dom.spec.whatwg.org/#concept-traversal-whattoshow). -[TreeWalker/filter](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/filter "The TreeWalker.filter read-only property returns a NodeFilter that is the filtering object associated with the TreeWalker.") +[TreeWalker/filter](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/filter 'The TreeWalker.filter read-only property returns a NodeFilter that is the filtering object associated with the TreeWalker.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ @@ -10637,27 +9979,27 @@ The `filter` getter steps are to return [this](https://webidl.spec.whatwg.org/#t The `currentNode` getter steps are to return [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current). -[TreeWalker/currentNode](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/currentNode "The TreeWalker.currentNode property represents the Node on which the TreeWalker is currently pointing at.") +[TreeWalker/currentNode](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/currentNode 'The TreeWalker.currentNode property represents the Node on which the TreeWalker is currently pointing at.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `[currentNode](https://dom.spec.whatwg.org/#dom-treewalker-currentnode)` setter steps are to set [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current) to the given value. -___ +--- [TreeWalker/parentNode](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/parentNode "The TreeWalker.parentNode() method moves the current Node to the first visible ancestor node in the document order, and returns the found node. If no such node exists, or if it is above the TreeWalker's root node, returns null and the current node is not changed.") @@ -10665,99 +10007,86 @@ In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `parentNode()` method steps are: 1. Let node be [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current). - 2. While node is non-null and is not [this](https://webidl.spec.whatwg.org/#this)’s [root](https://dom.spec.whatwg.org/#concept-traversal-root): - + 1. Set node to node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 2. If node is non-null and [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within [this](https://webidl.spec.whatwg.org/#this) returns `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then set [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current) to node and return node. - + 3. Return null. - To traverse children, given a walker and type, run these steps: 1. Let node be walker’s [current](https://dom.spec.whatwg.org/#treewalker-current). - 2. Set node to node’s [first child](https://dom.spec.whatwg.org/#concept-tree-first-child) if type is first, and node’s [last child](https://dom.spec.whatwg.org/#concept-tree-last-child) if type is last. - 3. While node is non-null: - + 1. Let result be the result of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within walker. - 2. If result is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then set walker’s [current](https://dom.spec.whatwg.org/#treewalker-current) to node and return node. - 3. If result is `[FILTER_SKIP](https://dom.spec.whatwg.org/#dom-nodefilter-filter_skip)`, then: - + 1. Let child be node’s [first child](https://dom.spec.whatwg.org/#concept-tree-first-child) if type is first, and node’s [last child](https://dom.spec.whatwg.org/#concept-tree-last-child) if type is last. - 2. If child is non-null, then set node to child and [continue](https://infra.spec.whatwg.org/#iteration-continue). - + 4. While node is non-null: - + 1. Let sibling be node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling) if type is first, and node’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling) if type is last. - 2. If sibling is non-null, then set node to sibling and [break](https://infra.spec.whatwg.org/#iteration-break). - 3. Let parent be node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 4. If parent is null, walker’s [root](https://dom.spec.whatwg.org/#concept-traversal-root), or walker’s [current](https://dom.spec.whatwg.org/#treewalker-current), then return null. - 5. Set node to parent. - + 4. Return null. - -[TreeWalker/firstChild](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/firstChild "The TreeWalker.firstChild() method moves the current Node to the first visible child of the current node, and returns the found child. It also moves the current node to this child. If no such child exists, returns null and the current node is not changed.") +[TreeWalker/firstChild](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/firstChild 'The TreeWalker.firstChild() method moves the current Node to the first visible child of the current node, and returns the found child. It also moves the current node to this child. If no such child exists, returns null and the current node is not changed.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `firstChild()` method steps are to [traverse children](https://dom.spec.whatwg.org/#concept-traverse-children) with [this](https://webidl.spec.whatwg.org/#this) and first. -[TreeWalker/lastChild](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/lastChild "The TreeWalker.lastChild() method moves the current Node to the last visible child of the current node, and returns the found child. It also moves the current node to this child. If no such child exists, returns null and the current node is not changed.") +[TreeWalker/lastChild](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/lastChild 'The TreeWalker.lastChild() method moves the current Node to the last visible child of the current node, and returns the found child. It also moves the current node to this child. If no such child exists, returns null and the current node is not changed.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ @@ -10766,237 +10095,207 @@ The `lastChild()` method steps are to [traverse children](https://dom.spec.whatw To traverse siblings, given a walker and type, run these steps: 1. Let node be walker’s [current](https://dom.spec.whatwg.org/#treewalker-current). - 2. If node is [root](https://dom.spec.whatwg.org/#concept-traversal-root), then return null. - 3. While true: - + 1. Let sibling be node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling) if type is next, and node’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling) if type is previous. - 2. While sibling is non-null: - + 1. Set node to sibling. - 2. Let result be the result of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within walker. - 3. If result is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then set walker’s [current](https://dom.spec.whatwg.org/#treewalker-current) to node and return node. - 4. Set sibling to node’s [first child](https://dom.spec.whatwg.org/#concept-tree-first-child) if type is next, and node’s [last child](https://dom.spec.whatwg.org/#concept-tree-last-child) if type is previous. - 5. If result is `[FILTER_REJECT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_reject)` or sibling is null, then set sibling to node’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling) if type is next, and node’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling) if type is previous. - + 3. Set node to node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 4. If node is null or walker’s [root](https://dom.spec.whatwg.org/#concept-traversal-root), then return null. - 5. If the return value of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within walker is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then return null. - -[TreeWalker/nextSibling](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/nextSibling "The TreeWalker.nextSibling() method moves the current Node to its next sibling, if any, and returns the found sibling. If there is no such node, return null and the current node is not changed.") +[TreeWalker/nextSibling](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/nextSibling 'The TreeWalker.nextSibling() method moves the current Node to its next sibling, if any, and returns the found sibling. If there is no such node, return null and the current node is not changed.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `nextSibling()` method steps are to [traverse siblings](https://dom.spec.whatwg.org/#concept-traverse-siblings) with [this](https://webidl.spec.whatwg.org/#this) and next. -[TreeWalker/previousSibling](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/previousSibling "The TreeWalker.previousSibling() method moves the current Node to its previous sibling, if any, and returns the found sibling. If there is no such node, return null and the current node is not changed.") +[TreeWalker/previousSibling](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/previousSibling 'The TreeWalker.previousSibling() method moves the current Node to its previous sibling, if any, and returns the found sibling. If there is no such node, return null and the current node is not changed.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `previousSibling()` method steps are to [traverse siblings](https://dom.spec.whatwg.org/#concept-traverse-siblings) with [this](https://webidl.spec.whatwg.org/#this) and previous. -[TreeWalker/previousNode](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/previousNode "The TreeWalker.previousNode() method moves the current Node to the previous visible node in the document order, and returns the found node. It also moves the current node to this one. If no such node exists,or if it is before that the root node defined at the object construction, returns null and the current node is not changed.") +[TreeWalker/previousNode](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/previousNode 'The TreeWalker.previousNode() method moves the current Node to the previous visible node in the document order, and returns the found node. It also moves the current node to this one. If no such node exists,or if it is before that the root node defined at the object construction, returns null and the current node is not changed.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `previousNode()` method steps are: 1. Let node be [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current). - 2. While node is not [this](https://webidl.spec.whatwg.org/#this)’s [root](https://dom.spec.whatwg.org/#concept-traversal-root): - + 1. Let sibling be node’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling). - 2. While sibling is non-null: - + 1. Set node to sibling. - 2. Let result be the result of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within [this](https://webidl.spec.whatwg.org/#this). - 3. While result is not `[FILTER_REJECT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_reject)` and node has a [child](https://dom.spec.whatwg.org/#concept-tree-child): - + 1. Set node to node’s [last child](https://dom.spec.whatwg.org/#concept-tree-last-child). - 2. Set result to the result of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within [this](https://webidl.spec.whatwg.org/#this). - + 4. If result is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then set [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current) to node and return node. - 5. Set sibling to node’s [previous sibling](https://dom.spec.whatwg.org/#concept-tree-previous-sibling). - + 3. If node is [this](https://webidl.spec.whatwg.org/#this)’s [root](https://dom.spec.whatwg.org/#concept-traversal-root) or node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent) is null, then return null. - 4. Set node to node’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - 5. If the return value of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within [this](https://webidl.spec.whatwg.org/#this) is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then set [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current) to node and return node. - + 3. Return null. - -[TreeWalker/nextNode](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/nextNode "The TreeWalker.nextNode() method moves the current Node to the next visible node in the document order, and returns the found node. It also moves the current node to this one. If no such node exists, returns null and the current node is not changed.") +[TreeWalker/nextNode](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker/nextNode 'The TreeWalker.nextNode() method moves the current Node to the next visible node in the document order, and returns the found node. It also moves the current node to this one. If no such node exists, returns null and the current node is not changed.') In all current engines. Firefox4+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile10.1+ The `nextNode()` method steps are: 1. Let node be [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current). - 2. Let result be `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`. - 3. While true: - + 1. While result is not `[FILTER_REJECT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_reject)` and node has a [child](https://dom.spec.whatwg.org/#concept-tree-child): - + 1. Set node to its [first child](https://dom.spec.whatwg.org/#concept-tree-first-child). - 2. Set result to the result of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within [this](https://webidl.spec.whatwg.org/#this). - 3. If result is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then set [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current) to node and return node. - + 2. Let sibling be null. - 3. Let temporary be node. - 4. While temporary is non-null: - + 1. If temporary is [this](https://webidl.spec.whatwg.org/#this)’s [root](https://dom.spec.whatwg.org/#concept-traversal-root), then return null. - 2. Set sibling to temporary’s [next sibling](https://dom.spec.whatwg.org/#concept-tree-next-sibling). - 3. If sibling is non-null, then set node to sibling and [break](https://infra.spec.whatwg.org/#iteration-break). - 4. Set temporary to temporary’s [parent](https://dom.spec.whatwg.org/#concept-tree-parent). - + 5. Set result to the result of [filtering](https://dom.spec.whatwg.org/#concept-node-filter) node within [this](https://webidl.spec.whatwg.org/#this). - 6. If result is `[FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept)`, then set [this](https://webidl.spec.whatwg.org/#this)’s [current](https://dom.spec.whatwg.org/#treewalker-current) to node and return node. - ### 6.3. Interface `[NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)`[](https://dom.spec.whatwg.org/#interface-nodefilter) -[NodeFilter](https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter "A NodeFilter interface represents an object used to filter the nodes in a NodeIterator or TreeWalker. A NodeFilter knows nothing about the document or traversing nodes; it only knows how to evaluate a single node against the provided filter.") +[NodeFilter](https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter 'A NodeFilter interface represents an object used to filter the nodes in a NodeIterator or TreeWalker. A NodeFilter knows nothing about the document or traversing nodes; it only knows how to evaluate a single node against the provided filter.') In all current engines. Firefox2+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ -[NodeFilter/acceptNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter/acceptNode "The NodeFilter.acceptNode() method returns an unsigned short that will be used to tell if a given Node must be accepted or not by the NodeIterator or TreeWalker iteration algorithm. This method is expected to be written by the user of a NodeFilter. Possible return values are:") +[NodeFilter/acceptNode](https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter/acceptNode 'The NodeFilter.acceptNode() method returns an unsigned short that will be used to tell if a given Node must be accepted or not by the NodeIterator or TreeWalker iteration algorithm. This method is expected to be written by the user of a NodeFilter. Possible return values are:') In all current engines. Firefox2+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IE9+ -___ +--- Firefox for Android4+iOS Safari3+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile10.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] callback interface `NodeFilter` { - // Constants for acceptNode() - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [FILTER\_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept) = 1; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [FILTER\_REJECT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_reject) = 2; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [FILTER\_SKIP](https://dom.spec.whatwg.org/#dom-nodefilter-filter_skip) = 3; - - // Constants for whatToShow - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_ALL](https://dom.spec.whatwg.org/#dom-nodefilter-show_all) = 0xFFFFFFFF; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_ELEMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_element) = 0x1; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_ATTRIBUTE](https://dom.spec.whatwg.org/#dom-nodefilter-show_attribute) = 0x2; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_TEXT](https://dom.spec.whatwg.org/#dom-nodefilter-show_text) = 0x4; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_CDATA\_SECTION](https://dom.spec.whatwg.org/#dom-nodefilter-show_cdata_section) = 0x8; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `SHOW_ENTITY_REFERENCE`[](https://dom.spec.whatwg.org/#dom-nodefilter-show_entity_reference) = 0x10; // legacy - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `SHOW_ENTITY`[](https://dom.spec.whatwg.org/#dom-nodefilter-show_entity) = 0x20; // legacy - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_PROCESSING\_INSTRUCTION](https://dom.spec.whatwg.org/#dom-nodefilter-show_processing_instruction) = 0x40; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_COMMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_comment) = 0x80; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_DOCUMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_document) = 0x100; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_DOCUMENT\_TYPE](https://dom.spec.whatwg.org/#dom-nodefilter-show_document_type) = 0x200; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW\_DOCUMENT\_FRAGMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_document_fragment) = 0x400; - const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `SHOW_NOTATION`[](https://dom.spec.whatwg.org/#dom-nodefilter-show_notation) = 0x800; // legacy - - [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `acceptNode`[](https://dom.spec.whatwg.org/#dom-nodefilter-acceptnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-nodefilter-acceptnode-node-node)); +// Constants for acceptNode() +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [FILTER_ACCEPT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_accept) = 1; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [FILTER_REJECT](https://dom.spec.whatwg.org/#dom-nodefilter-filter_reject) = 2; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) [FILTER_SKIP](https://dom.spec.whatwg.org/#dom-nodefilter-filter_skip) = 3; + +// Constants for whatToShow +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_ALL](https://dom.spec.whatwg.org/#dom-nodefilter-show_all) = 0xFFFFFFFF; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_ELEMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_element) = 0x1; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_ATTRIBUTE](https://dom.spec.whatwg.org/#dom-nodefilter-show_attribute) = 0x2; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_TEXT](https://dom.spec.whatwg.org/#dom-nodefilter-show_text) = 0x4; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_CDATA_SECTION](https://dom.spec.whatwg.org/#dom-nodefilter-show_cdata_section) = 0x8; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `SHOW_ENTITY_REFERENCE`[](https://dom.spec.whatwg.org/#dom-nodefilter-show_entity_reference) = 0x10; // legacy +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `SHOW_ENTITY`[](https://dom.spec.whatwg.org/#dom-nodefilter-show_entity) = 0x20; // legacy +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_PROCESSING_INSTRUCTION](https://dom.spec.whatwg.org/#dom-nodefilter-show_processing_instruction) = 0x40; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_COMMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_comment) = 0x80; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_DOCUMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_document) = 0x100; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_DOCUMENT_TYPE](https://dom.spec.whatwg.org/#dom-nodefilter-show_document_type) = 0x200; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [SHOW_DOCUMENT_FRAGMENT](https://dom.spec.whatwg.org/#dom-nodefilter-show_document_fragment) = 0x400; +const [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `SHOW_NOTATION`[](https://dom.spec.whatwg.org/#dom-nodefilter-show_notation) = 0x800; // legacy + +[unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `acceptNode`[](https://dom.spec.whatwg.org/#dom-nodefilter-acceptnode)([Node](https://dom.spec.whatwg.org/#node) `node`[](https://dom.spec.whatwg.org/#dom-nodefilter-acceptnode-node-node)); }; `[NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)` objects can be used as [filter](https://dom.spec.whatwg.org/#concept-traversal-filter) for `[NodeIterator](https://dom.spec.whatwg.org/#nodeiterator)` and `[TreeWalker](https://dom.spec.whatwg.org/#treewalker)` objects and also provide constants for their [whatToShow](https://dom.spec.whatwg.org/#concept-traversal-whattoshow) bitmask. A `[NodeFilter](https://dom.spec.whatwg.org/#callbackdef-nodefilter)` object is typically implemented as a JavaScript function. @@ -11026,36 +10325,36 @@ Yes, the name `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` is an ### 7.1. Interface `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)`[](https://dom.spec.whatwg.org/#interface-domtokenlist) -[DOMTokenList](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList "The DOMTokenList interface represents a set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLAreaElement.relList, HTMLIframeElement.sandbox, or HTMLOutputElement.htmlFor. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive.") +[DOMTokenList](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList 'The DOMTokenList interface represents a set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLAreaElement.relList, HTMLIframeElement.sandbox, or HTMLOutputElement.htmlFor. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive.') In all current engines. Firefox3.6+Safari6+Chrome8+ -___ +--- Opera11.5+Edge79+ -___ +--- Edge (Legacy)12+IE10+ -___ +--- Firefox for Android4+iOS Safari6+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera Mobile11.5+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `DOMTokenList` { - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-domtokenlist-length); - getter [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [item](https://dom.spec.whatwg.org/#dom-domtokenlist-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-domtokenlist-item-index-index)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [contains](https://dom.spec.whatwg.org/#dom-domtokenlist-contains)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-contains-token-token)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [add](https://dom.spec.whatwg.org/#dom-domtokenlist-add)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)... `tokens`[](https://dom.spec.whatwg.org/#dom-domtokenlist-add-tokens-tokens)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [remove](https://dom.spec.whatwg.org/#dom-domtokenlist-remove)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)... `tokens`[](https://dom.spec.whatwg.org/#dom-domtokenlist-remove-tokens-tokens)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [toggle](https://dom.spec.whatwg.org/#dom-domtokenlist-toggle)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-toggle-token-force-token), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `force`[](https://dom.spec.whatwg.org/#dom-domtokenlist-toggle-token-force-force)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [replace](https://dom.spec.whatwg.org/#dom-domtokenlist-replace)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-replace-token-newtoken-token), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `newToken`[](https://dom.spec.whatwg.org/#dom-domtokenlist-replace-token-newtoken-newtoken)); - [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [supports](https://dom.spec.whatwg.org/#dom-domtokenlist-supports)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-supports-token-token)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] stringifier[](https://dom.spec.whatwg.org/#DOMTokenList-stringification-behavior) attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [value](https://dom.spec.whatwg.org/#dom-domtokenlist-value); - iterable<[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)\>; +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) [length](https://dom.spec.whatwg.org/#dom-domtokenlist-length); +getter [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? [item](https://dom.spec.whatwg.org/#dom-domtokenlist-item)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-domtokenlist-item-index-index)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [contains](https://dom.spec.whatwg.org/#dom-domtokenlist-contains)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-contains-token-token)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [add](https://dom.spec.whatwg.org/#dom-domtokenlist-add)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)... `tokens`[](https://dom.spec.whatwg.org/#dom-domtokenlist-add-tokens-tokens)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [undefined](https://webidl.spec.whatwg.org/#idl-undefined) [remove](https://dom.spec.whatwg.org/#dom-domtokenlist-remove)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)... `tokens`[](https://dom.spec.whatwg.org/#dom-domtokenlist-remove-tokens-tokens)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [toggle](https://dom.spec.whatwg.org/#dom-domtokenlist-toggle)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-toggle-token-force-token), optional [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `force`[](https://dom.spec.whatwg.org/#dom-domtokenlist-toggle-token-force-force)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [boolean](https://webidl.spec.whatwg.org/#idl-boolean) [replace](https://dom.spec.whatwg.org/#dom-domtokenlist-replace)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-replace-token-newtoken-token), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `newToken`[](https://dom.spec.whatwg.org/#dom-domtokenlist-replace-token-newtoken-newtoken)); +[boolean](https://webidl.spec.whatwg.org/#idl-boolean) [supports](https://dom.spec.whatwg.org/#dom-domtokenlist-supports)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `token`[](https://dom.spec.whatwg.org/#dom-domtokenlist-supports-token-token)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] stringifier[](https://dom.spec.whatwg.org/#DOMTokenList-stringification-behavior) attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) [value](https://dom.spec.whatwg.org/#dom-domtokenlist-value); +iterable<[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)\>; }; A `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object has an associated token set (a [set](https://infra.spec.whatwg.org/#ordered-set)), which is initially empty. @@ -11067,126 +10366,114 @@ A `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object also has an A `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object’s validation steps for a given token are: 1. If the associated [attribute](https://dom.spec.whatwg.org/#concept-attribute)’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) does not define [supported tokens](https://dom.spec.whatwg.org/#concept-supported-tokens), [throw](https://webidl.spec.whatwg.org/#dfn-throw) a `TypeError`. - 2. Let lowercase token be a copy of token, in [ASCII lowercase](https://infra.spec.whatwg.org/#ascii-lowercase). - 3. If lowercase token is present in [supported tokens](https://dom.spec.whatwg.org/#concept-supported-tokens), return true. - 4. Return false. - A `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object’s update steps are: 1. If the associated [element](https://dom.spec.whatwg.org/#concept-element) does not have an associated [attribute](https://dom.spec.whatwg.org/#concept-attribute) and [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens) is empty, then return. - 2. [Set an attribute value](https://dom.spec.whatwg.org/#concept-element-attributes-set-value) for the associated [element](https://dom.spec.whatwg.org/#concept-element) using associated [attribute](https://dom.spec.whatwg.org/#concept-attribute)’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name) and the result of running the [ordered set serializer](https://dom.spec.whatwg.org/#concept-ordered-set-serializer) for [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens). - A `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object’s serialize steps are to return the result of running [get an attribute value](https://dom.spec.whatwg.org/#concept-element-attributes-get-value) given the associated [element](https://dom.spec.whatwg.org/#concept-element) and the associated [attribute](https://dom.spec.whatwg.org/#concept-attribute)’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name). -___ +--- A `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object has these [attribute change steps](https://dom.spec.whatwg.org/#concept-element-attributes-change-ext) for its associated [element](https://dom.spec.whatwg.org/#concept-element): 1. If localName is associated attribute’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), namespace is null, and value is null, then [empty](https://infra.spec.whatwg.org/#list-empty) [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens). - 2. Otherwise, if localName is associated attribute’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name), namespace is null, then set [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens) to value, [parsed](https://dom.spec.whatwg.org/#concept-ordered-set-parser). - When a `[DOMTokenList](https://dom.spec.whatwg.org/#domtokenlist)` object is created, then: 1. Let element be associated [element](https://dom.spec.whatwg.org/#concept-element). - 2. Let localName be associated attribute’s [local name](https://dom.spec.whatwg.org/#concept-attribute-local-name). - 3. Let value be the result of [getting an attribute value](https://dom.spec.whatwg.org/#concept-element-attributes-get-value) given element and localName. - 4. Run the [attribute change steps](https://dom.spec.whatwg.org/#concept-element-attributes-change-ext) for element, localName, value, value, and null. - -[DOMTokenList/length](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/length "The length read-only property of the DOMTokenList interface is an integer representing the number of objects stored in the object.") +[DOMTokenList/length](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/length 'The length read-only property of the DOMTokenList interface is an integer representing the number of objects stored in the object.') In all current engines. Firefox50+Safari6+Chrome8+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE10+ -___ +--- Firefox for Android50+iOS Safari6+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera MobileYes -``tokenlist . `[length](https://dom.spec.whatwg.org/#dom-domtokenlist-length)` `` +`` tokenlist . `[length](https://dom.spec.whatwg.org/#dom-domtokenlist-length)` `` Returns the number of tokens. -[DOMTokenList/item](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/item "The item() method of the DOMTokenList interface returns an item in the list by its index.") +[DOMTokenList/item](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/item 'The item() method of the DOMTokenList interface returns an item in the list by its index.') In all current engines. Firefox3.6+Safari6+Chrome8+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE10+ -___ +--- Firefox for Android4+iOS Safari6+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera MobileYes -``tokenlist . `[item(index)](https://dom.spec.whatwg.org/#dom-domtokenlist-item)` `` +`` tokenlist . `[item(index)](https://dom.spec.whatwg.org/#dom-domtokenlist-item)` `` `tokenlist[index]` Returns the token with index index. -[DOMTokenList/contains](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/contains "The contains() method of the DOMTokenList interface returns a boolean value — true if the underlying list contains the given token, otherwise false.") +[DOMTokenList/contains](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/contains 'The contains() method of the DOMTokenList interface returns a boolean value — true if the underlying list contains the given token, otherwise false.') In all current engines. Firefox3.6+Safari6+Chrome8+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE10+ -___ +--- Firefox for Android4+iOS Safari6+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera MobileYes -``tokenlist . `[contains(token)](https://dom.spec.whatwg.org/#dom-domtokenlist-contains)` `` +`` tokenlist . `[contains(token)](https://dom.spec.whatwg.org/#dom-domtokenlist-contains)` `` Returns true if token is present; otherwise false. -[DOMTokenList/add](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/add "The add() method of the DOMTokenList interface adds the given token to the list.") +[DOMTokenList/add](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/add 'The add() method of the DOMTokenList interface adds the given token to the list.') In all current engines. Firefox3.6+Safari6+Chrome8+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE10+ -___ +--- Firefox for Android4+iOS Safari6+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera MobileYes @@ -11198,21 +10485,21 @@ Throws a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMExc Throws an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)` if one of the arguments contains any [ASCII whitespace](https://infra.spec.whatwg.org/#ascii-whitespace). -[DOMTokenList/remove](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/remove "The remove() method of the DOMTokenList interface removes the specified tokens from the list.") +[DOMTokenList/remove](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/remove 'The remove() method of the DOMTokenList interface removes the specified tokens from the list.') In all current engines. Firefox3.6+Safari6+Chrome8+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE10+ -___ +--- Firefox for Android4+iOS Safari6+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera MobileYes @@ -11230,15 +10517,15 @@ In all current engines. Firefox3.6+Safari6+Chrome8+ -___ +--- OperaYesEdge79+ -___ +--- Edge (Legacy)12+IE10+ -___ +--- Firefox for Android4+iOS Safari6+Chrome for Android18+Android WebView3+Samsung Internet1.0+Opera MobileYes @@ -11258,15 +10545,15 @@ In all current engines. Firefox49+Safari10.1+Chrome61+ -___ +--- Opera48+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10.3+Chrome for Android61+Android WebView61+Samsung Internet8.0+Opera Mobile45+ @@ -11286,15 +10573,15 @@ In all current engines. Firefox49+Safari10.1+Chrome49+ -___ +--- Opera36+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android49+iOS Safari10.3+Chrome for Android49+Android WebView49+Samsung Internet5.0+Opera Mobile36+ @@ -11304,25 +10591,25 @@ Returns true if token is in the associated attribute’s supported tokens. Retur Throws a `TypeError` if the associated attribute has no supported tokens defined. -[DOMTokenList/value](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/value "The value property of the DOMTokenList interface is a stringifier that returns the value of the list as a DOMString, or clears and sets the list to the given value.") +[DOMTokenList/value](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/value 'The value property of the DOMTokenList interface is a stringifier that returns the value of the list as a DOMString, or clears and sets the list to the given value.') In all current engines. Firefox47+Safari10+Chrome50+ -___ +--- Opera37+Edge79+ -___ +--- Edge (Legacy)17+IENone -___ +--- Firefox for Android47+iOS Safari10+Chrome for Android50+Android WebView50+Samsung Internet5.0+Opera Mobile37+ -``tokenlist . `[value](https://dom.spec.whatwg.org/#dom-domtokenlist-value)` `` +`` tokenlist . `[value](https://dom.spec.whatwg.org/#dom-domtokenlist-value)` `` Returns the associated set as string. @@ -11335,80 +10622,59 @@ The object’s [supported property indices](https://webidl.spec.whatwg.org/#dfn- The `item(index)` method steps are: 1. If index is equal to or greater than [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens)’s [size](https://infra.spec.whatwg.org/#list-size), then return null. - 2. Return [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens)\[index\]. - The `contains(token)` method steps are to return true if [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens)\[token\] [exists](https://infra.spec.whatwg.org/#list-contain); otherwise false. The `add(tokens…)` method steps are: 1. [For each](https://infra.spec.whatwg.org/#list-iterate) token in tokens: - + 1. If token is the empty string, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If token contains any [ASCII whitespace](https://infra.spec.whatwg.org/#ascii-whitespace), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + 2. [For each](https://infra.spec.whatwg.org/#list-iterate) token in tokens, [append](https://infra.spec.whatwg.org/#set-append) token to [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens). - 3. Run the [update steps](https://dom.spec.whatwg.org/#concept-dtl-update). - The `remove(tokens…)` method steps are: 1. [For each](https://infra.spec.whatwg.org/#list-iterate) token in tokens: - + 1. If token is the empty string, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If token contains any [ASCII whitespace](https://infra.spec.whatwg.org/#ascii-whitespace), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - + 2. For each token in tokens, [remove](https://infra.spec.whatwg.org/#list-remove) token from [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens). - 3. Run the [update steps](https://dom.spec.whatwg.org/#concept-dtl-update). - The `toggle(token, force)` method steps are: 1. If token is the empty string, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If token contains any [ASCII whitespace](https://infra.spec.whatwg.org/#ascii-whitespace), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. If [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens)\[token\] [exists](https://infra.spec.whatwg.org/#list-contain), then: - + 1. If force is either not given or is false, then [remove](https://infra.spec.whatwg.org/#list-remove) token from [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens), run the [update steps](https://dom.spec.whatwg.org/#concept-dtl-update) and return false. - 2. Return true. - + 4. Otherwise, if force not given or is true, [append](https://infra.spec.whatwg.org/#set-append) token to [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens), run the [update steps](https://dom.spec.whatwg.org/#concept-dtl-update), and return true. - 5. Return false. - The [update steps](https://dom.spec.whatwg.org/#concept-dtl-update) are not always run for `[toggle()](https://dom.spec.whatwg.org/#dom-domtokenlist-toggle)` for web compatibility. The `replace(token, newToken)` method steps are: 1. If either token or newToken is the empty string, then [throw](https://webidl.spec.whatwg.org/#dfn-throw) a "`[SyntaxError](https://webidl.spec.whatwg.org/#syntaxerror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 2. If either token or newToken contains any [ASCII whitespace](https://infra.spec.whatwg.org/#ascii-whitespace), then [throw](https://webidl.spec.whatwg.org/#dfn-throw) an "`[InvalidCharacterError](https://webidl.spec.whatwg.org/#invalidcharactererror)`" `[DOMException](https://webidl.spec.whatwg.org/#idl-DOMException)`. - 3. If [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens) does not [contain](https://infra.spec.whatwg.org/#list-contain) token, then return false. - 4. [Replace](https://infra.spec.whatwg.org/#set-replace) token in [this](https://webidl.spec.whatwg.org/#this)’s [token set](https://dom.spec.whatwg.org/#concept-dtl-tokens) with newToken. - 5. Run the [update steps](https://dom.spec.whatwg.org/#concept-dtl-update). - 6. Return true. - The [update steps](https://dom.spec.whatwg.org/#concept-dtl-update) are not always run for `[replace()](https://dom.spec.whatwg.org/#dom-domtokenlist-replace)` for web compatibility. The `supports(token)` method steps are: 1. Let result be the return value of [validation steps](https://dom.spec.whatwg.org/#concept-domtokenlist-validation) called with token. - 2. Return result. - The `value` attribute must return the result of running [this](https://webidl.spec.whatwg.org/#this)’s [serialize steps](https://dom.spec.whatwg.org/#concept-dtl-serialize). @@ -11420,400 +10686,400 @@ DOM Level 3 XPath defined an API for evaluating XPath 1.0 expressions. These API ### 8.1. Interface `[XPathResult](https://dom.spec.whatwg.org/#xpathresult)`[](https://dom.spec.whatwg.org/#interface-xpathresult) -[XPathResult](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult "The XPathResult interface represents the results generated by evaluating an XPath expression within the context of a given node.") +[XPathResult](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult 'The XPathResult interface represents the results generated by evaluating an XPath expression within the context of a given node.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathResult/booleanValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/booleanValue "The read-only booleanValue property of the XPathResult interface returns the boolean value of a result with XPathResult.resultType being BOOLEAN_TYPE.") +[XPathResult/booleanValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/booleanValue 'The read-only booleanValue property of the XPathResult interface returns the boolean value of a result with XPathResult.resultType being BOOLEAN_TYPE.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathResult/invalidIteratorState](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/invalidIteratorState "The read-only invalidIteratorState property of the XPathResult interface signifies that the iterator has become invalid. It is true if XPathResult.resultType is UNORDERED_NODE_ITERATOR_TYPE or ORDERED_NODE_ITERATOR_TYPE and the document has been modified since this result was returned.") +[XPathResult/invalidIteratorState](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/invalidIteratorState 'The read-only invalidIteratorState property of the XPathResult interface signifies that the iterator has become invalid. It is true if XPathResult.resultType is UNORDERED_NODE_ITERATOR_TYPE or ORDERED_NODE_ITERATOR_TYPE and the document has been modified since this result was returned.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile14+ -[XPathResult/iterateNext](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/iterateNext "The iterateNext() method of the XPathResult interface iterates over a node set result and returns the next node from it or null if there are no more nodes.") +[XPathResult/iterateNext](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/iterateNext 'The iterateNext() method of the XPathResult interface iterates over a node set result and returns the next node from it or null if there are no more nodes.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathResult/numberValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/numberValue "The read-only numberValue property of the XPathResult interface returns the numeric value of a result with XPathResult.resultType being NUMBER_TYPE.") +[XPathResult/numberValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/numberValue 'The read-only numberValue property of the XPathResult interface returns the numeric value of a result with XPathResult.resultType being NUMBER_TYPE.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathResult/resultType](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/resultType "The read-only resultType property of the XPathResult interface represents the type of the result, as defined by the type constants.") +[XPathResult/resultType](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/resultType 'The read-only resultType property of the XPathResult interface represents the type of the result, as defined by the type constants.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera15+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile14+ -[XPathResult/singleNodeValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/singleNodeValue "The read-only singleNodeValue property of the XPathResult interface returns a Node value or null in case no node was matched of a result with XPathResult.resultType being ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE.") +[XPathResult/singleNodeValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/singleNodeValue 'The read-only singleNodeValue property of the XPathResult interface returns a Node value or null in case no node was matched of a result with XPathResult.resultType being ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathResult/snapshotItem](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/snapshotItem "The snapshotItem() method of the XPathResult interface returns an item of the snapshot collection or null in case the index is not within the range of nodes. Unlike the iterator result, the snapshot does not become invalid, but may not correspond to the current document if it is mutated.") +[XPathResult/snapshotItem](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/snapshotItem 'The snapshotItem() method of the XPathResult interface returns an item of the snapshot collection or null in case the index is not within the range of nodes. Unlike the iterator result, the snapshot does not become invalid, but may not correspond to the current document if it is mutated.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathResult/snapshotLength](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/snapshotLength "The read-only snapshotLength property of the XPathResult interface represents the number of nodes in the result snapshot.") +[XPathResult/snapshotLength](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/snapshotLength 'The read-only snapshotLength property of the XPathResult interface represents the number of nodes in the result snapshot.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathResult/stringValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/stringValue "The read-only stringValue property of the XPathResult interface returns the string value of a result with XPathResult.resultType being STRING_TYPE.") +[XPathResult/stringValue](https://developer.mozilla.org/en-US/docs/Web/API/XPathResult/stringValue 'The read-only stringValue property of the XPathResult interface returns the string value of a result with XPathResult.resultType being STRING_TYPE.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `XPathResult` { - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ANY_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-any_type) = 0; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `NUMBER_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-number_type) = 1; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `STRING_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-string_type) = 2; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `BOOLEAN_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-boolean_type) = 3; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `UNORDERED_NODE_ITERATOR_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-unordered_node_iterator_type) = 4; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ORDERED_NODE_ITERATOR_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-ordered_node_iterator_type) = 5; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `UNORDERED_NODE_SNAPSHOT_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-unordered_node_snapshot_type) = 6; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ORDERED_NODE_SNAPSHOT_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-ordered_node_snapshot_type) = 7; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ANY_UNORDERED_NODE_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-any_unordered_node_type) = 8; - const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `FIRST_ORDERED_NODE_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-first_ordered_node_type) = 9; - - readonly attribute [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `resultType`[](https://dom.spec.whatwg.org/#dom-xpathresult-resulttype); - readonly attribute [unrestricted double](https://webidl.spec.whatwg.org/#idl-unrestricted-double) `numberValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-numbervalue); - readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `stringValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-stringvalue); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `booleanValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-booleanvalue); - readonly attribute [Node](https://dom.spec.whatwg.org/#node)? `singleNodeValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-singlenodevalue); - readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `invalidIteratorState`[](https://dom.spec.whatwg.org/#dom-xpathresult-invaliditeratorstate); - readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `snapshotLength`[](https://dom.spec.whatwg.org/#dom-xpathresult-snapshotlength); - - [Node](https://dom.spec.whatwg.org/#node)? `iterateNext`[](https://dom.spec.whatwg.org/#dom-xpathresult-iteratenext)(); - [Node](https://dom.spec.whatwg.org/#node)? `snapshotItem`[](https://dom.spec.whatwg.org/#dom-xpathresult-snapshotitem)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-xpathresult-snapshotitem-index-index)); +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ANY_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-any_type) = 0; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `NUMBER_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-number_type) = 1; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `STRING_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-string_type) = 2; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `BOOLEAN_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-boolean_type) = 3; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `UNORDERED_NODE_ITERATOR_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-unordered_node_iterator_type) = 4; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ORDERED_NODE_ITERATOR_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-ordered_node_iterator_type) = 5; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `UNORDERED_NODE_SNAPSHOT_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-unordered_node_snapshot_type) = 6; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ORDERED_NODE_SNAPSHOT_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-ordered_node_snapshot_type) = 7; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `ANY_UNORDERED_NODE_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-any_unordered_node_type) = 8; +const [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `FIRST_ORDERED_NODE_TYPE`[](https://dom.spec.whatwg.org/#dom-xpathresult-first_ordered_node_type) = 9; + +readonly attribute [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `resultType`[](https://dom.spec.whatwg.org/#dom-xpathresult-resulttype); +readonly attribute [unrestricted double](https://webidl.spec.whatwg.org/#idl-unrestricted-double) `numberValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-numbervalue); +readonly attribute [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `stringValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-stringvalue); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `booleanValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-booleanvalue); +readonly attribute [Node](https://dom.spec.whatwg.org/#node)? `singleNodeValue`[](https://dom.spec.whatwg.org/#dom-xpathresult-singlenodevalue); +readonly attribute [boolean](https://webidl.spec.whatwg.org/#idl-boolean) `invalidIteratorState`[](https://dom.spec.whatwg.org/#dom-xpathresult-invaliditeratorstate); +readonly attribute [unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `snapshotLength`[](https://dom.spec.whatwg.org/#dom-xpathresult-snapshotlength); + +[Node](https://dom.spec.whatwg.org/#node)? `iterateNext`[](https://dom.spec.whatwg.org/#dom-xpathresult-iteratenext)(); +[Node](https://dom.spec.whatwg.org/#node)? `snapshotItem`[](https://dom.spec.whatwg.org/#dom-xpathresult-snapshotitem)([unsigned long](https://webidl.spec.whatwg.org/#idl-unsigned-long) `index`[](https://dom.spec.whatwg.org/#dom-xpathresult-snapshotitem-index-index)); }; ### 8.2. Interface `[XPathExpression](https://dom.spec.whatwg.org/#xpathexpression)`[](https://dom.spec.whatwg.org/#interface-xpathexpression) -[XPathExpression](https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression "This interface is a compiled XPath expression that can be evaluated on a document or specific node to return information from its DOM tree.") +[XPathExpression](https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression 'This interface is a compiled XPath expression that can be evaluated on a document or specific node to return information from its DOM tree.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[XPathExpression/evaluate](https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression/evaluate "The evaluate() method of the XPathExpression interface executes an XPath expression on the given node or document and returns an XPathResult.") +[XPathExpression/evaluate](https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression/evaluate 'The evaluate() method of the XPathExpression interface executes an XPath expression on the given node or document and returns an XPathResult.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `XPathExpression` { - // XPathResult.ANY\_TYPE = 0 - [XPathResult](https://dom.spec.whatwg.org/#xpathresult) `evaluate`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate)([Node](https://dom.spec.whatwg.org/#node) `contextNode`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate-contextnode-type-result-contextnode), optional [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `type`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate-contextnode-type-result-type) = 0, optional [XPathResult](https://dom.spec.whatwg.org/#xpathresult)? `result`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate-contextnode-type-result-result) = null); +// XPathResult.ANY_TYPE = 0 +[XPathResult](https://dom.spec.whatwg.org/#xpathresult) `evaluate`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate)([Node](https://dom.spec.whatwg.org/#node) `contextNode`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate-contextnode-type-result-contextnode), optional [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `type`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate-contextnode-type-result-type) = 0, optional [XPathResult](https://dom.spec.whatwg.org/#xpathresult)? `result`[](https://dom.spec.whatwg.org/#dom-xpathexpression-evaluate-contextnode-type-result-result) = null); }; ### 8.3. Mixin `[XPathEvaluatorBase](https://dom.spec.whatwg.org/#xpathevaluatorbase)`[](https://dom.spec.whatwg.org/#mixin-xpathevaluatorbase) -[Document/createExpression](https://developer.mozilla.org/en-US/docs/Web/API/Document/createExpression "This method compiles an XPathExpression which can then be used for (repeated) evaluations.") +[Document/createExpression](https://developer.mozilla.org/en-US/docs/Web/API/Document/createExpression 'This method compiles an XPathExpression which can then be used for (repeated) evaluations.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12.1+ -[XPathEvaluator/createExpression](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator/createExpression "This method compiles an XPathExpression which can then be used for (repeated) evaluations of the XPath expression.") +[XPathEvaluator/createExpression](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator/createExpression 'This method compiles an XPathExpression which can then be used for (repeated) evaluations of the XPath expression.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[Document/createNSResolver](https://developer.mozilla.org/en-US/docs/Web/API/Document/createNSResolver "Creates an XPathNSResolver which resolves namespaces with respect to the definitions in scope for a specified node.") +[Document/createNSResolver](https://developer.mozilla.org/en-US/docs/Web/API/Document/createNSResolver 'Creates an XPathNSResolver which resolves namespaces with respect to the definitions in scope for a specified node.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile12.1+ -[XPathEvaluator/createNSResolver](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator/createNSResolver "This method adapts any DOM node to resolve namespaces so that an XPath expression can be easily evaluated relative to the context of the node where it appeared within the document.") +[XPathEvaluator/createNSResolver](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator/createNSResolver 'This method adapts any DOM node to resolve namespaces so that an XPath expression can be easily evaluated relative to the context of the node where it appeared within the document.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ -[Document/evaluate](https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate "Returns an XPathResult based on an XPath expression and other given parameters.") +[Document/evaluate](https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate 'Returns an XPathResult based on an XPath expression and other given parameters.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera9+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView37+Samsung Internet1.0+Opera Mobile10.1+ -[XPathEvaluator/evaluate](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator/evaluate "The evaluate() method of the XPathEvaluator interface executes an XPath expression on the given node or document and returns an XPathResult.") +[XPathEvaluator/evaluate](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator/evaluate 'The evaluate() method of the XPathEvaluator interface executes an XPath expression on the given node or document and returns an XPathResult.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ callback interface `XPathNSResolver` { - [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `lookupNamespaceURI`[](https://dom.spec.whatwg.org/#dom-xpathnsresolver-lookupnamespaceuri)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `prefix`[](https://dom.spec.whatwg.org/#dom-xpathnsresolver-lookupnamespaceuri-prefix-prefix)); +[DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `lookupNamespaceURI`[](https://dom.spec.whatwg.org/#dom-xpathnsresolver-lookupnamespaceuri)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString)? `prefix`[](https://dom.spec.whatwg.org/#dom-xpathnsresolver-lookupnamespaceuri-prefix-prefix)); }; interface mixin `XPathEvaluatorBase` { - \[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [XPathExpression](https://dom.spec.whatwg.org/#xpathexpression) `createExpression`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-createexpression)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `expression`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-createexpression-expression-resolver-expression), optional [XPathNSResolver](https://dom.spec.whatwg.org/#callbackdef-xpathnsresolver)? `resolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-createexpression-expression-resolver-resolver) = null); - [XPathNSResolver](https://dom.spec.whatwg.org/#callbackdef-xpathnsresolver) `createNSResolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-creatensresolver)([Node](https://dom.spec.whatwg.org/#node) `nodeResolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-creatensresolver-noderesolver-noderesolver)); - // XPathResult.ANY\_TYPE = 0 - [XPathResult](https://dom.spec.whatwg.org/#xpathresult) `evaluate`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `expression`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-expression), [Node](https://dom.spec.whatwg.org/#node) `contextNode`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-contextnode), optional [XPathNSResolver](https://dom.spec.whatwg.org/#callbackdef-xpathnsresolver)? `resolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-resolver) = null, optional [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `type`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-type) = 0, optional [XPathResult](https://dom.spec.whatwg.org/#xpathresult)? `result`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-result) = null); +\[[NewObject](https://webidl.spec.whatwg.org/#NewObject)\] [XPathExpression](https://dom.spec.whatwg.org/#xpathexpression) `createExpression`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-createexpression)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `expression`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-createexpression-expression-resolver-expression), optional [XPathNSResolver](https://dom.spec.whatwg.org/#callbackdef-xpathnsresolver)? `resolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-createexpression-expression-resolver-resolver) = null); +[XPathNSResolver](https://dom.spec.whatwg.org/#callbackdef-xpathnsresolver) `createNSResolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-creatensresolver)([Node](https://dom.spec.whatwg.org/#node) `nodeResolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-creatensresolver-noderesolver-noderesolver)); +// XPathResult.ANY_TYPE = 0 +[XPathResult](https://dom.spec.whatwg.org/#xpathresult) `evaluate`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate)([DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `expression`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-expression), [Node](https://dom.spec.whatwg.org/#node) `contextNode`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-contextnode), optional [XPathNSResolver](https://dom.spec.whatwg.org/#callbackdef-xpathnsresolver)? `resolver`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-resolver) = null, optional [unsigned short](https://webidl.spec.whatwg.org/#idl-unsigned-short) `type`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-type) = 0, optional [XPathResult](https://dom.spec.whatwg.org/#xpathresult)? `result`[](https://dom.spec.whatwg.org/#dom-xpathevaluatorbase-evaluate-expression-contextnode-resolver-type-result-result) = null); }; [Document](https://dom.spec.whatwg.org/#document) includes [XPathEvaluatorBase](https://dom.spec.whatwg.org/#xpathevaluatorbase); ### 8.4. Interface `[XPathEvaluator](https://dom.spec.whatwg.org/#xpathevaluator)`[](https://dom.spec.whatwg.org/#interface-xpathevaluator) -[XPathEvaluator](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator "The XPathEvaluator interface allows to compile and evaluate XPath expressions.") +[XPathEvaluator](https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator 'The XPathEvaluator interface allows to compile and evaluate XPath expressions.') In all current engines. Firefox1+Safari3+Chrome1+ -___ +--- Opera12.1+Edge79+ -___ +--- Edge (Legacy)12+IENone -___ +--- Firefox for Android4+iOS Safari1+Chrome for Android18+Android WebView1+Samsung Internet1.0+Opera Mobile12.1+ \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `XPathEvaluator` { - `constructor`[](https://dom.spec.whatwg.org/#dom-xpathevaluator-xpathevaluator)(); +`constructor`[](https://dom.spec.whatwg.org/#dom-xpathevaluator-xpathevaluator)(); }; [XPathEvaluator](https://dom.spec.whatwg.org/#xpathevaluator) includes [XPathEvaluatorBase](https://dom.spec.whatwg.org/#xpathevaluatorbase); @@ -11828,15 +11094,15 @@ XSL Transformations (XSLT) is a language for transforming XML documents into oth \[[Exposed](https://webidl.spec.whatwg.org/#Exposed)\=Window\] interface `XSLTProcessor` { - `constructor`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-xsltprocessor)(); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) `importStylesheet`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-importstylesheet)([Node](https://dom.spec.whatwg.org/#node) `style`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-importstylesheet-style-style)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) `transformToFragment`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtofragment)([Node](https://dom.spec.whatwg.org/#node) `source`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtofragment-source-output-source), [Document](https://dom.spec.whatwg.org/#document) `output`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtofragment-source-output-output)); - \[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Document](https://dom.spec.whatwg.org/#document) `transformToDocument`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtodocument)([Node](https://dom.spec.whatwg.org/#node) `source`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtodocument-source-source)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) `setParameter`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter)(\[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `namespaceURI`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter-namespaceuri-localname-value-namespaceuri), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter-namespaceuri-localname-value-localname), [any](https://webidl.spec.whatwg.org/#idl-any) `value`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter-namespaceuri-localname-value-value)); - [any](https://webidl.spec.whatwg.org/#idl-any) `getParameter`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-getparameter)(\[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `namespaceURI`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-getparameter-namespaceuri-localname-namespaceuri), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-getparameter-namespaceuri-localname-localname)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) `removeParameter`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-removeparameter)(\[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `namespaceURI`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-removeparameter-namespaceuri-localname-namespaceuri), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-removeparameter-namespaceuri-localname-localname)); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) `clearParameters`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-clearparameters)(); - [undefined](https://webidl.spec.whatwg.org/#idl-undefined) `reset`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-reset)(); +`constructor`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-xsltprocessor)(); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) `importStylesheet`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-importstylesheet)([Node](https://dom.spec.whatwg.org/#node) `style`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-importstylesheet-style-style)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [DocumentFragment](https://dom.spec.whatwg.org/#documentfragment) `transformToFragment`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtofragment)([Node](https://dom.spec.whatwg.org/#node) `source`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtofragment-source-output-source), [Document](https://dom.spec.whatwg.org/#document) `output`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtofragment-source-output-output)); +\[[CEReactions](https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions)\] [Document](https://dom.spec.whatwg.org/#document) `transformToDocument`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtodocument)([Node](https://dom.spec.whatwg.org/#node) `source`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-transformtodocument-source-source)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) `setParameter`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter)(\[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `namespaceURI`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter-namespaceuri-localname-value-namespaceuri), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter-namespaceuri-localname-value-localname), [any](https://webidl.spec.whatwg.org/#idl-any) `value`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-setparameter-namespaceuri-localname-value-value)); +[any](https://webidl.spec.whatwg.org/#idl-any) `getParameter`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-getparameter)(\[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `namespaceURI`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-getparameter-namespaceuri-localname-namespaceuri), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-getparameter-namespaceuri-localname-localname)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) `removeParameter`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-removeparameter)(\[[LegacyNullToEmptyString](https://webidl.spec.whatwg.org/#LegacyNullToEmptyString)\] [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `namespaceURI`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-removeparameter-namespaceuri-localname-namespaceuri), [DOMString](https://webidl.spec.whatwg.org/#idl-DOMString) `localName`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-removeparameter-namespaceuri-localname-localname)); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) `clearParameters`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-clearparameters)(); +[undefined](https://webidl.spec.whatwg.org/#idl-undefined) `reset`[](https://dom.spec.whatwg.org/#dom-xsltprocessor-reset)(); }; ## 10\. Historical[](https://dom.spec.whatwg.org/#historical) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/Data-Structures.md.md b/notes/BGOONZ_BLOG_2.0.wiki/Data-Structures.md.md index fb324a96c3..d7924fb8f7 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/Data-Structures.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/Data-Structures.md.md @@ -1,9 +1,8 @@ -What are data structures ------------------------- +## What are data structures Data structures, at a high level, are techniques for storing and organizing data that make it easier to modify, navigate, and access. Data structures determine how data is collected, the functions we can use to access it, and the relationships between data. -Data structures are used in almost all areas of computer science and programming, from operating systems to basic vanilla code to artificial intelligence. +Data structures are used in almost all areas of computer science and programming, from operating systems to basic vanilla code to artificial intelligence. Data structures enable us to: @@ -17,12 +16,11 @@ Data structures are vital for efficient, real-world problem solving. After all, > Anyone looking to crack the coding interview will need to master data structures. -JavaScript has primitive and non-primitive data structures. Primitive data structures and data types are native to the programming language. These include boolean, null, number, string, etc. +JavaScript has primitive and non-primitive data structures. Primitive data structures and data types are native to the programming language. These include boolean, null, number, string, etc. -Non-primitive data structures are not defined by the programming language but rather by the programmer. These include linear data structures, static data structures, and dynamic data structures, like queue and linked lists. +Non-primitive data structures are not defined by the programming language but rather by the programmer. These include linear data structures, static data structures, and dynamic data structures, like queue and linked lists. -1\. Array ---------- +## 1\. Array The most basic of all data structures, an array stores data in memory for later use. Each array has a fixed number of cells decided on its creation, and each cell has a corresponding numeric index used to select its data. Whenever you'd like to use the array, all you need are the desired indices, and you can access any of the data within. @@ -44,8 +42,7 @@ Disadvantages - Basic spreadsheets - Within complex structures such as hash tables -2\. Queues ----------- +## 2\. Queues Queues are conceptually similar to stacks; both are sequential structures, but queues process elements in the order they were entered rather than the most recent element. @@ -71,8 +68,7 @@ Disadvantages - Convenient way to store order-sensitive data such as stored voicemails - Ensures the oldest data is processed first -3\. Linked List ---------------- +## 3\. Linked List Linked lists are a data structure which, unlike the previous three, does not use physical placement of data in memory. This means that, rather than indexes or positions, linked lists use a referencing system: elements are stored in nodes that contain a pointer to the next node, repeating until all nodes are linked. @@ -95,8 +91,7 @@ Disadvantages - Best used when data must be added and removed in quick succession from unknown locations -4\. Trees ---------- +## 4\. Trees Trees are another relation-based data structure, which specialize in representing hierarchical structures. Like a linked list, nodes contain both elements of data and pointers marking its relation to immediate nodes. @@ -121,7 +116,7 @@ Advantages - Dynamic size - Quick at insert and delete operations - In a binary search tree, inserted nodes are sequenced immediately. -- Binary search trees are efficient at searches; length is only O(height)O(height). +- Binary search trees are efficient at searches; length is only O(height)O(height). Disadvantages @@ -135,10 +130,9 @@ Disadvantages - Storing hierarchical data such as a file location. - Binary search trees are excellent for tasks needing searching or ordering of data. -> *Enjoying the article? Scroll down to [sign up](https://www.educative.io/blog/blog-newsletter-annoucement) for our free, bi-monthly newsletter.* +> _Enjoying the article? Scroll down to [sign up](https://www.educative.io/blog/blog-newsletter-annoucement) for our free, bi-monthly newsletter._ -5\. Graphs ----------- +## 5\. Graphs Graphs are a relation-based data structure helpful for storing web-like relationships. Each node, or vertex, as they're called in graphs, has a title (A, B, C, etc.), a value contained within, and a list of links (called edges) it has with other vertices. @@ -146,9 +140,9 @@ Graphs are a relation-based data structure helpful for storing web-like relation In the above example, each circle is a vertex, and each line is an edge. If produced in writing, this structure would look like: -*V = {a, b, c, d}* +_V = {a, b, c, d}_ -*E = {ab, ac, bc, cd}* +_E = {ab, ac, bc, cd}_ While hard to visualize at first, this structure is invaluable in conveying relationship charts in textual form, anything from circuitry to train networks. @@ -167,12 +161,11 @@ Disadvantages - Network representations - Modeling social networks, such as Facebook. -6\. Hash Tables (Map) ---------------------- +## 6\. Hash Tables (Map) Hash tables are a complex data structure capable of storing large amounts of information and retrieving specific elements efficiently. This data structure relies on the concept of key/value pairs, where the "key" is a searched string and the "value" is the data paired with that key. -![](https://www.educative.io/api/page/6094484883374080/image/download/6745911163092992) Each searched key is converted from its string form into a numerical value, called a hash, using a predefined hash function. This hash then points to a storage bucket -- a smaller subgroup within the table. It then searches the bucket for the originally entered key and returns the value associated with that key. +![](https://www.educative.io/api/page/6094484883374080/image/download/6745911163092992) Each searched key is converted from its string form into a numerical value, called a hash, using a predefined hash function. This hash then points to a storage bucket -- a smaller subgroup within the table. It then searches the bucket for the originally entered key and returns the value associated with that key. Advantages @@ -193,24 +186,23 @@ Disadvantages Each hash table can be very different, from the types of the keys and values, to the way their hash functions work. Due to these differences and the multi-layered aspects of a hash table, it is nearly impossible to encapsulate so generally. -Data structure interview questions ----------------------------------- +## Data structure interview questions -For many developers and programmers, data structures are most important for [cracking Javascript coding interviews](https://www.educative.io/blog/acing-the-javascript-interview-top-questions-explained). Questions and problems on data structures are fundamental to modern-day coding interviews. In fact, they have a lot to say over your hireability and entry-level rate as a candidate. +For many developers and programmers, data structures are most important for [cracking Javascript coding interviews](https://www.educative.io/blog/acing-the-javascript-interview-top-questions-explained). Questions and problems on data structures are fundamental to modern-day coding interviews. In fact, they have a lot to say over your hireability and entry-level rate as a candidate. -Today, we will be going over seven common coding interview questions for JavaScript data structures, one for each of the data structures we discussed above. Each will also discuss its time complexity based on the [BigO notation](https://www.educative.io/blog/a-big-o-primer-for-beginning-devs) theory. +Today, we will be going over seven common coding interview questions for JavaScript data structures, one for each of the data structures we discussed above. Each will also discuss its time complexity based on the [BigO notation](https://www.educative.io/blog/a-big-o-primer-for-beginning-devs) theory. ### Array: Remove all even integers from an array -Problem statement: Implement a function `removeEven(arr)`, which takes an array arr in its input and removes all the even elements from a given array. +Problem statement: Implement a function `removeEven(arr)`, which takes an array arr in its input and removes all the even elements from a given array. -Input: An array of random integers +Input: An array of random integers ``` [1,2,4,5,10,6,3] ``` -Output: an array containing only odd integers +Output: an array containing only odd integers ``` [1,5,3] @@ -238,27 +230,27 @@ There are two ways you could solve this coding problem in an interview. Let's di 9 -function removeEven(arr) { +function removeEven(arr) { -    var odds = [] +var odds = [] -    for (let number of arr) { +for (let number of arr) { -        if (number % 2 != 0) // Check if the item in the list is NOT even ('%' is the modulus symbol!) +if (number % 2 != 0) // Check if the item in the list is NOT even ('%' is the modulus symbol!) -            odds.push(number) //If it isn't even append it to the empty list +odds.push(number) //If it isn't even append it to the empty list -    } +} -  return odds // Return the new list +return odds // Return the new list } -console.log(removeEven([3, 2, 41, 3, 34])) +console.log(removeEven([3, 2, 41, 3, 34])) Run -This approach starts with the first element of the array. If that current element is not even, it pushes this element into a new array. If it is even, it will move to the next element, repeating until it reaches the end of the array. In regards to time complexity, since the entire array has to be iterated over, this solution is in *O(n)O(n).* +This approach starts with the first element of the array. If that current element is not even, it pushes this element into a new array. If it is even, it will move to the next element, repeating until it reaches the end of the array. In regards to time complexity, since the entire array has to be iterated over, this solution is in _O(n)O(n)._ #### Solution #2: Using filter() and lambda function @@ -270,9 +262,9 @@ This approach starts with the first element of the array. If that current elemen 4 -function removeEven(arr) { +function removeEven(arr) { -    return arr.filter((v => (v % 2) != 0)) +return arr.filter((v => (v % 2) != 0)) } @@ -284,15 +276,15 @@ The filter function uses lambda or arrow functions, which use shorter, simpler s ### Stack: Check for balanced parentheses using a stack -Problem statement: Implement the `isBalanced()` function to take a string containing only curly `{}`, square `[]`, and round `()` parentheses. The function should tell us if all the parentheses in the string are balanced. This means that every opening parenthesis will have a closing one. For example, `{[]}` is balanced, but `{[}]` is not. +Problem statement: Implement the `isBalanced()` function to take a string containing only curly `{}`, square `[]`, and round `()` parentheses. The function should tell us if all the parentheses in the string are balanced. This means that every opening parenthesis will have a closing one. For example, `{[]}` is balanced, but `{[}]` is not. -Input: A string consisting solely of `(`, `)`, `{`, `}`, `[` and `]` +Input: A string consisting solely of `(`, `)`, `{`, `}`, `[` and `]` ``` -exp = "{[({})]}" +exp = "{[({})]}" ``` -Output: Returns `False` if the expression doesn't have balanced parentheses. If it does, the function returns `True`. +Output: Returns `False` if the expression doesn't have balanced parentheses. If it does, the function returns `True`. ``` True @@ -366,57 +358,57 @@ Stack.js 31 -"use strict"; +"use strict"; -module.exports = class Stack { +module.exports = class Stack { -    constructor() { +constructor() { -        this.items = []; +this.items = []; -        this.top = null; +this.top = null; -    } +} -    getTop() { +getTop() { -        if (this.items.length == 0) +if (this.items.length == 0) -            return null; +return null; -        return this.top; +return this.top; -    } +} -    isEmpty() { +isEmpty() { -        return this.items.length == 0; +return this.items.length == 0; -    } +} -    size() { +size() { -        return this.items.length; +return this.items.length; -    } +} -    push(element) { +push(element) { -        this.items.push(element); +this.items.push(element); -        this.top = element; +this.top = element; -    } +} -    pop() { +pop() { -        if (this.items.length != 0) { +if (this.items.length != 0) { -            if (this.items.length == 1) { +if (this.items.length == 1) { -                this.top = null; +this.top = null; -                return this.items.pop(); +return this.items.pop(); Run @@ -425,22 +417,22 @@ This process will iterate over the string one character at a time. We can determ 1. The stack is empty. 2. The top element in the stack is not the right type. -If either of these conditions is true, we return `False`. If the parenthesis is an opening parenthesis, it is pushed into the stack. If by the end all are balanced, the stack will be empty. If it is not empty, we return `False`. Since we traverse the string exp only once, the time complexity is *O(n)*. +If either of these conditions is true, we return `False`. If the parenthesis is an opening parenthesis, it is pushed into the stack. If by the end all are balanced, the stack will be empty. If it is not empty, we return `False`. Since we traverse the string exp only once, the time complexity is _O(n)_. ### Queue: Generate Binary Numbers from 1 to n -Problem statement: Implement a function `findBin(n)`, which will generate binary numbers from `1` to `n` in the form of a string using a queue. +Problem statement: Implement a function `findBin(n)`, which will generate binary numbers from `1` to `n` in the form of a string using a queue. -Input: A positive integer n +Input: A positive integer n ``` -n = 3 +n = 3 ``` -Output: Returns binary numbers in the form of strings from `1` up to `n` +Output: Returns binary numbers in the form of strings from `1` up to `n` ``` -result = ["1","10","11"] +result = ["1","10","11"] ``` The easiest way to solve this problem is using a queue to generate new numbers from previous numbers. Let's break that down. @@ -511,49 +503,49 @@ Queue.js 31 -"use strict"; +"use strict"; -module.exports = class Queue { +module.exports = class Queue { -    constructor() { +constructor() { -        this.items = []; +this.items = []; -        this.front = null; +this.front = null; -        this.back = null; +this.back = null; -    } +} -    isEmpty() { +isEmpty() { -        return this.items.length == 0; +return this.items.length == 0; -    } +} -    getFront() { +getFront() { -        if (this.items.length != 0) { +if (this.items.length != 0) { -            return this.items[0]; +return this.items[0]; -        } else +} else -            return null; +return null; -    } +} -    size() { +size() { -        return this.items.length; +return this.items.length; -    } +} -    enqueue(element) { +enqueue(element) { -        this.items.push(element); +this.items.push(element); -    } +} Run @@ -564,28 +556,28 @@ The key is to generate consecutive binary numbers by appending 0 and 1 to previo Once we generate a binary number, it is then enqueued to a queue so that new binary numbers can be generated if we append 0 and 1 when that number will be enqueued. -Since a queue follows the *First-In First-Out* property, the enqueued binary numbers are dequeued so that the resulting array is mathematically correct. +Since a queue follows the _First-In First-Out_ property, the enqueued binary numbers are dequeued so that the resulting array is mathematically correct. -Look at the code above. On line 7, `1` is enqueued. To generate the sequence of binary numbers, a number is dequeued and stored in the array `result`. On lines 11-12, we append `0` and `1` to produce the next numbers. +Look at the code above. On line 7, `1` is enqueued. To generate the sequence of binary numbers, a number is dequeued and stored in the array `result`. On lines 11-12, we append `0` and `1` to produce the next numbers. Those new numbers are also enqueued at lines 14-15. The queue will take integer values, so it converts the string to an integer as it is enqueued. -The time complexity of this solution is in *O(n)O(n)* since constant-time operations are executed for n times. +The time complexity of this solution is in _O(n)O(n)_ since constant-time operations are executed for n times. ### Linked List: Reverse a linked list -Problem statement: Write the `reverse` function to take a singly linked list and reverse it in place. +Problem statement: Write the `reverse` function to take a singly linked list and reverse it in place. -Input: a singly linked list +Input: a singly linked list ``` -LinkedList = 0->1->2->3-4 +LinkedList = 0->1->2->3-4 ``` -Output: a reverse linked list +Output: a reverse linked list ``` -LinkedList = 4->3->2->1->0 +LinkedList = 4->3->2->1->0 ``` The easiest way to solve this problem is by using iterative pointer manipulation. Let's take a look. @@ -658,83 +650,83 @@ Node.js 31 -"use strict"; +"use strict"; -const Node = require('./Node.js'); +const Node = require('./Node.js'); -module.exports = class LinkedList { +module.exports = class LinkedList { -  constructor() { +constructor() { -    this.head = null; +this.head = null; -  } +} -  //Insertion At Head   +//Insertion At Head -  insertAtHead(newData) { +insertAtHead(newData) { -    let tempNode = new Node(newData); +let tempNode = new Node(newData); -    tempNode.nextElement = this.head; +tempNode.nextElement = this.head; -    this.head = tempNode; +this.head = tempNode; -    return this; //returning the updated list +return this; //returning the updated list -  } +} -  isEmpty() { +isEmpty() { -    return (this.head == null); +return (this.head == null); -  } +} -  //function to print the linked list +//function to print the linked list -  printList() { +printList() { -    if (this.isEmpty()) { +if (this.isEmpty()) { -      console.log("Empty List"); +console.log("Empty List"); -      return false; +return false; -    } else { +} else { -      let temp = this.head; +let temp = this.head; -      while (temp != null) { +while (temp != null) { -        process.stdout.write(String(temp.data)); +process.stdout.write(String(temp.data)); -        process.stdout.write(" -> "); +process.stdout.write(" -> "); -        temp = temp.nextElement; +temp = temp.nextElement; Run -We use a loop to iterate through the input list. For a `current` node, its link with the `previous` node is reversed. then, `next` stores the next node in the list. Let's break that down by line. +We use a loop to iterate through the input list. For a `current` node, its link with the `previous` node is reversed. then, `next` stores the next node in the list. Let's break that down by line. -- Line 22- Store the `current` node's `nextElement` in `next` -- Line 23 - Set `current` node's `nextElement` to `previous` -- Line 24 - Make the `current` node the new `previous` for the next iteration -- Line 25 - Use `next` to go to the next node -- Line 29 - We reset the `head` pointer to point at the last node +- Line 22- Store the `current` node's `nextElement` in `next` +- Line 23 - Set `current` node's `nextElement` to `previous` +- Line 24 - Make the `current` node the new `previous` for the next iteration +- Line 25 - Use `next` to go to the next node +- Line 29 - We reset the `head` pointer to point at the last node -Since the list is traversed only once, the algorithm runs in *O(n)*. +Since the list is traversed only once, the algorithm runs in _O(n)_. ### Tree: Find the Minimum Value in a Binary Search Tree -Problem statement: Use the `findMin(root)` function to find the minimum value in a Binary Search Tree. +Problem statement: Use the `findMin(root)` function to find the minimum value in a Binary Search Tree. -Input: a root node for a binary search tree +Input: a root node for a binary search tree ``` -bst = {    6 -> 4,9    4 -> 2,5    9 -> 8,12    12 -> 10,14}where parent -> leftChild,rightChild +bst = { 6 -> 4,9 4 -> 2,5 9 -> 8,12 12 -> 10,14}where parent -> leftChild,rightChild ``` -Output: the smallest integer value from that binary search tree +Output: the smallest integer value from that binary search tree ``` 2 @@ -742,9 +734,9 @@ Output: the smallest integer value from that binary search tree Let's look at an easy solution for this problem. -#### Solution: Iterative `findMin( )` +#### Solution: Iterative `findMin( )` -This solution begins by checking if the root is `null`. It returns `null` if so. It then moves to the left subtree and continues with each node's left child until the left-most child is reached. +This solution begins by checking if the root is `null`. It returns `null` if so. It then moves to the left subtree and continues with each node's left child until the left-most child is reached. index.js @@ -814,67 +806,67 @@ Node.js 31 -"use strict"; +"use strict"; -const Node = require('./Node.js'); +const Node = require('./Node.js'); -module.exports = class BinarySearchTree { +module.exports = class BinarySearchTree { -    constructor(rootValue) { +constructor(rootValue) { -        this.root = new Node(rootValue); +this.root = new Node(rootValue); -    } +} -    insert(currentNode, newValue) { +insert(currentNode, newValue) { -        if (currentNode === null) { +if (currentNode === null) { -            currentNode = new Node(newValue); +currentNode = new Node(newValue); -        } else if (newValue < currentNode.val) { +} else if (newValue < currentNode.val) { -            currentNode.leftChild = this.insert(currentNode.leftChild, newValue); +currentNode.leftChild = this.insert(currentNode.leftChild, newValue); -        } else { +} else { -            currentNode.rightChild = this.insert(currentNode.rightChild, newValue); +currentNode.rightChild = this.insert(currentNode.rightChild, newValue); -        } +} -        return currentNode; +return currentNode; -    } +} -    insertBST(newValue) { +insertBST(newValue) { -        if(this.root==null){ +if(this.root==null){ -            this.root=new Node(newValue); +this.root=new Node(newValue); -            return; +return; -        } +} -        this.insert(this.root, newValue); +this.insert(this.root, newValue); -    } +} -    preOrderPrint(currentNode) { +preOrderPrint(currentNode) { -        if (currentNode !== null) { +if (currentNode !== null) { -            console.log(currentNode.val); +console.log(currentNode.val); -            this.preOrderPrint(currentNode.leftChild); +this.preOrderPrint(currentNode.leftChild); Run ### Graph: Remove Edge -Problem statement: Implement the removeEdge function to take a source and a destination as arguments. It should detect if an edge exists between them. +Problem statement: Implement the removeEdge function to take a source and a destination as arguments. It should detect if an edge exists between them. -Input: A graph, a source, and a destination +Input: A graph, a source, and a destination ![](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjA4MCIgaGVpZ2h0PSIyOTEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg==) @@ -882,10 +874,10 @@ Input: A graph, a source, and a destination ![widget](https://www.educative.io/cdn-cgi/image/f=auto,fit=contain,w=300,q=10/api/page/6094484883374080/image/download/6576135669284864) -Output: A graph with the edge between the source and the destination removed. +Output: A graph with the edge between the source and the destination removed. ``` -removeEdge(graph, 2, 3) +removeEdge(graph, 2, 3) ``` ![](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjA5MCIgaGVpZ2h0PSIyOTIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg==) @@ -966,70 +958,70 @@ Node.js 31 -"use strict"; +"use strict"; -const LinkedList = require('./LinkedList.js'); +const LinkedList = require('./LinkedList.js'); -const Node = require('./Node.js'); +const Node = require('./Node.js'); -module.exports = class Graph { +module.exports = class Graph { -  constructor(vertices) { +constructor(vertices) { -    this.vertices = vertices; +this.vertices = vertices; -    this.list = []; +this.list = []; -    var it; +var it; -    for (it = 0; it < vertices; it++) { +for (it = 0; it < vertices; it++) { -      let temp = new LinkedList(); +let temp = new LinkedList(); -      this.list.push(temp); +this.list.push(temp); -    } +} -  } +} -  addEdge(source, destination) { +addEdge(source, destination) { -    if (source < this.vertices && destination < this.vertices) +if (source < this.vertices && destination < this.vertices) -    this.list[source].insertAtHead(destination); +this.list[source].insertAtHead(destination); -    return this; +return this; -  } +} -  printGraph() { +printGraph() { -    console.log(">>Adjacency List of Directed Graph<<"); +console.log(">>Adjacency List of Directed Graph<<"); -    var i; +var i; -    for (i = 0; i < this.list.length; i++) { +for (i = 0; i < this.list.length; i++) { -      process.stdout.write("|" + String(i) + "| => "); +process.stdout.write("|" + String(i) + "| => "); Run -Since our vertices are stored in an array, we can access the `source` linked list. We then call the `delete` function for linked lists. The time complexity for this solution is O(E) since we may have to traverse E edges. +Since our vertices are stored in an array, we can access the `source` linked list. We then call the `delete` function for linked lists. The time complexity for this solution is O(E) since we may have to traverse E edges. ### Hash Table: Convert Max-Heap to Min-Heap -Problem statement: Implement the function `convertMax(maxHeap)` to convert a binary max-heap into a binary min-heap. `maxHeap` should be an array in the `maxHeap` format, i.e the parent is greater than its children. +Problem statement: Implement the function `convertMax(maxHeap)` to convert a binary max-heap into a binary min-heap. `maxHeap` should be an array in the `maxHeap` format, i.e the parent is greater than its children. -Input: a Max-Heap +Input: a Max-Heap ``` -maxHeap = [9,4,7,1,-2,6,5] +maxHeap = [9,4,7,1,-2,6,5] ``` -Output: returns the converted array +Output: returns the converted array ``` -result = [-2,1,5,9,4,6,7] +result = [-2,1,5,9,4,6,7] ``` To solve this problem, we must min heapify all parent nodes. Take a look. @@ -1088,54 +1080,54 @@ To solve this problem, we must min heapify all parent nodes. Take a look. 27 -function minHeapify(heap, index) { +function minHeapify(heap, index) { -    var left = index * 2; +var left = index \* 2; -    var right = (index * 2) + 1; +var right = (index \* 2) + 1; -    var smallest = index; +var smallest = index; -    if ((heap.length > left) && (heap[smallest] > heap[left])) { +if ((heap.length > left) && (heap[smallest] > heap[left])) { -        smallest = left +smallest = left -    } +} -    if ((heap.length > right) && (heap[smallest] > heap[right])) +if ((heap.length > right) && (heap[smallest] > heap[right])) -        smallest = right +smallest = right -    if (smallest != index) { +if (smallest != index) { -        var tmp = heap[smallest] +var tmp = heap[smallest] -        heap[smallest] = heap[index] +heap[smallest] = heap[index] -        heap[index] = tmp +heap[index] = tmp -        minHeapify(heap, smallest) +minHeapify(heap, smallest) -    } +} -    return heap; +return heap; } -function convertMax(maxHeap) { +function convertMax(maxHeap) { -    for (var i = Math.floor((maxHeap.length) / 2); i > -1; i--) +for (var i = Math.floor((maxHeap.length) / 2); i > -1; i--) -        maxHeap = minHeapify(maxHeap, i) +maxHeap = minHeapify(maxHeap, i) -    return maxHeap +return maxHeap } -var maxHeap = [9,4,7,1,-2,6,5] +var maxHeap = [9,4,7,1,-2,6,5] console.log(convertMax(maxHeap)) Run -We consider `maxHeap` to be a regular array and reorder it to accurately represent a min-heap. You can see this done in the code above. The `convertMax()` function then restores the heap property on all nodes from the lowest parent node by calling the `minHeapify()` function. In regards to time complexity, this solution takes *O(nlog(n))O(nlog(n))* time. \ No newline at end of file +We consider `maxHeap` to be a regular array and reorder it to accurately represent a min-heap. You can see this done in the code above. The `convertMax()` function then restores the heap property on all nodes from the lowest parent node by calling the `minHeapify()` function. In regards to time complexity, this solution takes _O(nlog(n))O(nlog(n))_ time. diff --git a/notes/BGOONZ_BLOG_2.0.wiki/Home.md b/notes/BGOONZ_BLOG_2.0.wiki/Home.md index f2a9fce832..bad063124d 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/Home.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/Home.md @@ -1,26 +1,17 @@ # BRYAN GUNER BLOG & DOCUMENTATION SITE -### Web3 Storage API Token - -> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkaWQ6ZXRocjoweGM4MmYyNzQ3QTVGQWViNUM2ODlGOEM4MjM2OTgwNUMyMEEyMUFDQkIiLCJpc3MiOiJ3ZWIzLXN0b3JhZ2UiLCJpYXQiOjE2NDI0MjE0ODEwNTEsIm5hbWUiOiJibG9nLXN0b3JhZ2UifQ.c8LgkjRPYeAfs9plmncR0v6AlBdA-NoYbcuifcCEdiE - ---
        ->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 +> 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 # Notion Page: [notion](https://www.notion.so/webdevhub42/Bgoonz-Blog-2-0-a82c419db97b4224bb1e4fdec981cbfb) - ##### [WEBSITE](https://bgoonz-blog.netlify.app/) ~~~ [Vercel Backup](https://bgoonz-blog-2-0-iuovoktmh-bgoonz.vercel.app/) ~~~ [Digital Ocean Backup](https://bgoonz-blog-2-0-gfvz5.ondigitalocean.app/) ~~~ [Gatsby Cloud Deploy](https://bgoonzblog20master.gatsbyjs.io/) - -
        - - - [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) - [add copy to code blocks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/add-copy-to-code-blocks.md) @@ -131,15 +122,12 @@ - [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) -[](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/_Sidebar/_edit "Edit sidebar") +[](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/_Sidebar/_edit 'Edit sidebar') -Sitemap: -======== +# Sitemap: ![blog](https://github.com/bgoonz/BGOONZ_BLOG_2.0/raw/master/static/images/blog-img.png) - - ## Docs Structure: ``` diff --git a/notes/BGOONZ_BLOG_2.0.wiki/Netlify-Injected-Content.md b/notes/BGOONZ_BLOG_2.0.wiki/Netlify-Injected-Content.md index 456dc9a8d1..d73f43e7c4 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/Netlify-Injected-Content.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/Netlify-Injected-Content.md @@ -1,7139 +1,7138 @@ ```html - - - - - - - - - - - - - - - - Web-Dev-Hub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + Web-Dev-Hub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - ``` @@ -7142,4 +7141,6 @@ ="prefetch" href="/page-data/lorem-ipsum/page-data.json" crossorigin="anonymous" as="fetch"> -``` \ No newline at end of file +``` + +``` diff --git a/notes/BGOONZ_BLOG_2.0.wiki/SEO.md.md b/notes/BGOONZ_BLOG_2.0.wiki/SEO.md.md index c96368db92..75e588d870 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/SEO.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/SEO.md.md @@ -1,26 +1,26 @@ # SEO Report for [https://bgoonz-blog.netlify.app/](https://bgoonz-blog.netlify.app/) - ### But first: + ##### Seo Resources: -[![](https://www.google.com/s2/favicons?domain=https://search.google.com/test/mobile-friendly)](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Is your page is **Mobile Friendly ?**](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) +[![](https://www.google.com/s2/favicons?domain=https://search.google.com/test/mobile-friendly)](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Is your page is **Mobile Friendly ?**](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) -[![](https://www.google.com/s2/favicons?domain=http://gtmetrix.com/)](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/)[Analyze **Performance** with **GTmetrix**](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/) +[![](https://www.google.com/s2/favicons?domain=http://gtmetrix.com/)](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/)[Analyze **Performance** with **GTmetrix**](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=http://developers.google.com)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Analyze **Performance** with **PageSpeed** (Google tool)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) +[![](https://www.google.com/s2/favicons?domain=http://developers.google.com)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Analyze **Performance** with **PageSpeed** (Google tool)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) -[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/w3c-ico.png)](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/)[Validate **HTML, XHTML,...**](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/) +[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/w3c-ico.png)](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/)[Validate **HTML, XHTML,...**](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=http://jigsaw.w3.org)](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/)[Validate **CSS**](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/) +[![](https://www.google.com/s2/favicons?domain=http://jigsaw.w3.org)](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/)[Validate **CSS**](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=https://www.facebook.com/)](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Check **Open Graph** properties with **Facebook** Sharing Debugger](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) +[![](https://www.google.com/s2/favicons?domain=https://www.facebook.com/)](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Check **Open Graph** properties with **Facebook** Sharing Debugger](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) -[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/seo-wmtips.png)](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/)[Analyze **Keyword density** with WMtips](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/) +[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/seo-wmtips.png)](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/)[Analyze **Keyword density** with WMtips](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=https://www.google.be/)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Check **Microdata, Microformats** and **RDFa**](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) +[![](https://www.google.com/s2/favicons?domain=https://www.google.be/)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Check **Microdata, Microformats** and **RDFa**](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) -* * * * * +--- SEO @@ -50,7 +50,7 @@ Security/Malware [![](https://www.google.com/s2/favicons?domain=http://www.google.com/)](http://www.google.com/safebrowsing/diagnostic?site=bgoonz-blog.netlify.app)[Safe Browsing (Google)](http://www.google.com/safebrowsing/diagnostic?site=bgoonz-blog.netlify.app) -* * * * * +--- Other (whois,...) @@ -73,344 +73,332 @@ Other (whois,...) [![](https://www.google.com/s2/favicons?domain=https://www.quantcast.com)](https://www.quantcast.com/bgoonz-blog.netlify.app)[quantcast.com](https://www.quantcast.com/bgoonz-blog.netlify.app) --- ---- ---- ---- - - - +--- +--- +--- -Title ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +Title ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 11 characters Web-Dev-Hub -Description ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +Description ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 155 characters bigO, Python, Javascript, Audio, Processing, Learning, Blog, React, PostgreSQL, Scope, Closure, Web Development, Embed, API, Website, Design, Music, Search -Keywords ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +Keywords ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 3 values HTML, Meta Tags, Metadata -URL ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +URL ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) https://bgoonz-blog.netlify.app/ -Canonical ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Canonical ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Canonical URL is not defined. -Robots Tag ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Robots Tag ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Robots meta tag is not defined. -Author ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Author ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Bryan Guner -Publisher ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Publisher ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Publisher is missing. -Lang ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Lang ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Lang attribut of HTML element is missing. -| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Images ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Links ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | -| --- | --- | --- | --- | --- | --- | --- | --- | -| 3 | 10 | 29 | 1 | 0 | 1 | 26 | 137 | +| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Images ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Links ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | +| --- | --- | --- | --- | --- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| 3 | 10 | 29 | 1 | 0 | 1 | 26 | 137 | -![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/ga-icon-na.png) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/ga-icon-na.png) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) -[Robots.txt](https://bgoonz-blog.netlify.app/robots.txt) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | [Sitemap.xml](https://bgoonz-blog.netlify.app/sitemap.xml) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +[Robots.txt](https://bgoonz-blog.netlify.app/robots.txt) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | [Sitemap.xml](https://bgoonz-blog.netlify.app/sitemap.xml) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) -* * * * * +--- ALL LINKS\ -APPLE-TOUCH-ICON : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png "apple-touch-icon")\ -APPLE-TOUCH-ICON : [logo-canvas.png](https://instructure-uploads-pdx.s3.us-west-2.amazonaws.com/account_168550000000000001/attachments/537/logo-canvas.png "apple-touch-icon")\ -ICON : [webdevhublogo2.PNG](https://bgoonz-blog.netlify.app/images/webdevhublogo2.PNG "icon")\ -PRECONNECT : https://fonts.gstatic.com\ -PREFETCH : component---src-templates-advanced-js-c66268766ef5c957450f.js\ -PREFETCH : component---src-templates-blog-js-36eb4fae1add87ca6010.js\ -PREFETCH : component---src-templates-docs-js-bf431cbe6f6b991ffc34.js\ -PREFETCH : component---src-templates-post-js-d6ee8a7502d16baf00c6.js\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PRELOAD : 29107295-519d329e2c1acb586ba7.js\ -PRELOAD : app-a18a86fe88835f322f3c.js\ -PRELOAD : app-data.json\ -PRELOAD : commons-d40de8dfcbb72ad3503c.js\ -PRELOAD : component---src-templates-advanced-js-c66268766ef5c957450f.js\ -PRELOAD : framework-ee588a66ec21b993116b.js\ -PRELOAD : integrator.js\ -PRELOAD : page-data.json\ -PRELOAD : styles-7d4153d260c0197f0043.js\ -PRELOAD : webpack-runtime-7059fe0afa2407e27b1a.js\ -SHORTCUT ICON : [favicon.ico](https://bgoonz-blog.netlify.app/favicon.ico "shortcut icon")\ -STYLESHEET : [default.min.css](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/styles/default.min.css)\ -STYLESHEET : [algoliasearchNetlify.css](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.css)\ -STYLESHEET : [bootstrap.min.css](https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css)\ -STYLESHEET : \ -STYLESHEET : [css](https://fonts.googleapis.com/css?family=Raleway:200,100,400) - -* * * * * +APPLE-TOUCH-ICON : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png 'apple-touch-icon')\ +APPLE-TOUCH-ICON : [logo-canvas.png](https://instructure-uploads-pdx.s3.us-west-2.amazonaws.com/account_168550000000000001/attachments/537/logo-canvas.png 'apple-touch-icon')\ +ICON : [webdevhublogo2.PNG](https://bgoonz-blog.netlify.app/images/webdevhublogo2.PNG 'icon')\ +PRECONNECT : https://fonts.gstatic.com\ +PREFETCH : component---src-templates-advanced-js-c66268766ef5c957450f.js\ +PREFETCH : component---src-templates-blog-js-36eb4fae1add87ca6010.js\ +PREFETCH : component---src-templates-docs-js-bf431cbe6f6b991ffc34.js\ +PREFETCH : component---src-templates-post-js-d6ee8a7502d16baf00c6.js\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PRELOAD : 29107295-519d329e2c1acb586ba7.js\ +PRELOAD : app-a18a86fe88835f322f3c.js\ +PRELOAD : app-data.json\ +PRELOAD : commons-d40de8dfcbb72ad3503c.js\ +PRELOAD : component---src-templates-advanced-js-c66268766ef5c957450f.js\ +PRELOAD : framework-ee588a66ec21b993116b.js\ +PRELOAD : integrator.js\ +PRELOAD : page-data.json\ +PRELOAD : styles-7d4153d260c0197f0043.js\ +PRELOAD : webpack-runtime-7059fe0afa2407e27b1a.js\ +SHORTCUT ICON : [favicon.ico](https://bgoonz-blog.netlify.app/favicon.ico 'shortcut icon')\ +STYLESHEET : [default.min.css](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/styles/default.min.css)\ +STYLESHEET : [algoliasearchNetlify.css](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.css)\ +STYLESHEET : [bootstrap.min.css](https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css)\ +STYLESHEET : \ +STYLESHEET : [css](https://fonts.googleapis.com/css?family=Raleway:200,100,400) + +--- ALL METAS\ -AUTHOR : Bryan Guner\ -CHARSET : UTF-8\ -CHARSET : UTF-8\ -CHARSET : utf-8\ -GENERATOR : Gatsby 2.32.8\ -GOOGLE-SITE-VERIFICATION : W6SJ3S45yhnjzV6ISUMCTXl_QVX5woQZ7jO3bsahONQ\ -GOOGLE-SITE-VERIFICATION : q5W83EYchlVTyA-iYRE4ElQGcbD_vukQF0NKW12N3qU\ -HTTP-EQUIV (CONTENT-TYPE) : HTML\ -HTTP-EQUIV (CONTENT-TYPE) : text/html; charset=us-ascii\ -HTTP-EQUIV (X-UA-COMPATIBLE) : IE=edge\ -HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ -HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ -HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ -HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ -OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ -OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png "code.png")\ -OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png "code.png")\ -OG:IMAGE : [DROicc16](https://mugshotbot.com/m/DROicc16 "DROicc16")\ -OG:TITLE : Web-Dev-Hub\ -OG:TITLE : Web-Dev-Hub\ -OG:TYPE : website\ -OG:TYPE : website\ -OG:URL : \ -TWITTER:CARD : summary\ -TWITTER:CARD : summary_large_image\ -TWITTER:CARD : summary_large_image\ -TWITTER:CARD : summary_large_image\ -TWITTER:CREATOR : @bgoonz\ -TWITTER:DESCRIPTION : The new home of my blog resource sharing website.\ -TWITTER:DESCRIPTION : Web-Dev-Hub\ -TWITTER:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ -TWITTER:DOMAIN : bgoonz-blog.netlify.app\ -TWITTER:IMAGE : [4.jpg](https://bgoonz-blog.netlify.app/images/4.jpg "4.jpg")\ -TWITTER:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png "code.png")\ -TWITTER:IMAGE:SRC : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png "logo-circle.png")\ -TWITTER:SITE : @bgoonz\ -TWITTER:TITLE : Web Development Resource Hub Bryan Guner\ -TWITTER:TITLE : Web-Dev-Hub\ -TWITTER:TITLE : Web-Dev-Hub\ -TWITTER:URL : \ -VIEWPORT : width=device-width, initial-scale=1.0, shrink-to-fit=no\ -VIEWPORT : width=device-width, initial-scale=1.0\ -VIEWPORT : width=device-width, initial-scale=1\ -VIEWPORT : width=device-width, initialScale=1.0 - -* * * * * +AUTHOR : Bryan Guner\ +CHARSET : UTF-8\ +CHARSET : UTF-8\ +CHARSET : utf-8\ +GENERATOR : Gatsby 2.32.8\ +GOOGLE-SITE-VERIFICATION : W6SJ3S45yhnjzV6ISUMCTXl_QVX5woQZ7jO3bsahONQ\ +GOOGLE-SITE-VERIFICATION : q5W83EYchlVTyA-iYRE4ElQGcbD_vukQF0NKW12N3qU\ +HTTP-EQUIV (CONTENT-TYPE) : HTML\ +HTTP-EQUIV (CONTENT-TYPE) : text/html; charset=us-ascii\ +HTTP-EQUIV (X-UA-COMPATIBLE) : IE=edge\ +HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ +HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ +HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ +HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ +OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ +OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ +OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ +OG:IMAGE : [DROicc16](https://mugshotbot.com/m/DROicc16 'DROicc16')\ +OG:TITLE : Web-Dev-Hub\ +OG:TITLE : Web-Dev-Hub\ +OG:TYPE : website\ +OG:TYPE : website\ +OG:URL : \ +TWITTER:CARD : summary\ +TWITTER:CARD : summary_large_image\ +TWITTER:CARD : summary_large_image\ +TWITTER:CARD : summary_large_image\ +TWITTER:CREATOR : @bgoonz\ +TWITTER:DESCRIPTION : The new home of my blog resource sharing website.\ +TWITTER:DESCRIPTION : Web-Dev-Hub\ +TWITTER:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ +TWITTER:DOMAIN : bgoonz-blog.netlify.app\ +TWITTER:IMAGE : [4.jpg](https://bgoonz-blog.netlify.app/images/4.jpg '4.jpg')\ +TWITTER:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ +TWITTER:IMAGE:SRC : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png 'logo-circle.png')\ +TWITTER:SITE : @bgoonz\ +TWITTER:TITLE : Web Development Resource Hub Bryan Guner\ +TWITTER:TITLE : Web-Dev-Hub\ +TWITTER:TITLE : Web-Dev-Hub\ +TWITTER:URL : \ +VIEWPORT : width=device-width, initial-scale=1.0, shrink-to-fit=no\ +VIEWPORT : width=device-width, initial-scale=1.0\ +VIEWPORT : width=device-width, initial-scale=1\ +VIEWPORT : width=device-width, initialScale=1.0 + +--- ALL SCRIPTS\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js) jquery.min.js](https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js) firebase-analytics.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js) firebase-app.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/init.js) init.js](https://bgoonz-blog.netlify.app/__/firebase/init.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js) highlight.min.js](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715) sdk.js](https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js) show_ads_impl_fy2019.js](https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116) cookie.js](https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1) js](https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app) integrator.js](https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js) algoliasearchNetlify.js](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.livechatinc.com/tracking.js) tracking.js](https://cdn.livechatinc.com/tracking.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/main-20210906133224.js) main-20210906133224.js](https://rec.smartlook.com/main-20210906133224.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/recorder.js) recorder.js](https://rec.smartlook.com/recorder.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.google-analytics.com/analytics.js) analytics.js](https://www.google-analytics.com/analytics.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.smartsuppchat.com/loader.js?) loader.js](https://www.smartsuppchat.com/loader.js?) - -* * * * * - -XFN / Rel attr. (Xhtml Friends Network)  ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ -NOFOLLOW: [byfreefind](https://www.freefind.com/)\ -NOFOLLOW: [search engine](https://www.freefind.com/)\ -NOOPENER : [dev.to](https://dev.to/bgoonz)\ -NOOPENER : [Instagram](https://www.instagram.com/bgoonz/?hl=en)\ -NOOPENER : [Youtube](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA)\ -NOOPENER : [GitHub](https://github.com/bgoonz)\ -NOOPENER : [LinkedIn](https://www.linkedin.com/in/bryan-guner-046199128/)\ -NOOPENER : [Twitter](https://twitter.com/bgooonz)\ -NOOPENER : [BLM](https://optimistic-lewin-8586ae.netlify.app/blm.zip)\ -NOOPENER : [Medium](https://bryanguner.medium.com/)\ -NOOPENER : [Go To Web Audio Daw](https://mihirbegmusiclab.netlify.app/)\ -NOOPENER : [Contact](https://sidebar-blog.netlify.app/contact/)\ -NOOPENER : [Github-Advanced-Search](https://github.com/search/advanced)\ -NOOPENER : [PotluckPlanner](https://potluck-landing.netlify.app/)\ -NOOPENER : [Setup Checker](https://github.com/bgoonz/web-dev-setup-checker)\ -NOOPENER : [Job Search Resources](https://determined-dijkstra-ee7390.netlify.app/)\ -NOOPENER : [Ternary 2 If Else](https://ternary42.netlify.app/)\ -NOOPENER : [Text Tools](https://devtools42.netlify.app/)\ -NOOPENER : [Github HTML Previewer](https://githtmlpreview.netlify.app/)\ -NOOPENER : [Wordpress Blog](https://web-dev-hub.com/)\ -NOOPENER : [Blog Backup](https://bgoonz-blog-v3-0.netlify.app/)\ -NOOPENER : [Condensed -Portfolio](https://bg-portfolio.netlify.app/)\ -NOOPENER : [SearchAwesome](https://bgoonz.github.io/searchAwesome/)\ -NOOPENER : [WebAudioLab](https://panoramic-eggplant-452e4.netlify.app/)\ -NOOPENER : [Meditation App](https://meditate42app.netlify.app/)\ -NOOPENER : [Potluck Planner](https://potluck-landing.netlify.app/)\ -NOOPENER : [Projects](https://project-portfolio42.netlify.app/)\ -NOOPENER : [OG-Blog](https://web-dev-resource-hub.netlify.app/)\ -NOOPENER : [Resource-Archive-Server](https://github.com/bgoonz/Learning-Assets)\ -NOOPENER : [Archive](https://github.com/bgoonz/UsefulResourceRepo2.0)\ -NOOPENER : [nodejs](https://bgoonz-blog.netlify.app/docs/articles/nodejs/)\ -NOOPENER : [platform docs](https://bgoonz-blog.netlify.app/blog/platform-docs/)\ -NOOPENER : [ds-algo](https://bgoonz-blog.netlify.app/docs/articles/ds-algo-overview/)\ -NOOPENER : [Blog-Post-Archive](https://bgoonz.blogspot.com/)\ -NOOPENER : [Blog](https://bgoonz-blog.netlify.app/blog/)\ -NOOPENER : [Python](https://bgoonz-blog.netlify.app/docs/python/python-ds) +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js) jquery.min.js](https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js) firebase-analytics.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js) firebase-app.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/init.js) init.js](https://bgoonz-blog.netlify.app/__/firebase/init.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js) highlight.min.js](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715) sdk.js](https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js) show_ads_impl_fy2019.js](https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116) cookie.js](https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1) js](https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app) integrator.js](https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js) algoliasearchNetlify.js](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.livechatinc.com/tracking.js) tracking.js](https://cdn.livechatinc.com/tracking.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/main-20210906133224.js) main-20210906133224.js](https://rec.smartlook.com/main-20210906133224.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/recorder.js) recorder.js](https://rec.smartlook.com/recorder.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.google-analytics.com/analytics.js) analytics.js](https://www.google-analytics.com/analytics.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.smartsuppchat.com/loader.js?) loader.js](https://www.smartsuppchat.com/loader.js?) +--- +XFN / Rel attr. (Xhtml Friends Network) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +NOFOLLOW: [byfreefind](https://www.freefind.com/)\ +NOFOLLOW: [search engine](https://www.freefind.com/)\ +NOOPENER : [dev.to](https://dev.to/bgoonz)\ +NOOPENER : [Instagram](https://www.instagram.com/bgoonz/?hl=en)\ +NOOPENER : [Youtube](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA)\ +NOOPENER : [GitHub](https://github.com/bgoonz)\ +NOOPENER : [LinkedIn](https://www.linkedin.com/in/bryan-guner-046199128/)\ +NOOPENER : [Twitter](https://twitter.com/bgooonz)\ +NOOPENER : [BLM](https://optimistic-lewin-8586ae.netlify.app/blm.zip)\ +NOOPENER : [Medium](https://bryanguner.medium.com/)\ +NOOPENER : [Go To Web Audio Daw](https://mihirbegmusiclab.netlify.app/)\ +NOOPENER : [Contact](https://sidebar-blog.netlify.app/contact/)\ +NOOPENER : [Github-Advanced-Search](https://github.com/search/advanced)\ +NOOPENER : [PotluckPlanner](https://potluck-landing.netlify.app/)\ +NOOPENER : [Setup Checker](https://github.com/bgoonz/web-dev-setup-checker)\ +NOOPENER : [Job Search Resources](https://determined-dijkstra-ee7390.netlify.app/)\ +NOOPENER : [Ternary 2 If Else](https://ternary42.netlify.app/)\ +NOOPENER : [Text Tools](https://devtools42.netlify.app/)\ +NOOPENER : [Github HTML Previewer](https://githtmlpreview.netlify.app/)\ +NOOPENER : [Wordpress Blog](https://web-dev-hub.com/)\ +NOOPENER : [Blog Backup](https://bgoonz-blog-v3-0.netlify.app/)\ +NOOPENER : [Condensed -Portfolio](https://bg-portfolio.netlify.app/)\ +NOOPENER : [SearchAwesome](https://bgoonz.github.io/searchAwesome/)\ +NOOPENER : [WebAudioLab](https://panoramic-eggplant-452e4.netlify.app/)\ +NOOPENER : [Meditation App](https://meditate42app.netlify.app/)\ +NOOPENER : [Potluck Planner](https://potluck-landing.netlify.app/)\ +NOOPENER : [Projects](https://project-portfolio42.netlify.app/)\ +NOOPENER : [OG-Blog](https://web-dev-resource-hub.netlify.app/)\ +NOOPENER : [Resource-Archive-Server](https://github.com/bgoonz/Learning-Assets)\ +NOOPENER : [Archive](https://github.com/bgoonz/UsefulResourceRepo2.0)\ +NOOPENER : [nodejs](https://bgoonz-blog.netlify.app/docs/articles/nodejs/)\ +NOOPENER : [platform docs](https://bgoonz-blog.netlify.app/blog/platform-docs/)\ +NOOPENER : [ds-algo](https://bgoonz-blog.netlify.app/docs/articles/ds-algo-overview/)\ +NOOPENER : [Blog-Post-Archive](https://bgoonz.blogspot.com/)\ +NOOPENER : [Blog](https://bgoonz-blog.netlify.app/blog/)\ +NOOPENER : [Python](https://bgoonz-blog.netlify.app/docs/python/python-ds) HTML. -* * * * * +--- -**

        ** I am a musician, electrical engineer & web developer +**

        ** I am a musician, electrical engineer & web developer -**

        ** A passionate student of web development from New Jersey U.S.A +**
        ** A passionate student of web development from New Jersey U.S.A -**

        ** A Quick Guide To Big O +**

        ** A Quick Guide To Big O -**

        ** Python Guide +**

        ** Python Guide -**

        ** Guitar Effects Triggering w DTW +**

        ** Guitar Effects Triggering w DTW -**

        ** Beginner Guide React +**

        ** Beginner Guide React -**

        ** Scope & Closure +**

        ** Scope & Closure -**

        ** My Medium Blog +**

        ** My Medium Blog -**

        ** Current Interests +**

        ** Current Interests -**

        ** Angolia +**

        ** Angolia -**

        ** Full Text Search +**

        ** Full Text Search **

        ** -**

        ** Convolutional Neural Networks - -**

        ** Jamstack - -**

        ** Why Jamstack - -**

        ** Asynchronous JavaScript - -**

        ** NJ Devils - -**

        ** New Jersey Devils Hockey Team +**

        ** Convolutional Neural Networks -**

        ** (Hockey in general) +**

        ** Jamstack -**

        ** Team identity +**

        ** Why Jamstack -**

        ** ITER Fusion Reactor Experiment (Southern France) +**

        ** Asynchronous JavaScript -**

        ** Break Even Nuclear Fusion Candidate +**

        ** NJ Devils -**

        ** Resume & Portfolio +**

        ** New Jersey Devils Hockey Team -**

        ** Resume +**

        ** (Hockey in general) -**

        ** Showcase +**

        ** Team identity -**

        ** Blog-Archive-And-Mini-Projects +**

        ** ITER Fusion Reactor Experiment (Southern France) -**

        ** Web Audio DAW +**

        ** Break Even Nuclear Fusion Candidate -**

        ** Quick Links +**

        ** Resume & Portfolio -**

        ** About +**

        ** Resume -**

        ** Articles +**

        ** Showcase -**

        ** Audio +**

        ** Blog-Archive-And-Mini-Projects -**

        ** Community +**

        ** Web Audio DAW -**

        ** Content +**

        ** Quick Links -**

        ** Documentation +**

        ** About -**

        ** FAQ +**

        ** Articles -**

        ** Javascript +**

        ** Audio -**

        ** Interactive Examples +**

        ** Community -**

        ** Medium +**

        ** Content -**

        ** Quick Reference +**

        ** Documentation -**

        ** React +**

        ** FAQ -**

        ** Tools +**

        ** Javascript -**

        ** My Python Docs +**

        ** Interactive Examples -**

        ** Contact +**

        ** Medium -**

        ** Current local time inNew York City, United States - -* * * * * - -| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | -| --- | --- | --- | --- | --- | --- | -| 3 | 10 | 29 | 1 | 0 | 1 | +**

        ** Quick Reference +**

        ** React +**

        ** Tools +**

        ** My Python Docs +**

        ** Contact +**

        ** Current local time inNew York City, United States +--- +| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | +| --- | --- | --- | --- | --- | ------------------------------------------------------------------------------- | +| 3 | 10 | 29 | 1 | 0 | 1 | -IMAGES ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +IMAGES ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 26 without ALT\ @@ -419,7 +407,7 @@ without ALT\ without TITLE\ 26 -* * * * * +--- Analyze and optimize your images with @@ -428,114 +416,110 @@ Analyze and optimize your images with Images to complete | [logo-circle.png](https://d33wubrfki0l68.cloudfront.net/71199c39f8515c2ec6a7db98b837a0f39887ecc3/5558d/images/logo-circle.png)\ -ALT: webdevhub logo\ -Title: /\ +ALT: webdevhub logo\ +Title: /\ | | [gmail.png](https://img.icons8.com/color/96/000000/gmail.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [youtube.png](https://img.icons8.com/color/96/000000/youtube.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [instagram-new.png](https://img.icons8.com/color/96/000000/instagram-new.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [medium-logo.png](https://img.icons8.com/color/96/000000/medium-logo.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [deploy-status](https://api.netlify.com/api/v1/badges/a1b7ee1a-11a7-4bd2-a341-2260656e216f/deploy-status)\ -ALT: Netlify Status\ -Title: /\ +ALT: Netlify Status\ +Title: /\ | | [graph](https://activity-graph.herokuapp.com/graph?username=bgoonz&custom_title=This%20is%20Bryans%20Activity&hide_border=true&theme=chartreuse-dark)\ -ALT: Bryans github activity graph\ -Title: /\ +ALT: Bryans github activity graph\ +Title: /\ | | [my-back.png](https://d33wubrfki0l68.cloudfront.net/5526a12bf60878b9f11c4907281345111ecb1b23/e8d70/images/my-back.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [smiling-maple.png](https://d33wubrfki0l68.cloudfront.net/b7d9a8db0d3618dc455abcd5a1eba992281ab78a/2f5a7/images/smiling-maple.png)\ -ALT: python\ -Title: /\ +ALT: python\ +Title: /\ | | [panoramic-owl.png](https://d33wubrfki0l68.cloudfront.net/0632d060c928c60c91038c13991f85f0928bd723/edbf6/images/panoramic-owl.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [successful-panda.gif](https://d33wubrfki0l68.cloudfront.net/a37b8bc089cdd775711785baf935f9b1c4e732b0/0b88f/images/successful-panda.gif)\ -ALT: img of dtw\ -Title: /\ +ALT: img of dtw\ +Title: /\ | | [pleasant-birch.png](https://d33wubrfki0l68.cloudfront.net/f318a0bdc5403fb9b59683b46e3c9ec2d75d2ed2/7de75/images/pleasant-birch.png)\ -ALT: img of react\ -Title: /\ +ALT: img of react\ +Title: /\ | | [curious-mustard.png](https://d33wubrfki0l68.cloudfront.net/b24a47b5d40d76579313869a8108fceea115f892/df3e5/images/curious-mustard.png)\ -ALT: Every idea needs a medium\ -Title: /\ +ALT: Every idea needs a medium\ +Title: /\ | | [spectacular-turmeric.png](https://d33wubrfki0l68.cloudfront.net/beba3d8052852cedc7fd41d9d05b4dffd4ea1136/d32f7/images/spectacular-turmeric.png)\ -ALT: angolia\ -Title: /\ +ALT: angolia\ +Title: /\ | | [neural.png](https://d33wubrfki0l68.cloudfront.net/589475503098710e5f2f3c1a381015f69e6b4760/0be4d/images/neural.png)\ -ALT: neural networks\ -Title: /\ +ALT: neural networks\ +Title: /\ | | [neural.PNG](https://bgoonz-blog.netlify.app/_static/app-assets/neural.PNG)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [jamstack.png](https://d33wubrfki0l68.cloudfront.net/f776b2f35588e0ab71789925ce9564924154c4cf/df9d3/images/jamstack.png)\ -ALT: jamstack\ -Title: /\ +ALT: jamstack\ +Title: /\ | | [eventloop.gif](https://d33wubrfki0l68.cloudfront.net/fb22b10eaa16e4ac0690115bf6c6987350d38d4b/13c10/images/eventloop.gif)\ -ALT: lorem-ipsum\ -Title: /\ +ALT: lorem-ipsum\ +Title: /\ | | [njdevils.jpg](https://d33wubrfki0l68.cloudfront.net/4e0beaeece78f366615c0db8561a1987efcded63/0652b/images/njdevils.jpg)\ -ALT: nj-devils\ -Title: /\ +ALT: nj-devils\ +Title: /\ | | [300px-OldDevils.png](https://upload.wikimedia.org/wikipedia/en/thumb/d/da/OldDevils.png/300px-OldDevils.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [iter-zoomed.png](https://d33wubrfki0l68.cloudfront.net/ab7369240011a9d7c48d46bbac2252abb70a0367/07847/images/iter-zoomed.png)\ -ALT: lorem-ipsum\ -Title: /\ +ALT: lorem-ipsum\ +Title: /\ | | [resume.jpg](https://d33wubrfki0l68.cloudfront.net/068b96ce83d71afa281886bfdb23aebb7bc35115/5f828/images/resume.jpg)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [My Post.png](https://bgoonz-blog.netlify.app/images/My%20Post.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [lambda-demo1.gif](https://bgoonz-blog.netlify.app/_static/app-assets/lambda-demo1.gif)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [goals.jpg](https://d33wubrfki0l68.cloudfront.net/e5828552ff6b5743ed241d9c926e60eb925dde97/8dbbf/images/goals.jpg)\ -ALT: medium\ -Title: /\ +ALT: medium\ +Title: /\ | | [blm-blue-round.png](https://tinify-bucket.s3-us-west-1.amazonaws.com/blm-blue-round.png)\ -ALT: Black Lives Matter Badge\ -Title: / | - - - - +ALT: Black Lives Matter Badge\ +Title: / | -LINKS ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +LINKS ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 137 unique\ @@ -547,364 +531,351 @@ internal unique\ without TITLE\ 103 -* * * * * +--- LINKS | Undefined (href link is empty)\ -Title: /\ +Title: /\ | | # (anchor)\ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | [/](https://bgoonz-blog.netlify.app/)\ -Title: /\ +Title: /\ | | [//pdfcrowd.com/url_to_pdf/?](https://pdfcrowd.com/url_to_pdf/?)\ -Title: /\ +Title: /\ | | [/angolia](https://bgoonz-blog.netlify.app/angolia)\ -Title: /\ +Title: /\ | | [/blog/](https://bgoonz-blog.netlify.app/blog/)\ -Title: /\ +Title: /\ | | [/blog/platform-docs/](https://bgoonz-blog.netlify.app/blog/platform-docs/)\ -Title: /\ +Title: /\ | | [/blogWcomments/](https://bgoonz-blog.netlify.app/blogWcomments/)\ -Title: /\ +Title: /\ | | [/docs](https://bgoonz-blog.netlify.app/docs)\ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | [/docs/about/](https://bgoonz-blog.netlify.app/docs/about/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/articles/](https://bgoonz-blog.netlify.app/docs/articles/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/articles/ds-algo-overview/](https://bgoonz-blog.netlify.app/docs/articles/ds-algo-overview/)\ -Title: /\ +Title: /\ | | [/docs/articles/nodejs/](https://bgoonz-blog.netlify.app/docs/articles/nodejs/)\ -Title: /\ +Title: /\ | | [/docs/audio/](https://bgoonz-blog.netlify.app/docs/audio/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/audio/audio](https://bgoonz-blog.netlify.app/docs/audio/audio)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/audio/dfft](https://bgoonz-blog.netlify.app/docs/audio/dfft)\ -Title: /\ +Title: /\ | | [/docs/community/](https://bgoonz-blog.netlify.app/docs/community/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/content/](https://bgoonz-blog.netlify.app/docs/content/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/docs/](https://bgoonz-blog.netlify.app/docs/docs/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/faq/](https://bgoonz-blog.netlify.app/docs/faq/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/faq/contact](https://bgoonz-blog.netlify.app/docs/faq/contact)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/gallery](https://bgoonz-blog.netlify.app/docs/gallery)\ -Title: /\ +Title: /\ | | [/docs/interact/](https://bgoonz-blog.netlify.app/docs/interact/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/javascript/](https://bgoonz-blog.netlify.app/docs/javascript/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/medium/](https://bgoonz-blog.netlify.app/docs/medium/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/python/](https://bgoonz-blog.netlify.app/docs/python/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/python/python-ds](https://bgoonz-blog.netlify.app/docs/python/python-ds)\ -Title: /\ +Title: /\ | | [/docs/quick-reference/](https://bgoonz-blog.netlify.app/docs/quick-reference/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/react/](https://bgoonz-blog.netlify.app/docs/react/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/sitemap](https://bgoonz-blog.netlify.app/docs/sitemap)\ -Title: /\ +Title: /\ | | [/docs/tools](https://bgoonz-blog.netlify.app/docs/tools)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/tools/](https://bgoonz-blog.netlify.app/docs/tools/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/jamstack](https://bgoonz-blog.netlify.app/jamstack)\ -Title: /\ +Title: /\ | | [/lorem-ipsum](https://bgoonz-blog.netlify.app/lorem-ipsum)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/mailto:bryan.guner@gmail.com](https://bgoonz-blog.netlify.app/mailto:bryan.guner@gmail.com)\ -Title: /\ +Title: /\ | | [/neural networks](https://bgoonz-blog.netlify.app/neural%20networks)\ -Title: /\ +Title: /\ | | [/showcase](https://bgoonz-blog.netlify.app/showcase)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [http://blmbadge.unicornplatform.com](http://blmbadge.unicornplatform.com/)\ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | [https://www.freefind.com](https://www.freefind.com/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | mailto:bryan.guner@gmail.com (email)\ -Title: / | - - - - - - - - +Title: / | - - - - - -OPEN GRAPH (Facebook) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +OPEN GRAPH (Facebook) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | og:type\ website | @@ -933,7 +904,7 @@ my resource sharing and blog site ... centered mostly on web development and jus [DROicc16](https://mugshotbot.com/m/DROicc16)\ | -TWITTER ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +TWITTER ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | twitter:card\ summary_large_image | @@ -976,31 +947,12 @@ my resource sharing and blog site ... centered mostly on web development and jus | twitter:card\ summary_large_image | -Image Source ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Image Source ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | No IMAGE_SRC has been found | -Schema.org (itemtype only) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Schema.org (itemtype only) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | No DATA has been found for Schema.org (itemtype only) | -[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/no-logo.png)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Click here to check **Schema.org structure** of this page (Google validator)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) - - - - - - - - - - - - - - - - - - - +[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/no-logo.png)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Click here to check **Schema.org structure** of this page (Google validator)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/add-copy-to-code-blocks.md.md b/notes/BGOONZ_BLOG_2.0.wiki/add-copy-to-code-blocks.md.md index 2ac3de2562..f9f7a7f287 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/add-copy-to-code-blocks.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/add-copy-to-code-blocks.md.md @@ -1,12 +1,10 @@ -gatsby-remark-code-buttons -========================== +# gatsby-remark-code-buttons -Add buttons to **markdown** code snippets. +Add buttons to **markdown** code snippets. -> This plugin doesn't support MDX. Example of [MDX copy button](https://github.com/gatsbyjs/gatsby/pull/15834). +> This plugin doesn't support MDX. Example of [MDX copy button](https://github.com/gatsbyjs/gatsby/pull/15834). -[](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#install)Install -------------------------------------------------------------------------------- +## [](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#install)Install ``` npm install gatsby-remark-code-buttons --save-dev @@ -14,10 +12,9 @@ npm install gatsby-remark-code-buttons --save-dev ![](https://media.giphy.com/media/hoHRea4IdkDBrsE4Bu/source.gif) -[](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#how-to-use)How to use -------------------------------------------------------------------------------------- +## [](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#how-to-use)How to use -in your `gatsby-config.js` +in your `gatsby-config.js` ``` plugins: [ @@ -30,8 +27,7 @@ plugins: [ ] ``` -[](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#options)Options -------------------------------------------------------------------------------- +## [](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#options)Options ``` plugins: [ @@ -85,7 +81,7 @@ Now that we've injected the custom button, we need to style it! .gatsby-code-button-toaster-text {} ``` -To apply custom styles import stylesheet in your app's root `gatsby-browser.js`. +To apply custom styles import stylesheet in your app's root `gatsby-browser.js`. ``` // gatsby-browser.js @@ -96,15 +92,17 @@ import './src/styles/custom-code-buttons.scss'; In your Markdown content -``` +```` ```js alert('click to copy 💾'); -``` +```` + ``` -This plugin will parse the Markdown AST, pluck the button, and then "clean" the code snippet language for further processing. With the default config options this plugin will create the following structure, injecting a custom `div`: +This plugin will parse the Markdown AST, pluck the button, and then "clean" the code snippet language for further processing. With the default config options this plugin will create the following structure, injecting a custom `div`: ``` +
        ``` -With `toasterText` config enabled this plugin will inject a custom toaster node: +With `toasterText` config enabled this plugin will inject a custom toaster node: ```
        @@ -130,10 +128,11 @@ With `toasterText` config enabled this plugin will inject a custom toaster nod Don't show button -``` +```` ```js:clipboard=false alert('will not be copied 💾'); -``` +```` + ``` @@ -154,25 +153,25 @@ alert('will not be copied 💾'); -Accessing the OS clipboard using browser JavaScript has been possible for several years using [`document.execCommand()`](https://www.sitepoint.com/javascript-copy-to-clipboard/). +Accessing the OS clipboard using browser JavaScript has been possible for several years using [`document.execCommand()`](https://www.sitepoint.com/javascript-copy-to-clipboard/). Unfortunately, there are some problems: - clipboard access is synchronous, which has performance and security implications - support is patchy, especially on older versions of Safari on macOS and iOS - permissions access varies across browsers, and -- the API could never be considered *elegant* +- the API could never be considered *elegant* -It's finally been superseded by a new [asynchronous Clipboard API](https://developer.mozilla.org/Web/API/Clipboard_API). It's new, and no browser supports all features, but it's easier to use and more robust. +It's finally been superseded by a new [asynchronous Clipboard API](https://developer.mozilla.org/Web/API/Clipboard_API). It's new, and no browser supports all features, but it's easier to use and more robust. Why Would an App Need to Access the Clipboard? ---------------------------------------------- As a developer, you'll know how the clipboard works and regularly use the following keyboard shortcuts: -- `Ctrl` | `Cmd` + `C` to copy -- `Ctrl` | `Cmd` + `X` to cut -- `Ctrl` | `Cmd` + `V` to paste +- `Ctrl` | `Cmd` + `C` to copy +- `Ctrl` | `Cmd` + `X` to cut +- `Ctrl` | `Cmd` + `V` to paste Those with less computing experience won't necessarily have that knowledge. They may also be using a touch-screen device where keyboard shortcuts aren't available. Offering easy-to-use cut and paste icons can be useful. @@ -186,9 +185,10 @@ Accessing the clipboard programmatically raises several security concerns: - Users often copy passwords or private information so no page should be able to arbitrarily read clipboard data. - Pages should be restricted when adding data to the clipboard. A nefarious page could replace copied text with a dangerous command or even an executable file. -To avoid potential issues, the Clipboard API can only be used on pages served over HTTPS (`localhost` is also permitted). When running in an iframe, the parent page must also grant `clipboard-read` and/or `clipboard-write` permissions: +To avoid potential issues, the Clipboard API can only be used on pages served over HTTPS (`localhost` is also permitted). When running in an iframe, the parent page must also grant `clipboard-read` and/or `clipboard-write` permissions: ``` + + + Following the [General guidelines](https://developers.google.com/search/docs/advanced/guidelines/webmaster-guidelines?hl=en&_ga=2.47561892.2010395531.1639933504-972587081.1639933504&visit_id=1639931578542-8725338968151920159&rd=1#general) will help Google find, index, and rank your site. @@ -55,7 +56,7 @@ These quality guidelines cover the most common forms of deceptive or manipulativ If you believe that another site is abusing Google's quality guidelines, please let us know by [filing a spam report](https://www.google.com/webmasters/tools/spamreport). Google prefers developing scalable and automated solutions to problems, and will use the report for further improving our spam detection systems. - + ### Basic principles @@ -89,16 +90,16 @@ If you believe that another site is abusing Google's quality guidelines, please If your site violates one or more of these guidelines, then Google may take [manual action](https://support.google.com/webmasters/answer/9044175) against it. Once you have remedied the problem, you can [submit your site for reconsideration](https://support.google.com/webmasters/answer/35843). - --- - -# Create Crawlable Links | Google Search Central  |  Google Developers +# Create Crawlable Links | Google Search Central | Google Developers > ## Excerpt +> > Google can only crawl links if they use the proper a tag with an href attritube. Review examples to ensure your links are crawlable. --- + Google can follow your links only if they **use proper `` tags** with **resolvable URLs**: Google can follow links only if they are an `` tag with an _href_ attribute. Links that use other formats won't be followed by Google's crawlers. Google cannot follow `` links without an _href_ tag or other tags that perform a links because of script events. Here are examples of links that Google can and can't follow: @@ -129,19 +130,18 @@ Ensure that the URL linked to by your `` tag is an actual web address that Go - `javascript:goTo('products')` - `javascript:window.location.href='/products'` - `#` ---- - - - +--- -# What Is a Sitemap | Google Search Central  |  Google Developers +# What Is a Sitemap | Google Search Central | Google Developers > ## Excerpt +> > A sitemap provides information that helps Google more intelligently crawl your site. Discover how a sitemap works and determine if you need one. --- - + + A _sitemap_ is a file where you provide information about the pages, videos, and other files on your site, and the relationships between them. Search engines like Google read this file to crawl your site more efficiently. A sitemap tells Google which pages and files you think are important in your site, and also provides valuable information about these files. For example, when the page was last updated and any alternate language versions of the page. @@ -172,20 +172,16 @@ If your site's pages are properly linked, Google can usually discover most of yo If you decided that you need a sitemap, [learn more about how to create one](https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap). - - - - --- - - -# Robots.txt Introduction and Guide | Google Search Central  |  Google Developers +# Robots.txt Introduction and Guide | Google Search Central | Google Developers > ## Excerpt +> > Robots.txt is used to manage crawler traffic. Explore this robots.txt introduction guide to learn what robot.txt files are and how to use them. --- + A robots.txt file tells search engine crawlers which URLs the crawler can access on your site. This is used mainly to avoid overloading your site with requests; **it is not a mechanism for keeping a web page out of Google**. To keep a web page out of Google, [block indexing with `noindex`](https://developers.google.com/search/docs/advanced/crawling/block-indexing) or password-protect the page. ## What is a robots.txt file used for? @@ -226,6 +222,4 @@ Before you create or edit a robots.txt file, you should know the limits of this If you decided that you need one, learn how to [create a robots.txt file](https://developers.google.com/search/docs/advanced/robots/create-robots-txt). - - ---- \ No newline at end of file +--- diff --git a/notes/BGOONZ_BLOG_2.0.wiki/inject-4.md.md b/notes/BGOONZ_BLOG_2.0.wiki/inject-4.md.md index 5168354013..68011fdee6 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/inject-4.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/inject-4.md.md @@ -20,7 +20,7 @@ Remove -- before `` +- before `` addthis @@ -33,7 +33,7 @@ Remove -- before `` +- before `` gtag-n-firebase @@ -71,20 +71,20 @@ Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -130,7 +130,7 @@ Remove -- before `` +- before `` original-analytics @@ -144,7 +144,7 @@ })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -164,7 +164,7 @@ Remove -- before `` +- before `` goback @@ -177,7 +177,7 @@ Remove -- before `` +- before `` mdn-style @@ -404,7 +404,7 @@ Remove -- before `` +- before `` meta @@ -435,7 +435,7 @@ Remove -- before `` +- before `` meta @@ -445,7 +445,7 @@ Remove -- before `` +- before `` back to top css @@ -540,7 +540,7 @@ Remove -- before `` +- before `` print2pdf @@ -553,7 +553,7 @@ Remove -- before `` +- before `` scroll2topsvg @@ -686,7 +686,7 @@ Remove -- before `` +- before `` tawk-chat @@ -708,7 +708,7 @@ Remove -- before `` +- before `` firebase-cdn @@ -740,7 +740,7 @@ Remove -- before `` +- before `` add-this-suggested-pages @@ -751,7 +751,7 @@ Remove -- before `` +- before `` auth-firestore-cloud @@ -769,7 +769,7 @@ Remove -- before `` +- before `` analytics @@ -787,7 +787,7 @@ Remove -- before `` +- before `` search-script @@ -807,7 +807,7 @@ Remove -- before `` +- before `` more-meta-tags-open-graph @@ -834,7 +834,7 @@ Remove -- before `` +- before `` simpleanalytics @@ -845,7 +845,7 @@ Remove -- before `` +- before `` metaaaa @@ -856,7 +856,7 @@ Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet @@ -896,48 +896,47 @@ With each deploy, Netlify scans new and changed HTML files for forms to enable h Edit settings -[Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -------------------------------------------------------------------------------------------------------- +## [Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) +Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) ### [Outgoing notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#outgoing-notifications) Add notification -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails Options -- Add rich details to commits when Deploy Preview starts +- Add rich details to commits when Deploy Preview starts Options -- Add rich details to commits when Deploy Preview succeeds +- Add rich details to commits when Deploy Preview succeeds Options -- Add rich details to commits when Deploy Preview fails +- Add rich details to commits when Deploy Preview fails Options -- Email bryan.guner@gmail.com when deploy request is pending +- Email bryan.guner@gmail.com when deploy request is pending Options -- Email bryan.guner@gmail.com when deploy request is accepted +- Email bryan.guner@gmail.com when deploy request is accepted Options -- Email bryan.guner@gmail.com when deploy request is rejected +- Email bryan.guner@gmail.com when deploy request is rejected Options @@ -947,4 +946,4 @@ Add notification - [News](https://www.netlify.com/news/) - [Terms](https://www.netlify.com/tos/) -© 2021 Netlify \ No newline at end of file +© 2021 Netlify diff --git a/notes/BGOONZ_BLOG_2.0.wiki/inject3.md.md b/notes/BGOONZ_BLOG_2.0.wiki/inject3.md.md index 2a1b240c4d..fc61548f27 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/inject3.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/inject3.md.md @@ -2,7 +2,7 @@ Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` blm @@ -28,7 +28,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -41,7 +41,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-n-firebase @@ -79,20 +79,20 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -138,7 +138,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` original-analytics @@ -152,7 +152,7 @@ Inject analytics or other scripts into the HTML of your site. })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -172,7 +172,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` goback @@ -185,7 +185,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prism @@ -395,7 +395,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prismjs @@ -414,7 +414,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` mdn-style @@ -641,7 +641,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -672,7 +672,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prism2body @@ -691,7 +691,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia @@ -711,7 +711,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet diff --git a/notes/BGOONZ_BLOG_2.0.wiki/inject4.md.md b/notes/BGOONZ_BLOG_2.0.wiki/inject4.md.md index 02fc48bca7..5426c3e454 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/inject4.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/inject4.md.md @@ -6,7 +6,7 @@ Control the post processing and optimizations Netlify can do for you Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` blm @@ -32,7 +32,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -45,7 +45,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-n-firebase @@ -83,20 +83,20 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -142,7 +142,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` original-analytics @@ -156,7 +156,7 @@ Inject analytics or other scripts into the HTML of your site. })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -176,7 +176,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` goback @@ -189,7 +189,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` mdn-style @@ -416,7 +416,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -447,7 +447,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prism2body @@ -466,7 +466,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -476,7 +476,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` tawk-widget @@ -498,7 +498,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` hubspot @@ -518,7 +518,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` hubspot-analytics @@ -530,7 +530,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` typeform @@ -540,7 +540,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet @@ -582,45 +582,45 @@ Edit settings ## [Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) +Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) ### [Outgoing notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#outgoing-notifications) Add notification -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails Options -- Add rich details to commits when Deploy Preview starts +- Add rich details to commits when Deploy Preview starts Options -- Add rich details to commits when Deploy Preview succeeds +- Add rich details to commits when Deploy Preview succeeds Options -- Add rich details to commits when Deploy Preview fails +- Add rich details to commits when Deploy Preview fails Options -- Email bryan.guner@gmail.com when deploy request is pending +- Email bryan.guner@gmail.com when deploy request is pending Options -- Email bryan.guner@gmail.com when deploy request is accepted +- Email bryan.guner@gmail.com when deploy request is accepted Options -- Email bryan.guner@gmail.com when deploy request is rejected +- Email bryan.guner@gmail.com when deploy request is rejected Options @@ -630,4 +630,4 @@ Add notification - [News](https://www.netlify.com/news/) - [Terms](https://www.netlify.com/tos/) -© 2021 Netlify +© 2021 Netlify diff --git a/notes/BGOONZ_BLOG_2.0.wiki/injected-content-part2.md.md b/notes/BGOONZ_BLOG_2.0.wiki/injected-content-part2.md.md index 839fa29a55..b4d1f4189f 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/injected-content-part2.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/injected-content-part2.md.md @@ -2,72 +2,82 @@ Inject analytics or other scripts into the HTML of your site.--- -- before `` +- before `` scroll2top ```html - - + - - + setTimeout(hideLoader, 10 * 1000); + $(window).on('beforeunload', function () { + $(window).scrollTop(0); + }); + + + ``` --- -- before `` +- before `` spotify ```html - + ``` --- -- before `` +- before `` scroll2-vanilla ```html + }; + scrollToTop(); + }); + ``` --- -- before `` +- before `` blm @@ -79,43 +89,43 @@ Inject analytics or other scripts into the HTML of your site.--- ``` --- -- before `` +- before `` iframe-style ```html ``` --- -- before `` +- before `` addThis @@ -128,33 +138,43 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` analytics-n-addsense ```html - + - + @@ -162,49 +182,49 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` netlify-oauth ```html - - - - - - - + + + + + + + ``` --- -- before `` +- before `` github-netlify-oauth ```html

        GitHub Auth Demo:

        -

        Authenticate

        -

        +

        Authenticate

        +

        ``` --- -- before `` +- before `` content-authoring @@ -214,7 +234,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` Algolia-Search @@ -222,49 +242,48 @@ Inject analytics or other scripts into the HTML of your site.--- ``` --- -- before `` +- before `` searcg ```html -
        -
        -
        -
        -
        -
        +
        +
        +
        +
        +
        +
        -
        -
        -
        -
        -
        -
        -
        -
        -
        +
        +
        +
        +
        +
        +
        +
        +
        +
        ``` - --- +--- -- before `` +- before `` algolia-search-cdn ```html ``` - diff --git a/notes/BGOONZ_BLOG_2.0.wiki/injected-js-part4.md.md b/notes/BGOONZ_BLOG_2.0.wiki/injected-js-part4.md.md index a932c8d58a..2cb15acc72 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/injected-js-part4.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/injected-js-part4.md.md @@ -1,5 +1,4 @@ -[Post processing](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#post-processing) ---------------------------------------------------------------------------------------------- +## [Post processing](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#post-processing) Control the post processing and optimizations Netlify can do for you @@ -7,7 +6,7 @@ Control the post processing and optimizations Netlify can do for you Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` gtag-n-firebase @@ -45,20 +44,20 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -104,7 +103,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` original-analytics @@ -118,7 +117,7 @@ Inject analytics or other scripts into the HTML of your site. })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -138,7 +137,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` goback @@ -151,7 +150,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` mdn-style @@ -378,7 +377,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -409,7 +408,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -419,7 +418,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` back to top css @@ -514,7 +513,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` scroll2topsvg @@ -647,7 +646,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` firebase-cdn @@ -679,7 +678,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` analytics @@ -697,7 +696,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` more-meta-tags-open-graph @@ -724,7 +723,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` simpleanalytics @@ -735,7 +734,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` metaaaa @@ -746,7 +745,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia-head @@ -769,7 +768,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` fb @@ -801,7 +800,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` stackbit-widget @@ -811,7 +810,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` blm @@ -837,7 +836,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -848,7 +847,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` add-this @@ -859,7 +858,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -893,11 +892,11 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` test -- before `` +- before `` search @@ -920,7 +919,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` links-highlight diff --git a/notes/BGOONZ_BLOG_2.0.wiki/injected-part3.md.md b/notes/BGOONZ_BLOG_2.0.wiki/injected-part3.md.md index ca6cbfc2fe..daf0f7a591 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/injected-part3.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/injected-part3.md.md @@ -1,5 +1,4 @@ -[Post processing](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#post-processing) ---------------------------------------------------------------------------------------------- +## [Post processing](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#post-processing) Control the post processing and optimizations Netlify can do for you @@ -7,7 +6,7 @@ Control the post processing and optimizations Netlify can do for you Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` blm @@ -33,7 +32,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -46,7 +45,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` apple @@ -56,7 +55,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` hit counter @@ -66,7 +65,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` go-back @@ -80,7 +79,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` clock @@ -91,7 +90,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia @@ -112,7 +111,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia-cdn @@ -123,7 +122,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia2 @@ -144,7 +143,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet @@ -170,48 +169,47 @@ With each deploy, Netlify scans new and changed HTML files for forms to enable h Edit settings -[Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -------------------------------------------------------------------------------------------------------- +## [Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) +Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) ### [Outgoing notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#outgoing-notifications) Add notification -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails Options -- Add rich details to commits when Deploy Preview starts +- Add rich details to commits when Deploy Preview starts Options -- Add rich details to commits when Deploy Preview succeeds +- Add rich details to commits when Deploy Preview succeeds Options -- Add rich details to commits when Deploy Preview fails +- Add rich details to commits when Deploy Preview fails Options -- Email bryan.guner@gmail.com when deploy request is pending +- Email bryan.guner@gmail.com when deploy request is pending Options -- Email bryan.guner@gmail.com when deploy request is accepted +- Email bryan.guner@gmail.com when deploy request is accepted Options -- Email bryan.guner@gmail.com when deploy request is rejected +- Email bryan.guner@gmail.com when deploy request is rejected Options @@ -221,4 +219,4 @@ Add notification - [News](https://www.netlify.com/news/) - [Terms](https://www.netlify.com/tos/) -© 2021 Netlify \ No newline at end of file +© 2021 Netlify diff --git a/notes/BGOONZ_BLOG_2.0.wiki/js-notes.md.md b/notes/BGOONZ_BLOG_2.0.wiki/js-notes.md.md index 4f2c9554ed..21899a83ce 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/js-notes.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/js-notes.md.md @@ -28,7 +28,7 @@ Variables that don't explicitly get assigned an initial value have the value Since ES2015, `let` and `const` can be used in addition to `var`. We will learn how they differ from `var` later. For now, lets have a look how `const` differs -from `var` or `let`: `const` can be assigned a value only _once_ (*const*ant). +from `var` or `let`: `const` can be assigned a value only _once_ (*const*ant). Reassigning a value will either throw an error (in strict mode, see below) or is silently ignored: @@ -113,8 +113,10 @@ at the beginning of it. [strict mode]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode --- + title: Scope chapter: Scope + --- Unlike other programming languages, JavaScript only has **function scope**, not @@ -162,12 +164,14 @@ function foo() { ``` --- + toc: What is this? chapter: this style: | - h1 { - text-align: center - } +h1 { +text-align: center +} + --- # What is `this`? @@ -210,23 +214,25 @@ foo.call(bar); [mdn]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this --- + title: JavaScript Basics toc: Title chapter: Intro layout: Center style: | - .exerslide-slide .Center-wrapper { - text-align: left; - } - .exerslide-slide h1 { - color: #444; - font-size: 400%; - margin-bottom: 50px; - text-align: center; - } +.exerslide-slide .Center-wrapper { +text-align: left; +} +.exerslide-slide h1 { +color: #444; +font-size: 400%; +margin-bottom: 50px; +text-align: center; +} scale: - content_width: 39 - column_width: 0.6 +content_width: 39 +column_width: 0.6 + --- A quick introduction to basic and important concepts of JavaScript @@ -244,10 +250,10 @@ You will need it for the exercises. Found a problem with style or content? Or do you have suggestions for improving the content? Please [file an issue on GitHub][jsbasics-issues]. ---- -title: Booleans, numbers and strings --- +## title: Booleans, numbers and strings + The **Boolean** data type has two values, `true` and `false`. ```js @@ -303,11 +309,13 @@ var bar = 'baz'; [ieee754]: http://en.wikipedia.org/wiki/IEEE_floating_point --- + title: Demo layout_data: - description: Run the code and have a look at the output. Is it what you expect? - Try some other values / operators and look at the output (remember to open - the console). +description: Run the code and have a look at the output. Is it what you expect? +Try some other values / operators and look at the output (remember to open +the console). + --- var a = 10; @@ -319,8 +327,10 @@ log(a + c); log(b + Number(c)); --- + title: Constructor functions chapter: Constructors/Classes + --- JavaScript doesn't have classes like class-based OOP languages have, but it has @@ -366,18 +376,20 @@ of the structure of the object (including it's prototype chain). [new]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new --- + title: Exercise -layout_data: - description: | - Create a local variable with name `foo` and value `42`. - Use `log(foo)` to log the value of `foo`. - Remember to open your browser's *developer tools* to view the log output. - assertion: | - assert( - /var foo\s*=.+;?$/m.test(source), - "It doesn't look like you have declared a variable (hint: var)." - ); - assert(output[0] === 42, "Don't forget to log the value"); +layout*data: +description: | +Create a local variable with name `foo` and value `42`. +Use `log(foo)` to log the value of `foo`. +Remember to open your browser's \_developer tools* to view the log output. +assertion: | +assert( +/var foo\s\*=.+;?$/m.test(source), +"It doesn't look like you have declared a variable (hint: var)." +); +assert(output[0] === 42, "Don't forget to log the value"); + --- // Create variable @@ -386,8 +398,8 @@ layout_data: log(foo); --- -title: Hoisting ---- + +## title: Hoisting This behavior becomes more understandable after we introduce **hoisting**. Before a JavaScript function is even executed, the engine finds all variable and @@ -443,11 +455,13 @@ To get more details on hoisting see [this article][hoisting]. [hoisting]: http://dmitrysoshnikov.com/notes/note-4-two-words-about-hoisting/ --- + toc: this - an example style: | - h1 { - text-align: center - } +h1 { +text-align: center +} + --- # `this` - an example @@ -479,15 +493,17 @@ function produces depends on which object the function is called (_how_ it is called). --- + title: What this presentation is not about layout: Center style: | - .exerslide-slide .Center-wrapper { - text-align: left; - } - .exerslide-slide h1 { - text-align: center; - } +.exerslide-slide .Center-wrapper { +text-align: left; +} +.exerslide-slide h1 { +text-align: center; +} + --- JavaScript is predominantly run in browsers to make websites interactive. In @@ -498,32 +514,34 @@ This presentation is exclusively about JavaScript, the _language_, not the environment in which the JavaScript code runs! --- + title: Exercise layout_data: - description: Create three variables `x`, `y`, `z`, where `x` contains a string value, - `y` a number and `z` a boolean value. Log the values with `log`. - assertion: | - assert( - output.some(function(x) { return typeof x === 'string' }), - 'Your log must contain a string.' - ); - assert( - output.some(function(x) { return typeof x === 'number' }), - 'Your log must contain a number.' - ); - assert( - output.some(function(x) { return typeof x === 'boolean' }), - 'Your log must contain a boolean.' - ); +description: Create three variables `x`, `y`, `z`, where `x` contains a string value, +`y` a number and `z` a boolean value. Log the values with `log`. +assertion: | +assert( +output.some(function(x) { return typeof x === 'string' }), +'Your log must contain a string.' +); +assert( +output.some(function(x) { return typeof x === 'number' }), +'Your log must contain a number.' +); +assert( +output.some(function(x) { return typeof x === 'boolean' }), +'Your log must contain a boolean.' +); + --- // Hint: You can pass multiple arguments to log: // log(a, b) ---- -toc: "ES6's class declarations" --- +## toc: "ES6's class declarations" + # Syntactic sugar: ES6's `class` declarations Setting up more complex constructor functions with their prototypes can be @@ -555,10 +573,10 @@ does not change. [classes]: http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes ---- -title: Comparison operators --- +## title: Comparison operators + As already established at the beginning, JavaScript is _dynamically typed_. It also performs _type conversion_, if a specific data type is expected and not provided. For example in `a * b`, the values of `a` and `b` will be converted @@ -630,16 +648,18 @@ comments). [comparison table]: https://dorey.github.io/JavaScript-Equality-Table/ --- + title: ES5, ES2015 and beyond layout: Center style: | - .exerslide-slide .Center-wrapper { - text-align: left; - } - .exerslide-slide h1 { - text-align: center; - } +.exerslide-slide .Center-wrapper { +text-align: left; +} +.exerslide-slide h1 { +text-align: center; +} + --- This tutorial primarily focuses on JavaScript following the [ECMAScript 5][es5] @@ -651,10 +671,12 @@ versions, it will point differences to/alternatives for certain ES5 features if they exist. --- + title: Demo -layout_data: - description: Which value does this code log and why? Think about the answer *before* you - run the code. +layout*data: +description: Which value does this code log and why? Think about the answer \_before* you +run the code. + --- var bar = 42; @@ -666,13 +688,15 @@ log(bar); foo(); --- + title: Exercise layout_data: - description: Which value does the code log and why? How can it be changed to log the value - of `obj.foo`? - assertion: | - assert(output[0] === 42, 'The code should only log 42'); - assert(/log\s*\(\s*this\.foo\s*\)/.test(source), "Looks like you tried to be clever. Don't modify log(this.foo)."); +description: Which value does the code log and why? How can it be changed to log the value +of `obj.foo`? +assertion: | +assert(output[0] === 42, 'The code should only log 42'); +assert(/log\s*\(\s*this\.foo\s\*\)/.test(source), "Looks like you tried to be clever. Don't modify log(this.foo)."); + --- var obj = { @@ -686,8 +710,8 @@ var foo = obj.bar; foo(); --- -title: Closures ---- + +## title: Closures [Wikipedia describes closures as][closures]: @@ -723,13 +747,14 @@ understand what it implies. [functions]: http://www.ecma-international.org/ecma-262/5.1/#sec-13 --- + title: Exercise layout_data: - description: Run the code and have a look at the output. Is it what you expect? - What are reasons for this output? Modify the code, so that it prints - the result you would expect. - assertion: | - var values = [" ", "0", 0]; +description: Run the code and have a look at the output. Is it what you expect? +What are reasons for this output? Modify the code, so that it prints +the result you would expect. +assertion: | +var values = [" ", "0", 0]; var c = 1; for (var i = 0, l = values.length; i < l; i++) { @@ -744,6 +769,7 @@ layout_data: c += 2; } } + --- var values = [" ", "0", 0]; @@ -758,8 +784,8 @@ values[i] == values[j] } --- -title: null and undefined ---- + +## title: null and undefined JavaScript has two data types to express the **absence of a value**, null and undefined. @@ -801,10 +827,12 @@ console.log(bar); // reference error
        --- + title: Demo -layout_data: - description: Which value does this code log and why? Think about the solution *before* you - run the code. +layout*data: +description: Which value does this code log and why? Think about the solution \_before* you +run the code. + --- var foo = 42; @@ -815,16 +843,18 @@ foo = 21; bar(); --- + title: Exercise layout_data: - description: Which values does this code log and why? Modify the code so that it logs the - values as "expected". - assertion: assert( - output.every(function(x, i) { - return x === i; - }), - 'The code should output the loop variable of each iteration, i.e. 0, 1, 2' - ); +description: Which values does this code log and why? Modify the code so that it logs the +values as "expected". +assertion: assert( +output.every(function(x, i) { +return x === i; +}), +'The code should output the loop variable of each iteration, i.e. 0, 1, 2' +); + --- var functionArray = []; @@ -839,28 +869,30 @@ functionArray[j](); } --- + title: Exercise layout_data: - description: Log the values `null` and `undefined`. - assertion: | - assert( - output.some(function(x) { return x === null }), - 'Your log must contain null.' - ); - assert( - output.some(function(x) { return x === void 0; }), - 'Your log must contain undefined.' - ); - assert( - source.indexOf('undefined') === -1, - 'Try to log undefined without writing it in the source code.' - ); ---- +description: Log the values `null` and `undefined`. +assertion: | +assert( +output.some(function(x) { return x === null }), +'Your log must contain null.' +); +assert( +output.some(function(x) { return x === void 0; }), +'Your log must contain undefined.' +); +assert( +source.indexOf('undefined') === -1, +'Try to log undefined without writing it in the source code.' +); --- -title: Property access + --- +## title: Property access + Properties of objects can be accessed in two ways: - **Dot notation** (`obj.prop`) @@ -913,8 +945,8 @@ console.log(obj.foo); ``` --- -title: Objects ---- + +## title: Objects Everything else besides primitive data type values is an _object_. @@ -1073,25 +1105,27 @@ _functions_, which are explained in the next slides. [built-in objects]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects --- + title: Exercise layout_data: - description: Log the two properties of the object using dot and bracket notation. - assertion: assert( - source.indexOf('obj.foo') > -1, - 'Access property foo with dot notation' - ); - assert( - /obj\[(42|'42'|"42")\]/.test(source), - 'How exactly did you want to access property 42?' - ); +description: Log the two properties of the object using dot and bracket notation. +assertion: assert( +source.indexOf('obj.foo') > -1, +'Access property foo with dot notation' +); +assert( +/obj\[(42|'42'|"42")\]/.test(source), +'How exactly did you want to access property 42?' +); + --- var obj = {foo: 'bar', 42: 'answer'}; ---- -title: Prototypes (1) --- +## title: Prototypes (1) + You may have heard that JavaScript is a _"[prototype-based language][prototype]"_, unlike other languages, such as Java, which are _"[class-based languages][class]"_. @@ -1215,10 +1249,10 @@ Object.getPrototypeOf(b) === a; // true [class]: https://en.wikipedia.org/wiki/Class-based_programming [object.create]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create ---- -title: Prototypes (2) --- +## title: Prototypes (2) + Now we know what prototypes are, but not what they _do_ or which problem they solve. @@ -1299,8 +1333,8 @@ chain is then _shadowed_, similar to variable shadowing in scopes.
        --- -title: 'Built-in objects: Arrays and functions' ---- + +## title: 'Built-in objects: Arrays and functions' ## Arrays @@ -1385,8 +1419,8 @@ Similar to arrays, function objects also have a dedicated prototype, ::: --- -title: Control structures ---- + +## title: Control structures JavaScript provides the same control structures known from other C-like languages: @@ -1431,10 +1465,12 @@ for (var v of arr) {

        --- + title: Demo layout_data: - description: Run this code and look at the output. Do you notice anything unexpected? - If yes, why do you think this is the case? +description: Run this code and look at the output. Do you notice anything unexpected? +If yes, why do you think this is the case? + --- var obj = {foo: 0, bar: 1, 42: 2}; @@ -1444,18 +1480,19 @@ log('property: ' + prop, 'value: ' + obj[prop]); } --- + title: Exercise layout_data: - description: | - Log two value: an object which has a property `foo` and a value `"bar"`, - and an array with the values `1`, `2` and `42`. - assertion: | - assert( - output.some(function(x) { - return JSON.stringify(x) === JSON.stringify({foo: 'bar'}); - }), - 'Your log must contain an object with property "foo" and value "bar". Hint: `{key: value}`.' - ); +description: | +Log two value: an object which has a property `foo` and a value `"bar"`, +and an array with the values `1`, `2` and `42`. +assertion: | +assert( +output.some(function(x) { +return JSON.stringify(x) === JSON.stringify({foo: 'bar'}); +}), +'Your log must contain an object with property "foo" and value "bar". Hint: `{key: value}`.' +); assert( output.some(function(x) { @@ -1463,12 +1500,13 @@ layout_data: }), 'Your log must contain an array with values 1, 2 and 42. Hint: `[value, ...]`.' ); ---- --- -title: Resources + --- +## title: Resources + - [MDN JavaScript Guide][mdn], [Eloquent JavaScript][eloquent] — basic JavaScript introduction. @@ -1503,8 +1541,8 @@ title: Resources [debug]: https://developers.google.com/chrome-developer-tools/docs/javascript-debugging --- -title: Function definitions ---- + +## title: Function definitions There are two syntactic constructs to create functions: function **declaration** and function **expressions**. @@ -1553,8 +1591,8 @@ generates an error (function declaration without name), but does not, because the grouping operator (`(...)`) can only contain expressions. --- -title: Function Calls ---- + +## title: Function Calls Like other C-like languages, functions are called by putting `()` after the function reference: @@ -6932,6 +6970,7 @@ button.onclick = () => void getYear(); ``` --- + layout: post title: What is the promise executor? @@ -6940,9 +6979,8 @@ tip-username: loverajoel tip-username-profile: https://www.twitter.com/loverajoel tip-tldr: The method received as an argument for the promise. -categories: - - en - - javascript +categories: - en - javascript + --- All `Promise` instances accept a method as an argument called the executor. This executor takes two methods as arguments: resolve and reject. Within the executor, if resolve is called, the `Promise` instance becomes fulfilled. If an exception is thrown, reject is called instead, and the `Promise` instance becomes rejected. @@ -6959,6 +6997,7 @@ new Promise(executor).then((result) => { ``` --- + layout: post title: What is the JavaScript ternary operator? @@ -6967,9 +7006,8 @@ tip-username: loverajoel tip-username-profile: https://www.twitter.com/loverajoel tip-tldr: The ternary operator is a shortcut for the if statement. -categories: - - en - - javascript +categories: - en - javascript + --- The ternary operator is a shortcut for the `if` statement. It consists of three operands; a question mark, a condition, and an expression to execute if the condition is true, followed by a colon and another expression to execute if it's false. @@ -7012,25 +7050,25 @@ If you are new to JavaScript, start with the [guide](https://developer.mozilla.o In the JavaScript reference you can find the following chapters: -[Standard built-in objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) +[Standard built-in objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) This chapter documents all the JavaScript standard built-in objects, along with their methods and properties. -[Statements and declarations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements) +[Statements and declarations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements) JavaScript applications consist of statements with an appropriate syntax. A single statement may span multiple lines. Multiple statements may occur on a single line if each statement is separated by a semicolon. This isn't a keyword, but a group of keywords. -[Expressions and operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators) +[Expressions and operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators) This chapter documents all the JavaScript language operators, expressions and keywords. -Functions +Functions Chapter about JavaScript functions. -[Classes](classes) +[Classes](classes) Chapter about JavaScript classes introduced in ECMAScript 2015. -[Errors](errors) +[Errors](errors) Chapter about specific errors, exceptions and warnings thrown by JavaScript. -[New in JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript) +[New in JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript) Chapter about JavaScript version history. ### More reference pages @@ -7051,7 +7089,7 @@ The `Math.abs()` function returns the absolute value of a number. That is, it re ### Parameters -`x` +`x` A number. ### Return value @@ -7081,7 +7119,7 @@ Passing an empty object, an array with more than one member, a non-numeric strin ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Math.abs' in that specification.
        @@ -7120,8 +7158,8 @@ Passing an empty object, an array with more than one member, a non-numeric strin - [`Math.sign()`](sign) - [`Math.trunc()`](trunc) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs # Math.acos() @@ -7136,7 +7174,7 @@ The `Math.acos()` function returns the arccosine (in radians) of a number, that ### Parameters -`x` +`x` A number representing a cosine, where `x` is between `-1` and `1`. ### Return value @@ -7164,7 +7202,7 @@ For values less than -1 or greater than 1, `Math.acos()` returns [`NaN`](../nan) ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.acos
        @@ -7204,8 +7242,8 @@ For values less than -1 or greater than 1, `Math.acos()` returns [`NaN`](../nan) - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos # Math.acosh() @@ -7220,7 +7258,7 @@ The `Math.acosh()` function returns the hyperbolic arc-cosine of a number, that ### Parameters -`x` +`x` A number. ### Return value @@ -7253,7 +7291,7 @@ For all *x* ≥ 1, we have $\\operatorname{arcosh}(x) = \\ln\\left( {x + \\s ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.acosh
        @@ -7292,8 +7330,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh # Atomics.add() @@ -7306,13 +7344,13 @@ The static ` Atomics``.add() ` method adds a given value at a given position in ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to add a `value` to. -`value` +`value` The number to add. ### Return value @@ -7336,7 +7374,7 @@ The old value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.add
        @@ -7436,7 +7474,7 @@ The addition operator (`+`) produces the sum of numeric operands or string conca ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Addition operator' in that specification.
        @@ -7479,8 +7517,8 @@ The addition operator (`+`) produces the sum of numeric operands or string conca - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Addition # AggregateError @@ -7489,15 +7527,15 @@ The `AggregateError` object represents an error when several errors need to be w ## Constructor -[`AggregateError()`](aggregateerror/aggregateerror) +[`AggregateError()`](aggregateerror/aggregateerror) Creates a new `AggregateError` object. ## Instance properties -[`AggregateError.prototype.message`](error/message) +[`AggregateError.prototype.message`](error/message) Error message, defaults to `""`. -[`AggregateError.prototype.name`](error/name) +[`AggregateError.prototype.name`](error/name) Error name, defaults to `AggregateError`. ## Examples @@ -7528,7 +7566,7 @@ Error name, defaults to `AggregateError`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-aggregate-error-objects
        @@ -7602,7 +7640,7 @@ The `Promise.all()` method takes an iterable of promises as an input, and return ### Parameters -`iterable` +`iterable` An [iterable](../../iteration_protocols#the_iterable_protocol) object such as an [`Array`](../array). ### Return value @@ -7774,7 +7812,7 @@ It is possible to change this behavior by handling possible rejections: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.all
        @@ -7810,8 +7848,8 @@ No - [`Promise`](../promise) - [`Promise.race()`](race) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all # Promise.allSettled() @@ -7828,7 +7866,7 @@ In comparison, the Promise returned by [`Promise.all()`](all) may be more approp ### Parameters -`iterable` +`iterable` An [iterable](../../iteration_protocols) object, such as an [`Array`](../array), in which each member is a `Promise`. ### Return value @@ -7860,7 +7898,7 @@ For each outcome object, a `status` string is present. If the status is `fulfill ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.allsettled
        @@ -7899,8 +7937,8 @@ No - [`Promise`](../promise) - [`Promise.all()`](all) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled # Warning: -file- is being assigned a //\# sourceMappingURL, but already has one @@ -7956,7 +7994,7 @@ The `anchor()` method creates a string beginning with an `` start ### Parameters -`name` +`name` A string representing a `name` value to put into the generated `` start tag. ### Return value @@ -7981,7 +8019,7 @@ will output the following HTML: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.anchor
        @@ -8018,8 +8056,8 @@ No - [`String.prototype.link()`](link) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor # Atomics.and() @@ -8032,13 +8070,13 @@ The static ` Atomics``.and() ` method computes a bitwise AND with a given value ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to compute the bitwise AND. -`value` +`value` The number to compute the bitwise AND with. ### Return value @@ -8076,7 +8114,7 @@ For example, a bitwise AND of `5 & 1` results in `0001` which is 1 in decimal. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.and
        @@ -8153,7 +8191,7 @@ Chrome disabled `SharedArrayBuffer` on January 5, 2018 to help reduce the effica ### Parameters -`iterable` +`iterable` An [iterable](../../iteration_protocols#the_iterable_protocol) object, such as an [`Array`](../array). ### Return value @@ -8246,7 +8284,7 @@ In this example, we have a function that fetches an image and returns a blob. We ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.any
        @@ -8284,8 +8322,8 @@ No - [`Promise.all()`](all) - [`Promise.race()`](race) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/any # Function.prototype.apply() @@ -8299,12 +8337,12 @@ The `apply()` method calls a function with a given `this` value, and `arguments` ### Parameters -`thisArg` +`thisArg` The value of `this` provided for the call to `func`. Note that `this` may not be the actual value seen by the method: if the method is a function in [non-strict mode](../../strict_mode) code, [`null`](../null) and [`undefined`](../undefined) will be replaced with the global object, and primitive values will be boxed. This argument is required. -`argsArray` Optional +`argsArray` Optional An array-like object, specifying the arguments with which `func` should be called, or [`null`](../null) or [`undefined`](../undefined) if no arguments should be provided to the function. Starting with ECMAScript 5 these arguments can be a generic array-like object instead of an array. See below for [browser compatibility](#browser_compatibility) information. @@ -8492,13 +8530,13 @@ The type of individual arguments can be determined by indexing `arguments`: ## Properties -[`arguments.callee`](arguments/callee) +[`arguments.callee`](arguments/callee) Reference to the currently executing function that the arguments belong to. Forbidden in strict mode. -[`arguments.length`](arguments/length) +[`arguments.length`](arguments/length) The number of arguments that were passed to the function. -[`arguments[@@iterator]`](arguments/@@iterator) +[`arguments[@@iterator]`](arguments/@@iterator) Returns a new [Array iterator](../global_objects/array/@@iterator) object that contains the values for each index in `arguments`. ## Examples @@ -8600,7 +8638,7 @@ And also: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arguments-exotic-objects
        @@ -8892,7 +8930,7 @@ To help explain these properties and elements, see this example and then refer t The properties and elements returned from this match are as follows: -
        Property/ElementDescriptionExample
        input +
        Property/ElementDescriptionExample
        input
        Read only
        The original string against which the regular expression was matched."cdbBdbsbz"
        index @@ -8908,126 +8946,126 @@ The properties and elements returned from this match are as follows: ## Constructor -[`Array()`](array/array) +[`Array()`](array/array) Creates a new `Array` object. ## Static properties -[`get Array[@@species]`](array/@@species) +[`get Array[@@species]`](array/@@species) The constructor function is used to create derived objects. ## Static methods -[`Array.from()`](array/from) +[`Array.from()`](array/from) Creates a new `Array` instance from an array-like or iterable object. -[`Array.isArray()`](array/isarray) +[`Array.isArray()`](array/isarray) Returns `true` if the argument is an array, or `false` otherwise. -[`Array.of()`](array/of) +[`Array.of()`](array/of) Creates a new `Array` instance with a variable number of arguments, regardless of number or type of the arguments. ## Instance properties -[`Array.prototype.length`](array/length) +[`Array.prototype.length`](array/length) Reflects the number of elements in an array. -[`Array.prototype[@@unscopables]`](array/@@unscopables) +[`Array.prototype[@@unscopables]`](array/@@unscopables) A symbol containing property names to exclude from a [`with`](../statements/with) binding scope. ## Instance methods -[`Array.prototype.at()`](array/at) This is an experimental API that should not be used in production code. +[`Array.prototype.at()`](array/at) This is an experimental API that should not be used in production code. Returns the array item at the given index. Accepts negative integers, which count back from the last item. -[`Array.prototype.concat()`](array/concat) +[`Array.prototype.concat()`](array/concat) Returns a new array that is this array joined with other array(s) and/or value(s). -[`Array.prototype.copyWithin()`](array/copywithin) +[`Array.prototype.copyWithin()`](array/copywithin) Copies a sequence of array elements within the array. -[`Array.prototype.entries()`](array/entries) +[`Array.prototype.entries()`](array/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. -[`Array.prototype.every()`](array/every) +[`Array.prototype.every()`](array/every) Returns `true` if every element in this array satisfies the testing function. -[`Array.prototype.fill()`](array/fill) +[`Array.prototype.fill()`](array/fill) Fills all the elements of an array from a start index to an end index with a static value. -[`Array.prototype.filter()`](array/filter) +[`Array.prototype.filter()`](array/filter) Returns a new array containing all elements of the calling array for which the provided filtering function returns `true`. -[`Array.prototype.find()`](array/find) +[`Array.prototype.find()`](array/find) Returns the found `element` in the array, if some element in the array satisfies the testing function, or `undefined` if not found. -[`Array.prototype.findIndex()`](array/findindex) +[`Array.prototype.findIndex()`](array/findindex) Returns the found index in the array, if an element in the array satisfies the testing function, or `-1` if not found. -[`Array.prototype.forEach()`](array/foreach) +[`Array.prototype.forEach()`](array/foreach) Calls a function for each element in the array. -[`Array.prototype.includes()`](array/includes) +[`Array.prototype.includes()`](array/includes) Determines whether the array contains a value, returning `true` or `false` as appropriate. -[`Array.prototype.indexOf()`](array/indexof) +[`Array.prototype.indexOf()`](array/indexof) Returns the first (least) index of an element within the array equal to an element, or `-1` if none is found. -[`Array.prototype.join()`](array/join) +[`Array.prototype.join()`](array/join) Joins all elements of an array into a string. -[`Array.prototype.keys()`](array/keys) +[`Array.prototype.keys()`](array/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. -[`Array.prototype.lastIndexOf()`](array/lastindexof) +[`Array.prototype.lastIndexOf()`](array/lastindexof) Returns the last (greatest) index of an element within the array equal to an element, or `-1` if none is found. -[`Array.prototype.map()`](array/map) +[`Array.prototype.map()`](array/map) Returns a new array containing the results of calling a function on every element in this array. -[`Array.prototype.pop()`](array/pop) +[`Array.prototype.pop()`](array/pop) Removes the last element from an array and returns that element. -[`Array.prototype.push()`](array/push) +[`Array.prototype.push()`](array/push) Adds one or more elements to the end of an array, and returns the new `length` of the array. -[`Array.prototype.reduce()`](array/reduce) +[`Array.prototype.reduce()`](array/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. -[`Array.prototype.reduceRight()`](array/reduceright) +[`Array.prototype.reduceRight()`](array/reduceright) Apply a function against an accumulator> and each value of the array (from right-to-left) as to reduce it to a single value. -[`Array.prototype.reverse()`](array/reverse) +[`Array.prototype.reverse()`](array/reverse) Reverses the order of the elements of an array _in place_. (First becomes the last, last becomes first.) -[`Array.prototype.shift()`](array/shift) +[`Array.prototype.shift()`](array/shift) Removes the first element from an array and returns that element. -[`Array.prototype.slice()`](array/slice) +[`Array.prototype.slice()`](array/slice) Extracts a section of the calling array and returns a new array. -[`Array.prototype.some()`](array/some) +[`Array.prototype.some()`](array/some) Returns `true` if at least one element in this array satisfies the provided testing function. -[`Array.prototype.sort()`](array/sort) +[`Array.prototype.sort()`](array/sort) Sorts the elements of an array in place and returns the array. -[`Array.prototype.splice()`](array/splice) +[`Array.prototype.splice()`](array/splice) Adds and/or removes elements from an array. -[`Array.prototype.toLocaleString()`](array/tolocalestring) +[`Array.prototype.toLocaleString()`](array/tolocalestring) Returns a localized string representing the array and its elements. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`Array.prototype.toString()`](array/tostring) +[`Array.prototype.toString()`](array/tostring) Returns a string representing the array and its elements. Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Array.prototype.unshift()`](array/unshift) +[`Array.prototype.unshift()`](array/unshift) Adds one or more elements to the front of an array, and returns the new `length` of the array. -[`Array.prototype.values()`](array/values) +[`Array.prototype.values()`](array/values) Returns a new `Array Iterator` object that contains the values for each index in the array. -[`Array.prototype[@@iterator]()`](array/@@iterator) +[`Array.prototype[@@iterator]()`](array/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -9159,27 +9197,27 @@ The `ArrayBuffer()` constructor creates a new `ArrayBuffer` of the given length ## Constructor -[`ArrayBuffer()`](arraybuffer/arraybuffer) +[`ArrayBuffer()`](arraybuffer/arraybuffer) Creates a new `ArrayBuffer` object. ## Static properties -[`get ArrayBuffer[@@species]`](arraybuffer/@@species) +[`get ArrayBuffer[@@species]`](arraybuffer/@@species) The constructor function that is used to create derived objects. ## Static methods -[`ArrayBuffer.isView(arg)`](arraybuffer/isview) +[`ArrayBuffer.isView(arg)`](arraybuffer/isview) Returns `true` if `arg` is one of the ArrayBuffer views, such as [typed array objects](typedarray) or a [`DataView`](dataview). Returns `false` otherwise. ## Instance properties -[`ArrayBuffer.prototype.byteLength`](arraybuffer/bytelength) +[`ArrayBuffer.prototype.byteLength`](arraybuffer/bytelength) The read-only size, in bytes, of the `ArrayBuffer`. This is established when the array is constructed and cannot be changed. ## Instance methods -[`ArrayBuffer.prototype.slice()`](arraybuffer/slice) +[`ArrayBuffer.prototype.slice()`](arraybuffer/slice) Returns a new `ArrayBuffer` whose contents are a copy of this `ArrayBuffer`'s bytes from `begin` (inclusive) up to `end` (exclusive). If either `begin` or `end` is negative, it refers to an index from the end of the array, as opposed to from the beginning. ## Examples @@ -9193,7 +9231,7 @@ In this example, we create a 8-byte buffer with a [`Int32Array`](int32array) vie ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arraybuffer-objects
        @@ -9380,7 +9418,7 @@ An **arrow function expression** is a compact alternative to a traditional [func ### Comparing traditional functions to arrow functions -Let's decompose a "traditional function" down to the simplest "arrow function" step-by-step: +Let's decompose a "traditional function" down to the simplest "arrow function" step-by-step: NOTE: Each step along the way is a valid "arrow function" // Traditional Function @@ -9782,7 +9820,7 @@ Although the arrow in an arrow function is not an operator, arrow functions have ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arrow-function-definitions
        @@ -9861,7 +9899,7 @@ $$\\forall x \\in \\lbrack{- 1};1\\rbrack,\\;\\mathtt{\\operatorname{Math.asin}( ### Parameters -`x` +`x` A number. ### Return value @@ -9889,7 +9927,7 @@ For values less than -1 or greater than 1, `Math.asin()` returns [`NaN`](../nan) ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.asin
        @@ -9929,8 +9967,8 @@ For values less than -1 or greater than 1, `Math.asin()` returns [`NaN`](../nan) - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin # Math.asinh() @@ -9945,7 +9983,7 @@ The `Math.asinh()` function returns the hyperbolic arcsine of a number, that is ### Parameters -`x` +`x` A number. ### Return value @@ -9985,7 +10023,7 @@ Because `asinh()` is a static method of `Math`, you always use it as `Math.asinh ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.asinh
        @@ -10024,8 +10062,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh # BigInt.asIntN() @@ -10038,10 +10076,10 @@ The `BigInt.asIntN` static method clamps a BigInt value to a signed integer valu ### Parameters -`bits` +`bits` The amount of bits available for the integer size. -`bigint` +`bigint` The BigInt value to clamp to fit into the supplied bits. ### Returns @@ -10065,7 +10103,7 @@ The `BigInt.asIntN()` method can be useful to stay in the range of 64-bit arithm ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bigint.asintn
        @@ -10113,10 +10151,10 @@ The `Object.assign()` method copies all [enumerable](propertyisenumerable) [own ### Parameters -`target` +`target` The target object — what to apply the sources' properties to, which is returned after it is modified. -`sources` +`sources` The source object(s) — objects containing the properties you want to apply. ### Return value @@ -10328,7 +10366,7 @@ The properties are overwritten by other objects that have the same properties la ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.assign
        @@ -10365,8 +10403,8 @@ No - [Enumerability and ownership of properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) - [Spread in object literals](../../operators/spread_syntax#spread_in_object_literals) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign # BigInt.asUintN() @@ -10379,10 +10417,10 @@ The `BigInt.asUintN` static method clamps a BigInt value to an unsigned integer ### Parameters -`bits` +`bits` The amount of bits available for the integer size. -`bigint` +`bigint` The BigInt value to clamp to fit into the supplied bits. ### Returns @@ -10406,7 +10444,7 @@ The `BigInt.asUintN()` method can be useful to stay in the range of 64-bit arith ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bigint.asuintn
        @@ -10458,13 +10496,13 @@ Async functions may also be defined [as expressions](../operators/async_function ### Parameters -`name` +`name` The function's name. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. The `await` mechanism may be used. ### Return value @@ -10637,7 +10675,7 @@ For example, in the following code an unhandled promise rejection error will be In `sequentialStart`, execution suspends 2 seconds for the first `await`, and then another second for the second `await`. The second timer is not created until the first has already fired, so the code finishes after 3 seconds. -In `concurrentStart`, both timers are created and then `await`ed. The timers run concurrently, which means the code finishes in 2 rather than 3 seconds, i.e. the slowest timer. +In `concurrentStart`, both timers are created and then `await`ed. The timers run concurrently, which means the code finishes in 2 rather than 3 seconds, i.e. the slowest timer. However, the `await` calls still run in series, which means the second `await` will wait for the first one to finish. In this case, the result of the fastest timer is processed after the slowest. If you wish to safely perform two or more jobs in parallel, you must await a call to `Promise.all`, or `Promise.allSettled`. @@ -10700,7 +10738,7 @@ This highlights the subtle difference between `return foo;` and `return await fo ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-async-function-definitions
        @@ -10738,8 +10776,8 @@ No - [`await`](../operators/await) - ["Decorating Async Javascript Functions" on "innolitics.com"](https://innolitics.com/10x/javascript-decorators-for-promise-returning-functions/) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function # AsyncFunction @@ -10758,10 +10796,10 @@ Note that `AsyncFunction` is _not_ a global object. It can be obtained with the ### Parameters -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Names to be used by the function as formal argument names. Each must be a string that corresponds to a valid JavaScript identifier or a list of such strings separated with a comma; for example "`x`", "`theValue`", or "`a,b`". -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function definition. ## Description @@ -10802,7 +10840,7 @@ Invoking the `AsyncFunction` constructor as a function (without using the `new` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-async-function-objects
        @@ -10898,7 +10936,7 @@ There are currently no built-in JavaScript objects that have the `[Symbol.asyncI ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.asynciterator
        @@ -10934,8 +10972,8 @@ No - [Iteration protocols](../../iteration_protocols) - [for await... of](../../statements/for-await...of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator # Array.prototype.at() @@ -10950,7 +10988,7 @@ This is not to suggest there is anything wrong with using the square bracket not ### Parameters -`index` +`index` The index (position) of the array element to be returned. Supports relative indexing from the end of the array when passed a negative index; i.e. if a negative number is used, the element returned will be found by counting back from the end of the array. ### Return value @@ -11011,7 +11049,7 @@ $$\\mathtt{\\operatorname{Math.atan}(x)} = \\arctan(x) = \\text{the\\ unique}\\; ### Parameters -`x` +`x` A number. ### Return value @@ -11042,7 +11080,7 @@ Note that you may want to avoid using **±**`Infinity` for stylistic reasons. In ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.atan
        @@ -11082,8 +11120,8 @@ Note that you may want to avoid using **±**`Infinity` for stylistic reasons. In - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan # Math.atan2() @@ -11096,10 +11134,10 @@ The `Math.atan2()` function returns the angle in the plane (in radians) between ### Parameters -`y` +`y` The y coordinate of the point. -`x` +`x` The x coordinate of the point ### Return value @@ -11137,7 +11175,7 @@ Because `atan2()` is a static method of `Math`, you always use it as `Math.atan2 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.atan2
        @@ -11177,8 +11215,8 @@ Because `atan2()` is a static method of `Math`, you always use it as `Math.atan2 - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2 # Math.atanh() @@ -11193,7 +11231,7 @@ The `Math.atanh()` function returns the hyperbolic arctangent of a number, that ### Parameters -`x` +`x` A number. ### Return value @@ -11227,7 +11265,7 @@ For |_x_| < 1, we have $\\operatorname{artanh}(x) = \\frac{1}{2}\\ln\\lef ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.atanh
        @@ -11266,8 +11304,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh # Atomics @@ -11288,40 +11326,40 @@ The `wait()` and `notify()` methods are modeled on Linux futexes ("fast user-spa ## Static methods -[`Atomics.add()`](atomics/add) +[`Atomics.add()`](atomics/add) Adds the provided value to the existing value at the specified index of the array. Returns the old value at that index. -[`Atomics.and()`](atomics/and) +[`Atomics.and()`](atomics/and) Computes a bitwise AND on the value at the specified index of the array with the provided value. Returns the old value at that index. -[`Atomics.compareExchange()`](atomics/compareexchange) +[`Atomics.compareExchange()`](atomics/compareexchange) Stores a value at the specified index of the array, if it equals a value. Returns the old value. -[`Atomics.exchange()`](atomics/exchange) +[`Atomics.exchange()`](atomics/exchange) Stores a value at the specified index of the array. Returns the old value. -[`Atomics.isLockFree(size)`](atomics/islockfree) +[`Atomics.isLockFree(size)`](atomics/islockfree) An optimization primitive that can be used to determine whether to use locks or atomic operations. Returns `true` if an atomic operation on arrays of the given element size will be implemented using a hardware atomic operation (as opposed to a lock). Experts only. -[`Atomics.load()`](atomics/load) +[`Atomics.load()`](atomics/load) Returns the value at the specified index of the array. -[`Atomics.notify()`](atomics/notify) +[`Atomics.notify()`](atomics/notify) Notifies agents that are waiting on the specified index of the array. Returns the number of agents that were notified. -[`Atomics.or()`](atomics/or) +[`Atomics.or()`](atomics/or) Computes a bitwise OR on the value at the specified index of the array with the provided value. Returns the old value at that index. -[`Atomics.store()`](atomics/store) +[`Atomics.store()`](atomics/store) Stores a value at the specified index of the array. Returns the value. -[`Atomics.sub()`](atomics/sub) +[`Atomics.sub()`](atomics/sub) Subtracts a value at the specified index of the array. Returns the old value at that index. -[`Atomics.wait()`](atomics/wait) +[`Atomics.wait()`](atomics/wait) Verifies that the specified index of the array still contains a value and sleeps awaiting or times out. Returns either "`ok`", "`not-equal`", or "`timed-out`". If waiting is not allowed in the calling agent then it throws an [`Error`](error) exception. (Most browsers will not allow `wait()` on the browser's main thread.) -[`Atomics.xor()`](atomics/xor) +[`Atomics.xor()`](atomics/xor) Computes a bitwise XOR on the value at the specified index of the array with the provided value. Returns the old value at that index. ## Examples @@ -11382,7 +11420,7 @@ A writing thread stores a new value and notifies the waiting thread once it has ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics-object
        @@ -12154,10 +12192,10 @@ The `await` operator is used to wait for a [`Promise`](../global_objects/promise [rv] = await expression; -`expression` +`expression` A [`Promise`](../global_objects/promise) or any value to wait for. -`rv` +`rv` Returns the fulfilled value of the promise, or the value itself if it's not a `Promise`. ## Description @@ -12499,7 +12537,7 @@ An [`Intl.Locale`](../locale) object represents a parsed local and options for t ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.baseName
        @@ -12576,7 +12614,7 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.big
        @@ -12612,8 +12650,8 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem - [`String.prototype.fontsize()`](fontsize) - [`String.prototype.small()`](small) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big # BigInt @@ -12785,26 +12823,26 @@ A BigInt value behaves like a Number value in cases where: ## Constructor -[`BigInt()`](bigint/bigint) +[`BigInt()`](bigint/bigint) Creates a new BigInt value. ## Static methods -[`BigInt.asIntN()`](bigint/asintn) +[`BigInt.asIntN()`](bigint/asintn) Clamps a BigInt value to a signed integer value, and returns that value. -[`BigInt.asUintN()`](bigint/asuintn) +[`BigInt.asUintN()`](bigint/asuintn) Clamps a BigInt value to an unsigned integer value, and returns that value. ## Instance methods -[`BigInt.prototype.toLocaleString()`](bigint/tolocalestring) +[`BigInt.prototype.toLocaleString()`](bigint/tolocalestring) Returns a string with a language-sensitive representation of this BigInt value. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`BigInt.prototype.toString()`](bigint/tostring) +[`BigInt.prototype.toString()`](bigint/tostring) Returns a string representing this BigInt value in the specified radix (base). Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`BigInt.prototype.valueOf()`](bigint/valueof) +[`BigInt.prototype.valueOf()`](bigint/valueof) Returns this BigInt value. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Usage recommendations @@ -12864,7 +12902,7 @@ Instead of throwing, `JSON.stringify` now produces a string like this: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bigint-objects
        @@ -13064,117 +13102,117 @@ The `BigInt64Array` typed array represents an array of 64-bit signed integers in ## Constructor -[`BigInt64Array()`](bigint64array/bigint64array) +[`BigInt64Array()`](bigint64array/bigint64array) Creates a new `BigInt64Array` object. ## Static properties -[`BigInt64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`BigInt64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `8` in the case of a `BigInt64Array`. -[`BigInt64Array.name`](typedarray/name) +[`BigInt64Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `BigInt64Array` type, this is "BigInt64Array". ## Static methods -[`BigInt64Array.from()`](typedarray/from) +[`BigInt64Array.from()`](typedarray/from) Creates a new `BigInt64Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`BigInt64Array.of()`](typedarray/of) +[`BigInt64Array.of()`](typedarray/of) Creates a new `BigInt64Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`BigInt64Array.prototype.buffer`](typedarray/buffer) +[`BigInt64Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `BigInt64Array`. This is fixed at construction time and thus **read only**. -[`BigInt64Array.prototype.byteLength`](typedarray/bytelength) +[`BigInt64Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `BigInt64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigInt64Array.prototype.byteOffset`](typedarray/byteoffset) +[`BigInt64Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `BigInt64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigInt64Array.prototype.length`](typedarray/length) +[`BigInt64Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `BigInt64Array`. This is fixed at construction time and thus **read only.** ## Instance methods -[`BigInt64Array.prototype.copyWithin()`](typedarray/copywithin) +[`BigInt64Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`BigInt64Array.prototype.entries()`](typedarray/entries) +[`BigInt64Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`BigInt64Array.prototype.every()`](typedarray/every) +[`BigInt64Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`BigInt64Array.prototype.fill()`](typedarray/fill) +[`BigInt64Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`BigInt64Array.prototype.filter()`](typedarray/filter) +[`BigInt64Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`BigInt64Array.prototype.find()`](typedarray/find) +[`BigInt64Array.prototype.find()`](typedarray/find) Returns the found value in the array if an element in the array satisfies the provided testing function, or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`BigInt64Array.prototype.findIndex()`](typedarray/findindex) +[`BigInt64Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array if an element in the array satisfies the provided testing function, or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`BigInt64Array.prototype.forEach()`](typedarray/foreach) +[`BigInt64Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`BigInt64Array.prototype.includes()`](typedarray/includes) +[`BigInt64Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`BigInt64Array.prototype.indexOf()`](typedarray/indexof) +[`BigInt64Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`BigInt64Array.prototype.join()`](typedarray/join) +[`BigInt64Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`BigInt64Array.prototype.keys()`](typedarray/keys) +[`BigInt64Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`BigInt64Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`BigInt64Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`BigInt64Array.prototype.map()`](typedarray/map) +[`BigInt64Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`BigInt64Array.prototype.reduce()`](typedarray/reduce) +[`BigInt64Array.prototype.reduce()`](typedarray/reduce) Applies a function against an accumulator and each value of the array (from left-to-right) so as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`BigInt64Array.prototype.reduceRight()`](typedarray/reduceright) +[`BigInt64Array.prototype.reduceRight()`](typedarray/reduceright) Applies a function against an accumulator and each value of the array (from right-to-left) so as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`BigInt64Array.prototype.reverse()`](typedarray/reverse) +[`BigInt64Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`BigInt64Array.prototype.set()`](typedarray/set) +[`BigInt64Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`BigInt64Array.prototype.slice()`](typedarray/slice) +[`BigInt64Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`BigInt64Array.prototype.some()`](typedarray/some) +[`BigInt64Array.prototype.some()`](typedarray/some) Returns true if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`BigInt64Array.prototype.sort()`](typedarray/sort) +[`BigInt64Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`BigInt64Array.prototype.subarray()`](typedarray/subarray) +[`BigInt64Array.prototype.subarray()`](typedarray/subarray) Returns a new `BigUint64Array` from the given start and end element index. -[`BigInt64Array.prototype.values()`](typedarray/values) +[`BigInt64Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`BigInt64Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`BigInt64Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`BigInt64Array.prototype.toString()`](typedarray/tostring) +[`BigInt64Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`BigInt64Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`BigInt64Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -13208,7 +13246,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray-objects
        @@ -13279,117 +13317,117 @@ The `BigUint64Array` typed array represents an array of 64-bit unsigned integers ## Constructor -[`BigUint64Array()`](biguint64array/biguint64array) +[`BigUint64Array()`](biguint64array/biguint64array) Creates a new `BigUint64Array` object. ## Static properties -[`BigUint64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`BigUint64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `8` in the case of a `BigUint64Array`. -[`BigUint64Array.name`](typedarray/name) +[`BigUint64Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `BigUint64Array` type this is "BigUint64Array". ## Static methods -[`BigUint64Array.from()`](typedarray/from) +[`BigUint64Array.from()`](typedarray/from) Creates a new `BigUint64Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`BigUint64Array.of()`](typedarray/of) +[`BigUint64Array.of()`](typedarray/of) Creates a new `BigUint64Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`BigUint64Array.prototype.buffer`](typedarray/buffer) +[`BigUint64Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `BigUint64Array`. This is fixed at construction time and thus **read only**. -[`BigUint64Array.prototype.byteLength`](typedarray/bytelength) +[`BigUint64Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `BigUint64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigUint64Array.prototype.byteOffset`](typedarray/byteoffset) +[`BigUint64Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `BigUint64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigUint64Array.prototype.length`](typedarray/length) +[`BigUint64Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `BigUint64Array`. This is fixed at construction time and thus **read only.** ## Instance methods -[`BigUint64Array.prototype.copyWithin()`](typedarray/copywithin) +[`BigUint64Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`BigUint64Array.prototype.entries()`](typedarray/entries) +[`BigUint64Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`BigUint64Array.prototype.every()`](typedarray/every) +[`BigUint64Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`BigUint64Array.prototype.fill()`](typedarray/fill) +[`BigUint64Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`BigUint64Array.prototype.filter()`](typedarray/filter) +[`BigUint64Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`BigUint64Array.prototype.find()`](typedarray/find) +[`BigUint64Array.prototype.find()`](typedarray/find) Returns the found value in the array if an element in the array satisfies the provided testing function, or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`BigUint64Array.prototype.findIndex()`](typedarray/findindex) +[`BigUint64Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array if an element in the array satisfies the provided testing function, or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`BigUint64Array.prototype.forEach()`](typedarray/foreach) +[`BigUint64Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`BigUint64Array.prototype.includes()`](typedarray/includes) +[`BigUint64Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`BigUint64Array.prototype.indexOf()`](typedarray/indexof) +[`BigUint64Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`BigUint64Array.prototype.join()`](typedarray/join) +[`BigUint64Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`BigUint64Array.prototype.keys()`](typedarray/keys) +[`BigUint64Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`BigUint64Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`BigUint64Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`BigUint64Array.prototype.map()`](typedarray/map) +[`BigUint64Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`BigUint64Array.prototype.reduce()`](typedarray/reduce) +[`BigUint64Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) so as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`BigUint64Array.prototype.reduceRight()`](typedarray/reduceright) +[`BigUint64Array.prototype.reduceRight()`](typedarray/reduceright) Applies a function against an accumulator and each value of the array (from right-to-left) so as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`BigUint64Array.prototype.reverse()`](typedarray/reverse) +[`BigUint64Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`BigUint64Array.prototype.set()`](typedarray/set) +[`BigUint64Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`BigUint64Array.prototype.slice()`](typedarray/slice) +[`BigUint64Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`BigUint64Array.prototype.some()`](typedarray/some) +[`BigUint64Array.prototype.some()`](typedarray/some) Returns `true` if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`BigUint64Array.prototype.sort()`](typedarray/sort) +[`BigUint64Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`BigUint64Array.prototype.subarray()`](typedarray/subarray) +[`BigUint64Array.prototype.subarray()`](typedarray/subarray) Returns a new `BigUint64Array` from the given start and end element index. -[`BigUint64Array.prototype.values()`](typedarray/values) +[`BigUint64Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`BigUint64Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`BigUint64Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`BigUint64Array.prototype.toString()`](typedarray/tostring) +[`BigUint64Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`BigUint64Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`BigUint64Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -13423,7 +13461,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray-objects
        @@ -13501,10 +13539,10 @@ The `bind()` method creates a new function that, when called, has its `this` key ### Parameters -`thisArg` +`thisArg` The value to be passed as the `this` parameter to the target function `func` when the bound function is called. The value is ignored if the bound function is constructed using the [`new`](../../operators/new) operator. When using `bind` to create a function (supplied as a callback) inside a `setTimeout`, any primitive value passed as `thisArg` is converted to object. If no arguments are provided to `bind `, or if the `thisArg` is `null` or `undefined`, the `this` of the executing scope is treated as the `thisArg` for the new function. -`arg1, arg2, ...argN` Optional +`arg1, arg2, ...argN` Optional Arguments to prepend to arguments provided to the bound function when invoking `func`. ### Return value @@ -13517,16 +13555,16 @@ The `bind()` function creates a new **bound function**, which is an _exotic func A bound function has the following internal properties: -`[[BoundTargetFunction]]` +`[[BoundTargetFunction]]` The wrapped function object -`[[BoundThis]]` +`[[BoundThis]]` The value that is always passed as `this` value when calling the wrapped function. -`[[BoundArguments]]` +`[[BoundArguments]]` A list of values whose elements are used as the first arguments to any call to the wrapped function. -`[[Call]]` +`[[Call]]` Executes code associated with this object. Invoked via a function call expression. The arguments to the internal method are a `this` value and a list containing the arguments passed to the function by a call expression. When a bound function is called, it calls internal method `[[Call]]` on `[[BoundTargetFunction]]`, with following arguments `Call(boundThis, ...args)`. Where `boundThis` is `[[BoundThis]]`, `args` is `[[BoundArguments]]`, followed by the arguments passed by the function call. @@ -13780,7 +13818,7 @@ If you choose to use this partial implementation, **you must not rely on those c ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function.prototype.bind
        @@ -13859,7 +13897,7 @@ Bitwise ANDing any number `x` with `0` yields `0`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-BitwiseANDExpression
        @@ -13895,8 +13933,8 @@ Bitwise ANDing any number `x` with `0` yields `0`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Bitwise AND assignment operator](bitwise_and_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_AND # Bitwise AND assignment (&=) @@ -13919,7 +13957,7 @@ The bitwise AND assignment operator (`&=`) uses the binary representation of bot ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -13955,8 +13993,8 @@ The bitwise AND assignment operator (`&=`) uses the binary representation of bot - [Assignment operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment) - [Bitwise AND operator](bitwise_and) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_AND_assignment # Bitwise NOT (~) @@ -14000,7 +14038,7 @@ Note that due to using 32-bit representation for numbers both `~-1` and `~429496 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bitwise-not-operator
        @@ -14035,8 +14073,8 @@ Note that due to using 32-bit representation for numbers both `~-1` and `~429496 - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_NOT # Bitwise OR (|) @@ -14081,7 +14119,7 @@ Bitwise ORing any number `x` with `0` yields `x`. ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Bitwise OR expression' in that specification.
        @@ -14117,8 +14155,8 @@ Bitwise ORing any number `x` with `0` yields `x`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Bitwise OR assignment operator](bitwise_or_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_OR # Bitwise OR assignment (|=) @@ -14143,7 +14181,7 @@ The bitwise OR assignment operator (`|=`) uses the binary representation of both ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -14180,8 +14218,8 @@ The bitwise OR assignment operator (`|=`) uses the binary representation of both - [Bitwise OR operator](bitwise_or) - [Logical OR assignment (`||=`)](logical_or_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_OR_assignment # Bitwise XOR (^) @@ -14226,7 +14264,7 @@ Bitwise XORing any number `x` with `0` yields `x`. ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Bitwise XOR expression' in that specification.
        @@ -14262,8 +14300,8 @@ Bitwise XORing any number `x` with `0` yields `x`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Bitwise XOR assignment operator](bitwise_xor_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_XOR # Bitwise XOR assignment (^=) @@ -14293,7 +14331,7 @@ The bitwise XOR assignment operator (`^=`) uses the binary representation of bot ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -14329,8 +14367,8 @@ The bitwise XOR assignment operator (`^=`) uses the binary representation of bot - [Assignment operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment) - [Bitwise XOR operator](bitwise_xor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment # String.prototype.blink() @@ -14370,7 +14408,7 @@ The following example uses string methods to change the formatting of a string: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.blink
        @@ -14407,8 +14445,8 @@ The following example uses string methods to change the formatting of a string: - [`String.prototype.italics()`](italics) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink # block @@ -14429,10 +14467,10 @@ A **block statement** (or **compound statement** in other languages) is used to StatementList } -`StatementList` +`StatementList` Statements grouped within the block statement. -`LabelIdentifier` +`LabelIdentifier` An optional [label](label) for visual identification or as a target for [`break`](break). ## Description @@ -14483,7 +14521,7 @@ In [strict mode](../strict_mode), starting with ES2015, functions inside blocks ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-block
        @@ -14520,8 +14558,8 @@ In [strict mode](../strict_mode), starting with ES2015, functions inside blocks - [`if...else`](if...else) - [`let`](let) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block # String.prototype.bold() @@ -14559,7 +14597,7 @@ The following example uses string methods to change the formatting of a string: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.bold
        @@ -14596,8 +14634,8 @@ The following example uses string methods to change the formatting of a string: - [`String.prototype.italics()`](italics) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold # Boolean @@ -14643,15 +14681,15 @@ Do not use a `Boolean` object in place of a `Boolean` primitive. ## Constructor -[`Boolean()`](boolean/boolean) +[`Boolean()`](boolean/boolean) Creates a new `Boolean` object. ## Instance methods -[`Boolean.prototype.toString()`](boolean/tostring) +[`Boolean.prototype.toString()`](boolean/tostring) Returns a string of either `true` or `false` depending upon the value of the object. Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Boolean.prototype.valueOf()`](boolean/valueof) +[`Boolean.prototype.valueOf()`](boolean/valueof) Returns the primitive value of the [`Boolean`](boolean) object. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Examples @@ -14675,7 +14713,7 @@ Returns the primitive value of the [`Boolean`](boolean) object. Overrides the [` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-boolean-objects
        @@ -14828,7 +14866,7 @@ The `break` terminates the current loop, [`switch`](switch), or [label](label) s break [label]; -`label` Optional +`label` Optional Identifier associated with the label of the statement. If the statement is not a loop or [`switch`](switch), this is required. ## Description @@ -14930,7 +14968,7 @@ The following code also uses `break` statements with labeled blocks, but generat ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Break statement' in that specification.
        @@ -14967,8 +15005,8 @@ The following code also uses `break` statements with labeled blocks, but generat - [label](label) - [`switch`](switch) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break # WebAssembly.Memory.prototype.buffer @@ -14993,7 +15031,7 @@ The following example (see [memory.html](https://github.com/mdn/webassembly-exam ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-memory-buffer
        @@ -15034,8 +15072,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer # SharedArrayBuffer.prototype.byteLength @@ -15055,7 +15093,7 @@ The `byteLength` property is an accessor property whose set accessor function is ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-sharedarraybuffer.prototype.bytelength
        @@ -15124,8 +15162,8 @@ Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy - [`SharedArrayBuffer`](../sharedarraybuffer) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength # TypedArray.prototype.byteOffset @@ -15150,7 +15188,7 @@ The `byteOffset` property is an accessor property whose set accessor function is ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-%typedarray%.prototype.byteoffset
        @@ -15186,8 +15224,8 @@ The `byteOffset` property is an accessor property whose set accessor function is - [JavaScript typed arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) - [`TypedArray`](../typedarray) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset # TypedArray.BYTES_PER_ELEMENT @@ -15228,7 +15266,7 @@ no ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray.bytes_per_element
        @@ -15264,8 +15302,8 @@ no - [JavaScript typed arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) - [`TypedArray`](../typedarray) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT # Intl.Locale.prototype.calendar @@ -15298,7 +15336,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.calendar
        @@ -15350,14 +15388,14 @@ The `call()` method calls a function with a given `this` value and arguments pro ### Parameters -`thisArg` Optional +`thisArg` Optional The value to use as `this` when calling `func`. **Note:** In certain cases, `thisArg` may not be the actual value seen by the method. If the method is a function in [non-strict mode](../../strict_mode), [`null`](../null) and [`undefined`](../undefined) will be replaced with the global object, and primitive values will be converted to objects. -`arg1, arg2, ...argN` Optional +`arg1, arg2, ...argN` Optional Arguments for the function. ### Return value @@ -15464,7 +15502,7 @@ In the example below, we invoke the `display` function without passing the first ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Function.prototype.call' in that specification.
        @@ -15664,7 +15702,7 @@ However, in a case like the following, there are not alternatives to `arguments. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arguments-exotic-objects
        @@ -16127,7 +16165,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.caseFirst
        @@ -16179,10 +16217,10 @@ The `catch()` method returns a [`Promise`](../promise) and deals with rejected c ### Parameters -`onRejected` +`onRejected` A [`Function`](../function) called when the `Promise` is rejected. This function has one argument: -`reason` +`reason` The rejection reason. The Promise returned by `catch()` is rejected if `onRejected` throws an error or returns a Promise which is itself rejected; otherwise, it is resolved. @@ -16306,7 +16344,7 @@ The `catch` method is used for error handling in promise composition. Since it r ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.prototype.catch
        @@ -16342,8 +16380,8 @@ No - [`Promise`](../promise) - [`Promise.prototype.then()`](then) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch # Math.cbrt() @@ -16358,7 +16396,7 @@ $$\\mathtt{Math.cbrt(x)} = \\sqrt\[3\]{x} = \\text{the\\ unique}\\; y\\;\\text{s ### Parameters -x +x A number. ### Return value @@ -16398,7 +16436,7 @@ For all *x* ≥ 0, have $\\sqrt\[3\]{x} = x^{1/3}$ so this can be emulated b ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.cbrt
        @@ -16434,8 +16472,8 @@ No - [`Math.pow()`](pow) - [`Math.sqrt()`](sqrt) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cbrt # Math.ceil() @@ -16450,7 +16488,7 @@ The `Math.ceil()` function always rounds a number up to the next largest integer ### Parameters -`x` +`x` A number. ### Return value @@ -16547,7 +16585,7 @@ The following example shows example usage of `Math.ceil()`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.ceil
        @@ -16586,8 +16624,8 @@ The following example shows example usage of `Math.ceil()`. - [`Math.sign()`](sign) - [`Math.trunc()`](trunc) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil # String.prototype.charAt() @@ -16600,7 +16638,7 @@ The [`String`](../string) object's `charAt()` method returns a new string consis ### Parameters -`index` +`index` An integer between `0` and `str.length - 1`. If the `index` cannot be converted to the integer or no `index` is provided, the default is `0`, so the first character of `str` is returned. ### Return value @@ -16782,7 +16820,7 @@ While the previous example may be more useful for programs that must support non ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.prototype.charAt' in that specification.
        @@ -16823,8 +16861,8 @@ While the previous example may be more useful for programs that must support non - [`String.fromCodePoint()`](fromcodepoint) - [JavaScript has a Unicode problem – Mathias Bynens](https://mathiasbynens.be/notes/javascript-unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt # String.prototype.charCodeAt() @@ -16839,7 +16877,7 @@ The UTF-16 code unit matches the Unicode code point for code points which can be ### Parameters -`index` +`index` An integer greater than or equal to `0` and less than the `length` of the string. If `index` is not a number, it defaults to `0`. ### Return value @@ -16942,7 +16980,7 @@ This version might be used in for loops and the like when it is unknown whether ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.charcodeat
        @@ -16980,8 +17018,8 @@ This version might be used in for loops and the like when it is unknown whether - [`String.fromCodePoint()`](fromcodepoint) - [`String.prototype.codePointAt()`](codepointat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt # class expression @@ -17052,7 +17090,7 @@ If you want to refer to the current class inside the class body, you can create ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-class-definitions
        @@ -17089,8 +17127,8 @@ No - [class declaration](../statements/class) - [Classes](../classes) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/class # Classes @@ -17473,7 +17511,7 @@ If you're experimenting with code in a web browser, such as the Firefox Web Cons ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Class definitions' in that specification.
        @@ -17843,7 +17881,7 @@ The `clear()` method removes all elements from a `Set` object. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-set.prototype.clear
        @@ -17879,8 +17917,8 @@ The `clear()` method removes all elements from a `Set` object. - [`Set`](../set) - [`Set.prototype.delete()`](delete) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear # Math.clz32() @@ -17893,7 +17931,7 @@ The `Math.clz32()` function returns the number of leading zero bits in the 32-bi ### Parameters -`x` +`x` A number. ### Return value @@ -18019,7 +18057,7 @@ The following polyfill is the most efficient. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.clz32
        @@ -18055,8 +18093,8 @@ No - [`Math`](../math) - [`Math.imul`](imul) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 # String.prototype.codePointAt() @@ -18069,7 +18107,7 @@ The `codePointAt()` method returns a non-negative integer that is the UTF-16 cod ### Parameters -`pos` +`pos` Position of an element in `str` to return the code point value from. ### Return value @@ -18157,7 +18195,7 @@ The following extends Strings to include the `codePointAt()` function as specifi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.codepointat
        @@ -18195,8 +18233,8 @@ No - [`String.prototype.charCodeAt()`](charcodeat) - [`String.prototype.charAt()`](charat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt # Intl.Locale.prototype.collation @@ -18233,7 +18271,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.collation
        @@ -18282,32 +18320,32 @@ The `Intl.Collator()` constructor creates [`Intl.Collator`](../collator) objects ### Parameters -`locales` Optional +`locales` Optional Optional. A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the `locales` argument, see the [Intl page](../../intl#locale_identification_and_negotiation). The following Unicode extension keys are allowed: **Note:** These keys can usually also be set with `options` (as listed below). When both are set, the `options` property takes precedence. -`co` +`co` Variant collations for certain locales. Possible values include: "`big5han`", "`dict`", "`direct`", "`ducet`", "`gb2312`", "`phonebk`", "`phonetic`", "`pinyin`", "`reformed`", "`searchjl`", "`stroke`", "`trad`", "`unihan`". This option can be also be set through the `options` property "`collation`". -`kn` +`kn` Whether numeric collation should be used, such that "1" < "2" < "10". Possible values are "`true`" and "`false`". This option can be also be set through the `options` property "`numeric`". -`kf` +`kf` Whether upper case or lower case should sort first. Possible values are "`upper`", "`lower`", or "`false`" (use the locale's default). This option can be also be set through the `options` property "`caseFirst`". -`options` Optional +`options` Optional An object with some or all of the following properties: -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`usage` +`usage` Whether the comparison is for sorting or for searching for matching strings. Possible values are "`sort`" and "`search`"; the default is "`sort`". -`sensitivity` +`sensitivity` Which differences in the strings should lead to non-zero result values. Possible values are: - "`base`": Only strings that differ in base letters compare as unequal. Examples: a ≠ b, a = á, a = A. @@ -18317,20 +18355,20 @@ Which differences in the strings should lead to non-zero result values. Possible The default is "`variant`" for usage "`sort`"; it's locale dependent for usage "`search`". -`ignorePunctuation` +`ignorePunctuation` Whether punctuation should be ignored. Possible values are `true` and `false`; the default is `false`. -`numeric` +`numeric` Whether numeric collation should be used, such that "1" < "2" < "10". Possible values are `true` and `false`; the default is `false`. **Note:** This option can also be set through the `kn` Unicode extension key; if both are provided, this `options` property takes precedence. -`caseFirst` +`caseFirst` Whether upper case or lower case should sort first. Possible values are "`upper`", "`lower`", or "`false`" (use the locale's default). This option can be set through an `options` property or through a Unicode extension key; if both are provided, the `options` property takes precedence. **Note:** This option can also be set through the `kf` Unicode extension key; if both are provided, this `options` property takes precedence. -`collation` +`collation` Variant collations for certain locales. Possible values include: "`big5han`", "`dict`", "`direct`", "`ducet`", "`gb2312`", "`phonebk`" (only supported in German), "`phonetic`", "`pinyin`", "`reformed`", "`searchjl`", "`stroke`", "`trad`", "`unihan`". **Note:** This option can also be set through the `co` Unicode extension key; if both are provided, this `options` property takes precedence. @@ -18349,7 +18387,7 @@ Note that the results shown in the code above can vary between browsers and brow ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-the-intl-collator-constructor
        @@ -18503,7 +18541,7 @@ The **comma operator** (`,`) evaluates each of its operands (from left to right) ### Parameters -`expr1`, `expr2`, `expr3`... +`expr1`, `expr2`, `expr3`... One or more expressions, the last of which is returned as the value of the compound expression. ## Usage notes @@ -18545,7 +18583,7 @@ Another example that one could make with comma operator is processing before ret ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-comma-operator
        @@ -18580,8 +18618,8 @@ Another example that one could make with comma operator is processing before ret - [`for` loop](../statements/for) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator # Intl.Collator.prototype.compare() @@ -18594,8 +18632,8 @@ The `Intl.Collator.prototype.compare()` method compares two strings according to ### Parameters -`string1` -`string2` +`string1` +`string2` The strings to compare against each other. ## Description @@ -18627,7 +18665,7 @@ Use the `compare` getter function for finding matching strings in arrays: ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.collator.prototype.compare
        @@ -18675,16 +18713,16 @@ The static ` Atomics``.compareExchange() ` method exchanges a given replacement ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to exchange a `value`. -`expectedValue` +`expectedValue` The value to check for equality. -`replacementValue` +`replacementValue` The number to exchange. ### Return value @@ -18709,7 +18747,7 @@ The old value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.compareexchange
        @@ -18783,8 +18821,8 @@ The table below details the differences between the methods available on the `Ob
        Method NameObjectReflect
        defineProperty()Object.defineProperty() returns the object that was passed to the function. Returns a TypeError if the property was not successfully defined on the object.Reflect.defineProperty() returns true if the property was defined on the object and false if it was not.
        defineProperties()Object.defineProperties() returns the objects that were passed to the function. Returns a TypeError if any properties were not successfully defined on the object.N/A
        set()N/AReflect.set() returns true if the property was set successfully on the object and false if it was not. Throws a TypeError if the target was not an Object.
        get()N/AReflect.get() returns the value of the property. Throws a TypeError if the target was not an Object.
        deleteProperty()N/AReflect.deleteProperty() returns true if the property was deleted from the object and false if it was not.
        getOwnPropertyDescriptor()Object.getOwnPropertyDescriptor() returns a property descriptor of the given property if it exists on the object argument passed in, and returns undefined if it does not exist. However, if an object is not passed in as the first argument, it will be coerced into an object.Reflect.getOwnPropertyDescriptor() returns a property descriptor of the given property if it exists on the object. Returns undefined if it does not exist, and a TypeError if anything other than an object (a primitive) is passed in as the first argument.
        getOwnPropertyDescriptors()Object.getOwnPropertyDescriptors() returns an object containing a property descriptor of each passed-in object. Returns an empty object if the passed-in object has no owned property descriptors.N/A
        getPrototypeOf()Object.getPrototypeOf() returns the prototype of the given object. Returns null if there are no inherited properties. Throws a TypeError for non-objects in ES5, but coerces non-objects in ES2015.Reflect.getPrototypeOf() returns the prototype of the given object. Returns null if there are no inherited properties, and throws a TypeError for non-objects.
        setPrototypeOf()Object.setPrototypeOf() returns the object itself if its prototype was set successfully. Throws a TypeError if the prototype being set was anything other than an Object or null, or if the prototype for the object being modified is non-extensible.Reflect.setPrototypeOf() returns true if the prototype was successfully set on the object and false if it wasn't (including if the prototype is non-extensible). Throws a TypeError if the target passed in was not an Object, or if the prototype being set was anything other than an Object or null.
        isExtensible()Object.isExtensible() returns true if the object is extensible, and false if it is not. Throws a TypeError in ES5 if the first argument is not an object (a primitive). In ES2015, it will be coerced into a non-extensible, ordinary object and will return false.

        Reflect.isExtensible() returns true if the object is extensible, and false if it is not. Throws a TypeError if the first argument is not an object (a primitive).

        preventExtensions()

        Object.preventExtensions() returns the object that is being made non-extensible. Throws a TypeErrorin ES5 if the argument is not an object (a primitive). In ES2015, treats the argument as a non-extensible, ordinary object and returns the object itself.

        Reflect.preventExtensions() returns true if the object has been made non-extensible, and false if it has not. Throws a TypeError if the argument is not an object (a primitive).
        keys()Object.keys() returns an Array of strings that map to the target object's own (enumerable) property keys. Throws a TypeError in ES5 if the target is not an object, but coerces non-object targets into objects in ES2015.N/A
        ownKeys()N/AReflect.ownKeys() returns an Array of property names that map to the target object's own property keys. Throws a TypeError if the target is not an Object.
        -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods # WebAssembly.compile() @@ -18797,7 +18835,7 @@ The `WebAssembly.compile()` function compiles WebAssembly binary code into a [`W ### Parameters -_bufferSource_ +_bufferSource_ A [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) or [ArrayBuffer](../arraybuffer) containing the binary code of the .wasm module you want to compile. ### Return value @@ -18829,7 +18867,7 @@ The following example compiles the loaded simple.wasm byte code using the `compi ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-webassembly-compile
        @@ -18870,8 +18908,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/compile # WebAssembly.CompileError @@ -18880,35 +18918,35 @@ The `WebAssembly.CompileError` object indicates an error during WebAssembly deco ## Constructor -[`WebAssembly.CompileError()`](compileerror/compileerror) +[`WebAssembly.CompileError()`](compileerror/compileerror) Creates a new `WebAssembly.CompileError` object. ## Instance properties -[`WebAssembly.CompileError.prototype.message`](../error/message) +[`WebAssembly.CompileError.prototype.message`](../error/message) Error message. Although ECMA-262 specifies that [`URIError`](../urierror) should provide its own `message` property, in [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey), it inherits [`Error.prototype.message`](../error/message). -[`WebAssembly.CompileError.prototype.name`](../error/name) +[`WebAssembly.CompileError.prototype.name`](../error/name) Error name. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.fileName`](../error/filename) +[`WebAssembly.CompileError.prototype.fileName`](../error/filename) Path to file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.lineNumber`](../error/linenumber) +[`WebAssembly.CompileError.prototype.lineNumber`](../error/linenumber) Line number in file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.columnNumber`](../error/columnnumber) +[`WebAssembly.CompileError.prototype.columnNumber`](../error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.stack`](../error/stack) +[`WebAssembly.CompileError.prototype.stack`](../error/stack) Stack trace. Inherited from [`Error`](../error). ## Instance methods -[`WebAssembly.CompileError.prototype.toSource()`](../error/tosource) +[`WebAssembly.CompileError.prototype.toSource()`](../error/tosource) Returns code that could eval to the same error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.toString()`](../error/tostring) +[`WebAssembly.CompileError.prototype.toString()`](../error/tostring) Returns a string representing the specified `Error` object.. Inherited from [`Error`](../error). ## Examples @@ -18931,7 +18969,7 @@ The following snippet creates a new `CompileError` instance, and logs its detail ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #exceptiondef-compileerror
        ECMAScript Language Specification (ECMAScript) @@ -19005,8 +19043,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError # WebAssembly.compileStreaming() @@ -19019,7 +19057,7 @@ The `WebAssembly.compileStreaming()` function compiles a [`WebAssembly.Module`]( ### Parameters -_source_ +_source_ A [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object or a promise that will fulfill with one, representing the underlying source of a .wasm module you want to stream and compile. ### Return value @@ -19047,7 +19085,7 @@ The resulting module instance is then instantiated using [`WebAssembly.instantia ## Specifications -
        Specification
        WebAssembly Web API (WebAssembly Web API) +
        Specification
        WebAssembly Web API (WebAssembly Web API)
        #dom-webassembly-compilestreaming
        @@ -19084,8 +19122,8 @@ No - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming # Array.prototype.concat() @@ -19101,7 +19139,7 @@ The `concat()` method is used to merge two or more arrays. This method does not ### Parameters -`valueN` Optional +`valueN` Optional Arrays and/or values to concatenate into a new array. If all `valueN` parameters are omitted, `concat` returns a shallow copy of the existing array on which it is called. See the description below for more details. ### Return value @@ -19175,7 +19213,7 @@ The following code concatenates nested arrays and demonstrates retention of refe ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.concat
        @@ -19226,13 +19264,13 @@ The **conditional (ternary) operator** is the only JavaScript operator that take ### Parameters -`condition` +`condition` An expression whose value is used as a condition. -`exprIfTrue` +`exprIfTrue` An expression which is evaluated if the `condition` evaluates to a [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) value (one which equals or can be converted to `true`). -`exprIfFalse` +`exprIfFalse` An expression which is executed if the `condition` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) (that is, has a value which can be converted to `false`). ## Description @@ -19281,7 +19319,7 @@ The ternary operator is right-associative, which means it can be "chained" in th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-conditional-operator
        @@ -19320,8 +19358,8 @@ The ternary operator is right-associative, which means it can be "chained" in th - [Making decisions in your code — conditionals](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/conditionals) - [Expressions and operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator # const @@ -19332,10 +19370,10 @@ Constants are block-scoped, much like variables declared using the `let` keyword const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]]; -`nameN` +`nameN` The constant's name, which can be any legal [identifier](https://developer.mozilla.org/en-US/docs/Glossary/Identifier). -`valueN` +`valueN` The constant's value. This can be any legal [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#expressions), including a function expression. The [Destructuring Assignment](../operators/destructuring_assignment) syntax can also be used to declare variables. @@ -19430,7 +19468,7 @@ const also works on objects and arrays. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-let-and-const-declarations
        @@ -19471,8 +19509,8 @@ const also works on objects and arrays. - [`let`](let) - [Constants in the JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#constants) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const # Reflect.construct() @@ -19486,13 +19524,13 @@ The static `Reflect.construct()` method acts like the [`new`](../../operators/ne ### Parameters -`target` +`target` The target function to call. -`argumentsList` +`argumentsList` An array-like object specifying the arguments with which `target` should be called. -`newTarget` Optional +`newTarget` Optional The constructor whose prototype should be used. See also the [`new.target`](../../operators/new.target) operator. If `newTarget` is not present, its value defaults to `target`. ### Return value @@ -19590,7 +19628,7 @@ When invoking `Reflect.construct()`, on the other hand, the `new.target` operato ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-reflect.construct
        @@ -19627,8 +19665,8 @@ No - [`new`](../../operators/new) - `new.target` -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct # Object.prototype.constructor @@ -19809,7 +19847,7 @@ or assign parent constructor identifier to a separate property on the Child cons ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.prototype.constructor' in that specification.
        @@ -19846,8 +19884,8 @@ or assign parent constructor identifier to a separate property on the Child cons - [Class constructor](../../classes/constructor) - Glossary: [constructor](https://developer.mozilla.org/en-US/docs/Glossary/Constructor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor # continue @@ -19858,7 +19896,7 @@ The `continue` terminates execution of the statements in the current iteration o continue [label]; -`label` +`label` Identifier associated with the label of the statement. ## Description @@ -19949,7 +19987,7 @@ Output: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Continue statement' in that specification.
        @@ -19985,8 +20023,8 @@ Output: - [`break`](break) - [label](label) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/continue # Array.prototype.copyWithin() @@ -20001,17 +20039,17 @@ The `copyWithin()` method shallow copies part of an array to another location in ### Parameters -`target` +`target` Zero-based index at which to copy the sequence to. If negative, `target` will be counted from the end. If `target` is at or greater than `arr.length`, nothing will be copied. If `target` is positioned after `start`, the copied sequence will be trimmed to fit `arr.length`. -`start` Optional +`start` Optional Zero-based index at which to start copying elements from. If negative, `start` will be counted from the end. If `start` is omitted, `copyWithin` will copy from index `0`. -`end` Optional +`end` Optional Zero-based index at which to end copying elements from. `copyWithin` copies up to but not including `end`. If negative, `end` will be counted from the end. If `end` is omitted, `copyWithin` will copy until the last index (default to `arr.length`). @@ -20059,7 +20097,7 @@ The `copyWithin` method is a mutable method. It does not alter the length of `th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.copywithin
        @@ -20107,7 +20145,7 @@ The `Math.cos()` static function returns the [cosine](https://en.wikipedia.org/w ### Parameters -`x` +`x` The angle in radians for which to return the cosine. ### Return value @@ -20132,7 +20170,7 @@ Because `cos()` is a static method of `Math`, you always use it as `Math.cos()`, ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.cos
        @@ -20172,8 +20210,8 @@ Because `cos()` is a static method of `Math`, you always use it as `Math.cos()`, - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos # Math.cosh() @@ -20188,7 +20226,7 @@ $$\\mathtt{\\operatorname{Math.cosh(x)}} = \\frac{e^{x} + e^{- x}}{2}$$ ### Parameters -`x` +`x` A number. ### Return value @@ -20224,7 +20262,7 @@ or using only one call to the [`Math.exp()`](exp) function: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.cosh
        @@ -20263,8 +20301,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh # Object.create() @@ -20278,10 +20316,10 @@ The `Object.create()` method creates a new object, using an existing object as t ### Parameters -`proto` +`proto` The object which should be the prototype of the newly-created object. -`propertiesObject` Optional +`propertiesObject` Optional If specified and not [`undefined`](../undefined), an object whose enumerable own properties (that is, those properties defined upon itself and _not_ enumerable properties along its prototype chain) specify property descriptors to be added to the newly-created object, with the corresponding property names. These properties correspond to the second argument of [`Object.defineProperties()`](defineproperties). ### Return value @@ -20600,7 +20638,7 @@ If you wish to inherit from multiple objects, then mixins are a possibility. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.create
        @@ -20639,8 +20677,8 @@ If you wish to inherit from multiple objects, then mixins are a possibility. - [`Reflect.construct()`](../reflect/construct) - John Resig's post on [getPrototypeOf()](http://ejohn.org/blog/objectgetprototypeof/) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create # WebAssembly.Module.customSections() @@ -20653,10 +20691,10 @@ The `WebAssembly.customSections()` function returns a copy of the contents of al ### Parameters -_module_ +_module_ The [`WebAssembly.Module`](../module) object whose custom sections are being considered. -_sectionName_ +_sectionName_ The string name of the desired custom section. ### Return value @@ -20696,7 +20734,7 @@ We then do a check using `WebAssembly.Module.customSections`, looking to see whe ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-module-customsections
        @@ -20737,8 +20775,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections # TypeError: cyclic object value @@ -20850,80 +20888,80 @@ Alternatively, if you need full 64-bit range, you can create a [`BigInt`](bigint ## Constructor -[`DataView()`](dataview/dataview) +[`DataView()`](dataview/dataview) Creates a new `DataView` object. ## Instance properties -[`DataView.prototype.buffer`](dataview/buffer) +[`DataView.prototype.buffer`](dataview/buffer) The [`ArrayBuffer`](arraybuffer) referenced by this view. Fixed at construction time and thus **read only.** -[`DataView.prototype.byteLength`](dataview/bytelength) +[`DataView.prototype.byteLength`](dataview/bytelength) The length (in bytes) of this view from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`DataView.prototype.byteOffset`](dataview/byteoffset) +[`DataView.prototype.byteOffset`](dataview/byteoffset) The offset (in bytes) of this view from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** ## Instance methods -[`DataView.prototype.getInt8()`](dataview/getint8) +[`DataView.prototype.getInt8()`](dataview/getint8) Gets a signed 8-bit integer (byte) at the specified byte offset from the start of the view. -[`DataView.prototype.getUint8()`](dataview/getuint8) +[`DataView.prototype.getUint8()`](dataview/getuint8) Gets an unsigned 8-bit integer (unsigned byte) at the specified byte offset from the start of the view. -[`DataView.prototype.getInt16()`](dataview/getint16) +[`DataView.prototype.getInt16()`](dataview/getint16) Gets a signed 16-bit integer (short) at the specified byte offset from the start of the view. -[`DataView.prototype.getUint16()`](dataview/getuint16) +[`DataView.prototype.getUint16()`](dataview/getuint16) Gets an unsigned 16-bit integer (unsigned short) at the specified byte offset from the start of the view. -[`DataView.prototype.getInt32()`](dataview/getint32) +[`DataView.prototype.getInt32()`](dataview/getint32) Gets a signed 32-bit integer (long) at the specified byte offset from the start of the view. -[`DataView.prototype.getUint32()`](dataview/getuint32) +[`DataView.prototype.getUint32()`](dataview/getuint32) Gets an unsigned 32-bit integer (unsigned long) at the specified byte offset from the start of the view. -[`DataView.prototype.getFloat32()`](dataview/getfloat32) +[`DataView.prototype.getFloat32()`](dataview/getfloat32) Gets a signed 32-bit float (float) at the specified byte offset from the start of the view. -[`DataView.prototype.getFloat64()`](dataview/getfloat64) +[`DataView.prototype.getFloat64()`](dataview/getfloat64) Gets a signed 64-bit float (double) at the specified byte offset from the start of the view. -[`DataView.prototype.getBigInt64()`](dataview/getbigint64) +[`DataView.prototype.getBigInt64()`](dataview/getbigint64) Gets a signed 64-bit integer (long long) at the specified byte offset from the start of the view. -[`DataView.prototype.getBigUint64()`](dataview/getbiguint64) +[`DataView.prototype.getBigUint64()`](dataview/getbiguint64) Gets an unsigned 64-bit integer (unsigned long long) at the specified byte offset from the start of the view. -[`DataView.prototype.setInt8()`](dataview/setint8) +[`DataView.prototype.setInt8()`](dataview/setint8) Stores a signed 8-bit integer (byte) value at the specified byte offset from the start of the view. -[`DataView.prototype.setUint8()`](dataview/setuint8) +[`DataView.prototype.setUint8()`](dataview/setuint8) Stores an unsigned 8-bit integer (unsigned byte) value at the specified byte offset from the start of the view. -[`DataView.prototype.setInt16()`](dataview/setint16) +[`DataView.prototype.setInt16()`](dataview/setint16) Stores a signed 16-bit integer (short) value at the specified byte offset from the start of the view. -[`DataView.prototype.setUint16()`](dataview/setuint16) +[`DataView.prototype.setUint16()`](dataview/setuint16) Stores an unsigned 16-bit integer (unsigned short) value at the specified byte offset from the start of the view. -[`DataView.prototype.setInt32()`](dataview/setint32) +[`DataView.prototype.setInt32()`](dataview/setint32) Stores a signed 32-bit integer (long) value at the specified byte offset from the start of the view. -[`DataView.prototype.setUint32()`](dataview/setuint32) +[`DataView.prototype.setUint32()`](dataview/setuint32) Stores an unsigned 32-bit integer (unsigned long) value at the specified byte offset from the start of the view. -[`DataView.prototype.setFloat32()`](dataview/setfloat32) +[`DataView.prototype.setFloat32()`](dataview/setfloat32) Stores a signed 32-bit float (float) value at the specified byte offset from the start of the view. -[`DataView.prototype.setFloat64()`](dataview/setfloat64) +[`DataView.prototype.setFloat64()`](dataview/setfloat64) Stores a signed 64-bit float (double) value at the specified byte offset from the start of the view. -[`DataView.prototype.setBigInt64()`](dataview/setbigint64) +[`DataView.prototype.setBigInt64()`](dataview/setbigint64) Stores a signed 64-bit integer (long long) value at the specified byte offset from the start of the view. -[`DataView.prototype.setBigUint64()`](dataview/setbiguint64) +[`DataView.prototype.setBigUint64()`](dataview/setbiguint64) Stores an unsigned 64-bit integer (unsigned long long) value at the specified byte offset from the start of the view. ## Examples @@ -20938,7 +20976,7 @@ Stores an unsigned 64-bit integer (unsigned long long) value at the specified by ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview-objects
        @@ -21625,166 +21663,166 @@ In addition to methods to read and alter individual components of the local date ## Constructor -[`Date()`](date/date) +[`Date()`](date/date) When called as a function, returns a string representation of the current date and time, exactly as `new Date().toString()` does. -[`new Date()`](date/date) +[`new Date()`](date/date) When called as a constructor, returns a new `Date` object. ## Static methods -[`Date.now()`](date/now) +[`Date.now()`](date/now) Returns the numeric value corresponding to the current time—the number of milliseconds elapsed since January 1, 1970 00:00:00 UTC, with leap seconds ignored. -[`Date.parse()`](date/parse) +[`Date.parse()`](date/parse) Parses a string representation of a date and returns the number of milliseconds since 1 January, 1970, 00:00:00 UTC, with leap seconds ignored. **Note:** Parsing of strings with `Date.parse` is strongly discouraged due to browser differences and inconsistencies. -[`Date.UTC()`](date/utc) +[`Date.UTC()`](date/utc) Accepts the same parameters as the longest form of the constructor (i.e. 2 to 7) and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC, with leap seconds ignored. ## Instance methods -[`Date.prototype.getDate()`](date/getdate) +[`Date.prototype.getDate()`](date/getdate) Returns the day of the month (`1`–`31`) for the specified date according to local time. -[`Date.prototype.getDay()`](date/getday) +[`Date.prototype.getDay()`](date/getday) Returns the day of the week (`0`–`6`) for the specified date according to local time. -[`Date.prototype.getFullYear()`](date/getfullyear) +[`Date.prototype.getFullYear()`](date/getfullyear) Returns the year (4 digits for 4-digit years) of the specified date according to local time. -[`Date.prototype.getHours()`](date/gethours) +[`Date.prototype.getHours()`](date/gethours) Returns the hour (`0`–`23`) in the specified date according to local time. -[`Date.prototype.getMilliseconds()`](date/getmilliseconds) +[`Date.prototype.getMilliseconds()`](date/getmilliseconds) Returns the milliseconds (`0`–`999`) in the specified date according to local time. -[`Date.prototype.getMinutes()`](date/getminutes) +[`Date.prototype.getMinutes()`](date/getminutes) Returns the minutes (`0`–`59`) in the specified date according to local time. -[`Date.prototype.getMonth()`](date/getmonth) +[`Date.prototype.getMonth()`](date/getmonth) Returns the month (`0`–`11`) in the specified date according to local time. -[`Date.prototype.getSeconds()`](date/getseconds) +[`Date.prototype.getSeconds()`](date/getseconds) Returns the seconds (`0`–`59`) in the specified date according to local time. -[`Date.prototype.getTime()`](date/gettime) +[`Date.prototype.getTime()`](date/gettime) Returns the numeric value of the specified date as the number of milliseconds since January 1, 1970, 00:00:00 UTC. (Negative values are returned for prior times.) -[`Date.prototype.getTimezoneOffset()`](date/gettimezoneoffset) +[`Date.prototype.getTimezoneOffset()`](date/gettimezoneoffset) Returns the time-zone offset in minutes for the current locale. -[`Date.prototype.getUTCDate()`](date/getutcdate) +[`Date.prototype.getUTCDate()`](date/getutcdate) Returns the day (date) of the month (`1`–`31`) in the specified date according to universal time. -[`Date.prototype.getUTCDay()`](date/getutcday) +[`Date.prototype.getUTCDay()`](date/getutcday) Returns the day of the week (`0`–`6`) in the specified date according to universal time. -[`Date.prototype.getUTCFullYear()`](date/getutcfullyear) +[`Date.prototype.getUTCFullYear()`](date/getutcfullyear) Returns the year (4 digits for 4-digit years) in the specified date according to universal time. -[`Date.prototype.getUTCHours()`](date/getutchours) +[`Date.prototype.getUTCHours()`](date/getutchours) Returns the hours (`0`–`23`) in the specified date according to universal time. -[`Date.prototype.getUTCMilliseconds()`](date/getutcmilliseconds) +[`Date.prototype.getUTCMilliseconds()`](date/getutcmilliseconds) Returns the milliseconds (`0`–`999`) in the specified date according to universal time. -[`Date.prototype.getUTCMinutes()`](date/getutcminutes) +[`Date.prototype.getUTCMinutes()`](date/getutcminutes) Returns the minutes (`0`–`59`) in the specified date according to universal time. -[`Date.prototype.getUTCMonth()`](date/getutcmonth) +[`Date.prototype.getUTCMonth()`](date/getutcmonth) Returns the month (`0`–`11`) in the specified date according to universal time. -[`Date.prototype.getUTCSeconds()`](date/getutcseconds) +[`Date.prototype.getUTCSeconds()`](date/getutcseconds) Returns the seconds (`0`–`59`) in the specified date according to universal time. -[`Date.prototype.getYear()`](date/getyear) +[`Date.prototype.getYear()`](date/getyear) Returns the year (usually 2–3 digits) in the specified date according to local time. Use [`getFullYear()`](date/getfullyear) instead. -[`Date.prototype.setDate()`](date/setdate) +[`Date.prototype.setDate()`](date/setdate) Sets the day of the month for a specified date according to local time. -[`Date.prototype.setFullYear()`](date/setfullyear) +[`Date.prototype.setFullYear()`](date/setfullyear) Sets the full year (e.g. 4 digits for 4-digit years) for a specified date according to local time. -[`Date.prototype.setHours()`](date/sethours) +[`Date.prototype.setHours()`](date/sethours) Sets the hours for a specified date according to local time. -[`Date.prototype.setMilliseconds()`](date/setmilliseconds) +[`Date.prototype.setMilliseconds()`](date/setmilliseconds) Sets the milliseconds for a specified date according to local time. -[`Date.prototype.setMinutes()`](date/setminutes) +[`Date.prototype.setMinutes()`](date/setminutes) Sets the minutes for a specified date according to local time. -[`Date.prototype.setMonth()`](date/setmonth) +[`Date.prototype.setMonth()`](date/setmonth) Sets the month for a specified date according to local time. -[`Date.prototype.setSeconds()`](date/setseconds) +[`Date.prototype.setSeconds()`](date/setseconds) Sets the seconds for a specified date according to local time. -[`Date.prototype.setTime()`](date/settime) +[`Date.prototype.setTime()`](date/settime) Sets the [`Date`](date) object to the time represented by a number of milliseconds since January 1, 1970, 00:00:00 UTC. Use negative numbers for times prior. -[`Date.prototype.setUTCDate()`](date/setutcdate) +[`Date.prototype.setUTCDate()`](date/setutcdate) Sets the day of the month for a specified date according to universal time. -[`Date.prototype.setUTCFullYear()`](date/setutcfullyear) +[`Date.prototype.setUTCFullYear()`](date/setutcfullyear) Sets the full year (e.g. 4 digits for 4-digit years) for a specified date according to universal time. -[`Date.prototype.setUTCHours()`](date/setutchours) +[`Date.prototype.setUTCHours()`](date/setutchours) Sets the hour for a specified date according to universal time. -[`Date.prototype.setUTCMilliseconds()`](date/setutcmilliseconds) +[`Date.prototype.setUTCMilliseconds()`](date/setutcmilliseconds) Sets the milliseconds for a specified date according to universal time. -[`Date.prototype.setUTCMinutes()`](date/setutcminutes) +[`Date.prototype.setUTCMinutes()`](date/setutcminutes) Sets the minutes for a specified date according to universal time. -[`Date.prototype.setUTCMonth()`](date/setutcmonth) +[`Date.prototype.setUTCMonth()`](date/setutcmonth) Sets the month for a specified date according to universal time. -[`Date.prototype.setUTCSeconds()`](date/setutcseconds) +[`Date.prototype.setUTCSeconds()`](date/setutcseconds) Sets the seconds for a specified date according to universal time. -[`Date.prototype.setYear()`](date/setyear) +[`Date.prototype.setYear()`](date/setyear) Sets the year (usually 2–3 digits) for a specified date according to local time. Use [`setFullYear()`](date/setfullyear) instead. -[`Date.prototype.toDateString()`](date/todatestring) +[`Date.prototype.toDateString()`](date/todatestring) Returns the "date" portion of the [`Date`](date) as a human-readable string like `'Thu Apr 12 2018'`. -[`Date.prototype.toISOString()`](date/toisostring) +[`Date.prototype.toISOString()`](date/toisostring) Converts a date to a string following the ISO 8601 Extended Format. -[`Date.prototype.toJSON()`](date/tojson) +[`Date.prototype.toJSON()`](date/tojson) Returns a string representing the [`Date`](date) using [`toISOString()`](date/toisostring). Intended for use by [`JSON.stringify()`](json/stringify). -[`Date.prototype.toGMTString()`](date/togmtstring) +[`Date.prototype.toGMTString()`](date/togmtstring) Returns a string representing the [`Date`](date) based on the GMT (UTC) time zone. Use [`toUTCString()`](date/toutcstring) instead. -[`Date.prototype.toLocaleDateString()`](date/tolocaledatestring) +[`Date.prototype.toLocaleDateString()`](date/tolocaledatestring) Returns a string with a locality sensitive representation of the date portion of this date based on system settings. -`Date.prototype.toLocaleFormat()` +`Date.prototype.toLocaleFormat()` Converts a date to a string, using a format string. -[`Date.prototype.toLocaleString()`](date/tolocalestring) +[`Date.prototype.toLocaleString()`](date/tolocalestring) Returns a string with a locality-sensitive representation of this date. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`Date.prototype.toLocaleTimeString()`](date/tolocaletimestring) +[`Date.prototype.toLocaleTimeString()`](date/tolocaletimestring) Returns a string with a locality-sensitive representation of the time portion of this date, based on system settings. -[`Date.prototype.toString()`](date/tostring) +[`Date.prototype.toString()`](date/tostring) Returns a string representing the specified [`Date`](date) object. Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Date.prototype.toTimeString()`](date/totimestring) +[`Date.prototype.toTimeString()`](date/totimestring) Returns the "time" portion of the [`Date`](date) as a human-readable string. -[`Date.prototype.toUTCString()`](date/toutcstring) +[`Date.prototype.toUTCString()`](date/toutcstring) Converts a date to a string using the UTC timezone. -[`Date.prototype.valueOf()`](date/valueof) +[`Date.prototype.valueOf()`](date/valueof) Returns the primitive value of a [`Date`](date) object. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Examples @@ -21864,7 +21902,7 @@ In this case, it's important to return only an integer—so a simple division wo ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date-objects
        @@ -23269,22 +23307,22 @@ The `Intl.DateTimeFormat()` constructor creates [`Intl.DateTimeFormat`](../datet ### Parameters -`locales` Optional +`locales` Optional A string with a BCP 47 language tag, or an array of such strings. To use the browser's default locale, pass an empty array. Unicode extension are supported (for example "`en-US-u-ca-buddhist`"). For the general form and interpretation of the `locales` argument, see the [Intl](../../intl#locale_identification_and_negotiation) page. The following Unicode extension keys are allowed: -`nu` +`nu` Numbering system. Possible values include: "`arab`", "`arabext`", "`bali`", "`beng`", "`deva`", "`fullwide`", "`gujr`", "`guru`", "`hanidec`", "`khmr`", "`knda`", "`laoo`", "`latn`", "`limb`", "`mlym`", "`mong`", "`mymr`", "`orya`", "`tamldec`", "`telu`", "`thai`", "`tibt`". -`ca` +`ca` Calendar. Possible values include: "`buddhist`", "`chinese`", "`coptic`", "`ethiopia`", "`ethiopic`", "`gregory`", "`hebrew`", "`indian`", "`islamic`", "`iso8601`", "`japanese`", "`persian`", "`roc`". -`hc` +`hc` Hour cycle. Possible values include: "`h11`", "`h12`", "`h23`", "`h24`". -`options` Optional +`options` Optional An object with some or all of the following properties: -`dateStyle` +`dateStyle` The date formatting style to use when calling `format()`. Possible values include: - "`full`" @@ -23294,7 +23332,7 @@ The date formatting style to use when calling `format()`. Possible values includ **Note:** `dateStyle` can be used with `timeStyle`, but not with other options (e.g. `weekday`, `hour`, `month`, etc.). -`timeStyle` +`timeStyle` The time formatting style to use when calling `format()`. Possible values include: - "`full`" @@ -23304,28 +23342,28 @@ The time formatting style to use when calling `format()`. Possible values includ **Note:** `timeStyle` can be used with `dateStyle`, but not with other options (e.g. `weekday`, `hour`, `month`, etc.). -`calendar` +`calendar` Calendar. Possible values include: "`buddhist`", "`chinese`", " `coptic`", "`ethiopia`", "`ethiopic`", "`gregory`", " `hebrew`", "`indian`", "`islamic`", "`iso8601`", " `japanese`", "`persian`", "`roc`". -`dayPeriod` +`dayPeriod` The way day periods should be expressed. Possible values include: "`narrow`", "`short`", " `long`". -`numberingSystem` +`numberingSystem` Numbering System. Possible values include: "`arab`", "`arabext`", " `bali`", "`beng`", "`deva`", "`fullwide`", " `gujr`", "`guru`", "`hanidec`", "`khmr`", " `knda`", "`laoo`", "`latn`", "`limb`", "`mlym`", " `mong`", "`mymr`", "`orya`", "`tamldec`", " `telu`", "`thai`", "`tibt`". -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`timeZone` +`timeZone` The time zone to use. The only value implementations must recognize is "`UTC`"; the default is the runtime's default time zone. Implementations may also recognize the time zone names of the [IANA time zone database](https://www.iana.org/time-zones), such as "`Asia/Shanghai`", "`Asia/Kolkata`", "`America/New_York`". -`hour12` +`hour12` Whether to use 12-hour time (as opposed to 24-hour time). Possible values are `true` and `false`; the default is locale dependent. This option overrides the `hc` language tag and/or the `hourCycle` option in case both are present. -`hourCycle` +`hourCycle` The hour cycle to use. Possible values are "`h11`", "`h12`", "`h23`", or "`h24`". This option overrides the `hc` language tag, if both are present, and the `hour12` option takes precedence in case both options have been specified. -`formatMatcher` +`formatMatcher` The format matching algorithm to use. Possible values are "`basic`" and "`best fit`"; the default is "`best fit`". See the following paragraphs for information about the use of this property. The following properties describe the date-time components to use in formatted output, and their desired representations. Implementations are required to support at least the following subsets: @@ -23340,27 +23378,27 @@ The following properties describe the date-time components to use in formatted o Implementations may support other subsets, and requests will be negotiated against all available subset-representation combinations to find the best match. Two algorithms are available for this negotiation and selected by the `formatMatcher` property: A [fully specified "`basic`" algorithm](https://www.ecma-international.org/ecma-402/1.0/#BasicFormatMatcher) and an implementation-dependent "`best fit`" algorithm. -`weekday` +`weekday` The representation of the weekday. Possible values are: - "`long`" (e.g., `Thursday`) - "`short`" (e.g., `Thu`) - "`narrow`" (e.g., `T`). Two weekdays may have the same narrow style for some locales (e.g. `Tuesday`'s narrow style is also `T`). -`era` +`era` The representation of the era. Possible values are: - "`long`" (e.g., `Anno Domini`) - "`short`" (e.g., `AD`) - "`narrow`" (e.g., `A`) -`year` +`year` The representation of the year. Possible values are: - "`numeric`" (e.g., `2012`) - "`2-digit`" (e.g., `12`) -`month` +`month` The representation of the month. Possible values are: - "`numeric`" (e.g., `2`) @@ -23369,22 +23407,22 @@ The representation of the month. Possible values are: - "`short`" (e.g., `Mar`) - "`narrow`" (e.g., `M`). Two months may have the same narrow style for some locales (e.g. `May`'s narrow style is also `M`). -`day` +`day` The representation of the day. Possible values are: - "`numeric`" (e.g., `1`) - "`2-digit`" (e.g., `01`) -`hour` +`hour` The representation of the hour. Possible values are "`numeric`", "`2-digit`". -`minute` +`minute` The representation of the minute. Possible values are "`numeric`", "`2-digit`". -`second` +`second` The representation of the second. Possible values are "`numeric`", "`2-digit`". -`fractionalSecondDigits` +`fractionalSecondDigits` The number of digits used to represent fractions of a second (any additional digits are truncated). Possible values are: - `0` (Fractional part dropped.) @@ -23392,7 +23430,7 @@ The number of digits used to represent fractions of a second (any additional dig - `2` (Fractional part represented as 2 digits. For example, 736 is formatted as `73`.) - `3` (Fractional part represented as 3 digits. For example, 736 is formatted as `736`.) -`timeZoneName` +`timeZoneName` The representation of the time zone name. Possible values are: - "`long`" (e.g., `British Summer Time`) @@ -23433,7 +23471,7 @@ In basic use without specifying a locale, `DateTimeFormat` uses the default loca ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl-datetimeformat-constructor
        @@ -23670,7 +23708,7 @@ When the debugger is invoked, execution is paused at the `debugger` statement. I ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-debugger-statement
        @@ -23706,8 +23744,8 @@ When the debugger is invoked, execution is paused at the `debugger` statement. I - [Debugging JavaScript](https://developer.mozilla.org/en-US/docs/Mozilla/Debugging/Debugging_JavaScript) - [The Debugger in the Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools/Debugger) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger # decodeURI() @@ -23720,7 +23758,7 @@ The `decodeURI()` function decodes a Uniform Resource Identifier (URI) previousl ### Parameters -`encodedURI` +`encodedURI` A complete, encoded Uniform Resource Identifier. ### Return value @@ -23754,7 +23792,7 @@ Replaces each escape sequence in the encoded URI with the character that it repr ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-decodeuri-encodeduri
        @@ -23803,7 +23841,7 @@ The `decodeURIComponent()` function decodes a Uniform Resource Identifier (URI) ### Parameters -`encodedURI` +`encodedURI` An encoded component of a Uniform Resource Identifier. ### Return value @@ -23848,7 +23886,7 @@ decodeURIComponent cannot be used directly to parse query parameters from a URL. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-decodeuricomponent-encodeduricomponent
        @@ -23921,7 +23959,7 @@ If used prefix, with operator before operand (for example, `--x`), the decrement ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-postfix-decrement-operator
        @@ -23964,8 +24002,8 @@ If used prefix, with operator before operand (for example, `--x`), the decrement - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Decrement # Default parameters @@ -24148,7 +24186,7 @@ You can use default value assignment with the [destructuring assignment](../oper ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-definitions
        @@ -24247,40 +24285,40 @@ The `Object.defineProperties()` method defines new or modifies existing properti ### Parameters -`obj` +`obj` The object on which to define or modify properties. -`props` +`props` An object whose keys represent the names of properties to be defined or modified and whose values are objects describing those properties. Each value in `props` must be either a data descriptor or an accessor descriptor; it cannot be both (see [`Object.defineProperty()`](defineproperty) for more details). Data descriptors and accessor descriptors may optionally contain the following keys: -`configurable` -`true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. +`configurable` +`true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. `false` -`enumerable` -`true` if and only if this property shows up during enumeration of the properties on the corresponding object. +`enumerable` +`true` if and only if this property shows up during enumeration of the properties on the corresponding object. `false` A data descriptor also has the following optional keys: -`value` -The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). +`value` +The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). **Defaults to [`undefined`](../undefined).** -`writable` -`true` if and only if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). +`writable` +`true` if and only if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). `false` An accessor descriptor also has the following optional keys: -`get` -A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. The function's return value will be used as the value of the property. +`get` +A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. The function's return value will be used as the value of the property. **Defaults to [`undefined`](../undefined).** -`set` -A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. The function will receive as its only argument the new value being assigned to the property. +`set` +A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. The function will receive as its only argument the new value being assigned to the property. **Defaults to [`undefined`](../undefined).** If a descriptor has neither of `value`, `writable`, `get` and `set` keys, it is treated as a data descriptor. If a descriptor has both `value` or `writable` and `get` or `set` keys, an exception is thrown. @@ -24373,7 +24411,7 @@ Assuming a pristine execution environment with all names and properties referrin ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.defineproperties
        @@ -24410,8 +24448,8 @@ Assuming a pristine execution environment with all names and properties referrin - [`Object.keys()`](keys) - [Enumerability and ownership of properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties # Object.defineProperty() @@ -24424,13 +24462,13 @@ The static method `Object.defineProperty()` defines a new property directly on a ### Parameters -`obj` +`obj` The object on which to define the property. -`prop` +`prop` The name or [`Symbol`](../symbol) of the property to be defined or modified. -`descriptor` +`descriptor` The descriptor for the property being defined or modified. ### Return value @@ -24445,32 +24483,32 @@ Property descriptors present in objects come in two main flavors: data descripto Both data and accessor descriptors are objects. They share the following optional keys (please note: the **defaults** mentioned here are in the case of defining properties using `Object.defineProperty()`): -`configurable` -`true` if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. +`configurable` +`true` if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. `false` -`enumerable` -`true` if and only if this property shows up during enumeration of the properties on the corresponding object. +`enumerable` +`true` if and only if this property shows up during enumeration of the properties on the corresponding object. `false` A **data descriptor** also has the following optional keys: -`value` -The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). +`value` +The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). **Defaults to [`undefined`](../undefined).** -`writable` -`true` if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). +`writable` +`true` if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). `false` An **accessor descriptor** also has the following optional keys: -`get` -A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. When the property is accessed, this function is called without arguments and with `this` set to the object through which the property is accessed (this may not be the object on which the property is defined due to inheritance). The return value will be used as the value of the property. +`get` +A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. When the property is accessed, this function is called without arguments and with `this` set to the object through which the property is accessed (this may not be the object on which the property is defined due to inheritance). The return value will be used as the value of the property. **Defaults to [`undefined`](../undefined).** -`set` -A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. When the property is assigned, this function is called with one argument (the value being assigned to the property) and with `this` set to the object through which the property is assigned. +`set` +A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. When the property is assigned, this function is called with one argument (the value being assigned to the property) and with `this` set to the object through which the property is assigned. **Defaults to [`undefined`](../undefined).** If a descriptor has neither of `value`, `writable`, `get` and `set` keys, it is treated as a data descriptor. If a descriptor has both \[`value` or `writable`\] and \[`get` or `set`\] keys, an exception is thrown. @@ -24819,7 +24857,7 @@ Unlike accessor properties, value properties are always set on the object itself ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.defineproperty
        @@ -24895,8 +24933,8 @@ Chrome 37 (and below) has a [bug](https://bugs.chromium.org/p/v8/issues/detail?i - [`Object.create()`](create) - [`Reflect.defineProperty()`](../reflect/defineproperty) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty # delete operator @@ -24914,10 +24952,10 @@ Where `expression` should evaluate to a [property](https://developer.mozilla.org ### Parameters -`object` +`object` The name of an object, or an expression evaluating to an object. -`property` +`property` The property to delete. ### Return value @@ -25118,7 +25156,7 @@ If instead, you want to remove an array element by changing the contents of the ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-delete-operator
        @@ -25155,8 +25193,8 @@ If instead, you want to remove an array element by changing the contents of the - [`Reflect.deleteProperty()`](../global_objects/reflect/deleteproperty) - [`Map.prototype.delete()`](../global_objects/map/delete) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete # SyntaxError: applying the 'delete' operator to an unqualified name is deprecated @@ -25235,10 +25273,10 @@ The `handler.deleteProperty()` method is a trap for the [`delete`](../../../oper The following parameters are passed to the `deleteProperty()` method. `this` is bound to the handler. -`target` +`target` The target object. -`property` +`property` The name or [`Symbol`](../../symbol) of the property to delete. ### Return value @@ -25296,7 +25334,7 @@ The following code traps the [`delete`](../../../operators/delete) operator. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-delete-p
        @@ -25334,8 +25372,8 @@ No - [`delete`](../../../operators/delete) operator - [`Reflect.deleteProperty()`](../../reflect/deleteproperty) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty # ReferenceError: deprecated caller or arguments usage @@ -25779,7 +25817,7 @@ The read-only `description` property is a string returning the optional descript ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.prototype.description
        @@ -25823,8 +25861,8 @@ No support for an undefined description. - [`Symbol.prototype.toString()`](tostring) - Polyfill: -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description # Destructuring assignment @@ -26208,7 +26246,7 @@ When deconstructing an object, if a property is not accessed in itself, it will ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-destructuring-assignment
        @@ -26328,8 +26366,8 @@ No - [Assignment operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#Assignment_operators) - ["ES6 in Depth: Destructuring" on hacks.mozilla.org](https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment # Function.displayName @@ -26438,20 +26476,20 @@ The `Intl.DisplayNames` object enables the consistent translation of language, r ## Constructor -[`Intl.DisplayNames()`](displaynames/displaynames) +[`Intl.DisplayNames()`](displaynames/displaynames) Creates a new `Intl.DisplayNames` object. ## Static methods -[`Intl.DisplayNames.supportedLocalesOf()`](displaynames/supportedlocalesof) +[`Intl.DisplayNames.supportedLocalesOf()`](displaynames/supportedlocalesof) Returns an array containing those of the provided locales that are supported without having to fall back to the runtime's default locale. ## Instance methods -[`Intl.DisplayNames.prototype.of()`](displaynames/of) +[`Intl.DisplayNames.prototype.of()`](displaynames/of) This method receives a `code` and returns a string based on the locale and options provided when instantiating `Intl.DisplayNames`. -[`Intl.DisplayNames.prototype.resolvedOptions()`](displaynames/resolvedoptions) +[`Intl.DisplayNames.prototype.resolvedOptions()`](displaynames/resolvedoptions) Returns a new object with properties reflecting the locale and formatting options computed during initialization of the object. ## Examples @@ -26533,7 +26571,7 @@ To create an `Intl.DisplayNames` for a locale and get the display name for curre ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #intl-displaynames-objects
        @@ -26702,7 +26740,7 @@ The division operator (`/`) produces the quotient of its operands where the left ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Division operator' in that specification.
        @@ -26745,8 +26783,8 @@ The division operator (`/`) produces the quotient of its operands where the left - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Division # do...while @@ -26759,10 +26797,10 @@ The `do...while` creates a loop that executes a specified statement until the te statement while (condition); -`statement` +`statement` A statement that is executed at least once and is re-executed each time the condition evaluates to true. To execute multiple statements within the loop, use a [block](block) statement (`{ ... }`) to group those statements. -`condition` +`condition` An expression evaluated after each pass through the loop. If `condition` evaluates to true, the `statement` is re-executed. When `condition` evaluates to false, control passes to the statement following the `do...while`. ## Examples @@ -26784,7 +26822,7 @@ In the following example, the `do...while` loop iterates at least once and reite ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-do-while-statement
        @@ -26820,8 +26858,8 @@ In the following example, the `do...while` loop iterates at least once and reite - [`while`](while) - [`for`](for) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/do...while # RegExp.prototype.dotAll @@ -26878,7 +26916,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.dotAll
        @@ -26920,8 +26958,8 @@ No - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/dotAll # Math.E @@ -26962,7 +27000,7 @@ The following function returns e: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.e
        @@ -26999,8 +27037,8 @@ The following function returns e: - [`Math.log()`](log) - [`Math.log1p()`](log1p) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E # empty @@ -27057,7 +27095,7 @@ If `three` is `true`, nothing will happen, `four` does not matter, and also the ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-empty-statement
        @@ -27092,8 +27130,8 @@ If `three` is `true`, nothing will happen, `four` does not matter, and also the - [`Block statement`](block) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/Empty # encodeURI() @@ -27106,7 +27144,7 @@ The `encodeURI()` function encodes a [URI](https://developer.mozilla.org/en-US/d ### Parameters -`URI` +`URI` A complete URI. ### Return value @@ -27170,7 +27208,7 @@ If one wishes to follow the more recent [RFC3986](https://datatracker.ietf.org/d ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-encodeuri-uri
        @@ -27219,7 +27257,7 @@ The `encodeURIComponent()` function encodes a [URI](https://developer.mozilla.or ### Parameters -`str` +`str` String. A component of a URI. ### Return value @@ -27314,7 +27352,7 @@ The following example provides the special encoding required within UTF-8 [`Cont ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'encodeURIComponent' in that specification.
        @@ -27364,10 +27402,10 @@ The `endsWith()` method determines whether a string ends with the characters of ### Parameters -`searchString` +`searchString` The characters to be searched for at the end of `str`. -`length` Optional +`length` Optional If provided, it is used as the length of `str`. Defaults to `str.length`. ### Return value @@ -27403,7 +27441,7 @@ This method has been added to the ECMAScript 6 specification and may not be avai ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.endswith
        @@ -27441,8 +27479,8 @@ No - [`String.prototype.indexOf()`](indexof) - [`String.prototype.lastIndexOf()`](lastindexof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith # Object.entries() @@ -27457,7 +27495,7 @@ The order of the array returned by `Object.entries()` does not depend on how an ### Parameters -`obj` +`obj` The object whose own enumerable string-keyed property `[key, value]` pairs are to be returned. ### Return value @@ -27544,7 +27582,7 @@ Using [Array Destructuring](../../operators/destructuring_assignment#array_destr ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.entries' in that specification.
        @@ -27588,8 +27626,8 @@ No - [`Map.prototype.keys()`](../map/keys) - [`Map.prototype.values()`](../map/values) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries # Number.EPSILON @@ -27633,7 +27671,7 @@ The `EPSILON` property has a value of approximately `2.2204460492503130808472633 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.epsilon
        @@ -27668,8 +27706,8 @@ No - The [`Number`](../number) object it belongs to -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON # SyntaxError: test for equality (==) mistyped as assignment (=)? @@ -27796,7 +27834,7 @@ Note that strings constructed using `new String()` are objects. If you compare o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-equality-operators
        @@ -27833,8 +27871,8 @@ Note that strings constructed using `new String()` are objects. If you compare o - [Strict equality operator](strict_equality) - [Strict inequality operator](strict_inequality) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality # Error @@ -27849,69 +27887,69 @@ Runtime errors result in new `Error` objects being created and thrown. Besides the generic `Error` constructor, there are other core error constructors in JavaScript. For client-side exceptions, see [Exception handling statements](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#exception_handling_statements). -[`EvalError`](evalerror) +[`EvalError`](evalerror) Creates an instance representing an error that occurs regarding the global function [`eval()`](eval). -[`RangeError`](rangeerror) +[`RangeError`](rangeerror) Creates an instance representing an error that occurs when a numeric variable or parameter is outside of its valid range. -[`ReferenceError`](referenceerror) +[`ReferenceError`](referenceerror) Creates an instance representing an error that occurs when de-referencing an invalid reference. -[`SyntaxError`](syntaxerror) +[`SyntaxError`](syntaxerror) Creates an instance representing a syntax error. -[`TypeError`](typeerror) +[`TypeError`](typeerror) Creates an instance representing an error that occurs when a variable or parameter is not of a valid type. -[`URIError`](urierror) +[`URIError`](urierror) Creates an instance representing an error that occurs when [`encodeURI()`](encodeuri) or [`decodeURI()`](decodeuri) are passed invalid parameters. -[`AggregateError`](aggregateerror) +[`AggregateError`](aggregateerror) Creates an instance representing several errors wrapped in a single error when multiple errors need to be reported by an operation, for example by [`Promise.any()`](promise/any). -[`InternalError`](internalerror) This API has not been standardized. +[`InternalError`](internalerror) This API has not been standardized. Creates an instance representing an error that occurs when an internal error in the JavaScript engine is thrown. E.g. "too much recursion". ## Constructor -[`Error()`](error/error) +[`Error()`](error/error) Creates a new `Error` object. ## Static methods -`Error.captureStackTrace()` +`Error.captureStackTrace()` A non-standard **V8** function that creates the [`stack`](error/stack) property on an Error instance. ## Instance properties -[`Error.prototype.message`](error/message) +[`Error.prototype.message`](error/message) Error message. -[`Error.prototype.name`](error/name) +[`Error.prototype.name`](error/name) Error name. -`Error.prototype.description` +`Error.prototype.description` A non-standard Microsoft property for the error description. Similar to [`message`](error/message). -`Error.prototype.number` +`Error.prototype.number` A non-standard Microsoft property for an error number. -[`Error.prototype.fileName`](error/filename) +[`Error.prototype.fileName`](error/filename) A non-standard Mozilla property for the path to the file that raised this error. -[`Error.prototype.lineNumber`](error/linenumber) +[`Error.prototype.lineNumber`](error/linenumber) A non-standard Mozilla property for the line number in the file that raised this error. -[`Error.prototype.columnNumber`](error/columnnumber) +[`Error.prototype.columnNumber`](error/columnnumber) A non-standard Mozilla property for the column number in the line that raised this error. -[`Error.prototype.stack`](error/stack) +[`Error.prototype.stack`](error/stack) A non-standard Mozilla property for a stack trace. ## Instance methods -[`Error.prototype.toString()`](error/tostring) +[`Error.prototype.toString()`](error/tostring) Returns a string representing the specified object. Overrides the [`Object.prototype.toString()`](object/tostring) method. ## Examples @@ -28019,7 +28057,7 @@ See ["What's a good way to extend Error in JavaScript?"](https://stackoverflow.c ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-error-objects
        @@ -28398,7 +28436,7 @@ The `eval()` function evaluates JavaScript code represented as a string. ### Parameters -`string` +`string` A string representing a JavaScript expression, statement, or sequence of statements. The expression can include variables and properties of existing objects. ### Return value @@ -28630,7 +28668,7 @@ If you define multiple values then the last value is returned. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-eval-x
        @@ -28675,27 +28713,27 @@ The `EvalError` object indicates an error regarding the global [`eval()`](eval) ## Constructor -[`EvalError()`](evalerror/evalerror) +[`EvalError()`](evalerror/evalerror) Creates a new `EvalError` object. ## Instance properties -[`EvalError.prototype.message`](error/message) +[`EvalError.prototype.message`](error/message) Error message. Although ECMA-262 specifies that [`EvalError`](evalerror) should provide its own `message` property, in [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey), it inherits [`Error.prototype.message`](error/message). -[`EvalError.prototype.name`](error/name) +[`EvalError.prototype.name`](error/name) Error name. Inherited from [`Error`](error). -[`EvalError.prototype.fileName`](error/filename) +[`EvalError.prototype.fileName`](error/filename) Path to file that raised this error. Inherited from [`Error`](error). -[`EvalError.prototype.lineNumber`](error/linenumber) +[`EvalError.prototype.lineNumber`](error/linenumber) Line number in file that raised this error. Inherited from [`Error`](error). -[`EvalError.prototype.columnNumber`](error/columnnumber) +[`EvalError.prototype.columnNumber`](error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](error). -[`EvalError.prototype.stack`](error/stack) +[`EvalError.prototype.stack`](error/stack) Stack trace. Inherited from [`Error`](error). ## Examples @@ -28718,7 +28756,7 @@ Stack trace. Inherited from [`Error`](error). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-native-error-types-used-in-this-standard-evalerror
        @@ -28805,19 +28843,19 @@ The `every()` method tests whether all elements in the array pass the test imple ### Parameters -`callbackFn` +`callbackFn` A function to test for each element, taking three arguments: -`element` +`element` The current element being processed in the array. -`index` Optional +`index` Optional The index of the current element being processed in the array. -`array` Optional +`array` Optional The array `every` was called upon. -`thisArg` Optional +`thisArg` Optional A value to use as `this` when executing `callbackFn`. ### Return value @@ -28988,7 +29026,7 @@ The following examples tests the behavior of the `every` method when the array i ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.every
        @@ -29038,13 +29076,13 @@ The static `Atomics.exchange()` method stores a given value at a given position ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to exchange a `value`. -`value` +`value` The number to exchange. ### Return value @@ -29068,7 +29106,7 @@ The old value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.exchange
        @@ -29152,7 +29190,7 @@ If you are executing a match to find its index position in the string, use [`Str ### Parameters -`str` +`str` The string against which to match the regular expression. ### Return value @@ -29173,7 +29211,7 @@ Consider the following example: The following table shows the state of `result` after running this script: -
        Property/IndexDescriptionExample
        [0]The full string of characters matched"Quick Brown Fox Jumps"
        [1], ...[n]

        The parenthesized substring matches, if any.

        The number of possible parenthesized substrings is unlimited.

        result[1] === "Brown"

        result[2] === "Jumps"

        indexThe 0-based index of the match in the string.4
        indicesAn array where each entry represents a substring match. Each substring match itself is an array where the first entry represents its start index and the second entry its end index. +
        Property/IndexDescriptionExample
        [0]The full string of characters matched"Quick Brown Fox Jumps"
        [1], ...[n]

        The parenthesized substring matches, if any.

        The number of possible parenthesized substrings is unlimited.

        result[1] === "Brown"

        result[2] === "Jumps"

        indexThe 0-based index of the match in the string.4
        indicesAn array where each entry represents a substring match. Each substring match itself is an array where the first entry represents its start index and the second entry its end index.
        The indices array additionally has a groups property which holds an object of all named capturing groups. The keys are the names of the capturing groups and each value is an array with the first item being the start entry and the second entry being the end index of the capturing group. If the regular expression doesn't contain any capturing groups, groups is undefined.

        indices[0] === Array [ 4, 25 ]

        indices[1] === Array [ 10, 15 ]

        indices[2] === Array [ 20, 25 ]

        indices.groups === undefined

        indices.length === 3

        inputThe original string that was matched against.The Quick Brown Fox Jumps Over The Lazy Dog
        @@ -29221,7 +29259,7 @@ This will log a message containing `'hello world!'`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-regexp.prototype.exec
        @@ -29257,8 +29295,8 @@ This will log a message containing `'hello world!'`. - [Regular Expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) chapter in the [JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) - [`RegExp`](../regexp) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec # Math.exp() @@ -29271,7 +29309,7 @@ The `Math.exp()` function returns `ex`, where `x` is the argument, and `e` is [E ### Parameters -`x` +`x` A number. ### Return value @@ -29292,7 +29330,7 @@ Because `exp()` is a static method of `Math`, you always use it as `Math.exp()`, ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.exp
        @@ -29333,8 +29371,8 @@ Because `exp()` is a static method of `Math`, you always use it as `Math.exp()`, - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp # Math.expm1() @@ -29347,7 +29385,7 @@ The `Math.expm1()` function returns `ex - 1`, where `x` is the argument, and [e] ### Parameters -`x` +`x` A number. ### Return value @@ -29368,7 +29406,7 @@ Because `expm1()` is a static method of `Math`, you always use it as `Math.expm1 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.expm1
        @@ -29409,8 +29447,8 @@ No - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/expm1 # Exponentiation (\*\*) @@ -29466,7 +29504,7 @@ To force the base of an exponentiation expression to be a negative number: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-exp-operator
        @@ -29509,8 +29547,8 @@ No - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Exponentiation # export @@ -29556,7 +29594,7 @@ There are two types of exports: export { import1 as name1, import2 as name2, …, nameN } from …; export { default, … } from …; -`nameN` +`nameN` Identifier to be exported (so that it can be imported via [`import`](import) in another script). ## Description @@ -29722,7 +29760,7 @@ This is what it would look like using code snippets: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-exports
        @@ -29825,8 +29863,8 @@ No - [ES modules: A cartoon deep-dive](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/), Hacks blog post by Lin Clark - [Axel Rauschmayer's book: "Exploring JS: Modules"](https://exploringjs.com/es6/ch_modules.html) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export # WebAssembly.Module.exports() @@ -29839,7 +29877,7 @@ The `WebAssembly.Module.exports()` function returns an array containing descript ### Parameters -_module_ +_module_ A [`WebAssembly.Module`](../module) object. ### Return value @@ -29891,7 +29929,7 @@ The `exports[0]` output looks like this: ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-module-exports
        @@ -29932,8 +29970,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports # extends @@ -29985,7 +30023,7 @@ This example extends the built-in [`Date`](../global_objects/date) object. This ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'extends' in that specification.
        @@ -30127,13 +30165,13 @@ The `fill()` method changes all elements in an array to a static value, from a s ### Parameters -`value` +`value` Value to fill the array with. (Note all elements in the array will be this exact value.) -`start` Optional +`start` Optional Start index, default `0`. -`end` Optional +`end` Optional End index, default `arr.length`. ### Return value @@ -30231,7 +30269,7 @@ This example shows how to create a matrix of all 1, like the _ones()_ function o ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.fill' in that specification.
        @@ -30292,21 +30330,21 @@ The `filter()` method **creates a new array** with all elements that pass the te ### Parameters -`callbackFn` +`callbackFn` Function is a predicate, to test each element of the array. Return a value that coerces to `true` to keep the element, or to `false` otherwise. It accepts three arguments: -`element` +`element` The current element being processed in the array. -`index`Optional +`index`Optional The index of the current element being processed in the array. -`array`Optional +`array`Optional The array `filter` was called upon. -`thisArg`Optional +`thisArg`Optional Value to use as `this` when executing `callbackFn`. ### Return value @@ -30511,7 +30549,7 @@ The following examples tests the behavior of the `filter` method when the array ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.filter
        @@ -30568,7 +30606,7 @@ This helps to avoid duplicating code in both the promise's [`then()`](then) and ### Parameters -`onFinally` +`onFinally` A [`Function`](../function) called when the `Promise` is settled. ### Return value @@ -30607,7 +30645,7 @@ The `finally()` method is very similar to calling `.then(onFinally, onFinally)` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.prototype.finally
        @@ -30644,8 +30682,8 @@ No - [`Promise.prototype.then()`](then) - [`Promise.prototype.catch()`](catch) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/finally # Array.prototype.find() @@ -30676,19 +30714,19 @@ The `find()` method returns the value of the first element in the provided array ### Parameters -`callbackFn` +`callbackFn` Function to execute on each value in the array, taking 3 arguments: -`element` +`element` The current element in the array. -`index` Optional +`index` Optional The index (position) of the current element in the array. -`array` Optional +`array` Optional The array that `find` was called on. -`thisArg` Optional +`thisArg` Optional Object to use as [`this`](../../operators/this) inside `callbackFn`. ### Return value @@ -30787,7 +30825,7 @@ The following examples show that nonexistent and deleted elements _are_ visited, ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.find
        @@ -30853,19 +30891,19 @@ See also the [`find()`](find) method, which returns the **value** of a found ele ### Parameters -`callbackFn` +`callbackFn` Function to execute on each value in the typed array, taking three arguments: -`element` +`element` The current element being processed in the typed array. -`index` +`index` The index of the current element being processed in the typed array. -`array` +`array` The typed array `findIndex()` was called upon. -`thisArg` Optional +`thisArg` Optional Object to use as `this` when executing `callbackFn`. ### Return value @@ -30944,7 +30982,7 @@ The following example finds the index of an element in the typed array that is a ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-%typedarray%.prototype.findindex
        @@ -30980,8 +31018,8 @@ No - [`TypedArray.prototype.find()`](find) - [`TypedArray.prototype.indexOf()`](indexof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex # String.prototype.fixed() @@ -31015,7 +31053,7 @@ The following example uses the `fixed` method to change the formatting of a stri ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.fixed
        @@ -31052,8 +31090,8 @@ The following example uses the `fixed` method to change the formatting of a stri - [`String.prototype.italics()`](italics) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed # RegExp.prototype.flags @@ -31098,7 +31136,7 @@ Flags in the `flags` property are sorted alphabetically (from left to right, e.g ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.flags
        @@ -31133,8 +31171,8 @@ No - [`RegExp.prototype.source`](source) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags # Array.prototype.flat() @@ -31148,7 +31186,7 @@ The `flat()` method creates a new array with all sub-array elements concatenated ### Parameters -`depth` Optional +`depth` Optional The depth level specifying how deep a nested array structure should be flattened. Defaults to 1. ### Return value @@ -31258,7 +31296,7 @@ The flat method removes empty slots in arrays: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.flat' in that specification.
        @@ -31322,19 +31360,19 @@ The `flatMap()` method returns a new array formed by applying a given callback f ### Parameters -`callback` +`callback` Function that produces an element of the new Array, taking three arguments: -`currentValue` +`currentValue` The current element being processed in the array. -`index`Optional +`index`Optional The index of the current element being processed in the array. -`array`Optional +`array`Optional The array `map` was called upon. -`thisArg`Optional +`thisArg`Optional Value to use as `this` when executing `callback`. ### Return value @@ -31408,7 +31446,7 @@ Notice, the output list length can be different from the input list length. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.flatmap
        @@ -31455,117 +31493,117 @@ The `Float32Array` typed array represents an array of 32-bit floating point numb ## Constructor -[`Float32Array()`](float32array/float32array) +[`Float32Array()`](float32array/float32array) Creates a new `Float32Array` object. ## Static properties -[`Float32Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Float32Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `4` in the case of an `Float32Array`. -[`Float32Array.name`](typedarray/name) +[`Float32Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Float32Array` type: "Float32Array". ## Static methods -[`Float32Array.from()`](typedarray/from) +[`Float32Array.from()`](typedarray/from) Creates a new `Float32Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Float32Array.of()`](typedarray/of) +[`Float32Array.of()`](typedarray/of) Creates a new `Float32Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Float32Array.prototype.buffer`](typedarray/buffer) +[`Float32Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Float32Array` Fixed at construction time and thus **read only**. -[`Float32Array.prototype.byteLength`](typedarray/bytelength) +[`Float32Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Float32Array`. Fixed at construction time and thus **read only.** -[`Float32Array.prototype.byteOffset`](typedarray/byteoffset) +[`Float32Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Float32Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Float32Array.prototype.length`](typedarray/length) +[`Float32Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `Float32Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Float32Array.prototype.copyWithin()`](typedarray/copywithin) +[`Float32Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Float32Array.prototype.entries()`](typedarray/entries) +[`Float32Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Float32Array.prototype.every()`](typedarray/every) +[`Float32Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Float32Array.prototype.fill()`](typedarray/fill) +[`Float32Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Float32Array.prototype.filter()`](typedarray/filter) +[`Float32Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`Float32Array.prototype.find()`](typedarray/find) +[`Float32Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Float32Array.prototype.findIndex()`](typedarray/findindex) +[`Float32Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Float32Array.prototype.forEach()`](typedarray/foreach) +[`Float32Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Float32Array.prototype.includes()`](typedarray/includes) +[`Float32Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Float32Array.prototype.indexOf()`](typedarray/indexof) +[`Float32Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Float32Array.prototype.join()`](typedarray/join) +[`Float32Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Float32Array.prototype.keys()`](typedarray/keys) +[`Float32Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Float32Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Float32Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Float32Array.prototype.map()`](typedarray/map) +[`Float32Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Float32Array.prototype.reduce()`](typedarray/reduce) +[`Float32Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Float32Array.prototype.reduceRight()`](typedarray/reduceright) +[`Float32Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Float32Array.prototype.reverse()`](typedarray/reverse) +[`Float32Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Float32Array.prototype.set()`](typedarray/set) +[`Float32Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Float32Array.prototype.slice()`](typedarray/slice) +[`Float32Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Float32Array.prototype.some()`](typedarray/some) +[`Float32Array.prototype.some()`](typedarray/some) Returns true if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Float32Array.prototype.sort()`](typedarray/sort) +[`Float32Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Float32Array.prototype.subarray()`](typedarray/subarray) +[`Float32Array.prototype.subarray()`](typedarray/subarray) Returns a new `Float32Array` from the given start and end element index. -[`Float32Array.prototype.values()`](typedarray/values) +[`Float32Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`Float32Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`Float32Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`Float32Array.prototype.toString()`](typedarray/tostring) +[`Float32Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`Float32Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`Float32Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -31599,7 +31637,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #table-49
        @@ -31670,117 +31708,117 @@ The `Float64Array` typed array represents an array of 64-bit floating point numb ## Constructor -[`Float64Array()`](float64array/float64array) +[`Float64Array()`](float64array/float64array) Creates a new `Float64Array` object. ## Static properties -[`Float64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Float64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `8` in the case of an `Float64Array`. -[`Float64Array.name`](typedarray/name) +[`Float64Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Float64Array` type: "Float64Array". ## Static methods -[`Float64Array.from()`](typedarray/from) +[`Float64Array.from()`](typedarray/from) Creates a new `Float64Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Float64Array.of()`](typedarray/of) +[`Float64Array.of()`](typedarray/of) Creates a new `Float64Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Float64Array.prototype.buffer`](typedarray/buffer) +[`Float64Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Float64Array` Fixed at construction time and thus **read only**. -[`Float64Array.prototype.byteLength`](typedarray/bytelength) +[`Float64Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Float64Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Float64Array.prototype.byteOffset`](typedarray/byteoffset) +[`Float64Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Float64Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Float64Array.prototype.length`](typedarray/length) +[`Float64Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `Float64Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Float64Array.prototype.copyWithin()`](typedarray/copywithin) +[`Float64Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Float64Array.prototype.entries()`](typedarray/entries) +[`Float64Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Float64Array.prototype.every()`](typedarray/every) +[`Float64Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Float64Array.prototype.fill()`](typedarray/fill) +[`Float64Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Float64Array.prototype.filter()`](typedarray/filter) +[`Float64Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`Float64Array.prototype.find()`](typedarray/find) +[`Float64Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Float64Array.prototype.findIndex()`](typedarray/findindex) +[`Float64Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Float64Array.prototype.forEach()`](typedarray/foreach) +[`Float64Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Float64Array.prototype.includes()`](typedarray/includes) +[`Float64Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Float64Array.prototype.indexOf()`](typedarray/indexof) +[`Float64Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Float64Array.prototype.join()`](typedarray/join) +[`Float64Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Float64Array.prototype.keys()`](typedarray/keys) +[`Float64Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Float64Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Float64Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Float64Array.prototype.map()`](typedarray/map) +[`Float64Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Float64Array.prototype.reduce()`](typedarray/reduce) +[`Float64Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Float64Array.prototype.reduceRight()`](typedarray/reduceright) +[`Float64Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Float64Array.prototype.reverse()`](typedarray/reverse) +[`Float64Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Float64Array.prototype.set()`](typedarray/set) +[`Float64Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Float64Array.prototype.slice()`](typedarray/slice) +[`Float64Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Float64Array.prototype.some()`](typedarray/some) +[`Float64Array.prototype.some()`](typedarray/some) Returns true if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Float64Array.prototype.sort()`](typedarray/sort) +[`Float64Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Float64Array.prototype.subarray()`](typedarray/subarray) +[`Float64Array.prototype.subarray()`](typedarray/subarray) Returns a new `Float64Array` from the given start and end element index. -[`Float64Array.prototype.values()`](typedarray/values) +[`Float64Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`Float64Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`Float64Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`Float64Array.prototype.toString()`](typedarray/tostring) +[`Float64Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`Float64Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`Float64Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -31814,7 +31852,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #table-49
        @@ -31889,7 +31927,7 @@ The `Math.floor()` function returns the largest integer less than or equal to a ### Parameters -`x` +`x` A number. ### Return value @@ -31970,7 +32008,7 @@ Because `floor()` is a static method of `Math`, you always use it as `Math.floor ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.floor
        @@ -32009,8 +32047,8 @@ Because `floor()` is a static method of `Math`, you always use it as `Math.floor - [`Math.sign()`](sign) - [`Math.trunc()`](trunc) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor # String.prototype.fontcolor() @@ -32029,7 +32067,7 @@ The `fontcolor()` method creates a [``](https://developer.mozilla.org/en-U ### Parameters -`color` +`color` A string expressing the color as a hexadecimal RGB triplet or as a string literal. String literals for color names are listed in the [CSS color reference](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value). ### Return value @@ -32060,7 +32098,7 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.fontcolor
        @@ -32095,8 +32133,8 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem - [`String.prototype.fontsize()`](fontsize) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor # String.prototype.fontsize() @@ -32115,7 +32153,7 @@ The `fontsize()` method creates a [``](https://developer.mozilla.org/en-US ### Parameters -`size` +`size` An integer between 1 and 7, a string representing a signed integer between 1 and 7. ### Return value @@ -32144,7 +32182,7 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.fontsize
        @@ -32180,8 +32218,8 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem - [`String.prototype.big()`](big) - [`String.prototype.small()`](small) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize # for await...of @@ -32196,10 +32234,10 @@ The `for await...of` creates a loop iterating over async iterable objects as wel statement } -`variable` +`variable` On each iteration a value of a different property is assigned to `variable`. `variable` may be declared with `const`, `let`, or `var`. -`iterable` +`iterable` Object whose iterable properties are to be iterated over. ## Examples @@ -32387,7 +32425,7 @@ To make `finally` blocks of a sync generator to be always called use appropriate ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-in-and-for-of-statements
        @@ -32423,8 +32461,8 @@ No - [`Symbol.asyncIterator`](../global_objects/symbol/asynciterator) - [`for...of`](for...of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of # Warning: JavaScript 1.6's for-each-in loops are deprecated @@ -32588,10 +32626,10 @@ The `for...in` iterates over all [enumerable properties](https://developer.mozil for (variable in object) statement -`variable` +`variable` A different property name is assigned to `variable` on each iteration. -`object` +`object` Object whose non-Symbol enumerable properties are iterated over. ## Description @@ -32666,7 +32704,7 @@ The following function illustrates the use of [`hasOwnProperty()`](../global_obj ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-in-and-for-of-statements
        @@ -32724,8 +32762,8 @@ Other engines such as v8 (Chrome), Chakra (IE/Edge), and JSC (WebKit/Safari) are - [`Object.prototype.hasOwnProperty()`](../global_objects/object/hasownproperty) - [`Array.prototype.forEach()`](../global_objects/array/foreach) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in # for...of @@ -32738,10 +32776,10 @@ The `for...of` creates a loop iterating over [iterable objects](../iteration_pro statement } -`variable` +`variable` On each iteration a value of a different property is assigned to `variable`. `variable` may be declared with `const`, `let`, or `var`. -`iterable` +`iterable` Object whose iterable properties are iterated. ## Examples @@ -32987,7 +33025,7 @@ This loop iterates and logs **values** that `iterable`, as an [iterable object]( ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-in-and-for-of-statements
        @@ -33080,8 +33118,8 @@ No - [`Map.prototype.forEach()`](../global_objects/map/foreach) - [`Object.entries()`](../global_objects/object/entries) – Useful when using `for...of` over an object. -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of # for @@ -33093,18 +33131,18 @@ The **for statement** creates a loop that consists of three optional expressions for ([initialization]; [condition]; [final-expression]) statement -`initialization` +`initialization` An expression (including assignment expressions) or variable declaration evaluated once before the loop begins. Typically used to initialize a counter variable. This expression may optionally declare new variables with `var` or `let` keywords. Variables declared with `var` are not local to the loop, i.e. they are in the same scope the `for` loop is in. Variables declared with `let` are local to the statement. The result of this expression is discarded. -`condition` +`condition` An expression to be evaluated before each loop iteration. If this expression evaluates to true, `statement` is executed. This conditional test is optional. If omitted, the condition always evaluates to true. If the expression evaluates to false, execution skips to the first expression following the `for` construct. -`final-expression` +`final-expression` An expression to be evaluated at the end of each loop iteration. This occurs before the next evaluation of `condition`. Generally used to update or increment the counter variable. -`statement` +`statement` A statement that is executed as long as the condition evaluates to true. To execute multiple statements within the loop, use a [block](block) statement (`{ ... }`) to group those statements. To execute no statement within the loop, use an [empty](empty) statement (`;`). ## Examples @@ -33183,7 +33221,7 @@ The following `for` cycle calculates the offset position of a node in the `final ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-statement
        @@ -33224,8 +33262,8 @@ The following `for` cycle calculates the offset position of a node in the `final - [`for...in`](for...in) - [`for...of`](for...of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for # Array.prototype.forEach() @@ -33251,19 +33289,19 @@ The `forEach()` method executes a provided function once for each array element. ### Parameters -`callbackFn` +`callbackFn` Function to execute on each element. It accepts between one and three arguments: -`element` +`element` The current element being processed in the array. -`index` Optional +`index` Optional The index of `element` in the array. -`array` Optional +`array` Optional The array `forEach()` was called upon. -`thisArg` Optional +`thisArg` Optional Value to use as `this` when executing `callbackFn`. ### Return value @@ -33530,7 +33568,7 @@ The following example is only here for learning purpose. If you want to flatten ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.foreach
        @@ -33584,7 +33622,7 @@ The `Intl.DateTimeFormat.prototype.format()` method formats a date according to ### Parameters -`date` +`date` The date to format. ## Description @@ -33637,7 +33675,7 @@ For this reason you cannot expect to be able to compare the results of `format() ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.datetimeformat.prototype.format
        @@ -33726,7 +33764,7 @@ This method receives two [`Date`](../../date)s and formats the date range in the ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.datetimeformat.prototype.formatRange
        @@ -33806,7 +33844,7 @@ This method receives two [`Date`](../../date)s and returns an [`Array`](../../ar ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.DateTimeFormat.prototype.formatRangeToParts
        @@ -33854,7 +33892,7 @@ The `Intl.DateTimeFormat.prototype.formatToParts()` method allows locale-aware f ### Parameters -`date` Optional +`date` Optional The date to format. ### Return value @@ -33872,46 +33910,46 @@ The `formatToParts()` method is useful for custom formatting of date strings. It Possible types are the following: -day +day The string used for the day, for example "`17`". -dayPeriod +dayPeriod The string used for the day period, for example, "`AM`", "`PM`", "`in the morning`", or "`noon`" -era +era The string used for the era, for example "`BC`" or "`AD`". -fractionalSecond +fractionalSecond The string used for the fractional seconds, for example "`0`" or "`00`" or "`000`". -hour +hour The string used for the hour, for example "`3`" or "`03`". -literal +literal The string used for separating date and time values, for example "`/`", "`,`", "`o'clock`", "`de`", etc. -minute +minute The string used for the minute, for example "`00`". -month +month The string used for the month, for example "`12`". -relatedYear +relatedYear The string used for the related 4-digit Gregorian year, in the event that the calendar's representation would be a yearName instead of a year, for example "`2019`". -second +second The string used for the second, for example "`07`" or "`42`". -timeZoneName +timeZoneName The string used for the name of the time zone, for example "`UTC`". -weekday +weekday The string used for the weekday, for example "`M`", "`Monday`", or "`Montag`". -year +year The string used for the year, for example "`2012`" or "`96`". -yearName +yearName The string used for the yearName in relevant contexts, for example "`geng-zi`" ## Polyfill @@ -34045,7 +34083,7 @@ And `formatToParts`: ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.DateTimeFormat.prototype.formatToParts
        @@ -34108,7 +34146,7 @@ The `Object.freeze()` method **freezes** an object. A frozen object can no longe ### Parameters -`obj` +`obj` The object to freeze. ### Return value @@ -34287,7 +34325,7 @@ To make an object immutable, recursively freeze each property which is of type o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.freeze
        @@ -34326,8 +34364,8 @@ To make an object immutable, recursively freeze each property which is of type o - [`Object.seal()`](seal) - [`Object.isSealed()`](issealed) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze # Array.from() @@ -34353,13 +34391,13 @@ The `Array.from()` static method creates a new, shallow-copied `Array` instance ### Parameters -`arrayLike` +`arrayLike` An array-like or iterable object to convert to an array. -`mapFn` Optional +`mapFn` Optional Map function to call on every element of the array. -`thisArg` Optional +`thisArg` Optional Value to use as `this` when executing `mapFn`. ### Return value @@ -34375,8 +34413,8 @@ A new [`Array`](../array) instance. `Array.from()` has an optional parameter `mapFn`, which allows you to execute a [`map()`](map) function on each element of the array being created. -More clearly, `Array.from(obj, mapFn, thisArg)` -has the same result as `Array.from(obj).map(mapFn, thisArg)`, +More clearly, `Array.from(obj, mapFn, thisArg)` +has the same result as `Array.from(obj).map(mapFn, thisArg)`, except that it does not create an intermediate array. **Note:** This is especially important for certain array subclasses, like [typed arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays), since the intermediate array would necessarily have values truncated to fit into the appropriate type. @@ -34460,7 +34498,7 @@ In ES2015, the class syntax allows sub-classing of both built-in and user-define ## Specifications -
        SpecificationInitial publication
        ECMAScript (ECMA-262) +
        SpecificationInitial publication
        ECMAScript (ECMA-262)
        The definition of 'Array.from' in that specification.
        ECMAScript 2015
        @@ -34657,7 +34695,7 @@ The static `String.fromCharCode()` method returns a string created from the spec ### Parameters -`num1, ..., numN` +`num1, ..., numN` A sequence of numbers that are UTF-16 code units. The range is between `0` and `65535` (`0xFFFF`). Numbers greater than `0xFFFF` are truncated. No validity checks are performed. ### Return value @@ -34698,7 +34736,7 @@ Supplementary characters, in UTF-16, require two code units (i.e. a surrogate pa ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.fromCharCode' in that specification.
        @@ -34736,8 +34774,8 @@ Supplementary characters, in UTF-16, require two code units (i.e. a surrogate pa - [`String.prototype.charCodeAt()`](charcodeat) - [`String.prototype.codePointAt()`](codepointat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode # String.fromCodePoint() @@ -34752,7 +34790,7 @@ The static `String.fromCodePoint()` method returns a string created by using the ### Parameters -`num1, ..., numN` +`num1, ..., numN` A sequence of code points. ### Return value @@ -34846,7 +34884,7 @@ Invalid input: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.fromcodepoint
        @@ -34884,8 +34922,8 @@ No - [`String.prototype.codePointAt()`](codepointat) - [`String.prototype.charCodeAt()`](charcodeat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint # Object.fromEntries() @@ -34898,7 +34936,7 @@ The `Object.fromEntries()` method transforms a list of key-value pairs into an o ### Parameters -`iterable` +`iterable` An iterable such as [`Array`](../array) or [`Map`](../map) or other objects implementing the [iterable protocol](../../iteration_protocols#the_iterable_protocol). ### Return value @@ -34945,7 +34983,7 @@ With `Object.fromEntries`, its reverse method [`Object.entries()`](entries), and ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.fromentries
        @@ -34985,8 +35023,8 @@ No - [`Map.prototype.keys()`](../map/keys) - [`Map.prototype.values()`](../map/values) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries # Math.fround() @@ -34999,7 +35037,7 @@ The `Math.fround()` function returns the nearest [32-bit single precision](https ### Parameters -`doubleFloat` +`doubleFloat` A [`Number`](../number). If the parameter is of a different type, it will get converted to a number or to [`NaN`](../nan) if it cannot be converted. ### Return value @@ -35069,7 +35107,7 @@ Supporting older browsers is slower, but also possible: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.fround
        @@ -35104,8 +35142,8 @@ No - [`Math.round()`](round) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround # function\* @@ -35120,13 +35158,13 @@ You can also define generator functions using the [`GeneratorFunction`](../globa statements } -`name` +`name` The function name. -`param` Optional +`param` Optional The name of a formal parameter for the function. -`statements` +`statements` The statements comprising the body of the function. ## Description @@ -35137,8 +35175,8 @@ Generators in JavaScript -- especially when combined with Promises -- are a very Calling a generator function does not execute its body immediately; an [iterator](../iteration_protocols#iterator) object for the function is returned instead. When the iterator's `next()` method is called, the generator function's body is executed until the first [`yield`](../operators/yield) expression, which specifies the value to be returned from the iterator or, with [`yield*`](../operators/yield*), delegates to another generator function. The `next()` method returns an object with a `value` property containing the yielded value and a `done` property which indicates whether the generator has yielded its last value, as a boolean. Calling the `next()` method with an argument will resume the generator function execution, replacing the `yield` expression where an execution was paused with the argument from `next()`. -A `return` statement in a generator, when executed, will make the generator finish (i.e. the `done` property of the object returned by it will be set to `true`). If a value is returned, it will be set as the `value` property of the object returned by the generator. -Much like a `return` statement, an error thrown inside the generator will make the generator finished -- unless caught within the generator's body. +A `return` statement in a generator, when executed, will make the generator finish (i.e. the `done` property of the object returned by it will be set to `true`). If a value is returned, it will be set as the `value` property of the object returned by the generator. +Much like a `return` statement, an error thrown inside the generator will make the generator finished -- unless caught within the generator's body. When a generator is finished, subsequent `next()` calls will not execute any of that generator's code, they will just return an object of this form: `{value: undefined, done: true}`. ## Examples @@ -35301,7 +35339,7 @@ When a generator is finished, subsequent `next()` calls will not execute any of ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generator-function-definitions
        @@ -35427,8 +35465,8 @@ No - [Task.js](https://github.com/mozilla/task.js) - [Iterating generators asynchronously](https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/async%20%26%20performance/ch4.md#iterating-generators-asynchronously) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function\* # Function expression @@ -35449,13 +35487,13 @@ As of ES2015, you can also use [arrow functions](../functions/arrow_functions). ### Parameters -`name` Optional +`name` Optional The function name. Can be omitted, in which case the function is _anonymous_. The name is only local to the function body. -`paramN` Optional +`paramN` Optional The name of an argument to be passed to the function. -`statements` Optional +`statements` Optional The statements which comprise the body of the function. ## Description @@ -35539,7 +35577,7 @@ An anonymous function is created and called: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-definitions
        @@ -35608,8 +35646,8 @@ No - [async function](../statements/async_function) - [async function expression](async_function) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function # Functions @@ -35670,13 +35708,13 @@ There is a special syntax for declaring functions (see [function statement](stat statements } -`name` +`name` The function name. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. ### The function expression (`function` expression) @@ -35687,13 +35725,13 @@ A function expression is similar to and has the same syntax as a function declar statements } -`name` +`name` The function name. Can be omitted, in which case the function becomes known as an anonymous function. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. Here is an example of an **anonymous** function expression (the `name` is not used): @@ -35728,13 +35766,13 @@ There is a special syntax for generator function declarations (see [`function* s statements } -`name` +`name` The function name. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. ### The generator function expression (`function*` expression) @@ -35745,13 +35783,13 @@ A generator function expression is similar to and has the same syntax as a gener statements } -`name` +`name` The function name. Can be omitted, in which case the function becomes known as an anonymous function. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. ### The arrow function expression (=>) @@ -35764,10 +35802,10 @@ An arrow function expression has a shorter syntax and lexically binds its `this` param => expression -`param` +`param` The name of an argument. Zero arguments need to be indicated with `()`. For only one argument, the parentheses are not required. (like `foo => 1`) -`statements` or `expression` +`statements` or `expression` Multiple statements need to be enclosed in brackets. A single expression requires no brackets. The expression is also the implicit return value of the function. ### The `Function` constructor @@ -35778,10 +35816,10 @@ As all other objects, [`Function`](global_objects/function) objects can be creat new Function (arg1, arg2, ... argN, functionBody) -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Zero or more names to be used by the function as formal parameters. Each must be a proper JavaScript identifier. -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function body. Invoking the `Function` constructor as a function (without using the `new` operator) has the same effect as invoking it as a constructor. @@ -35796,10 +35834,10 @@ As all other objects, [`GeneratorFunction`](global_objects/generatorfunction) ob new GeneratorFunction (arg1, arg2, ... argN, functionBody) -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Zero or more names to be used by the function as formal argument names. Each must be a string that conforms to the rules for a valid JavaScript identifier or a list of such strings separated with a comma; for example "`x`", "`theValue`", or "`a,b`". -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function definition. Invoking the `GeneratorFunction` constructor as a function (without using the `new` operator) has the same effect as invoking it as a constructor. @@ -35829,10 +35867,10 @@ You can refer to a function's arguments within the function by using the `argume You can define getters (accessor methods) and setters (mutator methods) on any standard built-in object or user-defined object that supports the addition of new properties. The syntax for defining getters and setters uses the object literal syntax. -[get](functions/get) +[get](functions/get) Binds an object property to a function that will be called when that property is looked up. -[set](functions/set) +[set](functions/set) Binds an object property to a function to be called when there is an attempt to set that property. ### Method definition syntax @@ -36075,7 +36113,7 @@ Note that in the `if` test, a reference to `noFunc` is used—there are no brack ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-definitions
        @@ -36359,13 +36397,13 @@ This object cannot be instantiated directly. Instead, a `Generator` instance can ## Instance methods -[`Generator.prototype.next()`](generator/next) +[`Generator.prototype.next()`](generator/next) Returns a value yielded by the [`yield`](../operators/yield) expression. -[`Generator.prototype.return()`](generator/return) +[`Generator.prototype.return()`](generator/return) Returns the given value and finishes the generator. -[`Generator.prototype.throw()`](generator/throw) +[`Generator.prototype.throw()`](generator/throw) Throws an error to a generator (also finishes the generator, unless caught from within that generator). ## Examples @@ -36391,7 +36429,7 @@ With a generator function, values are not evaluated until they are needed. There ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generator-objects
        @@ -36525,10 +36563,10 @@ Note that `GeneratorFunction` is not a global object. It could be obtained by ev ### Parameters -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Names to be used by the function as formal argument names. Each must be a string that corresponds to a valid JavaScript identifier or a list of such strings separated with a comma; for example "`x`", "`theValue`", or "`a,b`". -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function definition. ## Description @@ -36556,7 +36594,7 @@ Invoking the `GeneratorFunction` constructor as a function (without using the `n ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generatorfunction-objects
        @@ -36609,10 +36647,10 @@ The `get` syntax binds an object property to a function that will be called when ### Parameters -`prop` +`prop` The name of the property to bind to the given function. -`expression` +`expression` Starting with ECMAScript 2015, you can also use expressions for a computed property name to bind to the given function. ## Description @@ -36721,7 +36759,7 @@ When using `get` the property will be defined on the instance's prototype, while ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Method definitions' in that specification.
        @@ -36800,10 +36838,10 @@ The `getBigInt64()` method gets a signed 64-bit integer (long long) at the speci ### Parameters -byteOffset +byteOffset The offset, in bytes, from the start of the view to read the data from. -littleEndian +littleEndian Optional Indicates whether the 64-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -36812,7 +36850,7 @@ A [`BigInt`](../bigint). ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such that it would read beyond the end of the view. ## Description @@ -36829,7 +36867,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getbigint64
        @@ -36879,10 +36917,10 @@ The `getBigUint64()` method gets an unsigned 64-bit integer (unsigned long long) ### Parameters -byteOffset +byteOffset The offset, in bytes, from the start of the view to read the data from. -littleEndian +littleEndian Optional Indicates whether the 64-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -36891,7 +36929,7 @@ A [`BigInt`](../bigint). ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such that it would read beyond the end of the view. ## Description @@ -36908,7 +36946,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getbiguint64
        @@ -36957,7 +36995,7 @@ The `Intl.getCanonicalLocales()` method returns an array containing the canonica ### Parameters -`locales` +`locales` A list of [`String`](../string) values for which to get the canonical locale names. ### Return value @@ -36980,7 +37018,7 @@ An array containing the canonical locale names. ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.getcanonicallocales
        @@ -37044,7 +37082,7 @@ The second statement below assigns the value 25 to the variable `day`, based on ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getdate
        @@ -37116,7 +37154,7 @@ The second statement below assigns the value 1 to `weekday`, based on the value ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Date.prototype.getDay' in that specification.
        @@ -37166,10 +37204,10 @@ The `getFloat32()` method gets a signed 32-bit float (float) at the specified by ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 32-bit float is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -37178,7 +37216,7 @@ A signed 32-bit float number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -37195,7 +37233,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getfloat32
        @@ -37244,10 +37282,10 @@ The `getFloat64()` method gets a signed 64-bit float (double) at the specified b ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 64-bit float is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -37256,7 +37294,7 @@ A signed 64-bit float number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -37273,7 +37311,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getfloat64
        @@ -37340,7 +37378,7 @@ The following example assigns the four-digit value of the current year to the va ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getfullyear
        @@ -37404,7 +37442,7 @@ The second statement below assigns the value 23 to the variable `hours`, based o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.gethours
        @@ -37453,10 +37491,10 @@ The `getInt16()` method gets a signed 16-bit integer (short) at the specified by ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 16-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -37465,7 +37503,7 @@ A signed 16-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -37482,7 +37520,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getint16
        @@ -37531,10 +37569,10 @@ The `getInt32()` method gets a signed 32-bit integer (long) at the specified byt ### Parameters -`byteOffset` +`byteOffset` The offset, in bytes, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 32-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -37543,7 +37581,7 @@ A signed 32-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -37560,7 +37598,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getint32
        @@ -37608,7 +37646,7 @@ The `getInt8()` method gets a signed 8-bit integer (byte) at the specified byte ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. ### Return value @@ -37617,7 +37655,7 @@ A signed 8-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -37634,7 +37672,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getint8
        @@ -37695,7 +37733,7 @@ The following example assigns the milliseconds portion of the current time to th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getmilliseconds
        @@ -37758,7 +37796,7 @@ The second statement below assigns the value 15 to the variable `minutes`, based ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getminutes
        @@ -37829,7 +37867,7 @@ The second statement below assigns the value 11 to the variable `month`, based o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getmonth
        @@ -37877,10 +37915,10 @@ The `Object.getOwnPropertyDescriptor()` method returns an object describing the ### Parameters -`obj` +`obj` The object in which to look for the property. -`prop` +`prop` The name or [`Symbol`](../symbol) of the property whose description is to be retrieved. ### Return value @@ -37893,22 +37931,22 @@ This method permits examination of the precise description of a property. A prop A property descriptor is a record with some of the following attributes: -`value` +`value` The value associated with the property (data descriptors only). -`writable` +`writable` `true` if and only if the value associated with the property may be changed (data descriptors only). -`get` +`get` A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter (accessor descriptors only). -`set` +`set` A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter (accessor descriptors only). -`configurable` +`configurable` `true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. -`enumerable` +`enumerable` `true` if and only if this property shows up during enumeration of the properties on the corresponding object. ## Examples @@ -37975,7 +38013,7 @@ In ES5, if the first argument to this method is not an object (a primitive), the ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.getownpropertydescriptor
        @@ -38015,8 +38053,8 @@ In Internet Explorer 8, this was only supported on DOM objects and with some non - [`Object.defineProperty()`](defineproperty) - [`Reflect.getOwnPropertyDescriptor()`](../reflect/getownpropertydescriptor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor # Object.getOwnPropertyDescriptors() @@ -38029,7 +38067,7 @@ The `Object.getOwnPropertyDescriptors()` method returns all own property descrip ### Parameters -`obj` +`obj` The object for which to get all own property descriptors. ### Return value @@ -38042,22 +38080,22 @@ This method permits examination of the precise description of all own properties A property descriptor is a record with some of the following attributes: -`value` +`value` The value associated with the property (data descriptors only). -`writable` +`writable` `true` if and only if the value associated with the property may be changed (data descriptors only). -`get` +`get` A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter (accessor descriptors only). -`set` +`set` A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter (accessor descriptors only). -`configurable` +`configurable` `true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. -`enumerable` +`enumerable` `true` if and only if this property shows up during enumeration of the properties on the corresponding object. ## Examples @@ -38089,7 +38127,7 @@ A typical way of creating a subclass is to define the subclass, set its prototyp ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.getOwnPropertyDescriptors' in that specification.
        @@ -38126,8 +38164,8 @@ No - [`Object.defineProperty()`](defineproperty) - [Polyfill](https://github.com/tc39/proposal-object-getownpropertydescriptors) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors # Object.getOwnPropertyNames() @@ -38140,7 +38178,7 @@ The `Object.getOwnPropertyNames()` method returns an array of all properties (in ### Parameters -`obj` +`obj` The object whose enumerable and non-enumerable properties are to be returned. ### Return value @@ -38238,7 +38276,7 @@ This uses the [`Array.prototype.filter()`](../array/filter) function to remove t ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.getownpropertynames
        @@ -38278,8 +38316,8 @@ This uses the [`Array.prototype.filter()`](../array/filter) function to remove t - [`Object.keys()`](keys) - [`Array.forEach()`](../array/foreach) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames # Object.getOwnPropertySymbols() @@ -38292,7 +38330,7 @@ The `Object.getOwnPropertySymbols()` method returns an array of all symbol prope ### Parameters -`obj` +`obj` The object whose symbol properties are to be returned. ### Return value @@ -38324,7 +38362,7 @@ As all objects have no own symbol properties initially, `Object.getOwnPropertySy ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.getownpropertysymbols
        @@ -38360,8 +38398,8 @@ No - [`Object.getOwnPropertyNames()`](getownpropertynames) - [`Symbol`](../symbol) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols # handler.getPrototypeOf() @@ -38380,7 +38418,7 @@ The `handler.getPrototypeOf()` method is a trap for the `[[GetPrototypeOf]]` int The following parameter is passed to the `getPrototypeOf()` method. `this` is bound to the handler. -`target` +`target` The target object. ### Return value @@ -38459,7 +38497,7 @@ If the following invariants are violated, the proxy will throw a [`TypeError`](. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-getprototypeof
        @@ -38497,8 +38535,8 @@ No - [`Object.getPrototypeOf()`](../../object/getprototypeof) - [`Reflect.getPrototypeOf()`](../../reflect/getprototypeof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf # Date.prototype.getSeconds() @@ -38526,7 +38564,7 @@ The second statement below assigns the value 30 to the variable `seconds`, based ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getseconds
        @@ -38706,7 +38744,7 @@ Subtracting two subsequent `getTime()` calls on newly generated [`Date`](../date ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.gettime
        @@ -38792,7 +38830,7 @@ In a time zone that doesn't annually shift in and out of Daylight Saving Time (D ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.gettimezoneoffset
        @@ -38840,10 +38878,10 @@ The `getUint16()` method gets an unsigned 16-bit integer (unsigned short) at the ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 16-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -38852,7 +38890,7 @@ An unsigned 16-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -38869,7 +38907,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getuint16
        @@ -38918,10 +38956,10 @@ The `getUint32()` method gets an unsigned 32-bit integer (unsigned long) at the ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 32-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -38930,7 +38968,7 @@ An unsigned 32-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -38947,7 +38985,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getuint32
        @@ -38995,7 +39033,7 @@ The `getUint8()` method gets an unsigned 8-bit integer (unsigned byte) at the sp ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. ### Return value @@ -39004,7 +39042,7 @@ An unsigned 8-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -39021,7 +39059,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getuint8
        @@ -39082,7 +39120,7 @@ The following example assigns the day of month of the current date to the variab ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcdate
        @@ -39144,7 +39182,7 @@ The following example assigns the weekday portion of the current date to the var ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcday
        @@ -39210,7 +39248,7 @@ The following example assigns the four-digit value of the current year to the va ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcfullyear
        @@ -39271,7 +39309,7 @@ The following example assigns the hours portion of the current time to the varia ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutchours
        @@ -39334,7 +39372,7 @@ The following example assigns the milliseconds portion of the current time to th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcmilliseconds
        @@ -39395,7 +39433,7 @@ The following example assigns the minutes portion of the current time to the var ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcminutes
        @@ -39456,7 +39494,7 @@ The following example assigns the month portion of the current date to the varia ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcmonth
        @@ -39517,7 +39555,7 @@ The following example assigns the seconds portion of the current time to the var ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcseconds
        @@ -39621,7 +39659,7 @@ The third statement assigns the value 95 to the variable `year`, representing th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getyear
        @@ -39670,13 +39708,13 @@ A `WebAssembly.Global()` constructor creates a new `Global` object representing ### Parameters -_descriptor_ +_descriptor_ A `GlobalDescriptor` dictionary object, which contains two properties: - `value`: A [`USVString`](https://developer.mozilla.org/en-US/docs/Web/API/USVString) representing the data type of the global. This can be one of `i32`, `i64`, `f32`, and `f64`. USVString corresponds to the set of all possible sequences of unicode scalar values. USVString maps to a String when returned in JavaScript; it's generally only used for APIs that perform text processing and need a string of unicode scalar values to operate on. USVString is equivalent to DOMString except for not allowing unpaired surrogate codepoints. Unpaired surrogate codepoints present in USVString are converted by the browser to Unicode 'replacement character' U+FFFD, (�). - `mutable`: A boolean value that determines whether the global is mutable or not. By default, this is `false`. -_value_ +_value_ The value the variable contains. This can be any value, as long as its type matches the variable's data type. If no value is specified, a typed 0 value is used, as specified by the [`DefaultValue` algorithm](https://webassembly.github.io/spec/js-api/#defaultvalue). ## Examples @@ -39714,7 +39752,7 @@ The value of the global is then changed, first to `42` using the `Global.value` ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-global-global
        @@ -39752,8 +39790,8 @@ No - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) - [Import/Export mutable globals proposal](https://github.com/WebAssembly/mutable-global/blob/master/proposals/mutable-global/Overview.md) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/Global # globalThis @@ -39776,7 +39814,7 @@ yes ## Description -Historically, accessing the global object has required different syntax in different JavaScript environments. On the web you can use [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window), [`self`](https://developer.mozilla.org/en-US/docs/Web/API/Window/self), or [`frames`](https://developer.mozilla.org/en-US/docs/Web/API/Window/frames) - but in [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Worker) only `self` will work. In Node.js none of these work, and you must instead use `global`. +Historically, accessing the global object has required different syntax in different JavaScript environments. On the web you can use [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window), [`self`](https://developer.mozilla.org/en-US/docs/Web/API/Window/self), or [`frames`](https://developer.mozilla.org/en-US/docs/Web/API/Window/frames) - but in [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Worker) only `self` will work. In Node.js none of these work, and you must instead use `global`. The `this` keyword could be used inside functions running in non–strict mode, but `this` will be `undefined` in Modules and inside functions running in strict mode. You can also use `Function('return this')()`, but environments that disable [`eval()`](eval), like [CSP](https://developer.mozilla.org/en-US/docs/Glossary/CSP) in browsers, prevent use of [`Function`](function) in this way. The `globalThis` property provides a standard way of accessing the global `this` value (and hence the global object itself) across environments. Unlike similar properties such as `window` and `self`, it's guaranteed to work in window and non-window contexts. In this way, you can access the global object in a consistent manner without having to know which environment the code is being run in. To help you remember the name, just remember that in global scope the `this` value is `globalThis`. @@ -39816,7 +39854,7 @@ With `globalThis` available, the additional search for the global across environ ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-globalthis
        @@ -39915,7 +39953,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -39952,8 +39990,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Less than operator](less_than) - [Less than or equal operator](less_than_or_equal) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Greater_than # Greater than or equal (>=) @@ -40017,7 +40055,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -40054,8 +40092,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Less than operator](less_than) - [Less than or equal operator](less_than_or_equal) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Greater_than_or_equal # Grouping operator ( ) @@ -40094,7 +40132,7 @@ Overriding multiplication and division first, then addition and subtraction to e ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-grouping-operator
        @@ -40131,8 +40169,8 @@ Overriding multiplication and division first, then addition and subtraction to e - [`delete`](delete) - [`typeof`](typeof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Grouping # WebAssembly.Memory.prototype.grow() @@ -40145,7 +40183,7 @@ The `grow()` protoype method of the `Memory` object increases the size of the me ### Parameters -_number_ +_number_ The number of WebAssembly pages you want to grow the memory by (each one is 64KiB in size). ### Return value @@ -40171,7 +40209,7 @@ Note the return value of `grow()` here is the previous number of WebAssembly pag ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-memory-grow
        @@ -40212,8 +40250,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow # handler.has() @@ -40231,10 +40269,10 @@ The `handler.has()` method is a trap for the [`in`](../../../operators/in) opera The following parameters are passed to `has()` method. `this` is bound to the handler. -`target` +`target` The target object. -`prop` +`prop` The name or [`Symbol`](../../symbol) of the property to check for existence. ### Return value @@ -40292,7 +40330,7 @@ The following code violates an invariant. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p
        @@ -40330,8 +40368,8 @@ No - [`in`](../../../operators/in) operator - [`Reflect.has()`](../../reflect/has) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has # SyntaxError: Unexpected '\#' used outside of class body @@ -40436,7 +40474,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.hasIndices
        @@ -40509,8 +40547,8 @@ No - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/hasIndices # Symbol.hasInstance @@ -40564,7 +40602,7 @@ Just in the same manner at which you can check if an object is an instance of a ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.hasinstance
        @@ -40599,8 +40637,8 @@ No - [`instanceof`](../../operators/instanceof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance # Object.prototype.hasOwnProperty() @@ -40613,7 +40651,7 @@ The `hasOwnProperty()` method returns a boolean indicating whether the object ha ### Parameters -prop +prop The [`String`](../string) name or [Symbol](https://developer.mozilla.org/en-US/docs/Glossary/Symbol) of the property to test. ### Return value @@ -40698,7 +40736,7 @@ Note that in the last case there are no newly created objects. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.prototype.hasownproperty
        @@ -40737,8 +40775,8 @@ Note that in the last case there are no newly created objects. - [`in`](../../operators/in) - [JavaScript Guide: Inheritance revisited](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty # Intl.Locale.prototype.hourCycle @@ -40773,7 +40811,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.hourCycle
        @@ -40826,7 +40864,7 @@ $$\\mathtt{\\operatorname{Math.hypot}(v\_{1},v\_{2},\\ldots,v\_{n})} = \\sqrt{\\ ### Parameters -`value1, value2, ...` +`value1, value2, ...` Numbers. ### Return value @@ -40896,7 +40934,7 @@ A polyfill that avoids underflows and overflows: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.hypot
        @@ -40933,8 +40971,8 @@ No - [`Math.pow()`](pow) - [`Math.sqrt()`](sqrt) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot # SyntaxError: identifier starts immediately after numeric literal @@ -40996,13 +41034,13 @@ The `if` statement executes a statement if a specified condition is [truthy](htt statement2 } -`condition` +`condition` An [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#expressions) that is considered to be either [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) or [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy). -`statement1` +`statement1` Statement that is executed if condition is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy). Can be any statement, including further nested `if` statements. To execute multiple statements, use a [block](block) statement (`{ ... }`) to group those statements. To execute no statements, use an [empty](empty) statement. -`statement2` +`statement2` Statement that is executed if `condition` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) and the `else` clause exists. Can be any statement, including block statements and further nested `if` statements. ## Description @@ -41082,7 +41120,7 @@ If you need to use an assignment in a conditional expression, a common practice ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-if-statement
        @@ -41119,8 +41157,8 @@ If you need to use an assignment in a conditional expression, a common practice - [`switch`](switch) - [Conditional operator](../operators/conditional_operator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else # RegExp.prototype.ignoreCase @@ -41157,7 +41195,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.ignorecase
        @@ -41225,8 +41263,8 @@ You cannot change this property directly. - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase # SyntaxError: illegal character @@ -41322,19 +41360,19 @@ Backward compatibility can be ensured using attribute `nomodule` on the [`
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-imports
        @@ -41603,8 +41641,8 @@ No - Axel Rauschmayer's book: ["Exploring JS: Modules"](https://exploringjs.com/es6/ch_modules.html) - The Modern JavaScript Tutorial(javascript.info): [Export and Import](https://javascript.info/import-export) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import # import.meta @@ -41662,7 +41700,7 @@ Such file-specific argument passing may be complementary to that used in the app ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-ImportMeta
        HTML Standard (HTML) @@ -41701,8 +41739,8 @@ No - [`import`](import) - [`export`](export) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import.meta # WebAssembly.Module.imports() @@ -41715,7 +41753,7 @@ The `WebAssembly.imports()` function returns an array containing descriptions of ### Parameters -_module_ +_module_ A [`WebAssembly.Module`](../module) object. ### Return value @@ -41744,7 +41782,7 @@ The output looks like this: ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-module-imports
        @@ -41785,8 +41823,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports # Math.imul() @@ -41799,10 +41837,10 @@ The `Math.imul()` function returns the result of the C-like 32-bit multiplicatio ### Parameters -`a` +`a` First number. -`b` +`b` Second number. ### Return value @@ -41859,7 +41897,7 @@ However, the following function is more performant because it is likely that bro ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.imul
        @@ -41894,8 +41932,8 @@ No - [Emscripten](https://en.wikipedia.org/wiki/Emscripten) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul # in operator @@ -41908,10 +41946,10 @@ The `in` returns `true` if the specified property is in the specified object or ### Parameters -`prop` +`prop` A string or symbol representing a property name or array index (non-symbols will be coerced to strings). -`object` +`object` Object to check if it (or its prototype chain) contains the property with specified name (`prop`). ## Examples @@ -41987,7 +42025,7 @@ The `in` operator returns `true` for properties in the prototype chain. (If you ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -42026,8 +42064,8 @@ The `in` operator returns `true` for properties in the prototype chain. (If you - [`Reflect.has()`](../global_objects/reflect/has) - [Enumerability and ownership of properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in # TypeError: cannot use 'in' operator to search for 'x' in 'y' @@ -42104,12 +42142,12 @@ The `includes()` method determines whether an array includes a certain value amo ### Parameters -`searchElement` +`searchElement` The value to search for. **Note:** When comparing strings and characters, `includes()` is _case-sensitive_. -`fromIndex` Optional +`fromIndex` Optional The position in this array at which to begin searching for `searchElement`. The first element to be searched is found at `fromIndex` for positive values of `fromIndex`, or at `arr.length + fromIndex` for negative values of `fromIndex` (using the [absolute value](#) of `fromIndex` as the number of elements from the end of the array at which to start the search). @@ -42169,7 +42207,7 @@ The example below illustrates `includes()` method called on the function's [argu ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.includes
        @@ -42244,7 +42282,7 @@ If used prefix, with operator before operand (for example, `++x`), the increment ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Increment operator' in that specification.
        @@ -42287,8 +42325,8 @@ If used prefix, with operator before operand (for example, `++x`), the increment - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment # JavaScript reference @@ -42602,10 +42640,10 @@ The `indexOf()` method returns the first index at which a given element can be f ### Parameters -`searchElement` +`searchElement` Element to locate in the array. -`fromIndex` Optional +`fromIndex` Optional The index to start the search at. If the index is greater than or equal to the array's length, -1 is returned, which means the array will not be searched. If the provided index value is a negative number, it is taken as the offset from the end of the array. Note: if the provided index is negative, the array is still searched from front to back. If the provided index is 0, then the whole array will be searched. Default: 0 (entire array is searched). ### Return value @@ -42755,7 +42793,7 @@ However, if you are more interested in all the little technical bits defined by ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.indexof
        @@ -42856,7 +42894,7 @@ To prevent this, and require that different types are considered to be different ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-equality-operators
        @@ -42893,8 +42931,8 @@ To prevent this, and require that different types are considered to be different - [Strict equality operator](strict_equality) - [Strict inequality operator](strict_inequality) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality # Infinity @@ -42938,7 +42976,7 @@ As defined by the ECMAScript 5 specification, `Infinity` is read-only (implement ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-value-properties-of-the-global-object-infinity
        @@ -42983,12 +43021,12 @@ A `WebAssembly.Instance` object is a stateful, executable instance of a [`WebAss ## Constructor -[`WebAssembly.Instance()`](instance/instance) +[`WebAssembly.Instance()`](instance/instance) Creates a new `Instance` object. ## Instance properties -[`Instance.prototype.exports`](instance/exports) +[`Instance.prototype.exports`](instance/exports) Returns an object containing as its members all the functions exported from the WebAssembly module instance, to allow them to be accessed and used by JavaScript. Read-only. ## Examples @@ -43030,7 +43068,7 @@ This also demonstrates how the `exports` property is used to access exported fun ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #instances
        @@ -43131,8 +43169,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance # instanceof @@ -43145,10 +43183,10 @@ The `instanceof` tests to see if the `prototype` property of a constructor appea ### Parameters -`object` +`object` The object to test. -`constructor` +`constructor` Function to test against ## Description @@ -43281,7 +43319,7 @@ This will always be `false`. (`!mycar` will be evaluated before `instanceof`, so ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Relational Operators' in that specification.
        @@ -43318,8 +43356,8 @@ This will always be `false`. (`!mycar` will be evaluated before `instanceof`, so - [`Symbol.hasInstance`](../global_objects/symbol/hasinstance) - [`Object.prototype.isPrototypeOf`](../global_objects/object/isprototypeof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof # WebAssembly.instantiate() @@ -43339,10 +43377,10 @@ The `WebAssembly.instantiate()` function allows you to compile and instantiate W #### Parameters -_bufferSource_ +_bufferSource_ A [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) or [`ArrayBuffer`](../arraybuffer) containing the binary code of the .wasm module you want to compile. -_importObject_ Optional +_importObject_ Optional An object containing the values to be imported into the newly-created `Instance`, such as functions or [`WebAssembly.Memory`](memory) objects. There must be one matching property for each declared import of the compiled module or else a [`WebAssembly.LinkError`](linkerror) is thrown. #### Return value @@ -43363,10 +43401,10 @@ A `Promise` that resolves to a `ResultObject` which contains two fields: #### Parameters -_module_ +_module_ The [`WebAssembly.Module`](module) object to be instantiated. -_importObject_ Optional +_importObject_ Optional An object containing the values to be imported into the newly-created `Instance`, such as functions or [`WebAssembly.Memory`](memory) objects. There must be one matching property for each declared import of `module` or else a [`WebAssembly.LinkError`](linkerror) is thrown. #### Return value @@ -43436,7 +43474,7 @@ In the worker (see `wasm_worker.js`) we define an import object for the module t ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-webassembly-instantiate
        @@ -43477,8 +43515,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate # WebAssembly.instantiateStreaming() @@ -43491,10 +43529,10 @@ The `WebAssembly.instantiateStreaming()` function compiles and instantiates a We ### Parameters -_source_ +_source_ A [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object or a promise that will fulfill with one, representing the underlying source of a .wasm module you want to stream, compile, and instantiate. -_importObject_ Optional +_importObject_ Optional An object containing the values to be imported into the newly-created `Instance`, such as functions or [`WebAssembly.Memory`](memory) objects. There must be one matching property for each declared import of the compiled module or else a `WebAssembly.LinkError` is thrown. ### Return value @@ -43526,7 +43564,7 @@ The `ResultObject`'s instance member is then accessed, and the contained exporte ## Specifications -
        Specification
        WebAssembly Web API (WebAssembly Web API) +
        Specification
        WebAssembly Web API (WebAssembly Web API)
        #dom-webassembly-instantiatestreaming
        @@ -43563,8 +43601,8 @@ No - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming # Int16Array @@ -43573,117 +43611,117 @@ The `Int16Array` typed array represents an array of twos-complement 16-bit signe ## Constructor -[`Int16Array()`](int16array/int16array) +[`Int16Array()`](int16array/int16array) Creates a new `Int16Array` object. ## Static properties -[`Int16Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Int16Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `2` in the case of an `Int16Array`. -[`Int16Array.name`](typedarray/name) +[`Int16Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Int16Array` type: "`Int16Array`". ## Static methods -[`Int16Array.from()`](typedarray/from) +[`Int16Array.from()`](typedarray/from) Creates a new `Int16Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Int16Array.of()`](typedarray/of) +[`Int16Array.of()`](typedarray/of) Creates a new `Int16Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Int16Array.prototype.buffer`](typedarray/buffer) +[`Int16Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Int16Array`. Fixed at construction time and thus **read only**. -[`Int16Array.prototype.byteLength`](typedarray/bytelength) +[`Int16Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Int16Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int16Array.prototype.byteOffset`](typedarray/byteoffset) +[`Int16Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Int16Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int16Array.prototype.length`](typedarray/length) +[`Int16Array.prototype.length`](typedarray/length) Returns the number of elements held in the `Int16Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Int16Array.prototype.copyWithin()`](typedarray/copywithin) +[`Int16Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Int16Array.prototype.entries()`](typedarray/entries) +[`Int16Array.prototype.entries()`](typedarray/entries) Returns a new _array iterator_ object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Int16Array.prototype.every()`](typedarray/every) +[`Int16Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Int16Array.prototype.fill()`](typedarray/fill) +[`Int16Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Int16Array.prototype.filter()`](typedarray/filter) +[`Int16Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns `true`. See also [`Array.prototype.filter()`](array/filter). -[`Int16Array.prototype.find()`](typedarray/find) +[`Int16Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Int16Array.prototype.findIndex()`](typedarray/findindex) +[`Int16Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or `-1` if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Int16Array.prototype.forEach()`](typedarray/foreach) +[`Int16Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Int16Array.prototype.includes()`](typedarray/includes) +[`Int16Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Int16Array.prototype.indexOf()`](typedarray/indexof) +[`Int16Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Int16Array.prototype.join()`](typedarray/join) +[`Int16Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Int16Array.prototype.keys()`](typedarray/keys) +[`Int16Array.prototype.keys()`](typedarray/keys) Returns a new _array iterator_ that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Int16Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Int16Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Int16Array.prototype.map()`](typedarray/map) +[`Int16Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Int16Array.prototype.reduce()`](typedarray/reduce) +[`Int16Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Int16Array.prototype.reduceRight()`](typedarray/reduceright) +[`Int16Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Int16Array.prototype.reverse()`](typedarray/reverse) +[`Int16Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Int16Array.prototype.set()`](typedarray/set) +[`Int16Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Int16Array.prototype.slice()`](typedarray/slice) +[`Int16Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Int16Array.prototype.some()`](typedarray/some) +[`Int16Array.prototype.some()`](typedarray/some) Returns `true` if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Int16Array.prototype.sort()`](typedarray/sort) +[`Int16Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Int16Array.prototype.subarray()`](typedarray/subarray) +[`Int16Array.prototype.subarray()`](typedarray/subarray) Returns a new `Int16Array` from the given start and end element index. -[`Int16Array.prototype.values()`](typedarray/values) +[`Int16Array.prototype.values()`](typedarray/values) Returns a new **array iterator object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values).** -**[`Int16Array.prototype.toLocaleString()`](typedarray/tolocalestring)** +**[`Int16Array.prototype.toLocaleString()`](typedarray/tolocalestring)** **Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring).** -**[`Int16Array.prototype.toString()`](typedarray/tostring)** +**[`Int16Array.prototype.toString()`](typedarray/tostring)** **Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring).** -**[`Int16Array.prototype[@@iterator]()`](typedarray/@@iterator)** +**[`Int16Array.prototype[@@iterator]()`](typedarray/@@iterator)** **Returns a new _array iterator_ object that contains the values for each index in the array.** ## Examples @@ -43717,7 +43755,7 @@ Returns a new **array iterator object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #table-49
        @@ -43799,16 +43837,16 @@ The `Int32Array()` typed array constructor creates an array of twos-complement 3 ### Parameters -`length` +`length` When called with a `length` argument, an internal array buffer is created in memory, of size `length` _multiplied by `BYTES_PER_ELEMENT`_ bytes, containing zeros. -`typedArray` +`typedArray` When called with a `typedArray` argument, which can be an object of any of the typed array types (such as `Int32Array`), the `typedArray` gets copied into a new typed array. Each value in `typedArray` is converted to the corresponding type of the constructor before being copied into the new array. The length of the new typed array will be same as the length of the `typedArray` argument. -`object` +`object` When called with an `object` argument, a new typed array is created as if by the `TypedArray.from()` method. -`buffer`, `byteOffset`, `length` +`buffer`, `byteOffset`, `length` When called with a `buffer`, and optionally a `byteOffset` and a `length` argument, a new typed array view is created that views the specified [`ArrayBuffer`](arraybuffer). The `byteOffset` and `length` parameters specify the memory range that will be exposed by the typed array view. If both are omitted, all of `buffer` is viewed; if only `length` is omitted, the remainder of `buffer` is viewed. ## Examples @@ -43842,7 +43880,7 @@ When called with a `buffer`, and optionally a `byteOffset` and a `length` argume ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray-constructors
        @@ -43975,117 +44013,117 @@ The `Int8Array` typed array represents an array of twos-complement 8-bit signed ## Constructor -[`Int8Array()`](int8array/int8array) +[`Int8Array()`](int8array/int8array) Creates a new `Int8Array` object. ## Static properties -[`Int8Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Int8Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `1` in the case of an `Int8Array`. -[`Int8Array.name`](typedarray/name) +[`Int8Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Int8Array` type: "`Int8Array`". ## Static methods -[`Int8Array.from()`](typedarray/from) +[`Int8Array.from()`](typedarray/from) Creates a new `Int8Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Int8Array.of()`](typedarray/of) +[`Int8Array.of()`](typedarray/of) Creates a new `Int8Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Int8Array.prototype.buffer`](typedarray/buffer) +[`Int8Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Int8Array`. Fixed at construction time and thus **read only**. -[`Int8Array.prototype.byteLength`](typedarray/bytelength) +[`Int8Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Int8Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int8Array.prototype.byteOffset`](typedarray/byteoffset) +[`Int8Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Int8Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int8Array.prototype.length`](typedarray/length) +[`Int8Array.prototype.length`](typedarray/length) Returns the number of elements held in the `Int8Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Int8Array.prototype.copyWithin()`](typedarray/copywithin) +[`Int8Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Int8Array.prototype.entries()`](typedarray/entries) +[`Int8Array.prototype.entries()`](typedarray/entries) Returns a new _array iterator_ object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Int8Array.prototype.every()`](typedarray/every) +[`Int8Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Int8Array.prototype.fill()`](typedarray/fill) +[`Int8Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Int8Array.prototype.filter()`](typedarray/filter) +[`Int8Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns `true`. See also [`Array.prototype.filter()`](array/filter). -[`Int8Array.prototype.find()`](typedarray/find) +[`Int8Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Int8Array.prototype.findIndex()`](typedarray/findindex) +[`Int8Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or `-1` if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Int8Array.prototype.forEach()`](typedarray/foreach) +[`Int8Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Int8Array.prototype.includes()`](typedarray/includes) +[`Int8Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Int8Array.prototype.indexOf()`](typedarray/indexof) +[`Int8Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Int8Array.prototype.join()`](typedarray/join) +[`Int8Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Int8Array.prototype.keys()`](typedarray/keys) +[`Int8Array.prototype.keys()`](typedarray/keys) Returns a new _array iterator_ that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Int8Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Int8Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Int8Array.prototype.map()`](typedarray/map) +[`Int8Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Int8Array.prototype.reduce()`](typedarray/reduce) +[`Int8Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Int8Array.prototype.reduceRight()`](typedarray/reduceright) +[`Int8Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Int8Array.prototype.reverse()`](typedarray/reverse) +[`Int8Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Int8Array.prototype.set()`](typedarray/set) +[`Int8Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Int8Array.prototype.slice()`](typedarray/slice) +[`Int8Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Int8Array.prototype.some()`](typedarray/some) +[`Int8Array.prototype.some()`](typedarray/some) Returns `true` if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Int8Array.prototype.sort()`](typedarray/sort) +[`Int8Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Int8Array.prototype.subarray()`](typedarray/subarray) +[`Int8Array.prototype.subarray()`](typedarray/subarray) Returns a new `Int8Array` from the given start and end element index. -[`Int8Array.prototype.values()`](typedarray/values) +[`Int8Array.prototype.values()`](typedarray/values) Returns a new _array iterator_ object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`Int8Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`Int8Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`Int8Array.prototype.toString()`](typedarray/tostring) +[`Int8Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`Int8Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`Int8Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new _array iterator_ object that contains the values for each index in the array. ## Examples @@ -44119,7 +44157,7 @@ Returns a new _array iterator_ object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'TypedArray constructors' in that specification.
        @@ -44201,27 +44239,27 @@ Example cases are mostly when something is too large, e.g.: ## Constructor -[`InternalError()`](internalerror/internalerror) +[`InternalError()`](internalerror/internalerror) Creates a new `InternalError` object. ## Instance properties -[`InternalError.prototype.message`](error/message) +[`InternalError.prototype.message`](error/message) Error message. Inherited from [`Error`](error). -[`InternalError.prototype.name`](error/name) +[`InternalError.prototype.name`](error/name) Error name. Inherited from [`Error`](error). -[`InternalError.prototype.fileName`](error/filename) +[`InternalError.prototype.fileName`](error/filename) Path to file that raised this error. Inherited from [`Error`](error). -[`InternalError.prototype.lineNumber`](error/linenumber) +[`InternalError.prototype.lineNumber`](error/linenumber) Line number in file that raised this error. Inherited from [`Error`](error). -[`InternalError.prototype.columnNumber`](error/columnnumber) +[`InternalError.prototype.columnNumber`](error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](error). -[`InternalError.prototype.stack`](error/stack) +[`InternalError.prototype.stack`](error/stack) Stack trace. Inherited from [`Error`](error). ## Examples @@ -44321,33 +44359,33 @@ The `Intl` object is the namespace for the ECMAScript Internationalization API, ## Constructor properties -[`Intl.Collator()`](intl/collator/collator) +[`Intl.Collator()`](intl/collator/collator) Constructor for collators, which are objects that enable language-sensitive string comparison. -[`Intl.DateTimeFormat()`](intl/datetimeformat/datetimeformat) +[`Intl.DateTimeFormat()`](intl/datetimeformat/datetimeformat) Constructor for objects that enable language-sensitive date and time formatting. -[`Intl.DisplayNames()`](intl/displaynames/displaynames) +[`Intl.DisplayNames()`](intl/displaynames/displaynames) Constructor for objects that enable the consistent translation of language, region and script display names. -[`Intl.ListFormat()`](intl/listformat/listformat) +[`Intl.ListFormat()`](intl/listformat/listformat) Constructor for objects that enable language-sensitive list formatting. -[`Intl.Locale()`](intl/locale/locale) +[`Intl.Locale()`](intl/locale/locale) Constructor for objects that represents a Unicode locale identifier. -[`Intl.NumberFormat()`](intl/numberformat/numberformat) +[`Intl.NumberFormat()`](intl/numberformat/numberformat) Constructor for objects that enable language-sensitive number formatting. -[`Intl.PluralRules()`](intl/pluralrules/pluralrules) +[`Intl.PluralRules()`](intl/pluralrules/pluralrules) Constructor for objects that enable plural-sensitive formatting and language-specific rules for plurals. -[`Intl.RelativeTimeFormat()`](intl/relativetimeformat/relativetimeformat) +[`Intl.RelativeTimeFormat()`](intl/relativetimeformat/relativetimeformat) Constructor for objects that enable language-sensitive relative time formatting. ## Static methods -[`Intl.getCanonicalLocales()`](intl/getcanonicallocales) +[`Intl.getCanonicalLocales()`](intl/getcanonicallocales) Returns canonical locale names. ## Locale identification and negotiation @@ -44428,7 +44466,7 @@ You can use `Intl` to format dates and numbers in a form that's conventional for ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #intl-object
        @@ -45166,10 +45204,10 @@ The `Object.is()` method determines whether two values are [the same value](http ### Parameters -`value1` +`value1` The first value to compare. -`value2` +`value2` The second value to compare. ### Return value @@ -45246,7 +45284,7 @@ This is also _not_ the same as being equal according to the [`===`](https://deve ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.is' in that specification.
        @@ -45281,8 +45319,8 @@ No - [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness) — a comparison of all three built-in sameness facilities -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is # TypeError: 'x' is not iterable @@ -45412,7 +45450,7 @@ The `Array.isArray()` method determines whether the passed value is an [`Array`] ### Parameters -`value` +`value` The value to be checked. ### Return value @@ -45466,7 +45504,7 @@ When checking for `Array` instance, `Array.isArray` is preferred over `instanceo ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.isarray
        @@ -45571,7 +45609,7 @@ For array-like objects, the default is to not spread. `Symbol.isConcatSpreadable ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.isconcatspreadable
        @@ -45606,8 +45644,8 @@ No - [`Array.prototype.concat()`](../array/concat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable # Reflect.isExtensible() @@ -45620,7 +45658,7 @@ The static `Reflect.isExtensible()` method determines if an object is extensible ### Parameters -`target` +`target` The target object which to check if it is extensible. ### Return value @@ -45669,7 +45707,7 @@ If the `target` argument to this method is not an object (a primitive), then it ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-reflect.isextensible
        @@ -45705,8 +45743,8 @@ No - [`Reflect`](../reflect) - [`Object.isExtensible()`](../object/isextensible) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible # Number.isFinite() @@ -45719,7 +45757,7 @@ The `Number.isFinite()` method determines whether the passed value is a finite n ### Parameters -`value` +`value` The value to be tested for finiteness. ### Return value @@ -45754,7 +45792,7 @@ In comparison to the global [`isFinite()`](../isfinite) function, this method do ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.isfinite
        @@ -45790,8 +45828,8 @@ No - The [`Number`](../number) object it belongs to. - The global function [`isFinite`](../isfinite). -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite # Object.isFrozen() @@ -45804,7 +45842,7 @@ The `Object.isFrozen()` determines if an object is [frozen](freeze). ### Parameters -`obj` +`obj` The object which should be checked. ### Return value @@ -45913,7 +45951,7 @@ In ES5, if the argument to this method is not an object (a primitive), then it w ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.isFrozen' in that specification.
        @@ -45952,8 +45990,8 @@ In ES5, if the argument to this method is not an object (a primitive), then it w - [`Object.seal()`](seal) - [`Object.isSealed()`](issealed) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen # Number.isInteger() @@ -45966,7 +46004,7 @@ The `Number.isInteger()` method determines whether the passed value is an intege ### Parameters -`value` +`value` The value to be tested for being an integer. ### Return value @@ -46011,7 +46049,7 @@ If the target value is an integer, return `true`, otherwise return `false`. If t ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.isinteger
        @@ -46046,8 +46084,8 @@ No - The [`Number`](../number) object it belongs to. -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger # Atomics.isLockFree() @@ -46060,7 +46098,7 @@ The static ` Atomics``.isLockFree() ` method is used to determine whether to use ### Parameters -`size` +`size` The size in bytes to check. ### Return value @@ -46082,7 +46120,7 @@ A [`Boolean`](../boolean) indicating whether the operation is lock free. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.islockfree
        @@ -46157,7 +46195,7 @@ The `isNaN()` function determines whether a value is [`NaN`](nan) or not. Becaus ### Parameters -`value` +`value` The value to be tested. ### Return value @@ -46223,7 +46261,7 @@ You can use this, for example, to test whether an argument to a function is arit ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'isNaN' in that specification.
        @@ -46273,7 +46311,7 @@ The `isPrototypeOf()` method checks if an object exists in another object's prot ### Parameters -`object` +`object` The object whose prototype chain will be searched. ### Return value @@ -46282,7 +46320,7 @@ A [`Boolean`](../boolean) indicating whether the calling object lies in the prot ### Errors thrown -[`TypeError`](../typeerror) +[`TypeError`](../typeerror) A [`TypeError`](../typeerror) is thrown if `prototypeObj` is undefined or null. ## Description @@ -46329,7 +46367,7 @@ For example, to execute some code that's only safe to run if a `baz` object has ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.prototype.isprototypeof
        @@ -46367,8 +46405,8 @@ For example, to execute some code that's only safe to run if a `baz` object has - [`Object.setPrototypeOf()`](setprototypeof) - [`Object/proto`](proto) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf # Number.isSafeInteger() @@ -46392,7 +46430,7 @@ For larger integers, consider using the [`BigInt`](../bigint) type. ### Parameters -`testValue` +`testValue` The value to be tested for being a safe integer. ### Return value @@ -46420,7 +46458,7 @@ A [`Boolean`](../boolean) indicating whether or not the given value is a number ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.issafeinteger
        @@ -46458,8 +46496,8 @@ No - [`Number.MAX_SAFE_INTEGER`](max_safe_integer) - [`BigInt`](../bigint) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger # Object.isSealed() @@ -46472,7 +46510,7 @@ The `Object.isSealed()` method determines if an object is sealed. ### Parameters -`obj` +`obj` The object which should be checked. ### Return value @@ -46543,7 +46581,7 @@ In ES5, if the argument to this method is not an object (a primitive), then it w ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.isSealed' in that specification.
        @@ -46582,8 +46620,8 @@ In ES5, if the argument to this method is not an object (a primitive), then it w - [`Object.freeze()`](freeze) - [`Object.isFrozen()`](isfrozen) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed # ArrayBuffer.isView() @@ -46596,7 +46634,7 @@ The `ArrayBuffer.isView()` method determines whether the passed value is one of ### Parameters -`value` +`value` The value to be checked. ### Return value @@ -46624,7 +46662,7 @@ The value to be checked. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arraybuffer.isview
        @@ -46695,7 +46733,7 @@ The following example uses string methods to change the formatting of a string: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.italics
        @@ -46732,8 +46770,8 @@ The following example uses string methods to change the formatting of a string: - [`String.prototype.bold()`](bold) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics # Iteration protocols @@ -47122,7 +47160,7 @@ If an iterable's `@@iterator` method does not return an iterator object, then it ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Symbol.iterator' in that specification.
        @@ -47162,8 +47200,8 @@ No - [`Map.prototype[@@iterator]()`](../map/@@iterator) - [`Set.prototype[@@iterator]()`](../set/@@iterator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator # Array.prototype.join() @@ -47177,7 +47215,7 @@ The `join()` method creates and returns a new string by concatenating all of the ### Parameters -`separator` Optional +`separator` Optional Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (","). If `separator` is an empty string, all elements are joined without any characters in between them. ### Return value @@ -47215,7 +47253,7 @@ The following example joins array-like object (`arguments`), by calling [`Functi ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.join' in that specification.
        @@ -47264,13 +47302,13 @@ The `JSON` object contains methods for parsing [JavaScript Object Notation](http JSON is a syntax for serializing objects, arrays, numbers, strings, booleans, and [`null`](null). It is based upon JavaScript syntax but is distinct from it: some JavaScript is _not_ JSON. -**Objects and Arrays** +**Objects and Arrays** Property names must be double-quoted strings; [trailing commas](../trailing_commas) are forbidden. -**Numbers** +**Numbers** Leading zeros are prohibited. A decimal point must be followed by at least one digit. `NaN` and `Infinity` are unsupported. -**Any JSON text is a valid JavaScript expression...** +**Any JSON text is a valid JavaScript expression...** ...But only in JavaScript engines that have implemented the [proposal to make all JSON text valid ECMA-262](https://github.com/tc39/proposal-json-superset). In engines that haven't implemented the proposal, U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR are allowed in string literals and property keys in JSON; but their use in these features in JavaScript string literals is a [`SyntaxError`](syntaxerror). Consider this example where [`JSON.parse()`](json/parse) parses the string as JSON and [`Global_Objects/eval`](eval) executes the string as JavaScript: @@ -47337,10 +47375,10 @@ Insignificant [whitespace](https://developer.mozilla.org/en-US/docs/Glossary/Whi ## Static methods -[`JSON.parse(text[, reviver])`](json/parse) +[`JSON.parse(text[, reviver])`](json/parse) Parse the string `text` as JSON, optionally transform the produced value and its properties, and return the value. Any violations of the JSON syntax, including those pertaining to the differences between JavaScript and JSON, cause a [`SyntaxError`](syntaxerror) to be thrown. The `reviver` option allows for interpreting what the `replacer` has used to stand in for other datatypes. -[`JSON.stringify(value[, replacer[, space]])`](json/stringify) +[`JSON.stringify(value[, replacer[, space]])`](json/stringify) Return a JSON string corresponding to the specified value, optionally including only certain properties or replacing property values in a user-defined manner. By default, all instances of [`undefined`](undefined) are replaced with [`null`](null), and other unsupported native data types are censored. The `replacer` option allows for specifying other behavior. ## Examples @@ -47366,7 +47404,7 @@ Return a JSON string corresponding to the specified value, optionally including ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-json-object
        @@ -47595,7 +47633,7 @@ The `Symbol.keyFor(sym)` method retrieves a shared symbol key from the global sy ### Parameters -`sym` +`sym` Symbol, required. The symbol to find a key for. ### Return value @@ -47618,7 +47656,7 @@ A string representing the key for the given symbol if one is found on the global ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.keyfor
        @@ -47653,8 +47691,8 @@ No - [`Symbol.for()`](for) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor # Object.keys() @@ -47667,7 +47705,7 @@ The `Object.keys()` method returns an array of a given object's own enumerable p ### Parameters -`obj` +`obj` The object of which the enumerable's own properties are to be returned. ### Return value @@ -47769,7 +47807,7 @@ For a simple Browser Polyfill, see [Javascript - Object.keys Browser Compatibili ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.keys
        @@ -47809,8 +47847,8 @@ For a simple Browser Polyfill, see [Javascript - Object.keys Browser Compatibili - [`Object.values()`](values) - [`Object.entries()`](entries) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys # label @@ -47822,10 +47860,10 @@ The **labeled statement** can be used with [`break`](break) or [`continue`](cont label : statement -`label` +`label` Any JavaScript identifier that is not a reserved word. -`statement` +`statement` A JavaScript statement. `break` can be used with any labeled statement, and `continue` can be used with looping labeled statements. ## Description @@ -47955,7 +47993,7 @@ In [strict mode](../strict_mode) code, however, this will throw a [`SyntaxError` ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Labelled statement' in that specification.
        @@ -47991,8 +48029,8 @@ In [strict mode](../strict_mode) code, however, this will throw a [`SyntaxError` - [`break`](break) - [`continue`](continue) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label # Intl.Locale.prototype.language @@ -48023,7 +48061,7 @@ While the language subtag must be specified, the [`Locale`](../locale) construct ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.language
        @@ -48112,7 +48150,7 @@ Returns `["", undefined]`, an empty array whose zeroth element is the match stri ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-properties-of-regexp-instances
        @@ -48154,8 +48192,8 @@ Returns `["", undefined]`, an empty array whose zeroth element is the match stri - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex # Array.prototype.lastIndexOf() @@ -48169,10 +48207,10 @@ The `lastIndexOf()` method returns the last index at which a given element can b ### Parameters -`searchElement` +`searchElement` Element to locate in the array. -`fromIndex` Optional +`fromIndex` Optional The index at which to start searching backwards. Defaults to the array's length minus one (`arr.length - 1`), i.e. the whole array will be searched. If the index is greater than or equal to the length of the array, the whole array will be searched. If negative, it is taken as the offset from the end of the array. Note that even when the index is negative, the array is still searched from back to front. If the calculated index is less than 0, -1 is returned, i.e. the array will not be searched. ### Return value @@ -48260,7 +48298,7 @@ Again, note that this implementation aims for absolute compatibility with `lastI ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.lastindexof
        @@ -48316,7 +48354,7 @@ For example, `9 << 2` yields 36: -------------------------------- 9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10) -Bitwise shifting any number `x` to the left by `y` bits yields `x * 2 ** y`. +Bitwise shifting any number `x` to the left by `y` bits yields `x * 2 ** y`. So e.g.: `9 << 3` translates to: `9 * (2 ** 3) = 9 * (8) = 72`. ## Examples @@ -48329,7 +48367,7 @@ So e.g.: `9 << 3` translates to: `9 * (2 ** 3) = 9 * (8) = 72`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-left-shift-operator
        @@ -48365,8 +48403,8 @@ So e.g.: `9 << 3` translates to: `9 * (2 ** 3) = 9 * (8) = 72`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Left shift assignment operator](left_shift_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Left_shift # Left shift assignment (<<=) @@ -48390,7 +48428,7 @@ The left shift assignment operator (`<<=`) moves the specified amount of bits to ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -48426,8 +48464,8 @@ The left shift assignment operator (`<<=`) moves the specified amount of bits to - [Assignment operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment) - [Left shift operator](left_shift) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Left_shift_assignment # Array.prototype.length @@ -48518,7 +48556,7 @@ The following example shortens the array `numbers` to a length of 3 if the curre ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-properties-of-array-instances-length
        @@ -48628,7 +48666,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -48665,8 +48703,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Greater than or equal operator](greater_than_or_equal) - [Less than or equal operator](less_than_or_equal) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Less_than # Less than or equal (<=) @@ -48730,7 +48768,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Relational operators' in that specification.
        @@ -48767,8 +48805,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Greater than or equal operator](greater_than_or_equal) - [Less than operator](less_than) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Less_than_or_equal # let @@ -48781,10 +48819,10 @@ The `let` statement declares a block-scoped local variable, optionally initializ ### Parameters -`nameN` +`nameN` The names of the variable or variables to declare. Each must be a legal JavaScript identifier. -` value``N ` Optional +` value``N ` Optional For each variable declared, you may optionally specify its initial value to any legal JavaScript expression. Alternatively, the [Destructuring Assignment](../operators/destructuring_assignment) syntax can also be used to declare variables. @@ -49010,7 +49048,7 @@ However, this combination of `var` and `let` declaration below is a [`SyntaxErro ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-let-and-const-declarations
        @@ -49085,8 +49123,8 @@ Support outside of [strict mode](https://developer.mozilla.org/docs/Web/JavaScri - [StackOverflow: What is the Temporal Dead Zone](https://stackoverflow.com/a/33198850/1125029)? - [StackOverflow: What is the difference between using `let` and `var`?](https://stackoverflow.com/questions/762011/whats-the-difference-between-using-let-and-var-to-declare-a-variable) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let # Lexical grammar @@ -49544,7 +49582,7 @@ Here `++` is not treated as a [postfix operator](https://developer.mozilla.org/e ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Lexical Grammar' in that specification.
        @@ -50080,7 +50118,7 @@ The `link()` method creates a string representing the code for an [`
        `](https: ### Parameters -`url` +`url` Any string that specifies the `href` attribute of the `` element; it should be a valid URL (relative or absolute), with any `&` characters escaped as `&`, and any `"` characters escaped as `"`. ### Return value @@ -50107,7 +50145,7 @@ The following example displays the word "MDN" as a hypertext link that returns t ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.prototype.link' in that specification.
        @@ -50142,8 +50180,8 @@ The following example displays the word "MDN" as a hypertext link that returns t - [`String.prototype.anchor()`](anchor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link # WebAssembly.LinkError @@ -50152,35 +50190,35 @@ The `WebAssembly.LinkError` object indicates an error during module instantiatio ## Constructor -[`WebAssembly.LinkError()`](linkerror/linkerror) +[`WebAssembly.LinkError()`](linkerror/linkerror) Creates a new `WebAssembly.LinkError` object. ## Instance properties -[`WebAssembly.LinkError.prototype.message`](../error/message) +[`WebAssembly.LinkError.prototype.message`](../error/message) Error message. Although ECMA-262 specifies that [`URIError`](../urierror) should provide its own `message` property, in [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey), it inherits [`Error.prototype.message`](../error/message). -[`WebAssembly.LinkError.prototype.name`](../error/name) +[`WebAssembly.LinkError.prototype.name`](../error/name) Error name. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.fileName`](../error/filename) +[`WebAssembly.LinkError.prototype.fileName`](../error/filename) Path to file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.lineNumber`](../error/linenumber) +[`WebAssembly.LinkError.prototype.lineNumber`](../error/linenumber) Line number in file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.columnNumber`](../error/columnnumber) +[`WebAssembly.LinkError.prototype.columnNumber`](../error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.stack`](../error/stack) +[`WebAssembly.LinkError.prototype.stack`](../error/stack) Stack trace. Inherited from [`Error`](../error). ## Instance methods -[`WebAssembly.LinkError.prototype.toSource()`](../error/tosource) +[`WebAssembly.LinkError.prototype.toSource()`](../error/tosource) Returns code that could eval to the same error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.toString()`](../error/tostring) +[`WebAssembly.LinkError.prototype.toString()`](../error/tostring) Returns a string representing the specified `Error` object.. Inherited from [`Error`](../error). ## Examples @@ -50203,7 +50241,7 @@ The following snippet creates a new `LinkError` instance, and logs its details t ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #exceptiondef-linkerror
        ECMAScript Language Specification (ECMAScript) @@ -50277,8 +50315,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError # Intl.ListFormat @@ -50287,20 +50325,20 @@ The `Intl.ListFormat` object enables language-sensitive list formatting. ## Constructor -[`Intl.ListFormat()`](listformat/listformat) +[`Intl.ListFormat()`](listformat/listformat) Creates a new `Intl.ListFormat` object. ## Static methods -[`Intl.ListFormat.supportedLocalesOf()`](listformat/supportedlocalesof) +[`Intl.ListFormat.supportedLocalesOf()`](listformat/supportedlocalesof) Returns an array containing those of the provided locales that are supported without having to fall back to the runtime's default locale. ## Instance methods -[`Intl.ListFormat.prototype.format()`](listformat/format) +[`Intl.ListFormat.prototype.format()`](listformat/format) Returns a language-specific formatted string representing the elements of the list. -[`Intl.ListFormat.prototype.formatToParts()`](listformat/formattoparts) +[`Intl.ListFormat.prototype.formatToParts()`](listformat/formattoparts) Returns an array of objects representing the different components that can be used to format a list of values in a locale-aware fashion. ## Examples @@ -50339,7 +50377,7 @@ The following example shows how to create a List formatter returning formatted p ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #listformat-objects
        @@ -50544,7 +50582,7 @@ The following function returns the natural log of 10: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.ln10
        @@ -50581,8 +50619,8 @@ The following function returns the natural log of 10: - [`Math.log()`](log) - [`Math.log10()`](log10) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10 # Math.LN2 @@ -50623,7 +50661,7 @@ The following function returns the natural log of 2: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.ln2
        @@ -50660,8 +50698,8 @@ The following function returns the natural log of 2: - [`Math.log()`](log) - [`Math.log2()`](log2) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2 # Atomics.load() @@ -50674,10 +50712,10 @@ The static ` Atomics``.load() ` method returns a value at a given position in th ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to load from. ### Return value @@ -50701,7 +50739,7 @@ The value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.load
        @@ -50779,50 +50817,50 @@ Traditionally, the Intl API used strings to represent locales, just as Unicode d ## Constructor -[`Intl.Locale()`](locale/locale) +[`Intl.Locale()`](locale/locale) Creates a new `Locale` object. ## Instance properties -[`Intl.Locale.prototype.baseName`](locale/basename) +[`Intl.Locale.prototype.baseName`](locale/basename) Returns basic, core information about the `Locale` in the form of a substring of the complete data string. -[`Intl.Locale.prototype.calendar`](locale/calendar) +[`Intl.Locale.prototype.calendar`](locale/calendar) Returns the part of the `Locale` that indicates the Locale's calendar era. -[`Intl.Locale.prototype.caseFirst`](locale/casefirst) +[`Intl.Locale.prototype.caseFirst`](locale/casefirst) Returns whether case is taken into account for the locale's collation rules. -[`Intl.Locale.prototype.collation`](locale/collation) +[`Intl.Locale.prototype.collation`](locale/collation) Returns the collation type for the `Locale`, which is used to order strings according to the locale's rules. -[`Intl.Locale.prototype.hourCycle`](locale/hourcycle) +[`Intl.Locale.prototype.hourCycle`](locale/hourcycle) Returns the time keeping format convention used by the locale. -[`Intl.Locale.prototype.language`](locale/language) +[`Intl.Locale.prototype.language`](locale/language) Returns the language associated with the locale. -[`Intl.Locale.prototype.numberingSystem`](locale/numberingsystem) +[`Intl.Locale.prototype.numberingSystem`](locale/numberingsystem) Returns the numeral system used by the locale. -[`Intl.Locale.prototype.numeric`](locale/numeric) +[`Intl.Locale.prototype.numeric`](locale/numeric) Returns whether the locale has special collation handling for numeric characters. -[`Intl.Locale.prototype.region`](locale/region) +[`Intl.Locale.prototype.region`](locale/region) Returns the region of the world (usually a country) associated with the locale. -[`Intl.Locale.prototype.script`](locale/script) +[`Intl.Locale.prototype.script`](locale/script) Returns the script used for writing the particular language used in the locale. ## Instance methods -[`Intl.Locale.prototype.maximize()`](locale/maximize) +[`Intl.Locale.prototype.maximize()`](locale/maximize) Gets the most likely values for the language, script, and region of the locale based on existing values. -[`Intl.Locale.prototype.minimize()`](locale/minimize) +[`Intl.Locale.prototype.minimize()`](locale/minimize) Gets the most likely values for the language, script, and region of the locale based on existing values. -[`Intl.Locale.prototype.toString()`](locale/tostring) +[`Intl.Locale.prototype.toString()`](locale/tostring) Returns the Locale's full locale identifier string. ## Examples @@ -50842,7 +50880,7 @@ The constructor also takes an optional configuration object argument, which can ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #locale-objects
        @@ -51259,10 +51297,10 @@ The new `locales` and `options` arguments let applications specify the language ### Parameters -`compareString` +`compareString` The string against which the `referenceStr` is compared. -`locales` and `options` +`locales` and `options` These arguments customize the behavior of the function and let applications specify the language whose formatting conventions should be used. In implementations which ignore the `locales` and `options` arguments, the locale used and the form of the string returned are entirely implementation-dependent. See the [`Intl.Collator()` constructor](../intl/collator/collator) for details on these parameters and how to use them. @@ -51353,7 +51391,7 @@ The results provided by `localeCompare()` can be customized using the `options` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.localecompare
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) @@ -51443,8 +51481,8 @@ No - [`Intl.Collator`](../intl/collator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare # Math.log() @@ -51461,7 +51499,7 @@ The JavaScript `Math.log()` function is equivalent to _ln(x)_ in mathematics. ### Parameters -`x` +`x` A number. ### Return value @@ -51499,7 +51537,7 @@ If you run `getBaseLog(10, 1000)` it returns `2.9999999999999996` due to floatin ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log
        @@ -51538,8 +51576,8 @@ If you run `getBaseLog(10, 1000)` it returns `2.9999999999999996` due to floatin - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log # Math.log10() @@ -51554,7 +51592,7 @@ The `Math.log10()` function returns the base 10 logarithm of a number, that is ### Parameters -`x` +`x` A number. ### Return value @@ -51589,7 +51627,7 @@ This can be emulated with the following function: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log10
        @@ -51628,8 +51666,8 @@ No - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10 # Math.LOG10E @@ -51670,7 +51708,7 @@ The following function returns the base 10 logarithm of e: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log10e
        @@ -51707,8 +51745,8 @@ The following function returns the base 10 logarithm of e: - [`Math.log()`](log) - [`Math.log10()`](log10) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E # Math.log1p() @@ -51723,7 +51761,7 @@ The `Math.log1p()` function returns the natural logarithm (base [`e`](e)) of 1 + ### Parameters -`x` +`x` A number. ### Return value @@ -51751,7 +51789,7 @@ Because `log1p()` is a static method of `Math`, you always use it as `Math.log1p ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log1p
        @@ -51791,8 +51829,8 @@ No - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log1p # Math.log2() @@ -51807,7 +51845,7 @@ The `Math.log2()` function returns the base 2 logarithm of a number, that is ### Parameters -`x` +`x` A number. ### Return value @@ -51843,7 +51881,7 @@ This Polyfill emulates the `Math.log2` function. Note that it returns imprecise ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log2
        @@ -51882,8 +51920,8 @@ No - [`Math.log1p()`](log1p) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2 # Math.LOG2E @@ -51924,7 +51962,7 @@ The following function returns the base 2 logarithm of e: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log2e
        @@ -51961,8 +51999,8 @@ The following function returns the base 2 logarithm of e: - [`Math.log()`](log) - [`Math.log2()`](log2) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E # Logical AND (&&) @@ -52063,7 +52101,7 @@ is always equal to: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-LogicalANDExpression
        @@ -52100,8 +52138,8 @@ is always equal to: - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND # Logical NOT (!) @@ -52164,7 +52202,7 @@ is always equal to: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Logical NOT expression' in that specification.
        @@ -52201,8 +52239,8 @@ is always equal to: - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT # Logical OR (||) @@ -52306,7 +52344,7 @@ is always equal to: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Logical OR expression' in that specification.
        @@ -52344,8 +52382,8 @@ is always equal to: - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR # Logical OR assignment (||=) @@ -52392,7 +52430,7 @@ Note: Pay attention to the value returned by the API you're checking against. If ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -52432,8 +52470,8 @@ No - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment # SyntaxError: Malformed formal parameter @@ -52600,51 +52638,51 @@ The correct usage for storing data in the Map is through the `set(key, value)` m ## Constructor -[`Map()`](map/map) +[`Map()`](map/map) Creates a new `Map` object. ## Static properties -[`get Map[@@species]`](map/@@species) +[`get Map[@@species]`](map/@@species) The constructor function that is used to create derived objects. ## Instance properties -[`Map.prototype.size`](map/size) +[`Map.prototype.size`](map/size) Returns the number of key/value pairs in the `Map` object. ## Instance methods -[`Map.prototype.clear()`](map/clear) +[`Map.prototype.clear()`](map/clear) Removes all key-value pairs from the `Map` object. -[`Map.prototype.delete(key)`](map/delete) +[`Map.prototype.delete(key)`](map/delete) Returns `true` if an element in the `Map` object existed and has been removed, or `false` if the element does not exist. `Map.prototype.has(key)` will return `false` afterwards. -[`Map.prototype.get(key)`](map/get) +[`Map.prototype.get(key)`](map/get) Returns the value associated to the `key`, or `undefined` if there is none. -[`Map.prototype.has(key)`](map/has) +[`Map.prototype.has(key)`](map/has) Returns a boolean asserting whether a value has been associated to the `key` in the `Map` object or not. -[`Map.prototype.set(key, value)`](map/set) +[`Map.prototype.set(key, value)`](map/set) Sets the `value` for the `key` in the `Map` object. Returns the `Map` object. ### Iteration methods -[`Map.prototype[@@iterator]()`](map/@@iterator) +[`Map.prototype[@@iterator]()`](map/@@iterator) Returns a new Iterator object that contains `[key, value]` for each element in the `Map` object in insertion order. -[`Map.prototype.keys()`](map/keys) +[`Map.prototype.keys()`](map/keys) Returns a new Iterator object that contains the **keys** for each element in the `Map` object in insertion order. -[`Map.prototype.values()`](map/values) +[`Map.prototype.values()`](map/values) Returns a new Iterator object that contains the **values** for each element in the `Map` object in insertion order. -[`Map.prototype.entries()`](map/entries) +[`Map.prototype.entries()`](map/entries) Returns a new Iterator object that contains `[key, value]` for each element in the `Map` object in insertion order. -[`Map.prototype.forEach(callbackFn[, thisArg])`](map/foreach) +[`Map.prototype.forEach(callbackFn[, thisArg])`](map/foreach) Calls `callbackFn` once for each key-value pair present in the `Map` object, in insertion order. If a `thisArg` parameter is provided to `forEach`, it will be used as the `this` value for each callback. ## Examples @@ -52806,7 +52844,7 @@ Maps can be merged with Arrays, too: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Map' in that specification.
        @@ -53267,7 +53305,7 @@ The `match()` method retrieves the result of matching a _string_ against a [regu ### Parameters -`regexp` +`regexp` A regular expression object. If `regexp` is a non-`RegExp` object, it is implicitly converted to a [`RegExp`](../regexp) by using `new RegExp(regexp)`. @@ -53285,13 +53323,13 @@ An [`Array`](../array) whose contents depend on the presence or absence of the g As explained above, some results contain additional properties as described below. -`groups` +`groups` An object of named capturing groups whose keys are the names and values are the capturing groups or [`undefined`](../undefined) if no named capturing groups were defined. See [Groups and Ranges](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges) for more information. -`index` +`index` The index of the search at which the result was found. -`input` +`input` A copy of the search string. ## Description @@ -53379,7 +53417,7 @@ If it is a positive number with a positive sign, `RegExp()` will ignore the posi ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.prototype.match' in that specification.
        @@ -53417,8 +53455,8 @@ If it is a positive number with a positive sign, `RegExp()` will ignore the posi - [`RegExp.prototype.exec()`](../regexp/exec) - [`RegExp.prototype.test()`](../regexp/test) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match # String.prototype.matchAll() @@ -53431,7 +53469,7 @@ The `matchAll()` method returns an iterator of all results matching a string aga ### Parameters -`regexp` +`regexp` A regular expression object. If a non-`RegExp` object `obj` is passed, it is implicitly converted to a [`RegExp`](../regexp) by using `new RegExp(obj)`. @@ -53517,7 +53555,7 @@ Using `matchAll`, you can access capture groups easily: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.matchall
        @@ -53557,8 +53595,8 @@ No - [`RegExp.prototype.exec()`](../regexp/exec) - [`RegExp.prototype.test()`](../regexp/test) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll # Math @@ -53577,135 +53615,135 @@ This means that different browsers can give a different result. Even the same Ja ## Static properties -[`Math.E`](math/e) +[`Math.E`](math/e) Euler's constant and the base of natural logarithms; approximately `2.718`. -[`Math.LN2`](math/ln2) +[`Math.LN2`](math/ln2) Natural logarithm of `2`; approximately `0.693`. -[`Math.LN10`](math/ln10) +[`Math.LN10`](math/ln10) Natural logarithm of `10`; approximately `2.303`. -[`Math.LOG2E`](math/log2e) +[`Math.LOG2E`](math/log2e) Base-2 logarithm of `E`; approximately `1.443`. -[`Math.LOG10E`](math/log10e) +[`Math.LOG10E`](math/log10e) Base-10 logarithm of `E`; approximately `0.434`. -[`Math.PI`](math/pi) +[`Math.PI`](math/pi) Ratio of the a circle's circumference to its diameter; approximately `3.14159`. -[`Math.SQRT1_2`](math/sqrt1_2) +[`Math.SQRT1_2`](math/sqrt1_2) Square root of ½ (or equivalently, 1/√2); approximately `0.707`. -[`Math.SQRT2`](math/sqrt2) +[`Math.SQRT2`](math/sqrt2) Square root of `2`; approximately `1.414`. ## Static methods -[`Math.abs(x)`](math/abs) +[`Math.abs(x)`](math/abs) Returns the absolute value of `x`. -[`Math.acos(x)`](math/acos) +[`Math.acos(x)`](math/acos) Returns the arccosine of `x`. -[`Math.acosh(x)`](math/acosh) +[`Math.acosh(x)`](math/acosh) Returns the hyperbolic arccosine of `x`. -[`Math.asin(x)`](math/asin) +[`Math.asin(x)`](math/asin) Returns the arcsine of `x`. -[`Math.asinh(x)`](math/asinh) +[`Math.asinh(x)`](math/asinh) Returns the hyperbolic arcsine of a number. -[`Math.atan(x)`](math/atan) +[`Math.atan(x)`](math/atan) Returns the arctangent of `x`. -[`Math.atanh(x)`](math/atanh) +[`Math.atanh(x)`](math/atanh) Returns the hyperbolic arctangent of `x`. -[`Math.atan2(y, x)`](math/atan2) +[`Math.atan2(y, x)`](math/atan2) Returns the arctangent of the quotient of its arguments. -[`Math.cbrt(x)`](math/cbrt) +[`Math.cbrt(x)`](math/cbrt) Returns the cube root of `x`. -[`Math.ceil(x)`](math/ceil) +[`Math.ceil(x)`](math/ceil) Returns the smallest integer greater than or equal to `x`. -[`Math.clz32(x)`](math/clz32) +[`Math.clz32(x)`](math/clz32) Returns the number of leading zero bits of the 32-bit integer `x`. -[`Math.cos(x)`](math/cos) +[`Math.cos(x)`](math/cos) Returns the cosine of `x`. -[`Math.cosh(x)`](math/cosh) +[`Math.cosh(x)`](math/cosh) Returns the hyperbolic cosine of `x`. -[`Math.exp(x)`](math/exp) +[`Math.exp(x)`](math/exp) Returns `Ex`, where `x` is the argument, and `E` is Euler's constant (`2.718`…, the base of the natural logarithm). -[`Math.expm1(x)`](math/expm1) +[`Math.expm1(x)`](math/expm1) Returns subtracting `1` from `exp(x)`. -[`Math.floor(x)`](math/floor) +[`Math.floor(x)`](math/floor) Returns the largest integer less than or equal to `x`. -[`Math.fround(x)`](math/fround) +[`Math.fround(x)`](math/fround) Returns the nearest [single precision](https://en.wikipedia.org/wiki/Single-precision_floating-point_format) float representation of `x`. -[`Math.hypot([x[, y[, …]]])`](math/hypot) +[`Math.hypot([x[, y[, …]]])`](math/hypot) Returns the square root of the sum of squares of its arguments. -[`Math.imul(x, y)`](math/imul) +[`Math.imul(x, y)`](math/imul) Returns the result of the 32-bit integer multiplication of `x` and `y`. -[`Math.log(x)`](math/log) +[`Math.log(x)`](math/log) Returns the natural logarithm (㏒e; also, ㏑) of `x`. -[`Math.log1p(x)`](math/log1p) +[`Math.log1p(x)`](math/log1p) Returns the natural logarithm (㏒e; also ㏑) of `1 + x` for the number `x`. -[`Math.log10(x)`](math/log10) +[`Math.log10(x)`](math/log10) Returns the base-10 logarithm of `x`. -[`Math.log2(x)`](math/log2) +[`Math.log2(x)`](math/log2) Returns the base-2 logarithm of `x`. -[`Math.max([x[, y[, …]]])`](math/max) +[`Math.max([x[, y[, …]]])`](math/max) Returns the largest of zero or more numbers. -[`Math.min([x[, y[, …]]])`](math/min) +[`Math.min([x[, y[, …]]])`](math/min) Returns the smallest of zero or more numbers. -[`Math.pow(x, y)`](math/pow) +[`Math.pow(x, y)`](math/pow) Returns base `x` to the exponent power `y` (that is, `xy`). -[`Math.random()`](math/random) +[`Math.random()`](math/random) Returns a pseudo-random number between `0` and `1`. -[`Math.round(x)`](math/round) +[`Math.round(x)`](math/round) Returns the value of the number `x` rounded to the nearest integer. -[`Math.sign(x)`](math/sign) +[`Math.sign(x)`](math/sign) Returns the sign of the `x`, indicating whether `x` is positive, negative, or zero. -[`Math.sin(x)`](math/sin) +[`Math.sin(x)`](math/sin) Returns the sine of `x`. -[`Math.sinh(x)`](math/sinh) +[`Math.sinh(x)`](math/sinh) Returns the hyperbolic sine of `x`. -[`Math.sqrt(x)`](math/sqrt) +[`Math.sqrt(x)`](math/sqrt) Returns the positive square root of `x`. -[`Math.tan(x)`](math/tan) +[`Math.tan(x)`](math/tan) Returns the tangent of `x`. -[`Math.tanh(x)`](math/tanh) +[`Math.tanh(x)`](math/tanh) Returns the hyperbolic tangent of `x`. -[`Math.trunc(x)`](math/trunc) +[`Math.trunc(x)`](math/trunc) Returns the integer portion of `x`, removing any fractional digits. ## Examples @@ -53749,7 +53787,7 @@ This can be achieved with a combination of [`Math.random()`](math/random) and [` ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Math' in that specification.
        @@ -54891,7 +54929,7 @@ The `Math.max()` function returns the largest of the zero or more numbers given ### Parameters -`value1, value2, ...` +`value1, value2, ...` Zero or more numbers among which the largest value will be selected and returned. ### Return value @@ -54938,7 +54976,7 @@ However, both spread (`...`) and `apply` will either fail or return the wrong re ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.max
        @@ -54973,8 +55011,8 @@ However, both spread (`...`) and `apply` will either fail or return the wrong re - [`Math.min()`](min) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max # Number.MAX_SAFE_INTEGER @@ -55027,7 +55065,7 @@ This returns 2 because in floating points, the value is actually the decimal tra ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.max_safe_integer
        @@ -55064,8 +55102,8 @@ No - [`Number.isSafeInteger()`](issafeinteger) - [`BigInt`](../bigint) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER # Number.MAX_VALUE @@ -55106,7 +55144,7 @@ The following code multiplies two numeric values. If the result is less than or ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.max_value
        @@ -55142,8 +55180,8 @@ The following code multiplies two numeric values. If the result is less than or - [`Number.MIN_VALUE`](min_value) - The [`Number`](../number) object it belongs to -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE # Intl.Locale.prototype.maximize() @@ -55181,7 +55219,7 @@ Sometimes, it is convenient to be able to identify the most likely locale langua ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.maximize
        @@ -55228,17 +55266,17 @@ A memory created by JavaScript or in WebAssembly code will be accessible and mut ## Constructor -[`WebAssembly.Memory()`](memory/memory) +[`WebAssembly.Memory()`](memory/memory) Creates a new `Memory` object. ## Instance properties -[`Memory.prototype.buffer`](memory/buffer) +[`Memory.prototype.buffer`](memory/buffer) An accessor property that returns the buffer contained in the memory. ## Instance methods -[`Memory.prototype.grow()`](memory/grow) +[`Memory.prototype.grow()`](memory/grow) Increases the size of the memory instance by a specified number of WebAssembly pages (each one is 64KB in size). ## Examples @@ -55279,7 +55317,7 @@ This memory's `buffer` property will return a `SharedArrayBuffer`. ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #memories
        @@ -55410,8 +55448,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory # Error.prototype.message @@ -55434,7 +55472,7 @@ By default, the `message` property is an empty string, but this behavior can be ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-error.prototype.message
        @@ -55643,7 +55681,7 @@ The shorthand syntax also supports computed property names. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-method-definitions
        @@ -55773,7 +55811,7 @@ The static function `Math.min()` returns the lowest-valued number passed into it ### Parameters -`value1, value2, ...` +`value1, value2, ...` Zero or more numbers among which the lowest value will be selected and returned. ### Return value @@ -55815,7 +55853,7 @@ may be written as this ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.min
        @@ -55850,8 +55888,8 @@ may be written as this - [`Math.max()`](max) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min # Number.MIN_SAFE_INTEGER @@ -55889,7 +55927,7 @@ Because `MIN_SAFE_INTEGER` is a static property of [`Number`](../number), you al ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.min_safe_integer
        @@ -55926,8 +55964,8 @@ No - [`Number.isSafeInteger()`](issafeinteger) - [`BigInt`](../bigint) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER # Number.MIN_VALUE @@ -55968,7 +56006,7 @@ The following code divides two numeric values. If the result is greater than or ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.min_value
        @@ -56003,8 +56041,8 @@ The following code divides two numeric values. If the result is greater than or - [`Number.MAX_VALUE`](max_value) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE # Intl.Locale.prototype.minimize() @@ -56043,7 +56081,7 @@ This method carries out the reverse of [`maximize()`](maximize), removing any la ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.minimize
        @@ -56659,18 +56697,18 @@ A `WebAssembly.Module` object contains stateless WebAssembly code that has alrea ## Constructor -[`WebAssembly.Module()`](module/module) +[`WebAssembly.Module()`](module/module) Creates a new `Module` object. ## Static properties -[`WebAssembly.Module.customSections()`](module/customsections) +[`WebAssembly.Module.customSections()`](module/customsections) Given a `Module` and string, returns a copy of the contents of all custom sections in the module with the given string name. -[`WebAssembly.Module.exports()`](module/exports) +[`WebAssembly.Module.exports()`](module/exports) Given a `Module`, returns an array containing descriptions of all the declared exports. -[`WebAssembly.Module.imports()`](module/imports) +[`WebAssembly.Module.imports()`](module/imports) Given a `Module`, returns an array containing descriptions of all the declared imports. ## Examples @@ -56707,7 +56745,7 @@ In the worker (see `wasm_worker.js`) we define an import object for the module t ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #modules
        @@ -56868,8 +56906,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module # TypeError: More arguments needed @@ -56949,7 +56987,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.multiline
        @@ -57017,8 +57055,8 @@ You cannot change this property directly. - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline # Multiplication (\*) @@ -57047,7 +57085,7 @@ The multiplication operator (`*`) produces the product of the operands. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-multiplicative-operators
        @@ -57090,8 +57128,8 @@ The multiplication operator (`*`) produces the product of the operands. - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Multiplication # Function.name @@ -57276,7 +57314,7 @@ If a [`Symbol`](../symbol) is used a function name and the symbol has a descript ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-instances-name
        @@ -57430,7 +57468,7 @@ Additionally, some array methods cannot find `NaN`, while others can. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-value-properties-of-the-global-object-nan
        @@ -57521,7 +57559,7 @@ In the following example, the variable `smallNumber` is assigned a value that is ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.negative_infinity
        @@ -57559,8 +57597,8 @@ In the following example, the variable `smallNumber` is assigned a value that is - [`Infinity`](../infinity) - [`isFinite()`](../isfinite) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY # RangeError: repeat count must be non-negative @@ -57610,10 +57648,10 @@ The `new` lets developers create an instance of a user-defined object type or of ### Parameters -`constructor` +`constructor` A class or function that specifies the type of the object instance. -`arguments` +`arguments` A list of values that the `constructor` will be called with. ## Description @@ -57730,7 +57768,7 @@ Instead of passing a literal string or integer value when creating the new objec ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-new-operator
        @@ -57767,8 +57805,8 @@ Instead of passing a literal string or integer value when creating the new objec - [`Reflect.construct()`](../global_objects/reflect/construct) - [`Object`](../global_objects/object) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new # new.target @@ -57830,7 +57868,7 @@ Thus from the above example of class `C` and `D`, it seems that `new.target` poi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-built-in-function-objects
        @@ -57868,8 +57906,8 @@ No - `new` - `this` -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target # Generator.prototype.next() @@ -57882,7 +57920,7 @@ The `next()` method returns an object with two properties `done` and `value`. Yo ### Parameters -`value` +`value` The value to send to the generator. The value will be assigned as a result of a `yield` expression. For example, in `variable = yield expression`, the value passed to the `.next()` function will be assigned to `variable`. @@ -57891,12 +57929,12 @@ The value will be assigned as a result of a `yield` expression. For example, in An [`Object`](../object) with two properties: -`done` (boolean) +`done` (boolean) Has the value `true` if the iterator is past the end of the iterated sequence. In this case `value` optionally specifies the _return value_ of the iterator. Has the value `false` if the iterator was able to produce the next value in the sequence. This is equivalent of not specifying the `done` property altogether. -`value` +`value` Any JavaScript value returned by the iterator. Can be omitted when `done` is `true`. ## Examples @@ -57966,7 +58004,7 @@ Note that the first call does not log anything, because the generator was not yi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generator.prototype.next
        @@ -58282,21 +58320,21 @@ The `normalize()` method returns the Unicode Normalization Form of the string. ### Parameters -`form` Optional +`form` Optional One of `"NFC"`, `"NFD"`, `"NFKC"`, or `"NFKD"`, specifying the Unicode Normalization Form. If omitted or [`undefined`](../undefined), `"NFC"` is used. These values have the following meanings: -`"NFC"` +`"NFC"` Canonical Decomposition, followed by Canonical Composition. -`"NFD"` +`"NFD"` Canonical Decomposition. -`"NFKC"` +`"NFKC"` Compatibility Decomposition, followed by Canonical Composition. -`"NFKD"` +`"NFKD"` Compatibility Decomposition. ### Return value @@ -58305,7 +58343,7 @@ A string containing the Unicode Normalization Form of the given string. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) A [`RangeError`](../rangeerror) is thrown if `form` isn't one of the values specified above. ## Description @@ -58442,7 +58480,7 @@ As with canonical normalization, you can ask for decomposed or composed compatib ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.normalize
        @@ -58508,8 +58546,8 @@ No - [Unicode Standard Annex \#15, Unicode Normalization Forms](https://www.unicode.org/reports/tr15/) - [Unicode equivalence](https://en.wikipedia.org/wiki/Unicode_equivalence) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize # RangeError: argument is not a valid code point @@ -58850,7 +58888,7 @@ However, a function can access all variables and functions defined inside the sc The static ` Atomics``.notify() ` method notifies up some agents that are sleeping in the wait queue. -**Note:** This operation works with a shared [`Int32Array`](../int32array) only. +**Note:** This operation works with a shared [`Int32Array`](../int32array) only. It will return `0` on non-shared `ArrayBuffer` objects. ## Syntax @@ -58859,13 +58897,13 @@ It will return `0` on non-shared `ArrayBuffer` objects. ### Parameters -`typedArray` +`typedArray` A shared [`Int32Array`](../int32array). -`index` +`index` The position in the `typedArray` to wake up on. -`count` Optional +`count` Optional The number of sleeping agents to notify. Defaults to [`+Infinity`](../infinity). ### Return value @@ -58900,7 +58938,7 @@ A writing thread stores a new value and notifies the waiting thread once it has ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.notify
        @@ -59034,7 +59072,7 @@ This method was standardized in ECMA-262 5th edition. Engines which h ### Reduced time precision -To offer protection against timing attacks and fingerprinting, the precision of `Date.now()` might get rounded depending on browser settings. +To offer protection against timing attacks and fingerprinting, the precision of `Date.now()` might get rounded depending on browser settings. In Firefox, the `privacy.reduceTimerPrecision` preference is enabled by default and defaults to 20µs in Firefox 59; in 60 it will be 2ms. // reduced time precision (2ms) in Firefox 60 @@ -59055,7 +59093,7 @@ In Firefox, you can also enable `privacy.resistFingerprinting`, the precision wi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.now
        @@ -59160,7 +59198,7 @@ When checking for `null` or `undefined`, beware of the [differences between equa ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-null-value
        @@ -59327,7 +59365,7 @@ The nullish coalescing operator treats `undefined` and `null` as specific values ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-CoalesceExpression
        @@ -59394,8 +59432,8 @@ No - [The logical OR (`||`) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#logical_or_2) - [Default parameters in functions](../functions/default_parameters) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator # Number @@ -59430,76 +59468,76 @@ When used as a function, `Number(value)` converts a string or other value to the ## Constructor -[`Number()`](number/number) +[`Number()`](number/number) Creates a new `Number` value. ## Static properties -[`Number.EPSILON`](number/epsilon) +[`Number.EPSILON`](number/epsilon) The smallest interval between two representable numbers. -[`Number.MAX_SAFE_INTEGER`](number/max_safe_integer) +[`Number.MAX_SAFE_INTEGER`](number/max_safe_integer) The maximum safe integer in JavaScript (`253 - 1`). -[`Number.MAX_VALUE`](number/max_value) +[`Number.MAX_VALUE`](number/max_value) The largest positive representable number. -[`Number.MIN_SAFE_INTEGER`](number/min_safe_integer) +[`Number.MIN_SAFE_INTEGER`](number/min_safe_integer) The minimum safe integer in JavaScript (`-(253 - 1)`). -[`Number.MIN_VALUE`](number/min_value) +[`Number.MIN_VALUE`](number/min_value) The smallest positive representable number—that is, the positive number closest to zero (without actually being zero). -[`Number.NaN`](number/nan) +[`Number.NaN`](number/nan) Special "**N**ot **a** **N**umber" value. -[`Number.NEGATIVE_INFINITY`](number/negative_infinity) +[`Number.NEGATIVE_INFINITY`](number/negative_infinity) Special value representing negative infinity. Returned on overflow. -[`Number.POSITIVE_INFINITY`](number/positive_infinity) +[`Number.POSITIVE_INFINITY`](number/positive_infinity) Special value representing infinity. Returned on overflow. -[`Number.prototype`](number) +[`Number.prototype`](number) Allows the addition of properties to the `Number` object. ## Static methods -[`Number.isNaN()`](number/isnan) +[`Number.isNaN()`](number/isnan) Determine whether the passed value is `NaN`. -[`Number.isFinite()`](number/isfinite) +[`Number.isFinite()`](number/isfinite) Determine whether the passed value is a finite number. -[`Number.isInteger()`](number/isinteger) +[`Number.isInteger()`](number/isinteger) Determine whether the passed value is an integer. -[`Number.isSafeInteger()`](number/issafeinteger) +[`Number.isSafeInteger()`](number/issafeinteger) Determine whether the passed value is a safe integer (number between `-(253 - 1)` and `253 - 1`). -[`Number.parseFloat(string)`](number/parsefloat) +[`Number.parseFloat(string)`](number/parsefloat) This is the same as the global [`parseFloat()`](parsefloat) function. -[`Number.parseInt(string, [radix])`](number/parseint) +[`Number.parseInt(string, [radix])`](number/parseint) This is the same as the global [`parseInt()`](parseint) function. ## Instance methods -[`Number.prototype.toExponential(fractionDigits)`](number/toexponential) +[`Number.prototype.toExponential(fractionDigits)`](number/toexponential) Returns a string representing the number in exponential notation. -[`Number.prototype.toFixed(digits)`](number/tofixed) +[`Number.prototype.toFixed(digits)`](number/tofixed) Returns a string representing the number in fixed-point notation. -[`Number.prototype.toLocaleString([locales [, options]])`](number/tolocalestring) +[`Number.prototype.toLocaleString([locales [, options]])`](number/tolocalestring) Returns a string with a language sensitive representation of this number. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`Number.prototype.toPrecision(precision)`](number/toprecision) +[`Number.prototype.toPrecision(precision)`](number/toprecision) Returns a string representing the number to a specified precision in fixed-point or exponential notation. -[`Number.prototype.toString([radix])`](number/tostring) +[`Number.prototype.toString([radix])`](number/tostring) Returns a string representing the specified object in the specified radix ("base"). Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Number.prototype.valueOf()`](number/valueof) +[`Number.prototype.valueOf()`](number/valueof) Returns the primitive value of the specified object. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Examples @@ -59554,7 +59592,7 @@ This logs `819199440000`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number-objects
        @@ -60214,22 +60252,22 @@ The `Intl.NumberFormat()` constructor creates [`Intl.NumberFormat`](../numberfor ### Parameters -`locales` Optional +`locales` Optional A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the `locales` argument, see the [Intl](../../intl#locale_identification_and_negotiation) page. The following Unicode extension key is allowed: -`nu` +`nu` The numbering system to be used. Possible values include: "`adlm`", "`ahom`", "`arab`", "`arabext`", "`bali`", "`beng`", "`bhks`", "`brah`", "`cakm`", "`cham`", "`deva`", "`diak`", "`fullwide`", "`gong`", "`gonm`", "`gujr`", "`guru`", "`hanidec`", "`hmng`", "`hmnp`", "`java`", "`kali`", "`khmr`", "`knda`", "`lana`", "`lanatham`", "`laoo`", "`latn`", "`lepc`", "`limb`", "`mathbold`", "`mathdbl`", "`mathmono`", "`mathsanb`", "`mathsans`", "`mlym`", "`modi`", "`mong`", "`mroo`", "`mtei`", "`mymr`", "`mymrshan`", "`mymrtlng`", "`newa`", "`nkoo`", "`olck`", "`orya`", "`osma`", "`rohg`", "`saur`", "`segment`", "`shrd`", "`sind`", "`sinh`", "`sora`", "`sund`", "`takr`", "`talu`", "`tamldec`", "`telu`", "`thai`", "`tibt`", "`tirh`", "`vaii`", "`wara`", "`wcho`". — see the [standard Unicode numeral systems list](../locale/numberingsystem). -`options` Optional +`options` Optional An object with some or all of the following properties: -`compactDisplay` +`compactDisplay` Only used when `notation` is "`compact`". Takes either "`short`" (default) or "`long`". -`currency` +`currency` The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as "`USD`" for the US dollar, "`EUR`" for the euro, or "`CNY`" for the Chinese RMB — see the [Current currency & funds code list](https://www.currency-iso.org/en/home/tables/table-a1.html). There is no default value; if the `style` is "`currency`", the `currency` property must be provided. -`currencyDisplay` +`currencyDisplay` How to display the currency in currency formatting. Possible values are: - "`symbol`" to use a localized currency symbol such as €, this is the default value, @@ -60237,13 +60275,13 @@ How to display the currency in currency formatting. Possible values are: - "`code`" to use the ISO currency code, - "`name`" to use a localized currency name such as "`dollar`", -`currencySign` +`currencySign` In many locales, accounting format means to wrap the number with parentheses instead of appending a minus sign. You can enable this formatting by setting the `currencySign` option to "`accounting`". The default value is "`standard`". -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`notation` +`notation` The formatting that should be displayed for the number, the defaults is "`standard`" - "`standard`" plain number formatting @@ -60251,10 +60289,10 @@ The formatting that should be displayed for the number, the defaults is "`standa - "`engineering`" return the exponent of ten when divisible by three - "`compact`" string representing exponent, defaults is using the "short" form. -`numberingSystem` +`numberingSystem` Numbering System. Possible values include: "`arab`", "`arabext`", " `bali`", "`beng`", "`deva`", "`fullwide`", " `gujr`", "`guru`", "`hanidec`", "`khmr`", " `knda`", "`laoo`", "`latn`", "`limb`", "`mlym`", " `mong`", "`mymr`", "`orya`", "`tamldec`", " `telu`", "`thai`", "`tibt`". -`signDisplay` +`signDisplay` When to display the sign for the number; defaults to "`auto`" - "`auto`" sign display for negative numbers only @@ -60262,7 +60300,7 @@ When to display the sign for the number; defaults to "`auto`" - "`always`" always display sign - "`exceptZero`" sign display for positive and negative numbers, but not zero -`style` +`style` The formatting style to use , the default is "`decimal`". - "`decimal`" for plain number formatting. @@ -60270,34 +60308,34 @@ The formatting style to use , the default is "`decimal`". - "`percent`" for percent formatting - "`unit`" for unit formatting -`unit` +`unit` The unit to use in `unit` formatting, Possible values are core unit identifiers, defined in [UTS \#35, Part 2, Section 6](https://unicode.org/reports/tr35/tr35-general.html#Unit_Elements). A [subset](https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier) of units from the [full list](https://github.com/unicode-org/cldr/blob/master/common/validity/unit.xml) was selected for use in ECMAScript. Pairs of simple units can be concatenated with "`-per-`" to make a compound unit. There is no default value; if the `style` is "`unit`", the `unit` property must be provided. -`unitDisplay` +`unitDisplay` The unit formatting style to use in `unit` formatting, the defaults is "`short`". - "`long`" (e.g., `16 litres`) - "`short`" (e.g., `16 l`) - "`narrow`" (e.g., `16l`) -`useGrouping` +`useGrouping` Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. Possible values are true and false; the default is true. The following properties fall into two groups: `minimumIntegerDigits`, `minimumFractionDigits`, and `maximumFractionDigits` in one group, `minimumSignificantDigits` and `maximumSignificantDigits` in the other. If at least one property from the second group is defined, then the first group is ignored. -`minimumIntegerDigits` +`minimumIntegerDigits` The minimum number of integer digits to use. Possible values are from 1 to 21; the default is 1. -`minimumFractionDigits` +`minimumFractionDigits` The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information). -`maximumFractionDigits` +`maximumFractionDigits` The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of `minimumFractionDigits` and 3; the default for currency formatting is the larger of `minimumFractionDigits` and the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information); the default for percent formatting is the larger of `minimumFractionDigits` and 0. -`minimumSignificantDigits` +`minimumSignificantDigits` The minimum number of significant digits to use. Possible values are from 1 to 21; the default is 1. -`maximumSignificantDigits` +`maximumSignificantDigits` The maximum number of significant digits to use. Possible values are from 1 to 21; the default is 21. ## Examples @@ -60408,7 +60446,7 @@ Note that when the currency sign is "accounting", parentheses might be used inst ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl-numberformat-constructor
        @@ -60694,7 +60732,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.numberingSystem
        @@ -60788,7 +60826,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.numeric
        @@ -60881,112 +60919,112 @@ There isn't any method in an Object itself to delete its own properties (such as ## Constructor -[`Object()`](object/object) +[`Object()`](object/object) Creates a new `Object` object. It is a wrapper for the given value. ## Static methods -[`Object.assign()`](object/assign) +[`Object.assign()`](object/assign) Copies the values of all enumerable own properties from one or more source objects to a target object. -[`Object.create()`](object/create) +[`Object.create()`](object/create) Creates a new object with the specified prototype object and properties. -[`Object.defineProperty()`](object/defineproperty) +[`Object.defineProperty()`](object/defineproperty) Adds the named property described by a given descriptor to an object. -[`Object.defineProperties()`](object/defineproperties) +[`Object.defineProperties()`](object/defineproperties) Adds the named properties described by the given descriptors to an object. -[`Object.entries()`](object/entries) +[`Object.entries()`](object/entries) Returns an array containing all of the `[key, value]` pairs of a given object's **own** enumerable string properties. -[`Object.freeze()`](object/freeze) +[`Object.freeze()`](object/freeze) Freezes an object. Other code cannot delete or change its properties. -[`Object.fromEntries()`](object/fromentries) +[`Object.fromEntries()`](object/fromentries) Returns a new object from an iterable of `[key, value]` pairs. (This is the reverse of [`Object.entries`](object/entries)). -[`Object.getOwnPropertyDescriptor()`](object/getownpropertydescriptor) +[`Object.getOwnPropertyDescriptor()`](object/getownpropertydescriptor) Returns a property descriptor for a named property on an object. -[`Object.getOwnPropertyDescriptors()`](object/getownpropertydescriptors) +[`Object.getOwnPropertyDescriptors()`](object/getownpropertydescriptors) Returns an object containing all own property descriptors for an object. -[`Object.getOwnPropertyNames()`](object/getownpropertynames) +[`Object.getOwnPropertyNames()`](object/getownpropertynames) Returns an array containing the names of all of the given object's **own** enumerable and non-enumerable properties. -[`Object.getOwnPropertySymbols()`](object/getownpropertysymbols) +[`Object.getOwnPropertySymbols()`](object/getownpropertysymbols) Returns an array of all symbol properties found directly upon a given object. -[`Object.getPrototypeOf()`](object/getprototypeof) +[`Object.getPrototypeOf()`](object/getprototypeof) Returns the prototype (internal `[[Prototype]]` property) of the specified object. -[`Object.is()`](object/is) +[`Object.is()`](object/is) Compares if two values are the same value. Equates all `NaN` values (which differs from both Abstract Equality Comparison and Strict Equality Comparison). -[`Object.isExtensible()`](object/isextensible) +[`Object.isExtensible()`](object/isextensible) Determines if extending of an object is allowed. -[`Object.isFrozen()`](object/isfrozen) +[`Object.isFrozen()`](object/isfrozen) Determines if an object was frozen. -[`Object.isSealed()`](object/issealed) +[`Object.isSealed()`](object/issealed) Determines if an object is sealed. -[`Object.keys()`](object/keys) +[`Object.keys()`](object/keys) Returns an array containing the names of all of the given object's **own** enumerable string properties. -[`Object.preventExtensions()`](object/preventextensions) +[`Object.preventExtensions()`](object/preventextensions) Prevents any extensions of an object. -[`Object.seal()`](object/seal) +[`Object.seal()`](object/seal) Prevents other code from deleting properties of an object. -[`Object.setPrototypeOf()`](object/setprototypeof) +[`Object.setPrototypeOf()`](object/setprototypeof) Sets the object's prototype (its internal `[[Prototype]]` property). -[`Object.values()`](object/values) +[`Object.values()`](object/values) Returns an array containing the values that correspond to all of a given object's **own** enumerable string properties. ## Instance properties -[`Object.prototype.constructor`](object/constructor) +[`Object.prototype.constructor`](object/constructor) Specifies the function that creates an object's prototype. -[`Object/proto`](object/proto) +[`Object/proto`](object/proto) Points to the object which was used as prototype when the object was instantiated. ## Instance methods -[`Object.prototype.__defineGetter__()`](object/__definegetter__) +[`Object.prototype.__defineGetter__()`](object/__definegetter__) Associates a function with a property that, when accessed, executes that function and returns its return value. -[`Object.prototype.__defineSetter__()`](object/__definesetter__) +[`Object.prototype.__defineSetter__()`](object/__definesetter__) Associates a function with a property that, when set, executes that function which modifies the property. -[`Object.prototype.__lookupGetter__()`](object/__lookupgetter__) +[`Object.prototype.__lookupGetter__()`](object/__lookupgetter__) Returns the function associated with the specified property by the [`__defineGetter__()`](object/__definegetter__) method. -[`Object.prototype.__lookupSetter__()`](object/__lookupsetter__) +[`Object.prototype.__lookupSetter__()`](object/__lookupsetter__) Returns the function associated with the specified property by the [`__defineSetter__()`](object/__definesetter__) method. -[`Object.prototype.hasOwnProperty()`](object/hasownproperty) +[`Object.prototype.hasOwnProperty()`](object/hasownproperty) Returns a boolean indicating whether an object contains the specified property as a direct property of that object and not inherited through the prototype chain. -[`Object.prototype.isPrototypeOf()`](object/isprototypeof) +[`Object.prototype.isPrototypeOf()`](object/isprototypeof) Returns a boolean indicating whether the object this method is called upon is in the prototype chain of the specified object. -[`Object.prototype.propertyIsEnumerable()`](object/propertyisenumerable) +[`Object.prototype.propertyIsEnumerable()`](object/propertyisenumerable) Returns a boolean indicating if the internal [ECMAScript \[\[Enumerable\]\] attribute](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#properties) is set. -[`Object.prototype.toLocaleString()`](object/tolocalestring) +[`Object.prototype.toLocaleString()`](object/tolocalestring) Calls [`toString()`](object/tostring). -[`Object.prototype.toString()`](object/tostring) +[`Object.prototype.toString()`](object/tostring) Returns a string representation of the object. -[`Object.prototype.valueOf()`](object/valueof) +[`Object.prototype.valueOf()`](object/valueof) Returns the primitive value of the specified object. ## Examples @@ -61105,7 +61143,7 @@ Since JavaScript doesn't exactly have sub-class objects, prototype is a useful w ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object' in that specification.
        @@ -62349,7 +62387,7 @@ Property definitions that do not use "colon" notation are not prototype mutation ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object Initializer' in that specification.
        @@ -62521,8 +62559,8 @@ No - [Method definitions](../functions/method_definitions) - [Lexical grammar](../lexical_grammar) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer # TypedArray.of() @@ -62549,7 +62587,7 @@ Where `TypedArray` is one of: ### Parameters -`elementN` +`elementN` Elements of which to create the typed array. ### Return value @@ -62574,7 +62612,7 @@ Some subtle distinctions between [`Array.of()`](../array/of) and `TypedArray.of( ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of '%TypedArray%.of' in that specification.
        @@ -62640,8 +62678,8 @@ No - [`TypedArray.from()`](from) - [`Array.of()`](../array/of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of # Operator precedence @@ -63069,8 +63107,8 @@ left-to-right `… , …` -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence # Optional chaining (?.) @@ -63214,7 +63252,7 @@ The [nullish coalescing operator](nullish_coalescing_operator) may be used after ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-OptionalExpression
        @@ -63287,8 +63325,8 @@ No - The [Nullish Coalescing Operator](nullish_coalescing_operator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining # Atomics.or() @@ -63301,13 +63339,13 @@ The static ` Atomics``.or() ` method computes a bitwise OR with a given value at ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to compute the bitwise OR. -`value` +`value` The number to compute the bitwise OR with. ### Return value @@ -63345,7 +63383,7 @@ For example, a bitwise OR of `5 | 1` results in `0101` which is 5 in decimal. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.or
        @@ -63457,7 +63495,7 @@ The `handler.ownKeys()` method is a trap for [`Reflect.ownKeys()`](../../reflect The following parameter is passed to the `ownKeys()` method. `this` is bound to the handler. -`target` +`target` The target object. ### Return value @@ -63524,7 +63562,7 @@ The following code violates an invariant. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys
        @@ -63596,8 +63634,8 @@ In Firefox 42, the implementation got updated to reflect the final ES2015 specif - [`Object.getOwnPropertyNames()`](../../object/getownpropertynames) - [`Reflect.ownKeys()`](../../reflect/ownkeys) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys # String.prototype.padEnd() @@ -63611,10 +63649,10 @@ The `padEnd()` method pads the current string with a given string (repeated, if ### Parameters -`targetLength` +`targetLength` The length of the resulting string once the current `str` has been padded. If the value is lower than `str.length`, the current string will be returned as-is. -`padString` Optional +`padString` Optional The string to pad the current `str` with. If `padString` is too long to stay within `targetLength`, it will be truncated: for left-to-right languages the left-most part and for right-to-left languages the right-most will be applied. The default value for this parameter is "" (`U+0020`). ### Return value @@ -63632,7 +63670,7 @@ A [`String`](../string) of the specified `targetLength` with the `padString` app ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.padend
        @@ -63698,8 +63736,8 @@ No - [`String.prototype.padStart()`](padstart) - [A polyfill](https://github.com/behnammodi/polyfill/blob/master/string.polyfill.js) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd # String.prototype.padStart() @@ -63713,10 +63751,10 @@ The `padStart()` method pads the current string with another string (multiple ti ### Parameters -`targetLength` +`targetLength` The length of the resulting string once the current `str` has been padded. If the value is less than `str.length`, then `str` is returned as-is. -`padString` Optional +`padString` Optional The string to pad the current `str` with. If `padString` is too long to stay within the `targetLength`, it will be truncated from the end. The default value is "" (`U+0020 'SPACE'`). ### Return value @@ -63747,7 +63785,7 @@ A [`String`](../string) of the specified `targetLength` with `padString` applied ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.padstart
        @@ -63813,8 +63851,8 @@ No - [`String.prototype.padEnd()`](padend) - [A polyfill](https://github.com/behnammodi/polyfill/blob/master/string.polyfill.js) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart # Date.parse() @@ -63835,7 +63873,7 @@ Implicit call: ### Parameters -`dateString` +`dateString` A string representing [a simplification of the ISO 8601 calendar date extended format](#date_time_string_format). (Other formats may be used, but results are implementation-dependent.) ### Return value @@ -63947,7 +63985,7 @@ Returns `14400000` no matter the local time zone as a time zone GMT (UTC) is pro ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.parse
        @@ -64055,7 +64093,7 @@ The `parseFloat()` function parses an argument (converting it to a string first ### Parameters -`string` +`string` The value to parse. If this argument is not a string, then it is converted to one using the `ToString` abstract operation. Leading [whitespace](https://developer.mozilla.org/en-US/docs/Glossary/Whitespace) in this argument is ignored. ### Return value @@ -64108,7 +64146,7 @@ The following examples both return `900719925474099300`, losing precision as the ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'parseFloat' in that specification.
        @@ -64190,10 +64228,10 @@ The `parseInt()` function parses a string argument and returns an integer of the ### Parameters -`string` +`string` The value to parse. If this argument is not a string, then it is converted to one using the `ToString` abstract operation. Leading [whitespace](https://developer.mozilla.org/en-US/docs/Glossary/Whitespace) in this argument is ignored. -`radix` Optional +`radix` Optional An integer between `2` and `36` that represents the _radix_ (the base in mathematical numeral systems) of the `string`. Be careful—this does **_not_** default to `10`! If the radix value is not of the `Number` type it will be coerced to a `Number`. **Warning:** The [description below](#description) explains in more detail what happens when `radix` is not provided. @@ -64354,7 +64392,7 @@ The radix is coerced to a `Number`: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-parseint-string-radix
        @@ -64490,7 +64528,7 @@ The following function uses `Math.PI` to calculate the circumference of a circle ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.pi
        @@ -64555,8 +64593,8 @@ Samsung Internet - [`Math`](../math) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI # Planned changes to shared memory @@ -64605,8 +64643,8 @@ The WebAssembly Threads proposal also defines a new set of [atomic](https://gith - `Cross-Origin-Resource-Policy`: [standardized in Fetch](https://fetch.spec.whatwg.org/#cross-origin-resource-policy-header), new `cross-origin` value is part of the `Cross-Origin-Embedder-Policy` effort. - `postMessage()` changes and [`self.crossOriginIsolated`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/crossOriginIsolated): [whatwg/html issue \#4732](https://github.com/whatwg/html/issues/4732), [whatwg/html issue \#4872](https://github.com/whatwg/html/issues/4872), [draft specification](https://github.com/whatwg/html/pull/4734). -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/Planned_changes # Intl.PluralRules() constructor @@ -64621,16 +64659,16 @@ The `Intl.PluralRules()` constructor creates [`Intl.PluralRules`](../pluralrules ### Parameters -`locales` Optional +`locales` Optional A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the `locales` argument, see the [Intl](../../intl#locale_identification_and_negotiation) page. -`options` Optional +`options` Optional An object with some or all of the following properties: -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`type` +`type` The type to use. Possible values are: - "`cardinal`" for cardinal numbers (refering to the quantity of things). This is the default value. @@ -64638,19 +64676,19 @@ The type to use. Possible values are: The following properties fall into two groups: `minimumIntegerDigits`, `minimumFractionDigits`, and `maximumFractionDigits` in one group, `minimumSignificantDigits` and `maximumSignificantDigits` in the other. If at least one property from the second group is defined, then the first group is ignored. -`minimumIntegerDigits` +`minimumIntegerDigits` The minimum number of integer digits to use. Possible values are from 1 to 21; the default is 1. -`minimumFractionDigits` +`minimumFractionDigits` The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information). -`maximumFractionDigits` +`maximumFractionDigits` The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of `minimumFractionDigits` and 3; the default for currency formatting is the larger of `minimumFractionDigits` and the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information); the default for percent formatting is the larger of `minimumFractionDigits` and 0. -`minimumSignificantDigits` +`minimumSignificantDigits` The minimum number of significant digits to use. Possible values are from 1 to 21; the default is 1. -`maximumSignificantDigits` +`maximumSignificantDigits` The maximum number of significant digits to use. Possible values are from 1 to 21; the default is 21. ## Examples @@ -64691,7 +64729,7 @@ The results can be customized using the `options` argument, which has one proper ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl-pluralrules-constructor
        @@ -64809,7 +64847,7 @@ The following code creates the `myFish` array-like object containing four elemen ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.pop' in that specification.
        @@ -64932,7 +64970,7 @@ In the following example, the variable `bigNumber` is assigned a value that is l ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.positive_infinity
        @@ -65000,8 +65038,8 @@ Samsung Internet - [`Infinity`](../infinity) - [`isFinite()`](../isfinite) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY # Math.pow() @@ -65014,10 +65052,10 @@ The `Math.pow()` function returns the `base` to the `exponent` power, as in `bas ### Parameters -`base` +`base` The base number. -`exponent` +`exponent` The exponent used to raise the `base`. ### Return value @@ -65057,7 +65095,7 @@ Because `pow()` is a static method of `Math`, use it as `Math.pow()`, rather tha ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.pow
        @@ -65126,8 +65164,8 @@ Samsung Internet - [`Math.sqrt()`](sqrt) - [Exponentiation operator](../../operators/exponentiation) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow # RangeError: precision is out of range @@ -65202,7 +65240,7 @@ The `Object.preventExtensions()` method prevents new properties from ever being ### Parameters -`obj` +`obj` The object which should be made non-extensible. ### Return value @@ -65272,7 +65310,7 @@ In ES5, if the argument to this method is not an object (a primitive), then it w ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.preventextensions
        @@ -65368,8 +65406,8 @@ Samsung Internet - [`Object.isFrozen()`](isfrozen) - [`Reflect.preventExtensions()`](../reflect/preventextensions) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions # Private class fields @@ -65539,7 +65577,7 @@ Private instance methods may be generator, async, or async generator functions. ## Specifications -
        Specification
        Public and private instance fields proposal (Public and private instance fields proposal) +
        Specification
        Public and private instance fields proposal (Public and private instance fields proposal)
        #prod-PrivateIdentifier
        @@ -65745,7 +65783,7 @@ If we change this so that the ` + -- [web archive feed](https://archive.org/services/collection-rss.php?collection=books&query=%28%28openlibrary_edition%3A%2A%20OR%20sponsor%3AGoogle%20OR%20collection%3Adigitallibraryindia%29%20AND%20mediatype%3Atexts%20AND%20-repub_state%3A%28%27-2%27%20OR%20%27-1%27%20OR%200%20OR%2010%20OR%2011%20OR%2012%20OR%2013%20OR%2018%29%29%20AND%20-mediatype%3Acollection) -- [Blog starter](https://github.com/Portfolio-Projects42/BLOG2.oStarter) - - - +- [web archive feed](https://archive.org/services/collection-rss.php?collection=books&query=%28%28openlibrary_edition%3A%2A%20OR%20sponsor%3AGoogle%20OR%20collection%3Adigitallibraryindia%29%20AND%20mediatype%3Atexts%20AND%20-repub_state%3A%28%27-2%27%20OR%20%27-1%27%20OR%200%20OR%2010%20OR%2011%20OR%2012%20OR%2013%20OR%2018%29%29%20AND%20-mediatype%3Acollection) +- [Blog starter](https://github.com/Portfolio-Projects42/BLOG2.oStarter) + Search feature +

        See the Pen Search Box by Bryan C Guner (@bgoonz) @@ -34,186 +33,172 @@ Search feature

        - - - - - - - - - - - - - - -- [http://plnkr.co/account/plunks](http://plnkr.co/account/plunks) -- [https://1drv.ms/b/s!AkGiZ9n9CRDSquIDCW3sdtgIghzpeg?e=GcgN10](https://1drv.ms/b/s!AkGiZ9n9CRDSquIDCW3sdtgIghzpeg?e=GcgN10) -- [https://a.familypromiseservicetracker.dev/](https://a.familypromiseservicetracker.dev/) -- [https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js%22%3E%3C/script%3E](https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js%22%3E%3C/script%3E) -- [https://angel.co/u/bryan-guner](https://angel.co/u/bryan-guner) -- [https://app.archbee.io/public/lI1AR-3-Ys9iITwuhct3i/treT9kilaJkzSjozhixGi](https://app.archbee.io/public/lI1AR-3-Ys9iITwuhct3i/treT9kilaJkzSjozhixGi) -- [https://app.contentful.com/spaces/lelpu0ihaz11/assets?id=MocOPmmNliLn6PPv](https://app.contentful.com/spaces/lelpu0ihaz11/assets?id=MocOPmmNliLn6PPv) -- [https://app.netlify.com/user/settings#profile](https://app.netlify.com/user/settings#profile) -- [https://aws.amazon.com/](https://aws.amazon.com/) -- [https://azure.microsoft.com/en-in/](https://azure.microsoft.com/en-in/) -- [https://babeljs.io/](https://babeljs.io/) -- [https://bg-portfolio.netlify.app/](https://bg-portfolio.netlify.app/) -- [https://bgoonz-blog.netlify.app/](https://bgoonz-blog.netlify.app/) -- [https://bgoonz-blog.netlify.app/docs/interact/](https://bgoonz-blog.netlify.app/docs/interact/) -- [https://bgoonz-blog.netlify.app/docs/interact/other-sites/](https://bgoonz-blog.netlify.app/docs/interact/other-sites/) -- [https://bgoonz-blog.netlify.app/docs/interact/video-chat/](https://bgoonz-blog.netlify.app/docs/interact/video-chat/) -- [https://bgoonz-blog.netlify.app/docs/tools/](https://bgoonz-blog.netlify.app/docs/tools/) -- [https://bgoonzgist.netlify.app/](https://bgoonzgist.netlify.app/) -- [https://bitbucket.org/bgoonz/](https://bitbucket.org/bgoonz/) -- [https://bryan-guner.gitbook.io/lambda-labs/navigation/roadmap](https://bryan-guner.gitbook.io/lambda-labs/navigation/roadmap) -- [https://bryan-guner.gitbook.io/my-docs/](https://bryan-guner.gitbook.io/my-docs/) -- [https://bryan-guner.gitbook.io/my-docs/v/electrical-engineering/](https://bryan-guner.gitbook.io/my-docs/v/electrical-engineering/) -- [https://bryan-guner.gitbook.io/my-docs/v/lambda-labs/](https://bryan-guner.gitbook.io/my-docs/v/lambda-labs/) -- [https://bryan-guner.gitbook.io/web-dev-hub-docs/](https://bryan-guner.gitbook.io/web-dev-hub-docs/) -- [https://bryanguner.medium.com/](https://bryanguner.medium.com/) -- [https://cloud.google.com/](https://cloud.google.com/) -- [https://codepen.io/bgoonz](https://codepen.io/bgoonz) -- [https://d3js.org/](https://d3js.org/) -- [https://dev.to/bgoonz](https://dev.to/bgoonz) -- [https://developer.mozilla.org/en-US/docs/Web/JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) -- [https://developers.google.com/profile/u/100803355943326309646?utm_source=developers.google.com](https://developers.google.com/profile/u/100803355943326309646?utm_source=developers.google.com) -- [https://dribbble.com/bgoonz4242?onboarding=true](https://dribbble.com/bgoonz4242?onboarding=true) -- [https://drive.google.com/drive/folders/1USAQtiQ3jLm3fiRCxIm4TEkWGlq4fO6j?usp=sharing](https://drive.google.com/drive/folders/1USAQtiQ3jLm3fiRCxIm4TEkWGlq4fO6j?usp=sharing) -- [https://ds-algo-official.netlify.app/](https://ds-algo-official.netlify.app/) -- [https://ds-algo-official.netlify.app/sitemap.html](https://ds-algo-official.netlify.app/sitemap.html) -- [https://ds-algo-official.netlify.app/sitemap.xml](https://ds-algo-official.netlify.app/sitemap.xml) -- [https://edabit.com/user/dsRcx6yCwAgYwZbRB](https://edabit.com/user/dsRcx6yCwAgYwZbRB) -- [https://electrical-computerengineering.tcnj.edu/](https://electrical-computerengineering.tcnj.edu/) -- [https://emberjs.com/](https://emberjs.com/) -- [https://expressjs.com/](https://expressjs.com/) -- [https://familypromise.org/](https://familypromise.org/) -- [https://firebase.google.com/](https://firebase.google.com/) -- [https://forthebadge.com/](https://forthebadge.com/) -- [https://frontendmasters.com/guides/front-end-handbook/2019/](https://frontendmasters.com/guides/front-end-handbook/2019/) -- [https://getbootstrap.com/](https://getbootstrap.com/) -- [https://giphy.com/channel/bryanguner](https://giphy.com/channel/bryanguner) -- [https://git-scm.com/](https://git-scm.com/) -- [https://gitee.com/bgoonz](https://gitee.com/bgoonz) -- [https://giters.com/bgoonz?page=6](https://giters.com/bgoonz?page=6) -- [https://githtmlpreview.netlify.app/](https://githtmlpreview.netlify.app/) -- [https://github.com/bgoonz/random-static-html-page-deploy](https://github.com/bgoonz/random-static-html-page-deploy) -- [https://github.com/bgoonz/React-movie-app](https://github.com/bgoonz/React-movie-app) -- [https://github.com/bgoonz/react-redux-medium-clone](https://github.com/bgoonz/react-redux-medium-clone) -- [https://github.com/bgoonz/react-redux-notes-v5](https://github.com/bgoonz/react-redux-notes-v5) -- [https://github.com/bgoonz/react-redux-registration-login-example](https://github.com/bgoonz/react-redux-registration-login-example) -- [https://github.com/bgoonz/React_Notes_V3](https://github.com/bgoonz/React_Notes_V3) -- [https://github.com/bgoonz/Recursion-Practice-Website](https://github.com/bgoonz/Recursion-Practice-Website) -- [https://github.com/bgoonz/Regex-and-Express-JS](https://github.com/bgoonz/Regex-and-Express-JS) -- [https://github.com/bgoonz/repo-utils](https://github.com/bgoonz/repo-utils) -- [https://github.com/bgoonz/resume-cv-portfolio-samples](https://github.com/bgoonz/resume-cv-portfolio-samples) -- [https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering) -- [https://github.com/bgoonz/scope-closure-context](https://github.com/bgoonz/scope-closure-context) -- [https://github.com/bgoonz/Shell-Script-Practice](https://github.com/bgoonz/Shell-Script-Practice) -- [https://github.com/bgoonz/site-analysis](https://github.com/bgoonz/site-analysis) -- [https://github.com/bgoonz/sorting-algorithms](https://github.com/bgoonz/sorting-algorithms) -- [https://github.com/bgoonz/sorting-algos](https://github.com/bgoonz/sorting-algos) -- [https://github.com/bgoonz/sqlite3-nodejs-demo](https://github.com/bgoonz/sqlite3-nodejs-demo) -- [https://github.com/bgoonz/stalk-photos-web-assets](https://github.com/bgoonz/stalk-photos-web-assets) -- [https://github.com/bgoonz/Standalone-Metranome](https://github.com/bgoonz/Standalone-Metranome) -- [https://github.com/bgoonz/Star-wars-API-Promise-take2](https://github.com/bgoonz/Star-wars-API-Promise-take2) -- [https://github.com/bgoonz/Static-Study-Site](https://github.com/bgoonz/Static-Study-Site) -- [https://github.com/bgoonz/styling-templates](https://github.com/bgoonz/styling-templates) -- [https://github.com/bgoonz/supertemp](https://github.com/bgoonz/supertemp) -- [https://github.com/bgoonz/Ternary-converter](https://github.com/bgoonz/Ternary-converter) -- [https://github.com/bgoonz/TetrisJS](https://github.com/bgoonz/TetrisJS) -- [https://github.com/bgoonz/TexTools](https://github.com/bgoonz/TexTools) -- [https://github.com/bgoonz/The-Algorithms](https://github.com/bgoonz/The-Algorithms) -- [https://github.com/bgoonz/TRASH](https://github.com/bgoonz/TRASH) -- [https://github.com/bgoonz/Triggered-Guitar-Effects-Platform](https://github.com/bgoonz/Triggered-Guitar-Effects-Platform) -- [https://github.com/bgoonz/Useful-Snippets-js](https://github.com/bgoonz/Useful-Snippets-js) -- [https://github.com/bgoonz/UsefulResourceRepo2.0](https://github.com/bgoonz/UsefulResourceRepo2.0) -- [https://github.com/bgoonz/vscode-customized-config](https://github.com/bgoonz/vscode-customized-config) -- [https://github.com/bgoonz/vscode-Extension-readmes](https://github.com/bgoonz/vscode-Extension-readmes) -- [https://github.com/bgoonz/web-crawler-node](https://github.com/bgoonz/web-crawler-node) -- [https://github.com/bgoonz/web-dev-interview-prep-quiz-website](https://github.com/bgoonz/web-dev-interview-prep-quiz-website) -- [https://github.com/bgoonz/web-dev-notes-resource-site](https://github.com/bgoonz/web-dev-notes-resource-site) -- [https://github.com/bgoonz/web-dev-setup-checker](https://github.com/bgoonz/web-dev-setup-checker) -- [https://github.com/bgoonz/WEB-DEV-TOOLS-HUB](https://github.com/bgoonz/WEB-DEV-TOOLS-HUB) -- [https://github.com/bgoonz/web-dev-utils-package](https://github.com/bgoonz/web-dev-utils-package) -- [https://github.com/bgoonz/WebAudioDaw](https://github.com/bgoonz/WebAudioDaw) -- [https://gitlab.com/bryan.guner.dev](https://gitlab.com/bryan.guner.dev) -- [https://gitter.im/bgoonz/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge](https://gitter.im/bgoonz/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -- [https://glitch.com/@bgoonz](https://glitch.com/@bgoonz) -- [https://goofy-euclid-1cd736.netlify.app/core-site/index.html](https://goofy-euclid-1cd736.netlify.app/core-site/index.html) -- [https://hackmd.io/5DeYj2oXTvGJ1-Xvp1Jo2Q](https://hackmd.io/5DeYj2oXTvGJ1-Xvp1Jo2Q) -- [https://hashnode.com/@bgoonz/joinme](https://hashnode.com/@bgoonz/joinme) -- [https://heroku.com/](https://heroku.com/) -- [https://hubpages.com/@bryanguner](https://hubpages.com/@bryanguner) -- [https://jekyllrb.com/](https://jekyllrb.com/) -- [https://jsfiddle.net/user/bgoonz/](https://jsfiddle.net/user/bgoonz/) -- [https://ko-fi.com/bgoonz](https://ko-fi.com/bgoonz) -- [https://meta.stackexchange.com/users/936785/bryan-guner](https://meta.stackexchange.com/users/936785/bryan-guner) -- [https://mihirbegmusic.netlify.app/](https://mihirbegmusic.netlify.app/) -- [https://mochajs.org/](https://mochajs.org/) -- [https://nextjs.org/](https://nextjs.org/) -- [https://nodejs.org/](https://nodejs.org/) -- [https://observablehq.com/@bgoonz?tab=profile](https://observablehq.com/@bgoonz?tab=profile) -- [https://open.spotify.com/user/bgoonz?si=ShH9wYbIQWab5Jz_30BKFw](https://open.spotify.com/user/bgoonz?si=ShH9wYbIQWab5Jz_30BKFw) -- [https://portfolio42.netlify.app/](https://portfolio42.netlify.app/) -- [https://postman.com/](https://postman.com/) -- [https://project-showcase-bgoonz.netlify.app/](https://project-showcase-bgoonz.netlify.app/) -- [https://pugjs.org/](https://pugjs.org/) -- [https://pypi.python.org/pypi/ansicolortags/](https://pypi.python.org/pypi/ansicolortags/) -- [https://reactjs.org/](https://reactjs.org/) -- [https://reactnative.dev/](https://reactnative.dev/) -- [https://repl.it/@bgoonz/](https://repl.it/@bgoonz/) -- [https://runkit.com/bgoonz](https://runkit.com/bgoonz) -- [https://shields.io/](https://shields.io/) -- [https://stackblitz.com/@bgoonz](https://stackblitz.com/@bgoonz) -- [https://stackshare.io/bryanguner](https://stackshare.io/bryanguner) -- [https://tetris42.netlify.app/](https://tetris42.netlify.app/) -- [https://trusting-dijkstra-4d3b17.netlify.app/](https://trusting-dijkstra-4d3b17.netlify.app/) -- [https://twitter.com/bgooonz](https://twitter.com/bgooonz) -- [https://vercel.com/bgoonz](https://vercel.com/bgoonz) -- [https://vimeo.com/user128661018](https://vimeo.com/user128661018) -- [https://wakatime.com/@bgoonz42](https://wakatime.com/@bgoonz42) -- [https://web-dev-hub.com/](https://web-dev-hub.com/) -- [https://web-dev-resource-hub.netlify.app/](https://web-dev-resource-hub.netlify.app/) -- [https://webcomponents.dev/user/bgoonz](https://webcomponents.dev/user/bgoonz) -- [https://webdevhub.ghost.io/ghost/#/tags/new](https://webdevhub.ghost.io/ghost/#/tags/new) -- [https://webpack.js.org/](https://webpack.js.org/) -- [https://www.adobe.com/products/xd.html](https://www.adobe.com/products/xd.html) -- [https://www.arduino.cc/](https://www.arduino.cc/) -- [https://www.cembre.com/](https://www.cembre.com/) -- [https://www.cembre.com/family/details/5202](https://www.cembre.com/family/details/5202) -- [https://www.codewars.com/users/bgoonz](https://www.codewars.com/users/bgoonz) -- [https://www.credly.com/badges/bd145ba3-0f09-42fc-8d1f-a3bc4e0a46b4/public_url](https://www.credly.com/badges/bd145ba3-0f09-42fc-8d1f-a3bc4e0a46b4/public_url) -- [https://www.docker.com/](https://www.docker.com/) -- [https://www.elastic.co/](https://www.elastic.co/) -- [https://www.facebook.com/bryan.guner/](https://www.facebook.com/bryan.guner/) -- [https://www.gatsbyjs.com/](https://www.gatsbyjs.com/) -- [https://www.githubstatus.com/](https://www.githubstatus.com/) -- [https://www.gnu.org/software/bash/](https://www.gnu.org/software/bash/) -- [https://www.google.com/maps/search/?api=1&query=Weehawken%2C%20NJ](https://www.google.com/maps/search/?api=1&query=Weehawken%2C%20NJ) -- [https://www.instagram.com/bgoonz/?hl=en](https://www.instagram.com/bgoonz/?hl=en) -- [https://www.jsdelivr.com/github](https://www.jsdelivr.com/github) -- [https://www.linkedin.com/in/bryan-guner-046199128/](https://www.linkedin.com/in/bryan-guner-046199128/) -- [https://www.linux.org/](https://www.linux.org/) -- [https://www.mongodb.com/](https://www.mongodb.com/) -- [https://www.notion.so/Overview-Of-Css-5d88b0bc9a73422a9be1481d599a56ba](https://www.notion.so/Overview-Of-Css-5d88b0bc9a73422a9be1481d599a56ba) -- [https://www.npmjs.com/~bgoonz11](https://www.npmjs.com/~bgoonz11) -- [https://www.photoshop.com/en](https://www.photoshop.com/en) -- [https://www.postgresql.org/](https://www.postgresql.org/) -- [https://www.python.org/](https://www.python.org/) -- [https://www.quora.com/q/webdevresourcehub?invite_code=qwZOqbpAhgQ6hjjGl8NN](https://www.quora.com/q/webdevresourcehub?invite_code=qwZOqbpAhgQ6hjjGl8NN) -- [https://www.reddit.com/user/bgoonz1](https://www.reddit.com/user/bgoonz1) -- [https://www.typescriptlang.org/](https://www.typescriptlang.org/) -- [https://www.upwork.com/freelancers/~01bb1a3627e1e9c630?viewMode=1&s=1110580755057594368](https://www.upwork.com/freelancers/~01bb1a3627e1e9c630?viewMode=1&s=1110580755057594368) -- [https://www.vagrantup.com/](https://www.vagrantup.com/) -- [https://www.w3.org/html/](https://www.w3.org/html/) -- [https://www.w3schools.com/cpp/](https://www.w3schools.com/cpp/) -- [https://www.w3schools.com/css/](https://www.w3schools.com/css/) -- [https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/featured](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/featured) -- [https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos) -- [https://youtu.be/krRVGoK9NcA](https://youtu.be/krRVGoK9NcA) -- [https://youtu.be/onquAh1Bl0g](https://youtu.be/onquAh1Bl0g) -- [https://youtu.be/pRKjaprdWx4](https://youtu.be/pRKjaprdWx4) -- [https://zapier.com/](https://zapier.com/) -- [mailto:bryan.guner@gmail.com](mailto:bryan.guner@gmail.com) +- [http://plnkr.co/account/plunks](http://plnkr.co/account/plunks) +- [https://1drv.ms/b/s!AkGiZ9n9CRDSquIDCW3sdtgIghzpeg?e=GcgN10](https://1drv.ms/b/s!AkGiZ9n9CRDSquIDCW3sdtgIghzpeg?e=GcgN10) +- [https://a.familypromiseservicetracker.dev/](https://a.familypromiseservicetracker.dev/) +- [https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js%22%3E%3C/script%3E](https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js%22%3E%3C/script%3E) +- [https://angel.co/u/bryan-guner](https://angel.co/u/bryan-guner) +- [https://app.archbee.io/public/lI1AR-3-Ys9iITwuhct3i/treT9kilaJkzSjozhixGi](https://app.archbee.io/public/lI1AR-3-Ys9iITwuhct3i/treT9kilaJkzSjozhixGi) +- [https://app.contentful.com/spaces/lelpu0ihaz11/assets?id=MocOPmmNliLn6PPv](https://app.contentful.com/spaces/lelpu0ihaz11/assets?id=MocOPmmNliLn6PPv) +- [https://app.netlify.com/user/settings#profile](https://app.netlify.com/user/settings#profile) +- [https://aws.amazon.com/](https://aws.amazon.com/) +- [https://azure.microsoft.com/en-in/](https://azure.microsoft.com/en-in/) +- [https://babeljs.io/](https://babeljs.io/) +- [https://bg-portfolio.netlify.app/](https://bg-portfolio.netlify.app/) +- [https://bgoonz-blog.netlify.app/](https://bgoonz-blog.netlify.app/) +- [https://bgoonz-blog.netlify.app/docs/interact/](https://bgoonz-blog.netlify.app/docs/interact/) +- [https://bgoonz-blog.netlify.app/docs/interact/other-sites/](https://bgoonz-blog.netlify.app/docs/interact/other-sites/) +- [https://bgoonz-blog.netlify.app/docs/interact/video-chat/](https://bgoonz-blog.netlify.app/docs/interact/video-chat/) +- [https://bgoonz-blog.netlify.app/docs/tools/](https://bgoonz-blog.netlify.app/docs/tools/) +- [https://bgoonzgist.netlify.app/](https://bgoonzgist.netlify.app/) +- [https://bitbucket.org/bgoonz/](https://bitbucket.org/bgoonz/) +- [https://bryan-guner.gitbook.io/lambda-labs/navigation/roadmap](https://bryan-guner.gitbook.io/lambda-labs/navigation/roadmap) +- [https://bryan-guner.gitbook.io/my-docs/](https://bryan-guner.gitbook.io/my-docs/) +- [https://bryan-guner.gitbook.io/my-docs/v/electrical-engineering/](https://bryan-guner.gitbook.io/my-docs/v/electrical-engineering/) +- [https://bryan-guner.gitbook.io/my-docs/v/lambda-labs/](https://bryan-guner.gitbook.io/my-docs/v/lambda-labs/) +- [https://bryan-guner.gitbook.io/web-dev-hub-docs/](https://bryan-guner.gitbook.io/web-dev-hub-docs/) +- [https://bryanguner.medium.com/](https://bryanguner.medium.com/) +- [https://cloud.google.com/](https://cloud.google.com/) +- [https://codepen.io/bgoonz](https://codepen.io/bgoonz) +- [https://d3js.org/](https://d3js.org/) +- [https://dev.to/bgoonz](https://dev.to/bgoonz) +- [https://developer.mozilla.org/en-US/docs/Web/JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) +- [https://developers.google.com/profile/u/100803355943326309646?utm_source=developers.google.com](https://developers.google.com/profile/u/100803355943326309646?utm_source=developers.google.com) +- [https://dribbble.com/bgoonz4242?onboarding=true](https://dribbble.com/bgoonz4242?onboarding=true) +- [https://drive.google.com/drive/folders/1USAQtiQ3jLm3fiRCxIm4TEkWGlq4fO6j?usp=sharing](https://drive.google.com/drive/folders/1USAQtiQ3jLm3fiRCxIm4TEkWGlq4fO6j?usp=sharing) +- [https://ds-algo-official.netlify.app/](https://ds-algo-official.netlify.app/) +- [https://ds-algo-official.netlify.app/sitemap.html](https://ds-algo-official.netlify.app/sitemap.html) +- [https://ds-algo-official.netlify.app/sitemap.xml](https://ds-algo-official.netlify.app/sitemap.xml) +- [https://edabit.com/user/dsRcx6yCwAgYwZbRB](https://edabit.com/user/dsRcx6yCwAgYwZbRB) +- [https://electrical-computerengineering.tcnj.edu/](https://electrical-computerengineering.tcnj.edu/) +- [https://emberjs.com/](https://emberjs.com/) +- [https://expressjs.com/](https://expressjs.com/) +- [https://familypromise.org/](https://familypromise.org/) +- [https://firebase.google.com/](https://firebase.google.com/) +- [https://forthebadge.com/](https://forthebadge.com/) +- [https://frontendmasters.com/guides/front-end-handbook/2019/](https://frontendmasters.com/guides/front-end-handbook/2019/) +- [https://getbootstrap.com/](https://getbootstrap.com/) +- [https://giphy.com/channel/bryanguner](https://giphy.com/channel/bryanguner) +- [https://git-scm.com/](https://git-scm.com/) +- [https://gitee.com/bgoonz](https://gitee.com/bgoonz) +- [https://giters.com/bgoonz?page=6](https://giters.com/bgoonz?page=6) +- [https://githtmlpreview.netlify.app/](https://githtmlpreview.netlify.app/) +- [https://github.com/bgoonz/random-static-html-page-deploy](https://github.com/bgoonz/random-static-html-page-deploy) +- [https://github.com/bgoonz/React-movie-app](https://github.com/bgoonz/React-movie-app) +- [https://github.com/bgoonz/react-redux-medium-clone](https://github.com/bgoonz/react-redux-medium-clone) +- [https://github.com/bgoonz/react-redux-notes-v5](https://github.com/bgoonz/react-redux-notes-v5) +- [https://github.com/bgoonz/react-redux-registration-login-example](https://github.com/bgoonz/react-redux-registration-login-example) +- [https://github.com/bgoonz/React_Notes_V3](https://github.com/bgoonz/React_Notes_V3) +- [https://github.com/bgoonz/Recursion-Practice-Website](https://github.com/bgoonz/Recursion-Practice-Website) +- [https://github.com/bgoonz/Regex-and-Express-JS](https://github.com/bgoonz/Regex-and-Express-JS) +- [https://github.com/bgoonz/repo-utils](https://github.com/bgoonz/repo-utils) +- [https://github.com/bgoonz/resume-cv-portfolio-samples](https://github.com/bgoonz/resume-cv-portfolio-samples) +- [https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering) +- [https://github.com/bgoonz/scope-closure-context](https://github.com/bgoonz/scope-closure-context) +- [https://github.com/bgoonz/Shell-Script-Practice](https://github.com/bgoonz/Shell-Script-Practice) +- [https://github.com/bgoonz/site-analysis](https://github.com/bgoonz/site-analysis) +- [https://github.com/bgoonz/sorting-algorithms](https://github.com/bgoonz/sorting-algorithms) +- [https://github.com/bgoonz/sorting-algos](https://github.com/bgoonz/sorting-algos) +- [https://github.com/bgoonz/sqlite3-nodejs-demo](https://github.com/bgoonz/sqlite3-nodejs-demo) +- [https://github.com/bgoonz/stalk-photos-web-assets](https://github.com/bgoonz/stalk-photos-web-assets) +- [https://github.com/bgoonz/Standalone-Metranome](https://github.com/bgoonz/Standalone-Metranome) +- [https://github.com/bgoonz/Star-wars-API-Promise-take2](https://github.com/bgoonz/Star-wars-API-Promise-take2) +- [https://github.com/bgoonz/Static-Study-Site](https://github.com/bgoonz/Static-Study-Site) +- [https://github.com/bgoonz/styling-templates](https://github.com/bgoonz/styling-templates) +- [https://github.com/bgoonz/supertemp](https://github.com/bgoonz/supertemp) +- [https://github.com/bgoonz/Ternary-converter](https://github.com/bgoonz/Ternary-converter) +- [https://github.com/bgoonz/TetrisJS](https://github.com/bgoonz/TetrisJS) +- [https://github.com/bgoonz/TexTools](https://github.com/bgoonz/TexTools) +- [https://github.com/bgoonz/The-Algorithms](https://github.com/bgoonz/The-Algorithms) +- [https://github.com/bgoonz/TRASH](https://github.com/bgoonz/TRASH) +- [https://github.com/bgoonz/Triggered-Guitar-Effects-Platform](https://github.com/bgoonz/Triggered-Guitar-Effects-Platform) +- [https://github.com/bgoonz/Useful-Snippets-js](https://github.com/bgoonz/Useful-Snippets-js) +- [https://github.com/bgoonz/UsefulResourceRepo2.0](https://github.com/bgoonz/UsefulResourceRepo2.0) +- [https://github.com/bgoonz/vscode-customized-config](https://github.com/bgoonz/vscode-customized-config) +- [https://github.com/bgoonz/vscode-Extension-readmes](https://github.com/bgoonz/vscode-Extension-readmes) +- [https://github.com/bgoonz/web-crawler-node](https://github.com/bgoonz/web-crawler-node) +- [https://github.com/bgoonz/web-dev-interview-prep-quiz-website](https://github.com/bgoonz/web-dev-interview-prep-quiz-website) +- [https://github.com/bgoonz/web-dev-notes-resource-site](https://github.com/bgoonz/web-dev-notes-resource-site) +- [https://github.com/bgoonz/web-dev-setup-checker](https://github.com/bgoonz/web-dev-setup-checker) +- [https://github.com/bgoonz/WEB-DEV-TOOLS-HUB](https://github.com/bgoonz/WEB-DEV-TOOLS-HUB) +- [https://github.com/bgoonz/web-dev-utils-package](https://github.com/bgoonz/web-dev-utils-package) +- [https://github.com/bgoonz/WebAudioDaw](https://github.com/bgoonz/WebAudioDaw) +- [https://gitlab.com/bryan.guner.dev](https://gitlab.com/bryan.guner.dev) +- [https://gitter.im/bgoonz/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge](https://gitter.im/bgoonz/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +- [https://glitch.com/@bgoonz](https://glitch.com/@bgoonz) +- [https://goofy-euclid-1cd736.netlify.app/core-site/index.html](https://goofy-euclid-1cd736.netlify.app/core-site/index.html) +- [https://hackmd.io/5DeYj2oXTvGJ1-Xvp1Jo2Q](https://hackmd.io/5DeYj2oXTvGJ1-Xvp1Jo2Q) +- [https://hashnode.com/@bgoonz/joinme](https://hashnode.com/@bgoonz/joinme) +- [https://heroku.com/](https://heroku.com/) +- [https://hubpages.com/@bryanguner](https://hubpages.com/@bryanguner) +- [https://jekyllrb.com/](https://jekyllrb.com/) +- [https://jsfiddle.net/user/bgoonz/](https://jsfiddle.net/user/bgoonz/) +- [https://ko-fi.com/bgoonz](https://ko-fi.com/bgoonz) +- [https://meta.stackexchange.com/users/936785/bryan-guner](https://meta.stackexchange.com/users/936785/bryan-guner) +- [https://mihirbegmusic.netlify.app/](https://mihirbegmusic.netlify.app/) +- [https://mochajs.org/](https://mochajs.org/) +- [https://nextjs.org/](https://nextjs.org/) +- [https://nodejs.org/](https://nodejs.org/) +- [https://observablehq.com/@bgoonz?tab=profile](https://observablehq.com/@bgoonz?tab=profile) +- [https://open.spotify.com/user/bgoonz?si=ShH9wYbIQWab5Jz_30BKFw](https://open.spotify.com/user/bgoonz?si=ShH9wYbIQWab5Jz_30BKFw) +- [https://portfolio42.netlify.app/](https://portfolio42.netlify.app/) +- [https://postman.com/](https://postman.com/) +- [https://project-showcase-bgoonz.netlify.app/](https://project-showcase-bgoonz.netlify.app/) +- [https://pugjs.org/](https://pugjs.org/) +- [https://pypi.python.org/pypi/ansicolortags/](https://pypi.python.org/pypi/ansicolortags/) +- [https://reactjs.org/](https://reactjs.org/) +- [https://reactnative.dev/](https://reactnative.dev/) +- [https://repl.it/@bgoonz/](https://repl.it/@bgoonz/) +- [https://runkit.com/bgoonz](https://runkit.com/bgoonz) +- [https://shields.io/](https://shields.io/) +- [https://stackblitz.com/@bgoonz](https://stackblitz.com/@bgoonz) +- [https://stackshare.io/bryanguner](https://stackshare.io/bryanguner) +- [https://tetris42.netlify.app/](https://tetris42.netlify.app/) +- [https://trusting-dijkstra-4d3b17.netlify.app/](https://trusting-dijkstra-4d3b17.netlify.app/) +- [https://twitter.com/bgooonz](https://twitter.com/bgooonz) +- [https://vercel.com/bgoonz](https://vercel.com/bgoonz) +- [https://vimeo.com/user128661018](https://vimeo.com/user128661018) +- [https://wakatime.com/@bgoonz42](https://wakatime.com/@bgoonz42) +- [https://web-dev-hub.com/](https://web-dev-hub.com/) +- [https://web-dev-resource-hub.netlify.app/](https://web-dev-resource-hub.netlify.app/) +- [https://webcomponents.dev/user/bgoonz](https://webcomponents.dev/user/bgoonz) +- [https://webdevhub.ghost.io/ghost/#/tags/new](https://webdevhub.ghost.io/ghost/#/tags/new) +- [https://webpack.js.org/](https://webpack.js.org/) +- [https://www.adobe.com/products/xd.html](https://www.adobe.com/products/xd.html) +- [https://www.arduino.cc/](https://www.arduino.cc/) +- [https://www.cembre.com/](https://www.cembre.com/) +- [https://www.cembre.com/family/details/5202](https://www.cembre.com/family/details/5202) +- [https://www.codewars.com/users/bgoonz](https://www.codewars.com/users/bgoonz) +- [https://www.credly.com/badges/bd145ba3-0f09-42fc-8d1f-a3bc4e0a46b4/public_url](https://www.credly.com/badges/bd145ba3-0f09-42fc-8d1f-a3bc4e0a46b4/public_url) +- [https://www.docker.com/](https://www.docker.com/) +- [https://www.elastic.co/](https://www.elastic.co/) +- [https://www.facebook.com/bryan.guner/](https://www.facebook.com/bryan.guner/) +- [https://www.gatsbyjs.com/](https://www.gatsbyjs.com/) +- [https://www.githubstatus.com/](https://www.githubstatus.com/) +- [https://www.gnu.org/software/bash/](https://www.gnu.org/software/bash/) +- [https://www.google.com/maps/search/?api=1&query=Weehawken%2C%20NJ](https://www.google.com/maps/search/?api=1&query=Weehawken%2C%20NJ) +- [https://www.instagram.com/bgoonz/?hl=en](https://www.instagram.com/bgoonz/?hl=en) +- [https://www.jsdelivr.com/github](https://www.jsdelivr.com/github) +- [https://www.linkedin.com/in/bryan-guner-046199128/](https://www.linkedin.com/in/bryan-guner-046199128/) +- [https://www.linux.org/](https://www.linux.org/) +- [https://www.mongodb.com/](https://www.mongodb.com/) +- [https://www.notion.so/Overview-Of-Css-5d88b0bc9a73422a9be1481d599a56ba](https://www.notion.so/Overview-Of-Css-5d88b0bc9a73422a9be1481d599a56ba) +- [https://www.npmjs.com/~bgoonz11](https://www.npmjs.com/~bgoonz11) +- [https://www.photoshop.com/en](https://www.photoshop.com/en) +- [https://www.postgresql.org/](https://www.postgresql.org/) +- [https://www.python.org/](https://www.python.org/) +- [https://www.quora.com/q/webdevresourcehub?invite_code=qwZOqbpAhgQ6hjjGl8NN](https://www.quora.com/q/webdevresourcehub?invite_code=qwZOqbpAhgQ6hjjGl8NN) +- [https://www.reddit.com/user/bgoonz1](https://www.reddit.com/user/bgoonz1) +- [https://www.typescriptlang.org/](https://www.typescriptlang.org/) +- [https://www.upwork.com/freelancers/~01bb1a3627e1e9c630?viewMode=1&s=1110580755057594368](https://www.upwork.com/freelancers/~01bb1a3627e1e9c630?viewMode=1&s=1110580755057594368) +- [https://www.vagrantup.com/](https://www.vagrantup.com/) +- [https://www.w3.org/html/](https://www.w3.org/html/) +- [https://www.w3schools.com/cpp/](https://www.w3schools.com/cpp/) +- [https://www.w3schools.com/css/](https://www.w3schools.com/css/) +- [https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/featured](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/featured) +- [https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos) +- [https://youtu.be/krRVGoK9NcA](https://youtu.be/krRVGoK9NcA) +- [https://youtu.be/onquAh1Bl0g](https://youtu.be/onquAh1Bl0g) +- [https://youtu.be/pRKjaprdWx4](https://youtu.be/pRKjaprdWx4) +- [https://zapier.com/](https://zapier.com/) +- [mailto:bryan.guner@gmail.com](mailto:bryan.guner@gmail.com) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/list-of-links.md.md b/notes/BGOONZ_BLOG_2.0.wiki/list-of-links.md.md index c4c4921199..24b45dafab 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/list-of-links.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/list-of-links.md.md @@ -205,526 +205,3 @@ https://bgoonz-blog.netlify.app/docs/tools/embed-showcase https://bgoonz-blog.netlify.app/docs/tools/markdown-html https://bgoonz-blog.netlify.app/docs/tutorials/enviorment-setup ``` - - - -## More Links: -``` -url,tstamp -https://bgoonz-blog.netlify.app/,2022-01-21T20:50:56.812Z -https://bgoonz-blog.netlify.app/?stackbit=3482d4890e1b69d678d1f55054a7c556b45321a695dbb1c54140dd6029c46013,2022-01-21T22:43:03.809Z -https://bgoonz-blog.netlify.app/admin/,2022-01-21T22:46:44.543Z -https://bgoonz-blog.netlify.app/blog/,2022-01-21T22:42:20.740Z -https://bgoonz-blog.netlify.app/blog/300-react-questions/,2022-01-21T22:44:12.646Z -https://bgoonz-blog.netlify.app/blog/awesome-graphql/,2022-01-21T22:46:41.415Z -https://bgoonz-blog.netlify.app/blog/big-o-complexity/,2022-01-21T22:43:57.217Z -https://bgoonz-blog.netlify.app/blog/blog-archive/,2022-01-21T22:42:30.717Z -https://bgoonz-blog.netlify.app/blog/blogwcomments/,2022-01-21T22:42:47.056Z -https://bgoonz-blog.netlify.app/blog/data-structures/,2022-01-21T22:42:12.614Z -https://bgoonz-blog.netlify.app/blog/flow-control-in-python/,2022-01-21T22:46:46.870Z -https://bgoonz-blog.netlify.app/blog/functions-in-python/,2022-01-21T22:46:38.672Z -https://bgoonz-blog.netlify.app/blog/git-gateway/,2022-01-21T22:46:32.829Z -https://bgoonz-blog.netlify.app/blog/interview-questions-js/,2022-01-21T22:46:36.312Z -https://bgoonz-blog.netlify.app/blog/js-closure/,2022-01-21T22:46:24.594Z -https://bgoonz-blog.netlify.app/blog/netlify-cms/,2022-01-21T22:46:30.240Z -https://bgoonz-blog.netlify.app/blog/platform-docs/,2022-01-21T22:42:16.772Z -https://bgoonz-blog.netlify.app/blog/python-for-js-dev/,2022-01-21T22:43:19.928Z -https://bgoonz-blog.netlify.app/blog/python-resources/,2022-01-21T22:44:28.181Z -https://bgoonz-blog.netlify.app/blog/web-dev-trends/,2022-01-21T22:46:27.788Z -https://bgoonz-blog.netlify.app/blog/web-scraping/,2022-01-21T22:44:43.716Z -https://bgoonz-blog.netlify.app/docs/,2022-01-21T22:43:37.947Z -https://bgoonz-blog.netlify.app/docs/about/,2022-01-21T22:39:48.117Z -https://bgoonz-blog.netlify.app/docs/about/eng-portfolio/,2022-01-21T22:38:00.152Z -https://bgoonz-blog.netlify.app/docs/about/job-search/,2022-01-21T22:40:03.978Z -https://bgoonz-blog.netlify.app/docs/about/readme/,2022-01-21T22:42:37.501Z -https://bgoonz-blog.netlify.app/docs/about/resume/,2022-01-21T22:36:45.220Z -https://bgoonz-blog.netlify.app/docs/about/youtube/,2022-01-21T22:38:15.894Z -https://bgoonz-blog.netlify.app/docs/articles/,2022-01-21T22:37:32.608Z -https://bgoonz-blog.netlify.app/docs/articles/basic-web-dev/,2022-01-21T22:40:19.151Z -https://bgoonz-blog.netlify.app/docs/articles/buffers/,2022-01-21T22:39:02.116Z -https://bgoonz-blog.netlify.app/docs/articles/dev-dep/,2022-01-21T22:38:28.979Z -https://bgoonz-blog.netlify.app/docs/articles/event-loop/,2022-01-21T22:37:46.525Z -https://bgoonz-blog.netlify.app/docs/articles/fs-module/,2022-01-21T22:39:17.453Z -https://bgoonz-blog.netlify.app/docs/articles/how-search-engines-work/,2022-01-21T22:02:46.076Z -https://bgoonz-blog.netlify.app/docs/articles/how-the-web-works/,2022-01-21T22:39:32.830Z -https://bgoonz-blog.netlify.app/docs/articles/http/,2022-01-21T22:37:08.558Z -https://bgoonz-blog.netlify.app/docs/articles/install/,2022-01-21T22:37:15.122Z -https://bgoonz-blog.netlify.app/docs/articles/intro/,2022-01-21T22:02:36.100Z -https://bgoonz-blog.netlify.app/docs/articles/modules/,2022-01-21T22:36:55.052Z -https://bgoonz-blog.netlify.app/docs/articles/nextjs/,2022-01-21T22:02:42.438Z -https://bgoonz-blog.netlify.app/docs/articles/node-api-express/,2022-01-21T22:02:29.021Z -https://bgoonz-blog.netlify.app/docs/articles/node-cli-args/,2022-01-21T22:02:10.384Z -https://bgoonz-blog.netlify.app/docs/articles/node-common-modules/,2022-01-21T22:02:25.380Z -https://bgoonz-blog.netlify.app/docs/articles/node-env-variables/,2022-01-21T22:02:21.636Z -https://bgoonz-blog.netlify.app/docs/articles/node-js-language/,2022-01-21T22:02:15.588Z -https://bgoonz-blog.netlify.app/docs/articles/node-package-manager/,2022-01-21T22:36:57.406Z -https://bgoonz-blog.netlify.app/docs/articles/node-repl/,2022-01-21T22:02:39.047Z -https://bgoonz-blog.netlify.app/docs/articles/node-run-cli/,2022-01-21T22:36:48.560Z -https://bgoonz-blog.netlify.app/docs/articles/nodejs/,2022-01-21T22:36:53.012Z -https://bgoonz-blog.netlify.app/docs/articles/nodevsbrowser/,2022-01-21T22:02:31.919Z -https://bgoonz-blog.netlify.app/docs/articles/npm/,2022-01-21T22:36:50.788Z -https://bgoonz-blog.netlify.app/docs/articles/npx/,2022-01-21T22:38:44.233Z -https://bgoonz-blog.netlify.app/docs/articles/os-module/,2022-01-21T21:59:42.988Z -https://bgoonz-blog.netlify.app/docs/articles/reading-files/,2022-01-21T21:58:43.617Z -https://bgoonz-blog.netlify.app/docs/articles/semantic-html/,2022-01-21T21:59:31.643Z -https://bgoonz-blog.netlify.app/docs/articles/semantic/,2022-01-21T21:56:58.127Z -https://bgoonz-blog.netlify.app/docs/articles/the-uniform-resource-locator-(url)/,2022-01-21T21:57:08.856Z -https://bgoonz-blog.netlify.app/docs/articles/understanding-firebase/,2022-01-21T21:59:08.980Z -https://bgoonz-blog.netlify.app/docs/articles/v8/,2022-01-21T21:58:55.062Z -https://bgoonz-blog.netlify.app/docs/articles/web-standards-checklist/,2022-01-21T21:59:20.299Z -https://bgoonz-blog.netlify.app/docs/articles/webdev-tools/,2022-01-21T21:59:56.177Z -https://bgoonz-blog.netlify.app/docs/articles/writing-files/,2022-01-21T21:58:07.235Z -https://bgoonz-blog.netlify.app/docs/audio/,2022-01-21T21:58:20.121Z -https://bgoonz-blog.netlify.app/docs/audio/audio-feature-extraction/,2022-01-21T21:57:54.556Z -https://bgoonz-blog.netlify.app/docs/audio/audio/,2022-01-21T21:57:02.272Z -https://bgoonz-blog.netlify.app/docs/audio/dfft/,2022-01-21T21:57:15.792Z -https://bgoonz-blog.netlify.app/docs/audio/discrete-fft/,2022-01-21T21:56:54.168Z -https://bgoonz-blog.netlify.app/docs/audio/dtw-python-explained/,2022-01-21T21:58:31.890Z -https://bgoonz-blog.netlify.app/docs/audio/dynamic-time-warping/,2022-01-21T22:00:08.628Z -https://bgoonz-blog.netlify.app/docs/audio/web-audio-api/,2022-01-21T22:00:20.395Z -https://bgoonz-blog.netlify.app/docs/career/,2022-01-21T21:57:42.649Z -https://bgoonz-blog.netlify.app/docs/career/dev-interview/,2022-01-21T21:53:08.751Z -https://bgoonz-blog.netlify.app/docs/career/interview-dos-n-donts/,2022-01-21T21:49:32.034Z -https://bgoonz-blog.netlify.app/docs/career/job-boards/,2022-01-21T21:53:34.504Z -https://bgoonz-blog.netlify.app/docs/career/wed-dev-questions/,2022-01-21T21:54:57.014Z -https://bgoonz-blog.netlify.app/docs/community/,2022-01-21T21:52:54.070Z -https://bgoonz-blog.netlify.app/docs/community/an-open-letter-2-future-developers/,2022-01-21T21:49:42.138Z -https://bgoonz-blog.netlify.app/docs/community/bookmarks/,2022-01-21T21:49:48.101Z -https://bgoonz-blog.netlify.app/docs/community/video-chat/,2022-01-21T21:53:00.035Z -https://bgoonz-blog.netlify.app/docs/content/,2022-01-21T21:54:26.130Z -https://bgoonz-blog.netlify.app/docs/content/algo/,2022-01-21T21:52:14.207Z -https://bgoonz-blog.netlify.app/docs/content/archive/,2022-01-21T21:49:36.758Z -https://bgoonz-blog.netlify.app/docs/content/bash-intro/,2022-01-21T21:54:41.616Z -https://bgoonz-blog.netlify.app/docs/content/gatsby-queries-mutations/,2022-01-21T21:57:26.654Z -https://bgoonz-blog.netlify.app/docs/content/github-api/,2022-01-21T21:54:07.506Z -https://bgoonz-blog.netlify.app/docs/content/history-api/,2022-01-21T21:53:19.422Z -https://bgoonz-blog.netlify.app/docs/content/netlify/,2022-01-21T21:49:39.023Z -https://bgoonz-blog.netlify.app/docs/content/trouble-shooting/,2022-01-21T21:53:50.727Z -https://bgoonz-blog.netlify.app/docs/css/,2022-01-21T21:49:44.044Z -https://bgoonz-blog.netlify.app/docs/css/css-positioning/,2022-01-21T21:49:52.260Z -https://bgoonz-blog.netlify.app/docs/data-structures/,2022-01-21T21:51:32.964Z -https://bgoonz-blog.netlify.app/docs/data-structures/big-o/,2022-01-21T21:30:30.013Z -https://bgoonz-blog.netlify.app/docs/data-structures/data-structures-in-depth/,2022-01-21T21:31:19.457Z -https://bgoonz-blog.netlify.app/docs/data-structures/ds-algo-interview/,2022-01-21T21:30:00.311Z -https://bgoonz-blog.netlify.app/docs/docs/,2022-01-21T21:30:55.494Z -https://bgoonz-blog.netlify.app/docs/docs/appendix/,2022-01-21T21:30:35.522Z -https://bgoonz-blog.netlify.app/docs/docs/art-of-command-line/,2022-01-21T21:32:03.653Z -https://bgoonz-blog.netlify.app/docs/docs/bash/,2022-01-21T21:31:51.879Z -https://bgoonz-blog.netlify.app/docs/docs/css/,2022-01-21T21:31:39.823Z -https://bgoonz-blog.netlify.app/docs/docs/data-structures-docs/,2022-01-21T21:30:25.477Z -https://bgoonz-blog.netlify.app/docs/docs/es-6-features/,2022-01-21T21:31:44.988Z -https://bgoonz-blog.netlify.app/docs/docs/git-reference/,2022-01-21T21:30:16.668Z -https://bgoonz-blog.netlify.app/docs/docs/git-repos/,2022-01-21T21:31:23.028Z -https://bgoonz-blog.netlify.app/docs/docs/glossary/,2022-01-21T21:30:22.358Z -https://bgoonz-blog.netlify.app/docs/docs/html-spec/,2022-01-21T21:31:48.438Z -https://bgoonz-blog.netlify.app/docs/docs/jamstack/,2022-01-21T21:30:40.896Z -https://bgoonz-blog.netlify.app/docs/docs/markdown/,2022-01-21T21:32:00.849Z -https://bgoonz-blog.netlify.app/docs/docs/no-whiteboarding/,2022-01-21T21:30:43.515Z -https://bgoonz-blog.netlify.app/docs/docs/node-docs-complete/,2022-01-21T21:30:11.681Z -https://bgoonz-blog.netlify.app/docs/docs/node-docs-full/,2022-01-21T21:30:45.933Z -https://bgoonz-blog.netlify.app/docs/docs/regex-in-js/,2022-01-21T21:30:49.072Z -https://bgoonz-blog.netlify.app/docs/docs/sitemap/,2022-01-21T21:31:54.159Z -https://bgoonz-blog.netlify.app/docs/docs/snippets/,2022-01-21T21:30:37.972Z -https://bgoonz-blog.netlify.app/docs/faq/,2022-01-21T21:27:38.971Z -https://bgoonz-blog.netlify.app/docs/faq/contact/,2022-01-21T21:27:32.999Z -https://bgoonz-blog.netlify.app/docs/faq/plug-ins/,2022-01-21T21:27:43.895Z -https://bgoonz-blog.netlify.app/docs/gists/,2022-01-21T21:30:33.044Z -https://bgoonz-blog.netlify.app/docs/interact/,2022-01-21T21:28:21.432Z -https://bgoonz-blog.netlify.app/docs/interact/callstack-visual/,2022-01-21T21:27:23.268Z -https://bgoonz-blog.netlify.app/docs/interact/clock/,2022-01-21T21:27:58.563Z -https://bgoonz-blog.netlify.app/docs/interact/jupyter-notebooks/,2022-01-21T21:27:55.577Z -https://bgoonz-blog.netlify.app/docs/interact/other-sites/,2022-01-21T21:27:05.743Z -https://bgoonz-blog.netlify.app/docs/interact/video-chat/,2022-01-21T21:27:12.794Z -https://bgoonz-blog.netlify.app/docs/interview/,2022-01-21T21:27:16.306Z -https://bgoonz-blog.netlify.app/docs/interview/job-search-nav/,2022-01-21T21:21:43.110Z -https://bgoonz-blog.netlify.app/docs/interview/review-concepts/,2022-01-21T21:21:52.867Z -https://bgoonz-blog.netlify.app/docs/javascript/,2022-01-21T21:23:46.758Z -https://bgoonz-blog.netlify.app/docs/javascript/arrow-functions/,2022-01-21T21:23:32.699Z -https://bgoonz-blog.netlify.app/docs/javascript/asyncjs/,2022-01-21T21:25:03.640Z -https://bgoonz-blog.netlify.app/docs/javascript/await-keyword/,2022-01-21T21:22:30.228Z -https://bgoonz-blog.netlify.app/docs/javascript/bigo/,2022-01-21T21:22:17.508Z -https://bgoonz-blog.netlify.app/docs/javascript/clean-code/,2022-01-21T21:24:17.530Z -https://bgoonz-blog.netlify.app/docs/javascript/constructor-functions/,2022-01-21T21:23:17.322Z -https://bgoonz-blog.netlify.app/docs/javascript/cs-basics-in-js/,2022-01-21T21:21:58.190Z -https://bgoonz-blog.netlify.app/docs/javascript/for-loops/,2022-01-21T21:23:02.024Z -https://bgoonz-blog.netlify.app/docs/javascript/promises/,2022-01-21T21:25:18.965Z -https://bgoonz-blog.netlify.app/docs/javascript/review/,2022-01-21T21:24:32.982Z -https://bgoonz-blog.netlify.app/docs/javascript/this-is-about-this/,2022-01-21T21:24:02.174Z -https://bgoonz-blog.netlify.app/docs/leetcode/,2022-01-21T21:22:09.507Z -https://bgoonz-blog.netlify.app/docs/leetcode/004._median_of_two_sorted_arrays/,2022-01-21T21:28:01.123Z -https://bgoonz-blog.netlify.app/docs/leetcode/006._zigzag_conversion/,2022-01-21T21:28:26.414Z -https://bgoonz-blog.netlify.app/docs/leetcode/008._string_to_integer_(atoi)/,2022-01-21T21:27:35.871Z -https://bgoonz-blog.netlify.app/docs/leetcode/009._palindrome_number/,2022-01-21T21:27:41.537Z -https://bgoonz-blog.netlify.app/docs/leetcode/010._regular_expression_matching/,2022-01-21T21:27:46.522Z -https://bgoonz-blog.netlify.app/docs/leetcode/011._container_with_most_water/,2022-01-21T21:27:09.415Z -https://bgoonz-blog.netlify.app/docs/leetcode/012._integer_to_roman/,2022-01-21T21:27:29.553Z -https://bgoonz-blog.netlify.app/docs/leetcode/013._roman_to_integer/,2022-01-21T21:22:45.118Z -https://bgoonz-blog.netlify.app/docs/leetcode/014._longest_common_prefix/,2022-01-21T21:24:48.216Z -https://bgoonz-blog.netlify.app/docs/leetcode/017._letter_combinations_of_a_phone_number/,2022-01-21T21:21:49.215Z -https://bgoonz-blog.netlify.app/docs/leetcode/019._remove_nth_node_from_end_of_list/,2022-01-21T21:22:03.124Z -https://bgoonz-blog.netlify.app/docs/leetcode/020._valid_parentheses/,2022-01-21T21:20:06.983Z -https://bgoonz-blog.netlify.app/docs/leetcode/022._generate_parentheses/,2022-01-21T21:20:03.998Z -https://bgoonz-blog.netlify.app/docs/leetcode/026._remove_duplicates_from_sorted_array/,2022-01-21T21:20:10.361Z -https://bgoonz-blog.netlify.app/docs/leetcode/029._divide_two_integers/,2022-01-21T21:19:50.865Z -https://bgoonz-blog.netlify.app/docs/leetcode/031._next_permutation/,2022-01-21T21:20:00.387Z -https://bgoonz-blog.netlify.app/docs/leetcode/033._search_in_rotated_sorted_array/,2022-01-21T21:19:57.108Z -https://bgoonz-blog.netlify.app/docs/privacy-policy/,2022-01-21T21:19:55.012Z -https://bgoonz-blog.netlify.app/docs/projects/,2022-01-21T21:18:01.779Z -https://bgoonz-blog.netlify.app/docs/projects/embeded-websites/,2022-01-21T21:14:54.471Z -https://bgoonz-blog.netlify.app/docs/projects/list-of-projects/,2022-01-21T21:14:14.757Z -https://bgoonz-blog.netlify.app/docs/projects/main-projects/,2022-01-21T21:16:00.281Z -https://bgoonz-blog.netlify.app/docs/projects/mini-projects/,2022-01-21T21:17:21.151Z -https://bgoonz-blog.netlify.app/docs/projects/mini-projects2/,2022-01-21T21:15:43.086Z -https://bgoonz-blog.netlify.app/docs/projects/my-websites/,2022-01-21T21:14:07.665Z -https://bgoonz-blog.netlify.app/docs/python/,2022-01-21T21:18:17.369Z -https://bgoonz-blog.netlify.app/docs/python/at-length/,2022-01-21T21:16:09.070Z -https://bgoonz-blog.netlify.app/docs/python/cheat-sheet/,2022-01-21T21:10:58.127Z -https://bgoonz-blog.netlify.app/docs/python/comprehensive-guide/,2022-01-21T21:10:51.729Z -https://bgoonz-blog.netlify.app/docs/python/examples/,2022-01-21T21:11:42.456Z -https://bgoonz-blog.netlify.app/docs/python/flow-control/,2022-01-21T21:11:04.218Z -https://bgoonz-blog.netlify.app/docs/python/functions/,2022-01-21T21:11:28.451Z -https://bgoonz-blog.netlify.app/docs/python/google-sheets-api/,2022-01-21T21:11:10.866Z -https://bgoonz-blog.netlify.app/docs/python/install-python-ubuntu/,2022-01-21T21:10:33.612Z -https://bgoonz-blog.netlify.app/docs/python/intro-for-js-devs/,2022-01-21T21:11:20.988Z -https://bgoonz-blog.netlify.app/docs/python/python-ds/,2022-01-21T21:11:01.468Z -https://bgoonz-blog.netlify.app/docs/python/python-quiz/,2022-01-21T21:11:53.074Z -https://bgoonz-blog.netlify.app/docs/python/snippets/,2022-01-21T21:10:48.111Z -https://bgoonz-blog.netlify.app/docs/quick-reference/,2022-01-21T21:10:39.769Z -https://bgoonz-blog.netlify.app/docs/quick-reference/all-emojis/,2022-01-21T21:11:24.466Z -https://bgoonz-blog.netlify.app/docs/quick-reference/create-react-app/,2022-01-21T21:10:54.754Z -https://bgoonz-blog.netlify.app/docs/quick-reference/emmet/,2022-01-21T21:16:03.683Z -https://bgoonz-blog.netlify.app/docs/quick-reference/git-bash/,2022-01-21T21:11:47.504Z -https://bgoonz-blog.netlify.app/docs/quick-reference/git-tricks/,2022-01-21T21:11:14.361Z -https://bgoonz-blog.netlify.app/docs/quick-reference/google-firebase/,2022-01-21T21:11:49.903Z -https://bgoonz-blog.netlify.app/docs/quick-reference/heroku-error-codes/,2022-01-21T21:11:18.584Z -https://bgoonz-blog.netlify.app/docs/quick-reference/installation/,2022-01-21T21:11:06.612Z -https://bgoonz-blog.netlify.app/docs/quick-reference/markdown-dropdowns/,2022-01-21T21:10:44.957Z -https://bgoonz-blog.netlify.app/docs/quick-reference/minifiction/,2022-01-21T21:11:31.884Z -https://bgoonz-blog.netlify.app/docs/quick-reference/new-repo-instructions/,2022-01-21T21:11:45.165Z -https://bgoonz-blog.netlify.app/docs/quick-reference/psql-setup/,2022-01-21T21:08:30.213Z -https://bgoonz-blog.netlify.app/docs/quick-reference/pull-request-rubric/,2022-01-21T21:08:32.643Z -https://bgoonz-blog.netlify.app/docs/quick-reference/quick-links/,2022-01-21T21:08:46.310Z -https://bgoonz-blog.netlify.app/docs/quick-reference/toprepos/,2022-01-21T21:11:08.651Z -https://bgoonz-blog.netlify.app/docs/quick-reference/understanding-path/,2022-01-21T21:08:44.008Z -https://bgoonz-blog.netlify.app/docs/quick-reference/vscode-themes/,2022-01-21T21:08:13.915Z -https://bgoonz-blog.netlify.app/docs/react/,2022-01-21T21:07:56.217Z -https://bgoonz-blog.netlify.app/docs/react/ajax-n-apis/,2022-01-21T21:05:16.367Z -https://bgoonz-blog.netlify.app/docs/react/cheatsheet/,2022-01-21T21:05:31.690Z -https://bgoonz-blog.netlify.app/docs/react/createreactapp/,2022-01-21T21:08:25.814Z -https://bgoonz-blog.netlify.app/docs/react/demo/,2022-01-21T20:56:10.639Z -https://bgoonz-blog.netlify.app/docs/react/dont-use-index-as-keys/,2022-01-21T20:59:32.757Z -https://bgoonz-blog.netlify.app/docs/react/jsx/,2022-01-21T20:59:48.162Z -https://bgoonz-blog.netlify.app/docs/react/quiz/,2022-01-21T20:56:14.803Z -https://bgoonz-blog.netlify.app/docs/react/react-docs/,2022-01-21T21:03:57.050Z -https://bgoonz-blog.netlify.app/docs/react/react-in-depth/,2022-01-21T20:57:28.735Z -https://bgoonz-blog.netlify.app/docs/react/react-patterns-by-usecase/,2022-01-21T20:56:05.318Z -https://bgoonz-blog.netlify.app/docs/react/react2/,2022-01-21T21:05:00.754Z -https://bgoonz-blog.netlify.app/docs/react/render-elements/,2022-01-21T20:57:43.501Z -https://bgoonz-blog.netlify.app/docs/reference/,2022-01-21T20:53:08.035Z -https://bgoonz-blog.netlify.app/docs/reference/awesome-lists/,2022-01-21T21:04:12.453Z -https://bgoonz-blog.netlify.app/docs/reference/awesome-nodejs/,2022-01-21T20:58:14.113Z -https://bgoonz-blog.netlify.app/docs/reference/awesome-static/,2022-01-21T21:04:29.976Z -https://bgoonz-blog.netlify.app/docs/reference/bash-commands/,2022-01-21T20:58:45.303Z -https://bgoonz-blog.netlify.app/docs/reference/bookmarks/,2022-01-21T21:00:34.500Z -https://bgoonz-blog.netlify.app/docs/reference/embed-the-web/,2022-01-21T21:02:07.339Z -https://bgoonz-blog.netlify.app/docs/reference/github-search/,2022-01-21T20:56:34.913Z -https://bgoonz-blog.netlify.app/docs/reference/google-cloud/,2022-01-21T21:00:19.082Z -https://bgoonz-blog.netlify.app/docs/reference/how-2-reinstall-npm/,2022-01-21T20:59:00.544Z -https://bgoonz-blog.netlify.app/docs/reference/how-to-kill-a-process/,2022-01-21T21:03:39.470Z -https://bgoonz-blog.netlify.app/docs/reference/installing-node/,2022-01-21T21:01:36.819Z -https://bgoonz-blog.netlify.app/docs/reference/intro-to-nodejs/,2022-01-21T20:57:13.406Z -https://bgoonz-blog.netlify.app/docs/reference/markdown-styleguide/,2022-01-21T21:01:05.702Z -https://bgoonz-blog.netlify.app/docs/reference/notes-template/,2022-01-21T20:58:29.839Z -https://bgoonz-blog.netlify.app/docs/reference/psql/,2022-01-21T20:59:17.385Z -https://bgoonz-blog.netlify.app/docs/reference/resources/,2022-01-21T21:00:49.974Z -https://bgoonz-blog.netlify.app/docs/reference/vscode/,2022-01-21T20:56:45.564Z -https://bgoonz-blog.netlify.app/docs/reference/web-api's/,2022-01-21T21:01:51.954Z -https://bgoonz-blog.netlify.app/docs/search/,2022-01-21T21:05:47.029Z -https://bgoonz-blog.netlify.app/docs/sitemap/,2022-01-21T20:56:26.579Z -https://bgoonz-blog.netlify.app/docs/tips/,2022-01-21T20:54:25.701Z -https://bgoonz-blog.netlify.app/docs/tips/array-methods/,2022-01-21T21:02:53.585Z -https://bgoonz-blog.netlify.app/docs/tips/insert-into-array/,2022-01-21T21:01:21.162Z -https://bgoonz-blog.netlify.app/docs/tips/regex-tips/,2022-01-21T21:04:45.317Z -https://bgoonz-blog.netlify.app/docs/tips/sorting-strings/,2022-01-21T21:02:38.235Z -https://bgoonz-blog.netlify.app/docs/tools/,2022-01-21T20:52:48.510Z -https://bgoonz-blog.netlify.app/docs/tools/archive/,2022-01-21T20:53:59.010Z -https://bgoonz-blog.netlify.app/docs/tools/dev-utilities/,2022-01-21T21:03:08.787Z -https://bgoonz-blog.netlify.app/docs/tools/markdown-html/,2022-01-21T20:57:59.292Z -https://bgoonz-blog.netlify.app/docs/tutorials/,2022-01-21T20:52:51.570Z -https://bgoonz-blog.netlify.app/docs/tutorials/enviorment-setup/,2022-01-21T20:56:19.761Z -https://bgoonz-blog.netlify.app/docs/tutorials/how-to-use-google-sheets-as-cms/,2022-01-21T21:03:24.166Z -https://bgoonz-blog.netlify.app/privacy-policy/,2022-01-21T21:02:22.731Z -https://bgoonz-blog.netlify.app/readme/,2022-01-21T21:00:03.758Z -https://bgoonz-blog.netlify.app/readme/?!%5D%3E,2022-01-21T21:08:48.805Z -https://bgoonz-blog.netlify.app/readme/?:%5B%5CdA-Fa-f%5D(?:_%5B%5CdA-Fa-f%5D),2022-01-21T21:08:16.994Z -https://bgoonz-blog.netlify.app/readme/?:%5B%5E%7B%7D;%22'%5D%7C'%20+%20t.source%20+,2022-01-21T21:08:22.766Z -https://bgoonz-blog.netlify.app/readme/?:%5B0-7%5D(?:_%5B0-7%5D),2022-01-21T21:08:07.546Z -https://bgoonz-blog.netlify.app/readme/?:%5B01%5D(?:_%5B01%5D),2022-01-21T21:08:35.957Z -https://bgoonz-blog.netlify.app/readme/?:%5BA-Z_%5D%7C%5Cdx,2022-01-21T21:08:11.392Z -https://bgoonz-blog.netlify.app/readme/?:(?!%5Cs)%5B$%5Cw%5CxA0-%5CuFFFF%5D,2022-01-21T21:08:40.316Z -https://bgoonz-blog.netlify.app/showcase/,2022-01-21T20:56:57.466Z -https://bgoonzblog20master.gatsbyjs.io/,2022-01-21T22:50:54.794Z -https://bgoonzblog20master.gatsbyjs.io/blog/,2022-01-21T22:59:49.303Z -https://bgoonzblog20master.gatsbyjs.io/blog/300-react-questions/,2022-01-22T00:08:15.419Z -https://bgoonzblog20master.gatsbyjs.io/blog/awesome-graphql/,2022-01-22T00:08:17.103Z -https://bgoonzblog20master.gatsbyjs.io/blog/big-o-complexity/,2022-01-22T00:07:56.727Z -https://bgoonzblog20master.gatsbyjs.io/blog/blog-archive/,2022-01-22T00:03:31.017Z -https://bgoonzblog20master.gatsbyjs.io/blog/blogwcomments/,2022-01-22T00:03:18.912Z -https://bgoonzblog20master.gatsbyjs.io/blog/data-structures/,2022-01-22T00:04:59.018Z -https://bgoonzblog20master.gatsbyjs.io/blog/flow-control-in-python/,2022-01-22T00:05:06.249Z -https://bgoonzblog20master.gatsbyjs.io/blog/functions-in-python/,2022-01-22T00:05:04.341Z -https://bgoonzblog20master.gatsbyjs.io/blog/git-gateway/,2022-01-22T00:05:22.106Z -https://bgoonzblog20master.gatsbyjs.io/blog/interview-questions-js/,2022-01-22T00:04:55.642Z -https://bgoonzblog20master.gatsbyjs.io/blog/js-closure/,2022-01-22T00:05:34.193Z -https://bgoonzblog20master.gatsbyjs.io/blog/netlify-cms/,2022-01-22T00:03:25.665Z -https://bgoonzblog20master.gatsbyjs.io/blog/platform-docs/,2022-01-21T22:59:51.451Z -https://bgoonzblog20master.gatsbyjs.io/blog/python-for-js-dev/,2022-01-22T00:05:10.750Z -https://bgoonzblog20master.gatsbyjs.io/blog/python-resources/,2022-01-22T00:04:11.873Z -https://bgoonzblog20master.gatsbyjs.io/blog/web-dev-trends/,2022-01-22T00:04:45.619Z -https://bgoonzblog20master.gatsbyjs.io/blog/web-scraping/,2022-01-22T00:05:24.289Z -https://bgoonzblog20master.gatsbyjs.io/docs,2022-01-21T23:00:34.072Z -https://bgoonzblog20master.gatsbyjs.io/docs/,2022-01-22T00:03:52.608Z -https://bgoonzblog20master.gatsbyjs.io/docs/about/,2022-01-21T23:01:00.646Z -https://bgoonzblog20master.gatsbyjs.io/docs/about/README/,2022-01-22T00:03:33.120Z -https://bgoonzblog20master.gatsbyjs.io/docs/about/eng-portfolio/,2022-01-22T00:04:02.588Z -https://bgoonzblog20master.gatsbyjs.io/docs/about/job-search/,2022-01-22T00:04:14.222Z -https://bgoonzblog20master.gatsbyjs.io/docs/about/resume/,2022-01-22T00:04:19.129Z -https://bgoonzblog20master.gatsbyjs.io/docs/about/youtube/,2022-01-22T00:04:37.745Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/,2022-01-21T22:55:43.709Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/basic-web-dev/,2022-01-22T00:04:40.762Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/buffers/,2022-01-22T00:05:32.061Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/dev-dep/,2022-01-22T00:04:53.585Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/event-loop/,2022-01-22T00:04:47.458Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/fs-module/,2022-01-22T00:05:08.325Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/how-search-engines-work/,2022-01-22T00:04:16.704Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/how-the-web-works/,2022-01-22T00:05:14.931Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/http/,2022-01-22T00:04:05.652Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/install/,2022-01-22T00:03:34.823Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/intro/,2022-01-22T00:04:32.574Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/modules/,2022-01-22T00:05:13.045Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/nextjs/,2022-01-22T00:04:25.127Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-api-express/,2022-01-22T00:05:01.635Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-cli-args/,2022-01-22T00:05:30.029Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-common-modules/,2022-01-22T00:05:36.474Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-env-variables/,2022-01-22T00:05:26.720Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-js-language/,2022-01-22T00:03:56.203Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-package-manager/,2022-01-22T00:05:20.127Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-repl/,2022-01-22T00:03:23.923Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/node-run-cli/,2022-01-22T00:04:08.630Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/nodejs/,2022-01-21T22:55:19.847Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/nodevsbrowser/,2022-01-22T00:03:54.378Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/npm/,2022-01-22T00:04:43.544Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/npx/,2022-01-22T00:03:21.896Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/os-module/,2022-01-22T00:03:58.082Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/reading-files/,2022-01-22T00:05:16.824Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/semantic-html/,2022-01-22T00:04:27.894Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/semantic/,2022-01-21T23:59:33.183Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/the-uniform-resource-locator-(url)/,2022-01-22T00:00:36.750Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/understanding-firebase/,2022-01-22T00:00:11.100Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/v8/,2022-01-22T00:01:00.144Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/web-standards-checklist/,2022-01-21T23:59:58.573Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/webdev-tools/,2022-01-21T23:59:36.904Z -https://bgoonzblog20master.gatsbyjs.io/docs/articles/writing-files/,2022-01-21T23:59:57.457Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/,2022-01-21T22:55:08.168Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/audio-feature-extraction/,2022-01-21T23:59:29.093Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/audio/,2022-01-22T00:00:25.832Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/dfft/,2022-01-21T23:59:34.179Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/discrete-fft/,2022-01-21T23:59:35.602Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/dtw-python-explained/,2022-01-21T23:59:18.805Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/dynamic-time-warping/,2022-01-22T00:00:07.178Z -https://bgoonzblog20master.gatsbyjs.io/docs/audio/web-audio-api/,2022-01-21T23:59:26.748Z -https://bgoonzblog20master.gatsbyjs.io/docs/career/,2022-01-21T23:00:56.578Z -https://bgoonzblog20master.gatsbyjs.io/docs/career/dev-interview/,2022-01-21T23:59:19.957Z -https://bgoonzblog20master.gatsbyjs.io/docs/career/interview-dos-n-donts/,2022-01-21T23:59:28.215Z -https://bgoonzblog20master.gatsbyjs.io/docs/career/job-boards/,2022-01-22T00:00:15.234Z -https://bgoonzblog20master.gatsbyjs.io/docs/career/wed-dev-questions/,2022-01-21T23:59:21.424Z -https://bgoonzblog20master.gatsbyjs.io/docs/community/,2022-01-21T23:01:21.131Z -https://bgoonzblog20master.gatsbyjs.io/docs/community/an-open-letter-2-future-developers/,2022-01-21T23:59:22.916Z -https://bgoonzblog20master.gatsbyjs.io/docs/community/bookmarks/,2022-01-22T00:01:15.879Z -https://bgoonzblog20master.gatsbyjs.io/docs/community/video-chat/,2022-01-21T23:59:25.651Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/,2022-01-21T23:08:17.665Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/algo/,2022-01-21T23:59:54.755Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/archive/,2022-01-21T23:59:31.726Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/bash-intro/,2022-01-22T00:00:47.069Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/gatsby-Queries-Mutations/,2022-01-21T23:59:23.887Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/github-api/,2022-01-21T23:37:34.167Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/history-api/,2022-01-21T23:30:56.856Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/netlify/,2022-01-21T23:35:45.753Z -https://bgoonzblog20master.gatsbyjs.io/docs/content/trouble-shooting/,2022-01-21T23:36:16.661Z -https://bgoonzblog20master.gatsbyjs.io/docs/css/,2022-01-21T23:06:16.764Z -https://bgoonzblog20master.gatsbyjs.io/docs/css/css-positioning/,2022-01-21T23:34:41.158Z -https://bgoonzblog20master.gatsbyjs.io/docs/data-structures/,2022-01-21T22:58:05.963Z -https://bgoonzblog20master.gatsbyjs.io/docs/data-structures/big-o/,2022-01-21T23:37:49.739Z -https://bgoonzblog20master.gatsbyjs.io/docs/data-structures/data-structures-in-depth/,2022-01-21T23:34:24.368Z -https://bgoonzblog20master.gatsbyjs.io/docs/data-structures/ds-algo-interview/,2022-01-21T23:33:46.220Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/,2022-01-21T23:01:04.513Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/appendix/,2022-01-21T23:38:35.894Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/art-of-command-line/,2022-01-21T23:30:33.894Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/bash/,2022-01-21T23:30:38.972Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/css/,2022-01-21T23:31:18.332Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/data-structures-docs/,2022-01-21T23:31:30.547Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/es-6-features/,2022-01-21T23:33:14.996Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/git-reference/,2022-01-21T23:30:52.769Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/git-repos/,2022-01-21T23:35:30.779Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/glossary/,2022-01-21T23:31:03.661Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/html-spec/,2022-01-21T23:37:18.467Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/jamstack/,2022-01-21T23:30:44.836Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/markdown/,2022-01-21T23:38:51.554Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/no-whiteboarding/,2022-01-21T23:37:03.113Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/node-docs-complete/,2022-01-21T23:35:14.963Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/node-docs-full/,2022-01-21T23:32:13.197Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/regex-in-js/,2022-01-21T23:32:43.835Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/sitemap/,2022-01-21T23:30:35.992Z -https://bgoonzblog20master.gatsbyjs.io/docs/docs/snippets/,2022-01-21T23:34:56.916Z -https://bgoonzblog20master.gatsbyjs.io/docs/faq/,2022-01-21T22:54:34.628Z -https://bgoonzblog20master.gatsbyjs.io/docs/faq/contact,2022-01-21T22:55:24.381Z -https://bgoonzblog20master.gatsbyjs.io/docs/faq/contact/,2022-01-21T23:32:28.834Z -https://bgoonzblog20master.gatsbyjs.io/docs/faq/plug-ins/,2022-01-21T23:30:43.481Z -https://bgoonzblog20master.gatsbyjs.io/docs/interact/,2022-01-21T23:05:51.529Z -https://bgoonzblog20master.gatsbyjs.io/docs/interact/callstack-visual/,2022-01-21T23:38:05.006Z -https://bgoonzblog20master.gatsbyjs.io/docs/interact/clock/,2022-01-21T23:36:01.207Z -https://bgoonzblog20master.gatsbyjs.io/docs/interact/jupyter-notebooks/,2022-01-21T23:30:42.257Z -https://bgoonzblog20master.gatsbyjs.io/docs/interact/other-sites/,2022-01-21T23:33:30.319Z -https://bgoonzblog20master.gatsbyjs.io/docs/interact/video-chat/,2022-01-21T23:31:46.437Z -https://bgoonzblog20master.gatsbyjs.io/docs/interview/,2022-01-21T23:08:31.851Z -https://bgoonzblog20master.gatsbyjs.io/docs/interview/job-search-nav/,2022-01-21T23:08:38.189Z -https://bgoonzblog20master.gatsbyjs.io/docs/interview/review-concepts/,2022-01-21T23:39:37.592Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript,2022-01-21T22:55:11.025Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/,2022-01-21T23:01:08.752Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/arrow-functions/,2022-01-21T23:30:47.075Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/asyncjs/,2022-01-21T23:39:06.953Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/await-keyword/,2022-01-21T23:39:22.316Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/bigo/,2022-01-21T23:38:20.325Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/clean-code/,2022-01-21T23:36:47.561Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/constructor-functions/,2022-01-21T23:31:59.270Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/cs-basics-in-js/,2022-01-21T23:30:55.006Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/for-loops/,2022-01-21T23:30:59.747Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/promises/,2022-01-21T23:30:46.096Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/review/,2022-01-21T23:36:32.251Z -https://bgoonzblog20master.gatsbyjs.io/docs/javascript/this-is-about-this/,2022-01-21T23:27:53.686Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/,2022-01-21T23:06:39.447Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/004._Median_of_Two_Sorted_Arrays/,2022-01-21T23:27:16.152Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/006._ZigZag_Conversion/,2022-01-21T23:26:07.836Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/008._String_to_Integer_(atoi)/,2022-01-21T23:20:33.973Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/009._Palindrome_Number/,2022-01-21T23:25:50.429Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/010._Regular_Expression_Matching/,2022-01-21T23:19:45.318Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/011._Container_With_Most_Water/,2022-01-21T23:26:03.290Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/012._Integer_to_Roman/,2022-01-21T23:28:24.400Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/013._Roman_to_Integer/,2022-01-21T23:27:03.090Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/014._Longest_Common_Prefix/,2022-01-21T23:20:04.083Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/017._Letter_Combinations_of_a_Phone_Number/,2022-01-21T23:19:34.029Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/019._Remove_Nth_Node_From_End_of_List/,2022-01-21T23:25:39.999Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/020._Valid_Parentheses/,2022-01-21T23:28:40.585Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/022._Generate_Parentheses/,2022-01-21T23:21:45.113Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/026._Remove_Duplicates_from_Sorted_Array/,2022-01-21T23:27:35.812Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/029._Divide_Two_Integers/,2022-01-21T23:28:02.079Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/031._Next_Permutation/,2022-01-21T23:27:24.397Z -https://bgoonzblog20master.gatsbyjs.io/docs/leetcode/033._Search_in_Rotated_Sorted_Array/,2022-01-21T23:28:32.227Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects,2022-01-21T23:00:07.427Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects/,2022-01-21T22:59:45.535Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects/embeded-websites/,2022-01-21T23:21:07.683Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects/list-of-projects/,2022-01-21T23:26:01.198Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects/main-projects/,2022-01-21T23:24:28.547Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects/mini-projects/,2022-01-21T23:22:51.534Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects/mini-projects2/,2022-01-21T23:26:44.282Z -https://bgoonzblog20master.gatsbyjs.io/docs/projects/my-websites/,2022-01-21T23:24:53.256Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/,2022-01-21T23:03:43.918Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/at-length/,2022-01-21T23:19:42.966Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/cheat-sheet/,2022-01-21T23:27:10.499Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/comprehensive-guide/,2022-01-21T23:25:48.028Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/examples/,2022-01-21T23:25:33.858Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/flow-control/,2022-01-21T23:19:48.195Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/functions/,2022-01-21T23:21:35.680Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/google-sheets-api/,2022-01-21T23:19:37.240Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/install-python-ubuntu/,2022-01-21T23:20:18.770Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/intro-for-js-devs/,2022-01-21T23:25:28.993Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/python-ds,2022-01-21T22:54:36.719Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/python-ds/,2022-01-21T23:25:52.783Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/python-quiz/,2022-01-21T23:25:56.267Z -https://bgoonzblog20master.gatsbyjs.io/docs/python/snippets/,2022-01-21T23:25:45.511Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/,2022-01-21T23:06:13.984Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/Emmet/,2022-01-21T23:25:36.171Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/all-emojis/,2022-01-21T23:24:27.566Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/create-react-app/,2022-01-21T23:19:53.265Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/git-bash/,2022-01-21T23:20:12.389Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/git-tricks/,2022-01-21T23:25:58.270Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/google-firebase/,2022-01-21T23:21:24.989Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/heroku-error-codes/,2022-01-21T23:28:10.970Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/installation/,2022-01-21T23:28:19.444Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/markdown-dropdowns/,2022-01-21T23:27:45.265Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/minifiction/,2022-01-21T23:10:42.328Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/new-repo-instructions/,2022-01-21T23:12:16.137Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/psql-setup/,2022-01-21T23:13:06.610Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/pull-request-rubric/,2022-01-21T23:10:43.494Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/quick-links/,2022-01-21T23:11:50.010Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/topRepos/,2022-01-21T23:14:48.031Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/understanding-path/,2022-01-21T23:16:48.051Z -https://bgoonzblog20master.gatsbyjs.io/docs/quick-reference/vscode-themes/,2022-01-21T23:15:39.354Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/,2022-01-21T22:54:27.306Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/ajax-n-apis/,2022-01-21T23:11:41.723Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/cheatsheet/,2022-01-21T23:11:19.615Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/createReactApp/,2022-01-21T23:15:00.841Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/demo/,2022-01-21T23:17:11.450Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/dont-use-index-as-keys/,2022-01-21T23:10:47.325Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/jsx/,2022-01-21T23:10:51.263Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/quiz/,2022-01-21T23:12:08.725Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/react-docs/,2022-01-21T23:13:39.307Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/react-in-depth/,2022-01-21T23:11:07.623Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/react-patterns-by-usecase/,2022-01-21T23:14:21.702Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/react-w-api/,2022-01-21T23:32:59.507Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/react2/,2022-01-21T23:14:35.297Z -https://bgoonzblog20master.gatsbyjs.io/docs/react/render-elements/,2022-01-21T23:13:19.655Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/,2022-01-21T23:01:41.428Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/awesome-lists/,2022-01-21T23:10:59.482Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/awesome-nodejs/,2022-01-21T23:15:16.277Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/awesome-static/,2022-01-21T23:12:41.992Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/bash-commands/,2022-01-21T23:10:49.443Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/bookmarks/,2022-01-21T23:17:25.192Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/embed-the-web/,2022-01-21T23:15:26.020Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/github-search/,2022-01-21T23:11:34.854Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/google-cloud/,2022-01-21T23:13:50.032Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/how-2-reinstall-npm/,2022-01-21T23:12:01.754Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/how-to-kill-a-process/,2022-01-21T23:10:53.406Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/installing-node/,2022-01-21T23:16:22.399Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/intro-to-nodejs/,2022-01-21T23:14:06.145Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/markdown-styleguide/,2022-01-21T23:11:21.864Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/notes-template/,2022-01-21T23:16:35.326Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/psql/,2022-01-21T23:10:55.566Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/resources/,2022-01-21T23:11:09.500Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/vscode/,2022-01-21T23:16:58.146Z -https://bgoonzblog20master.gatsbyjs.io/docs/reference/web-api's/,2022-01-21T23:10:57.394Z -https://bgoonzblog20master.gatsbyjs.io/docs/sitemap,2022-01-21T23:08:20.469Z -https://bgoonzblog20master.gatsbyjs.io/docs/sitemap/,2022-01-21T23:12:28.679Z -https://bgoonzblog20master.gatsbyjs.io/docs/tips/,2022-01-21T22:55:18.424Z -https://bgoonzblog20master.gatsbyjs.io/docs/tips/array-methods/,2022-01-21T23:15:52.368Z -https://bgoonzblog20master.gatsbyjs.io/docs/tips/insert-into-array/,2022-01-21T23:11:13.055Z -https://bgoonzblog20master.gatsbyjs.io/docs/tips/regex-tips/,2022-01-21T23:12:55.989Z -https://bgoonzblog20master.gatsbyjs.io/docs/tips/sorting-strings/,2022-01-21T23:11:11.079Z -https://bgoonzblog20master.gatsbyjs.io/docs/tools,2022-01-21T22:55:03.182Z -https://bgoonzblog20master.gatsbyjs.io/docs/tools/,2022-01-21T22:56:10.181Z -https://bgoonzblog20master.gatsbyjs.io/docs/tools/archive/,2022-01-21T23:07:44.335Z -https://bgoonzblog20master.gatsbyjs.io/docs/tools/dev-utilities/,2022-01-21T23:16:09.204Z -https://bgoonzblog20master.gatsbyjs.io/docs/tools/markdown-html/,2022-01-21T23:11:29.519Z -https://bgoonzblog20master.gatsbyjs.io/docs/tutorials/,2022-01-21T23:01:11.912Z -https://bgoonzblog20master.gatsbyjs.io/docs/tutorials/enviorment-setup/,2022-01-21T23:10:45.241Z -https://bgoonzblog20master.gatsbyjs.io/docs/tutorials/how-to-use-google-sheets-as-cms/,2022-01-21T23:11:54.898Z -https://bgoonzblog20master.gatsbyjs.io/showcase,2022-01-21T23:00:13.666Z -https://bgoonzmedium.netlify.app/index.html,2022-01-21T23:08:28.859Z -https://bgoonzmedium.netlify.app/makefile,2022-01-21T22:55:11.949Z -https://code-playground.netlify.app/,2022-01-21T23:06:47.408Z -https://festive-borg-e4d856.netlify.app/,2022-01-21T22:51:16.956Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/,2022-01-22T00:04:51.429Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/categories/test-2/1,2022-01-22T00:07:58.598Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/categories/test/1,2022-01-22T00:07:58.114Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/pages/1,2022-01-22T00:08:17.950Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/portfolios,2022-01-22T00:07:57.481Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/portfolios/portfolio-1/,2022-01-22T00:10:03.686Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/portfolios/portfolio-2/,2022-01-22T00:10:00.014Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/post-1/,2022-01-22T00:10:01.592Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/post-2/,2022-01-22T00:10:00.638Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/resume,2022-01-22T00:03:27.165Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/tags/tag-2/1,2022-01-22T00:10:04.253Z -https://gatsbyadvancedblogmaster82908.gatsbyjs.io/tags/tag/1,2022-01-22T00:10:02.688Z - - -``` diff --git a/notes/BGOONZ_BLOG_2.0.wiki/netlify-tips.md.md b/notes/BGOONZ_BLOG_2.0.wiki/netlify-tips.md.md index 44c25ca181..816256b118 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/netlify-tips.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/netlify-tips.md.md @@ -1,47 +1,42 @@ -Build troubleshooting tips -========================== +# Build troubleshooting tips This article provides troubleshooting tips for failing builds in Netlify's build service. -In case your build fails on Netlify, first make sure it builds locally in your own development environment. This is a prerequisite to all of the below suggestions. +In case your build fails on Netlify, first make sure it builds locally in your own development environment. This is a prerequisite to all of the below suggestions. -If your build works locally, the next debugging step is to ensure the package versions we use to build match yours. You can find the settings for these in the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc. That's the leading cause of build failure. +If your build works locally, the next debugging step is to ensure the package versions we use to build match yours. You can find the settings for these in the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc. That's the leading cause of build failure. Once you've considered the most frequently encountered issues listed below, there is some additional reading linked at the bottom of this article which may help you debug in more depth or find answers to less commonly asked questions. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#command-not-found)Command not found ----------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#command-not-found)Command not found -If your build fails with `jekyll: command not found` or `gulp: command not found` or anything in that pattern, it means that the software required for that command hasn't been installed in your build. You can tell the buildbot to install the software you need by including the proper configuration file, like a `Gemfile` for Ruby programs like `jekyll`, or `package.json` for Node programs like `gulp`. +If your build fails with `jekyll: command not found` or `gulp: command not found` or anything in that pattern, it means that the software required for that command hasn't been installed in your build. You can tell the buildbot to install the software you need by including the proper configuration file, like a `Gemfile` for Ruby programs like `jekyll`, or `package.json` for Node programs like `gulp`. -Check out the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc for more details on how to tell us to install your toolchain. Once we find your configuration file, we'll automatically use it before trying to run your build command. +Check out the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc for more details on how to tell us to install your toolchain. Once we find your configuration file, we'll automatically use it before trying to run your build command. -Note that by default the buildbot looks for the configuration file in the root of your repository. If your configuration file is located in a subdirectory, you will need to change your folder structure or [set the site's base directory](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings) to tell us which subdirectory to use. +Note that by default the buildbot looks for the configuration file in the root of your repository. If your configuration file is located in a subdirectory, you will need to change your folder structure or [set the site's base directory](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings) to tell us which subdirectory to use. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-command-named-build)Build command named `build` ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-command-named-build)Build command named `build` -Don't name your build command `build` or try to use the [debug build steps to run a build locally](https://github.com/netlify/build-image#running-locally) in our production build environment. This will fail and give you a strange build log. +Don't name your build command `build` or try to use the [debug build steps to run a build locally](https://github.com/netlify/build-image#running-locally) in our production build environment. This will fail and give you a strange build log. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-fails-with-exit-status-128)Build fails with `exit status 128` ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-fails-with-exit-status-128)Build fails with `exit status 128` Typically this means that we don't have permission to clone the repository you are trying to deploy. The usual cause for this is that someone made some changes to settings for the parent organization, or repository, some time after linking the repository to your site. -We only have permission to create a copy of your code when you link the repository. If you are seeing your build fail with `exit status 128` in the deploy log, relinking your repo using our UI is a good first attempt to fix things (go to Site settings > Build & deploy > Continuous deployment > Build settings, select Edit settings, then Link to a different repository). If you do this, please check your webhook settings at your Git provider to be sure you don't have any duplicate Netlify webhooks. +We only have permission to create a copy of your code when you link the repository. If you are seeing your build fail with `exit status 128` in the deploy log, relinking your repo using our UI is a good first attempt to fix things (go to Site settings > Build & deploy > Continuous deployment > Build settings, select Edit settings, then Link to a different repository). If you do this, please check your webhook settings at your Git provider to be sure you don't have any duplicate Netlify webhooks. Permission levels -Your GitHub, Bitbucket, or GitLab user account may not have the privilege level required to link the repo to Netlify, even if you can log in and access it from the Git host's website. You generally need administrative privileges on the repository, owning organization, or both. Related: [documentation about repository permissions and linking](https://docs.netlify.com/configure-builds/repo-permissions-linking/). +Your GitHub, Bitbucket, or GitLab user account may not have the privilege level required to link the repo to Netlify, even if you can log in and access it from the Git host's website. You generally need administrative privileges on the repository, owning organization, or both. Related: [documentation about repository permissions and linking](https://docs.netlify.com/configure-builds/repo-permissions-linking/). -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-fails-on-warning-message)Build fails on warning message ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-fails-on-warning-message)Build fails on warning message In some cases, a build may fail due to a warning message that would not cause a build failure when run locally. This is because some libraries and build tools handle warnings differently when they detect that they are being run in a Continuous Integration (CI) environment. -Like many other CI tools and platforms, Netlify sets a build environment variable, `CI=true`, as a convention to indicate that your build is running in an automated environment. Many libraries use the presence of the `CI` variable to trigger changes in their behavior, such as removing progress spinner animations or user prompts. In some cases, a library may also choose to treat warning messages as errors, failing the build. +Like many other CI tools and platforms, Netlify sets a build environment variable, `CI=true`, as a convention to indicate that your build is running in an automated environment. Many libraries use the presence of the `CI` variable to trigger changes in their behavior, such as removing progress spinner animations or user prompts. In some cases, a library may also choose to treat warning messages as errors, failing the build. -Generally, libraries that choose to fail on warnings presume their users will want to fix the issues causing the warnings. If this isn't practical for your use case, you can override the `CI` variable by adding `CI=''` to the beginning of your site [build command](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings). For example: +Generally, libraries that choose to fail on warnings presume their users will want to fix the issues causing the warnings. If this isn't practical for your use case, you can override the `CI` variable by adding `CI=''` to the beginning of your site [build command](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings). For example: ``` CI='' npm run build @@ -50,57 +45,50 @@ CI='' npm run build "False" isn't always false -Though it seems like the logical opposite of `CI=true`, setting `CI=false` may not work as expected. This is because environment variable values are processed as strings, and many libraries interpret *any* non-empty string value for `CI` as `true`. +Though it seems like the logical opposite of `CI=true`, setting `CI=false` may not work as expected. This is because environment variable values are processed as strings, and many libraries interpret _any_ non-empty string value for `CI` as `true`. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#case-sensitivity)Case sensitivity --------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#case-sensitivity)Case sensitivity -If you develop on Windows or OSX, and your code includes something like `jQuery/jquery.js` --- the Netlify build may fail as the file system used in Netlify builds is case sensitive while your build environment is not. The error messages that result may not clearly indicate this! +If you develop on Windows or OSX, and your code includes something like `jQuery/jquery.js` --- the Netlify build may fail as the file system used in Netlify builds is case sensitive while your build environment is not. The error messages that result may not clearly indicate this! -To effectively change case of a file stored in Git from your case insensitive local environment, it may be necessary to `git mv` or `git rm` and then add the file again, as renaming and committing will not have the desired effect. +To effectively change case of a file stored in Git from your case insensitive local environment, it may be necessary to `git mv` or `git rm` and then add the file again, as renaming and committing will not have the desired effect. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#large-files-or-sites)Large files or sites ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#large-files-or-sites)Large files or sites -Files over 10 MB in size are not well-supported by our CDN and may fail to upload to our system, causing your entire deploy to fail. You should host large content elsewhere, such as YouTube embedded videos. +Files over 10 MB in size are not well-supported by our CDN and may fail to upload to our system, causing your entire deploy to fail. You should host large content elsewhere, such as YouTube embedded videos. Sites with tens of thousands of html files can lead to long processing times. This shouldn't cause the deploy to fail, but even a "quick" manual deploy can take quite awhile (many minutes) to finish if you have tens of thousands of files. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#post-processing)Post processing ------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#post-processing)Post processing -There are some situations during build that may lead to a failure in post processing --- many things that fail will lead to a retry; if after 4 retries it still hasn't worked, we fail the deploy. You'll probably need to [contact support](https://www.netlify.com/support/) in this case to get more details about the error, unless you want to follow the next bullet point's advice. +There are some situations during build that may lead to a failure in post processing --- many things that fail will lead to a retry; if after 4 retries it still hasn't worked, we fail the deploy. You'll probably need to [contact support](https://www.netlify.com/support/) in this case to get more details about the error, unless you want to follow the next bullet point's advice. -You may try disabling asset optimization (in Site settings > Build & deploy > Post processing > Asset optimization) if your site fails deploy during post processing or some of your assets end up with nonsense paths on the portion of our CDN hosted on Amazon CloudFront. For instance, if you find an incorrect CloudFront URL with a `{$rootfolder}` component in it, you'll need to disable CSS bundling and minification to work around this, or review your CSS as there is likely an incorrect reference causing the behavior. +You may try disabling asset optimization (in Site settings > Build & deploy > Post processing > Asset optimization) if your site fails deploy during post processing or some of your assets end up with nonsense paths on the portion of our CDN hosted on Amazon CloudFront. For instance, if you find an incorrect CloudFront URL with a `{$rootfolder}` component in it, you'll need to disable CSS bundling and minification to work around this, or review your CSS as there is likely an incorrect reference causing the behavior. -Redirects or Custom header rules that we can't process at all are mentioned near the end of the build log and in the Deploy Summary for a deploy, but will not cause the build or deploy to fail. +Redirects or Custom header rules that we can't process at all are mentioned near the end of the build log and in the Deploy Summary for a deploy, but will not cause the build or deploy to fail. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-cache)Build cache ----------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-cache)Build cache -In order to make builds run faster, we cache certain directories created when we [install your dependencies](https://docs.netlify.com/configure-builds/manage-dependencies/#dependency-cache). +In order to make builds run faster, we cache certain directories created when we [install your dependencies](https://docs.netlify.com/configure-builds/manage-dependencies/#dependency-cache). -If a build fails, it's worth retrying with a cleared build cache to check if this works better. You can do this by selecting the Retry deploy button in the header of a failed deploy log page, and then selecting Clear cache and deploy site. +If a build fails, it's worth retrying with a cleared build cache to check if this works better. You can do this by selecting the Retry deploy button in the header of a failed deploy log page, and then selecting Clear cache and deploy site. ![](https://d33wubrfki0l68.cloudfront.net/6b862d5d0fe47bb42d9c0582f25dec8d7f47e4b5/00d94/images/configure-builds-retry-deploy-dropdown.png) -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#enqueued-builds)Enqueued builds ------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#enqueued-builds)Enqueued builds -Builds may be enqueued for any of the three reasons described below. Visit our Forums for a verified Support Guide on reducing build queueing by [optimizing *what* you build](https://answers.netlify.com/t/common-issue-how-can-i-optimize-my-netlify-build-time/3907). +Builds may be enqueued for any of the three reasons described below. Visit our Forums for a verified Support Guide on reducing build queueing by [optimizing _what_ you build](https://answers.netlify.com/t/common-issue-how-can-i-optimize-my-netlify-build-time/3907). -- System queue: Builds enter a system queue when the number of builds across all customers exceeds the current capacity on the build network. This triggers an increase in system capacity, so enqueued builds may start building as capacity increases as well as when other builds complete. To learn how to reduce your team's exposure to system build queues, [contact sales](https://www.netlify.com/enterprise/contact/). -- Team queue: Builds enter your team queue when the number of concurrent builds across all sites on your team exceeds your team's [build capacity](https://docs.netlify.com/accounts-and-billing/billing/#builds-usage). Such builds appear in your team's [Builds page](https://docs.netlify.com/monitor-sites/monitor-builds/) with the label: Enqueued: Awaiting Capacity. You can select the Manage build capacity button on that page to increase team build capacity. If you have a build that you'd like to build right away, you can [prioritize](https://docs.netlify.com/monitor-sites/monitor-builds/#prioritize-a-build) it. *(This feature may not be available on all [plans](https://www.netlify.com/pricing/).)* You can also [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) unneeded team builds to move other builds up in the queue. -- Context queue: When multiple builds are triggered on the same site, in an *identical* [deploy context](https://docs.netlify.com/site-deploys/overview/#deploy-contexts) (such as the same Deploy Preview number, or the same branch deploy) these builds enter a context queue to ensure they complete sequentially. When the current build completes, the newest enqueued build of identical context begins, skipping any others in the same context queue. To start the newest enqueued build in a given context, you can [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) the current active build of identical context. +- System queue: Builds enter a system queue when the number of builds across all customers exceeds the current capacity on the build network. This triggers an increase in system capacity, so enqueued builds may start building as capacity increases as well as when other builds complete. To learn how to reduce your team's exposure to system build queues, [contact sales](https://www.netlify.com/enterprise/contact/). +- Team queue: Builds enter your team queue when the number of concurrent builds across all sites on your team exceeds your team's [build capacity](https://docs.netlify.com/accounts-and-billing/billing/#builds-usage). Such builds appear in your team's [Builds page](https://docs.netlify.com/monitor-sites/monitor-builds/) with the label: Enqueued: Awaiting Capacity. You can select the Manage build capacity button on that page to increase team build capacity. If you have a build that you'd like to build right away, you can [prioritize](https://docs.netlify.com/monitor-sites/monitor-builds/#prioritize-a-build) it. _(This feature may not be available on all [plans](https://www.netlify.com/pricing/).)_ You can also [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) unneeded team builds to move other builds up in the queue. +- Context queue: When multiple builds are triggered on the same site, in an _identical_ [deploy context](https://docs.netlify.com/site-deploys/overview/#deploy-contexts) (such as the same Deploy Preview number, or the same branch deploy) these builds enter a context queue to ensure they complete sequentially. When the current build completes, the newest enqueued build of identical context begins, skipping any others in the same context queue. To start the newest enqueued build in a given context, you can [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) the current active build of identical context. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#deploy-previews-and-bitbucket)Deploy Previews and Bitbucket ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#deploy-previews-and-bitbucket)Deploy Previews and Bitbucket -Due to limitations with Bitbucket's API, we cannot build Deploy Previews for pull requests on Bitbucket repositories. This is specifically due to the fact that they do not send complete refs in their webhooks for pull requests. Bitbucket has an [open issue](https://bitbucket.org/site/master/issues/5814/refify-pull-requests-by-making-them-a-ref) about this. +Due to limitations with Bitbucket's API, we cannot build Deploy Previews for pull requests on Bitbucket repositories. This is specifically due to the fact that they do not send complete refs in their webhooks for pull requests. Bitbucket has an [open issue](https://bitbucket.org/site/master/issues/5814/refify-pull-requests-by-making-them-a-ref) about this. -[#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#more-resources)More resources ----------------------------------------------------------------------------------------------------------------------------------------------------------- +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#more-resources)More resources -Though our build environment works for most build pipelines, there are a few special cases that may cause you some difficulty. To get more context on how our builds work, check out [this blog post on how our build bots build your site](https://www.netlify.com/blog/2016/10/18/how-our-build-bots-build-sites/). You can also test your build locally using our open source [build image](https://github.com/netlify/build-image). +Though our build environment works for most build pipelines, there are a few special cases that may cause you some difficulty. To get more context on how our builds work, check out [this blog post on how our build bots build your site](https://www.netlify.com/blog/2016/10/18/how-our-build-bots-build-sites/). You can also test your build locally using our open source [build image](https://github.com/netlify/build-image). -If your issue doesn't seem to be addressed above, you can visit our [Support Forums](https://answers.netlify.com/categories) to browse posts about common issues or start a new discussion. Many questions about specific build scenarios have also been [asked and answered on StackOverflow](https://stackoverflow.com/questions/tagged/netlify). \ No newline at end of file +If your issue doesn't seem to be addressed above, you can visit our [Support Forums](https://answers.netlify.com/categories) to browse posts about common issues or start a new discussion. Many questions about specific build scenarios have also been [asked and answered on StackOverflow](https://stackoverflow.com/questions/tagged/netlify). diff --git a/notes/BGOONZ_BLOG_2.0.wiki/node-guide.md.md b/notes/BGOONZ_BLOG_2.0.wiki/node-guide.md.md index 2e1e8d5980..2d827f12ff 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/node-guide.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/node-guide.md.md @@ -1,13 +1,12 @@ - # Node.js - Quick Guide > ## Excerpt -> Node.js - Quick Guide, Node.js is a server-side platform built on Google Chrome's JavaScript Engine (V8 Engine). Node.js was developed by Ryan Dahl in 2009 and its latest version is v +> +> Node.js - Quick Guide, Node.js is a server-side platform built on Google Chrome's JavaScript Engine (V8 Engine). Node.js was developed by Ryan Dahl in 2009 and its latest version is v --- -___ - +--- ## What is Node.js? @@ -26,22 +25,16 @@ Node.js = Runtime Environment + JavaScript Library Following are some of the important features that make Node.js the first choice of software architects. - **Asynchronous and Event Driven** − All APIs of Node.js library are asynchronous, that is, non-blocking. It essentially means a Node.js based server never waits for an API to return data. The server moves to the next API after calling it and a notification mechanism of Events of Node.js helps the server to get a response from the previous API call. - - **Very Fast** − Being built on Google Chrome's V8 JavaScript Engine, Node.js library is very fast in code execution. - - **Single Threaded but Highly Scalable** − Node.js uses a single threaded model with event looping. Event mechanism helps the server to respond in a non-blocking way and makes the server highly scalable as opposed to traditional servers which create limited threads to handle requests. Node.js uses a single threaded program and the same program can provide service to a much larger number of requests than traditional servers like Apache HTTP Server. - - **No Buffering** − Node.js applications never buffer any data. These applications simply output the data in chunks. - - **License** − Node.js is released under the [MIT license](https://raw.githubusercontent.com/joyent/node/v0.12.0/LICENSE). - ## Who Uses Node.js? Following is the link on github wiki containing an exhaustive list of projects, application and companies which are using Node.js. This list includes eBay, General Electric, GoDaddy, Microsoft, PayPal, Uber, Wikipins, Yahoo!, and Yammer to name a few. - [Projects, Applications, and Companies Using Node](https://github.com/joyent/node/wiki/projects,-applications,-and-companies-using-node) - ## Concepts @@ -66,11 +59,11 @@ It is not advisable to use Node.js for CPU intensive applications. ## Try it Option Online > You really do not need to set up your own environment to start learning Node.js. Reason is very simple, we already have set up Node.js environment online, so that you can execute all the available examples online and learn through practice. Feel free to modify any example and check the results with different options. -> +> > Try the following example using the **Live Demo** option available at the top right corner of the below sample code box (on our website) − -> +> > /\* Hello World! program in Node.js \*/ console.log("Hello World!"); -> +> > For most of the examples given in this tutorial, you will find a Try it option, so just make use of it and enjoy your learning. ## Local Environment Setup @@ -168,11 +161,8 @@ Hello, World! Before creating an actual "Hello, World!" application using Node.js, let us see the components of a Node.js application. A Node.js application consists of the following three important components − - **Import required modules** − We use the **require** directive to load Node.js modules. - - **Create server** − A server which will listen to client's requests similar to Apache HTTP Server. - - **Read request and return response** − The server created in an earlier step will read the HTTP request made by the client which can be a browser or a console and return the response. - ## Creating Node.js Application @@ -215,19 +205,15 @@ Congratulations, you have your first HTTP server up and running which is respond REPL stands for Read Eval Print Loop and it represents a computer environment like a Windows console or Unix/Linux shell where a command is entered and the system responds with an output in an interactive mode. Node.js or **Node** comes bundled with a REPL environment. It performs the following tasks − - **Read** − Reads user's input, parses the input into JavaScript data-structure, and stores in memory. - - **Eval** − Takes and evaluates the data structure. - - **Print** − Prints the result. - - **Loop** − Loops the above command until the user presses **ctrl-c** twice. - The REPL feature of Node is very useful in experimenting with Node.js codes and to debug JavaScript codes. ## Online REPL Terminal -To simplify your learning, we have set up an easy to use Node.js REPL environment online, where you can practice Node.js syntax − [Launch Node.js REPL Terminal](https://www.tutorialspoint.com/nodejs_terminal_online.php "Node.js Terminal Online") +To simplify your learning, we have set up an easy to use Node.js REPL environment online, where you can practice Node.js syntax − [Launch Node.js REPL Terminal](https://www.tutorialspoint.com/nodejs_terminal_online.php 'Node.js Terminal Online') ### Starting REPL @@ -238,6 +224,7 @@ $ node You will see the REPL Command prompt > where you can type any Node.js command − $ node + > ### Simple Expression @@ -245,46 +232,47 @@ $ node Let's try a simple mathematics at the Node.js REPL command prompt − $ node + > 1 + 3 -4 +> 4 > 1 + ( 2 \* 3 ) - 4 -3 -> +> 3 ### Use Variables You can make use variables to store values and print later like any conventional script. If **var** keyword is not used, then the value is stored in the variable and printed. Whereas if **var** keyword is used, then the value is stored but not printed. You can print variables using **console.log()**. $ node + > x = 10 -10 +> 10 > var y = 10 -undefined +> undefined > x + y -20 +> 20 > console.log("Hello World") -Hello World -undefined +> Hello World +> undefined ### Multiline Expression Node REPL supports multiline expression similar to JavaScript. Let's check the following do-while loop in action − $ node + > var x = 0 -undefined +> undefined > do { - ... x++; - ... console.log("x: " + x); - ... } -while ( x < 5 ); -x: 1 -x: 2 -x: 3 -x: 4 -x: 5 -undefined -> +> ... x++; +> ... console.log("x: " + x); +> ... } +> while ( x < 5 ); +> x: 1 +> x: 2 +> x: 3 +> x: 4 +> x: 5 +> undefined **...** comes automatically when you press Enter after the opening bracket. Node automatically checks the continuity of expressions. @@ -293,57 +281,44 @@ undefined You can use underscore **(\_)** to get the last result − $ node + > var x = 10 -undefined +> undefined > var y = 20 -undefined +> undefined > x + y -30 +> 30 > var sum = \_ -undefined +> undefined > console.log(sum) -30 -undefined -> +> 30 +> undefined ## REPL Commands - **ctrl + c** − terminate the current command. - - **ctrl + c twice** − terminate the Node REPL. - - **ctrl + d** − terminate the Node REPL. - - **Up/Down Keys** − see command history and modify previous commands. - - **tab Keys** − list of current commands. - - **.help** − list of all commands. - - **.break** − exit from multiline expression. - - **.clear** − exit from multiline expression. - - **.save _filename_** − save the current Node REPL session to a file. - - **.load _filename_** − load file content in current Node REPL session. - ## Stopping REPL As mentioned above, you will need to use **ctrl-c twice** to come out of Node.js REPL. $ node -> -(^C again to quit) -> + +> (^C again to quit) Node Package Manager (NPM) provides two main functionalities − - Online repositories for node.js packages/modules which are searchable on [search.nodejs.org](https://search.nodejs.org/) - - Command line utility to install Node.js packages, do version management and dependency management of Node.js packages. - NPM comes bundled with Node.js installables after v0.6.3 version. To verify the same, open console and type the following command and see the result − @@ -353,8 +328,8 @@ $ npm --version If you are running an old version of NPM then it is quite easy to update it to the latest version. Just use the following command from root − $ sudo npm install npm -g -/usr/bin/npm -> /usr/lib/node\_modules/npm/bin/npm-cli.js -npm@2.7.1 /usr/lib/node\_modules/npm +/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js +npm@2.7.1 /usr/lib/node_modules/npm ## Installing Modules using NPM @@ -372,11 +347,11 @@ var express = require('express'); ## Global vs Local Installation -By default, NPM installs any dependency in the local mode. Here local mode refers to the package installation in node\_modules directory lying in the folder where Node application is present. Locally deployed packages are accessible via require() method. For example, when we installed express module, it created node\_modules directory in the current directory where it installed the express module. +By default, NPM installs any dependency in the local mode. Here local mode refers to the package installation in node_modules directory lying in the folder where Node application is present. Locally deployed packages are accessible via require() method. For example, when we installed express module, it created node_modules directory in the current directory where it installed the express module. $ ls -l total 0 -drwxr-xr-x 3 root root 20 Mar 17 02:23 node\_modules +drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules Alternatively, you can use **npm ls** command to list down all the locally installed modules. @@ -386,7 +361,7 @@ $ npm install express -g This will produce a similar result but the module will be installed globally. Here, the first line shows the module version and the location where it is getting installed. -**express@4.12.2 /usr/lib/node\_modules/express** +**express@4.12.2 /usr/lib/node_modules/express** ├── merge-descriptors@1.0.0 ├── utils-merge@1.0.0 ├── cookie-signature@1.0.6 @@ -418,37 +393,27 @@ $ npm ls -g ## Using package.json -package.json is present in the root directory of any Node application/module and is used to define the properties of a package. Let's open package.json of express package present in **node\_modules/express/** +package.json is present in the root directory of any Node application/module and is used to define the properties of a package. Let's open package.json of express package present in **node_modules/express/** -{ "name": "express", "description": "Fast, unopinionated, minimalist web framework", "version": "4.11.2", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "contributors": \[{ "name": "Aaron Heckmann", "email": "aaron.heckmann+github@gmail.com" }, { "name": "Ciaran Jessup", "email": "ciaranj@gmail.com" }, { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" }, { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }, { "name": "Jonathan Ong", "email": "me@jongleberry.com" }, { "name": "Roman Shtylman", "email": "shtylman+expressjs@gmail.com" }, { "name": "Young Jae Sim", "email": "hanul@hanul.me" } \], "license": "MIT", "repository": { "type": "git", "url": "https://github.com/strongloop/express" }, "homepage": "https://expressjs.com/", "keywords": \[ "express", "framework", "sinatra", "web", "rest", "restful", "router", "app", "api" \], "dependencies": { "accepts": "~1.2.3", "content-disposition": "0.5.0", "cookie-signature": "1.0.5", "debug": "~2.1.1", "depd": "~1.0.0", "escape-html": "1.0.1", "etag": "~1.5.1", "finalhandler": "0.3.3", "fresh": "0.2.4", "media-typer": "0.3.0", "methods": "~1.1.1", "on-finished": "~2.2.0", "parseurl": "~1.3.0", "path-to-regexp": "0.1.3", "proxy-addr": "~1.0.6", "qs": "2.3.3", "range-parser": "~1.0.2", "send": "0.11.1", "serve-static": "~1.8.1", "type-is": "~1.5.6", "vary": "~1.0.0", "cookie": "0.1.2", "merge-descriptors": "0.0.2", "utils-merge": "1.0.0" }, "devDependencies": { "after": "0.8.1", "ejs": "2.1.4", "istanbul": "0.3.5", "marked": "0.3.3", "mocha": "~2.1.0", "should": "~4.6.2", "supertest": "~0.15.0", "hjs": "~0.0.6", "body-parser": "~1.11.0", "connect-redis": "~2.2.0", "cookie-parser": "~1.3.3", "express-session": "~1.10.2", "jade": "~1.9.1", "method-override": "~2.3.1", "morgan": "~1.5.1", "multiparty": "~4.1.1", "vhost": "~3.0.0" }, "engines": { "node": ">= 0.10.0" }, "files": \[ "LICENSE", "History.md", "Readme.md", "index.js", "lib/" \], "scripts": { "test": "mocha --require test/support/env - --reporter spec --bail --check-leaks test/ test/acceptance/", "test-cov": "istanbul cover node\_modules/mocha/bin/\_mocha - -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", "test-tap": "mocha --require test/support/env - --reporter tap --check-leaks test/ test/acceptance/", "test-travis": "istanbul cover node\_modules/mocha/bin/\_mocha - --report lcovonly -- --require test/support/env - --reporter spec --check-leaks test/ test/acceptance/" }, "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada", "bugs": { "url": "https://github.com/strongloop/express/issues" }, "\_id": "express@4.11.2", "\_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148", "\_from": "express@\*", "\_npmVersion": "1.4.28", "\_npmUser": { "name": "dougwilson", "email": "doug@somethingdoug.com" }, "maintainers": \[{ "name": "tjholowaychuk", "email": "tj@vision-media.ca" }, { "name": "jongleberry", "email": "jonathanrichardong@gmail.com" }, { "name": "shtylman", "email": "shtylman@gmail.com" }, { "name": "dougwilson", "email": "doug@somethingdoug.com" }, { "name": "aredridel", "email": "aredridel@nbtsc.org" }, { "name": "strongloop", "email": "callback@strongloop.com" }, { "name": "rfeng", "email": "enjoyjava@gmail.com" }\], "dist": { "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148", "tarball": "https://registry.npmjs.org/express/-/express-4.11.2.tgz" }, "directories": {}, "\_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz", "readme": "ERROR: No README data found!" } +{ "name": "express", "description": "Fast, unopinionated, minimalist web framework", "version": "4.11.2", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "contributors": \[{ "name": "Aaron Heckmann", "email": "aaron.heckmann+github@gmail.com" }, { "name": "Ciaran Jessup", "email": "ciaranj@gmail.com" }, { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" }, { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }, { "name": "Jonathan Ong", "email": "me@jongleberry.com" }, { "name": "Roman Shtylman", "email": "shtylman+expressjs@gmail.com" }, { "name": "Young Jae Sim", "email": "hanul@hanul.me" } \], "license": "MIT", "repository": { "type": "git", "url": "https://github.com/strongloop/express" }, "homepage": "https://expressjs.com/", "keywords": \[ "express", "framework", "sinatra", "web", "rest", "restful", "router", "app", "api" \], "dependencies": { "accepts": "~1.2.3", "content-disposition": "0.5.0", "cookie-signature": "1.0.5", "debug": "~2.1.1", "depd": "~1.0.0", "escape-html": "1.0.1", "etag": "~1.5.1", "finalhandler": "0.3.3", "fresh": "0.2.4", "media-typer": "0.3.0", "methods": "~1.1.1", "on-finished": "~2.2.0", "parseurl": "~1.3.0", "path-to-regexp": "0.1.3", "proxy-addr": "~1.0.6", "qs": "2.3.3", "range-parser": "~1.0.2", "send": "0.11.1", "serve-static": "~1.8.1", "type-is": "~1.5.6", "vary": "~1.0.0", "cookie": "0.1.2", "merge-descriptors": "0.0.2", "utils-merge": "1.0.0" }, "devDependencies": { "after": "0.8.1", "ejs": "2.1.4", "istanbul": "0.3.5", "marked": "0.3.3", "mocha": "~2.1.0", "should": "~4.6.2", "supertest": "~0.15.0", "hjs": "~0.0.6", "body-parser": "~1.11.0", "connect-redis": "~2.2.0", "cookie-parser": "~1.3.3", "express-session": "~1.10.2", "jade": "~1.9.1", "method-override": "~2.3.1", "morgan": "~1.5.1", "multiparty": "~4.1.1", "vhost": "~3.0.0" }, "engines": { "node": ">= 0.10.0" }, "files": \[ "LICENSE", "History.md", "Readme.md", "index.js", "lib/" \], "scripts": { "test": "mocha --require test/support/env +--reporter spec --bail --check-leaks test/ test/acceptance/", "test-cov": "istanbul cover node_modules/mocha/bin/\_mocha +-- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", "test-tap": "mocha --require test/support/env +--reporter tap --check-leaks test/ test/acceptance/", "test-travis": "istanbul cover node_modules/mocha/bin/\_mocha +--report lcovonly -- --require test/support/env +--reporter spec --check-leaks test/ test/acceptance/" }, "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada", "bugs": { "url": "https://github.com/strongloop/express/issues" }, "\_id": "express@4.11.2", "\_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148", "\_from": "express@\*", "\_npmVersion": "1.4.28", "\_npmUser": { "name": "dougwilson", "email": "doug@somethingdoug.com" }, "maintainers": \[{ "name": "tjholowaychuk", "email": "tj@vision-media.ca" }, { "name": "jongleberry", "email": "jonathanrichardong@gmail.com" }, { "name": "shtylman", "email": "shtylman@gmail.com" }, { "name": "dougwilson", "email": "doug@somethingdoug.com" }, { "name": "aredridel", "email": "aredridel@nbtsc.org" }, { "name": "strongloop", "email": "callback@strongloop.com" }, { "name": "rfeng", "email": "enjoyjava@gmail.com" }\], "dist": { "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148", "tarball": "https://registry.npmjs.org/express/-/express-4.11.2.tgz" }, "directories": {}, "\_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz", "readme": "ERROR: No README data found!" } ## Attributes of Package.json - **name** − name of the package - - **version** − version of the package - - **description** − description of the package - - **homepage** − homepage of the package - - **author** − author of the package - - **contributors** − name of the contributors to the package - -- **dependencies** − list of dependencies. NPM automatically installs all the dependencies mentioned here in the node\_module folder of the package. - +- **dependencies** − list of dependencies. NPM automatically installs all the dependencies mentioned here in the node_module folder of the package. - **repository** − repository type and URL of the package - - **main** − entry point of the package - - **keywords** − keywords - ## Uninstalling a Module @@ -456,7 +421,7 @@ Use the following command to uninstall a Node.js module. $ npm uninstall express -Once NPM uninstalls the package, you can verify it by looking at the content of /node\_modules/ directory or type the following command − +Once NPM uninstalls the package, you can verify it by looking at the content of /node_modules/ directory or type the following command − $ npm ls @@ -553,9 +518,7 @@ to teach the world in simple and easy way!!!!! These two examples explain the concept of blocking and non-blocking calls. - The first example shows that the program blocks until it reads the file and then only it proceeds to end the program. - - The second example shows that the program does not wait for file reading and proceeds to print "Program Ended" and at the same time, the program without blocking continues reading the file. - Thus, a blocking program executes very much in sequence. From the programming point of view, it is easier to implement the logic but non-blocking programs do not execute in sequence. In case a program needs to use any data to be processed, it should be kept within the same block to make it sequential execution. @@ -579,20 +542,20 @@ var eventEmitter = new events.EventEmitter(); Following is the syntax to bind an event handler with an event − -// Bind event and event handler as follows +// Bind event and event handler as follows eventEmitter.on('eventName', eventHandler); We can fire an event programmatically as follows − -// Fire an event +// Fire an event eventEmitter.emit('eventName'); ## Example Create a js file named main.js with the following code − -// Import events module var events \= require('events'); // Create an eventEmitter object var eventEmitter \= new events.EventEmitter(); // Create an event handler as follows var connectHandler \= function connected() { console.log('connection succesful.'); // Fire the data\_received event - eventEmitter.emit('data\_received'); } // Bind the connection event with the handler eventEmitter.on('connection', connectHandler); // Bind the data\_received event with the anonymous function eventEmitter.on('data\_received', function() { console.log('data received succesfully.'); }); // Fire the connection event +// Import events module var events \= require('events'); // Create an eventEmitter object var eventEmitter \= new events.EventEmitter(); // Create an event handler as follows var connectHandler \= function connected() { console.log('connection succesful.'); // Fire the data_received event +eventEmitter.emit('data_received'); } // Bind the connection event with the handler eventEmitter.on('connection', connectHandler); // Bind the data_received event with the anonymous function eventEmitter.on('data_received', function() { console.log('data received succesfully.'); }); // Fire the connection event eventEmitter.emit('connection'); console.log("Program Ended."); Now let's try to run the above program and check its output − @@ -715,9 +678,7 @@ Events & Description **newListener** - **event** − String: the event name - - **listener** − Function: the event handler function - This event is emitted any time a listener is added. When this event is triggered, the listener may not yet have been added to the array of listeners for the event. @@ -726,9 +687,7 @@ This event is emitted any time a listener is added. When this event is triggered **removeListener** - **event** − String The event name - - **listener** − Function The event handler function - This event is emitted any time someone removes a listener. When this event is triggered, the listener may not yet have been removed from the array of listeners for the event. @@ -736,8 +695,8 @@ This event is emitted any time someone removes a listener. When this event is tr Create a js file named main.js with the following Node.js code − -var events \= require('events'); var eventEmitter \= new events.EventEmitter(); // listener #1 var listner1 \= function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 \= function listner2() { console.log('listner2 executed.'); } // Bind the connection event with the listner1 function eventEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function eventEmitter.on('connection', listner2); var eventListeners \= require('events').EventEmitter.listenerCount (eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); // Fire the connection event -eventEmitter.emit('connection'); // Remove the binding of listner1 function eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); // Fire the connection event +var events \= require('events'); var eventEmitter \= new events.EventEmitter(); // listener #1 var listner1 \= function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 \= function listner2() { console.log('listner2 executed.'); } // Bind the connection event with the listner1 function eventEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function eventEmitter.on('connection', listner2); var eventListeners \= require('events').EventEmitter.listenerCount (eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); // Fire the connection event +eventEmitter.emit('connection'); // Remove the binding of listner1 function eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); // Fire the connection event eventEmitter.emit('connection'); eventListeners \= require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); console.log("Program Ended."); Now run the main.js to see the result − @@ -795,13 +754,9 @@ buf.write(string\[, offset\]\[, length\]\[, encoding\]) Here is the description of the parameters used − - **string** − This is the string data to be written to buffer. - - **offset** − This is the index of the buffer to start writing at. Default value is 0. - - **length** − This is the number of bytes to write. Defaults to buffer.length. - - **encoding** − Encoding to use. 'utf8' is the default encoding. - ### Return Value @@ -828,11 +783,8 @@ buf.toString(\[encoding\]\[, start\]\[, end\]) Here is the description of the parameters used − - **encoding** − Encoding to use. 'utf8' is the default encoding. - - **start** − Beginning index to start reading, defaults to 0. - - **end** − End index to end reading, defaults is complete buffer. - ### Return Value @@ -868,29 +820,29 @@ var buf \= new Buffer('Simply Easy Learning'); var json \= buf.toJSON(buf); cons When the above program is executed, it produces the following result − { type: 'Buffer', - data: - \[ - 83, - 105, - 109, - 112, - 108, - 121, - 32, - 69, - 97, - 115, - 121, - 32, - 76, - 101, - 97, - 114, - 110, - 105, - 110, - 103 - \] +data: +\[ +83, +105, +109, +112, +108, +121, +32, +69, +97, +115, +121, +32, +76, +101, +97, +114, +110, +105, +110, +103 +\] } ## Concatenate Buffers @@ -906,9 +858,7 @@ Buffer.concat(list\[, totalLength\]) Here is the description of the parameters used − - **list** − Array List of Buffer objects to be concatenated. - - **totalLength** − This is the total length of the buffers when concatenated. - ### Return Value @@ -935,7 +885,6 @@ buf.compare(otherBuffer); Here is the description of the parameters used − - **otherBuffer** − This is the other buffer which will be compared with **buf** - ### Return Value @@ -962,13 +911,9 @@ buf.copy(targetBuffer\[, targetStart\]\[, sourceStart\]\[, sourceEnd\]) Here is the description of the parameters used − - **targetBuffer** − Buffer object where buffer will be copied. - - **targetStart** − Number, Optional, Default: 0 - - **sourceStart** − Number, Optional, Default: 0 - - **sourceEnd** − Number, Optional, Default: buffer.length - ### Return Value @@ -995,9 +940,7 @@ buf.slice(\[start\]\[, end\]) Here is the description of the parameters used − - **start** − Number, Optional, Default: 0 - - **end** − Number, Optional, Default: buffer.length - ### Return Value @@ -1076,24 +1019,16 @@ The same as buf1.compare(buf2). Useful for sorting an array of buffers. Streams are objects that let you read data from a source or write data to a destination in continuous fashion. In Node.js, there are four types of streams − - **Readable** − Stream which is used for read operation. - - **Writable** − Stream which is used for write operation. - - **Duplex** − Stream which can be used for both read and write operation. - - **Transform** − A type of duplex stream where the output is computed based on input. - Each type of Stream is an **EventEmitter** instance and throws several events at different instance of times. For example, some of the commonly used events are − - **data** − This event is fired when there is data is available to read. - - **end** − This event is fired when there is no more data to read. - - **error** − This event is fired when there is any error receiving or writing data. - - **finish** − This event is fired when all the data has been flushed to underlying system. - This tutorial provides a basic understanding of the commonly used operations on Streams. @@ -1106,7 +1041,7 @@ to teach the world in simple and easy way!!!!! Create a js file named main.js with the following code − -var fs \= require("fs"); var data \= ''; // Create a readable stream var readerStream \= fs.createReadStream('input.txt'); // Set the encoding to be utf8. +var fs \= require("fs"); var data \= ''; // Create a readable stream var readerStream \= fs.createReadStream('input.txt'); // Set the encoding to be utf8. readerStream.setEncoding('UTF8'); // Handle stream events --> data, end, and error readerStream.on('data', function(chunk) { data += chunk; }); readerStream.on('end',function() { console.log(data); }); readerStream.on('error', function(err) { console.log(err.stack); }); console.log("Program Ended"); Now run the main.js to see the result − @@ -1234,13 +1169,9 @@ fs.open(path, flags\[, mode\], callback) Here is the description of the parameters used − - **path** − This is the string having file name including path. - - **flags** − Flags indicate the behavior of the file to be opened. All possible values have been mentioned below. - - **mode** − It sets the file mode (permission and sticky bits), but only if the file was created. It defaults to 0666, readable and writeable. - - **callback** − This is the callback function which gets two arguments (err, fd). - ## Flags @@ -1350,9 +1281,7 @@ fs.stat(path, callback) Here is the description of the parameters used − - **path** − This is the string having file name including path. - - **callback** − This is the callback function which gets two arguments (err, stats) where **stats** is an object of fs.Stats type which is printed below in the example. - Apart from the important attributes which are printed below in the example, there are several useful methods available in **fs.Stats** class which can be used to check file type. These methods are given in the following table. @@ -1415,20 +1344,20 @@ $ node main.js Verify the Output. Going to get file info! -{ - dev: 1792, - mode: 33188, - nlink: 1, - uid: 48, - gid: 48, - rdev: 0, - blksize: 4096, - ino: 4318127, - size: 97, - blocks: 8, - atime: Sun Mar 22 2015 13:40:00 GMT-0500 (CDT), - mtime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT), - ctime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT) +{ +dev: 1792, +mode: 33188, +nlink: 1, +uid: 48, +gid: 48, +rdev: 0, +blksize: 4096, +ino: 4318127, +size: 97, +blocks: 8, +atime: Sun Mar 22 2015 13:40:00 GMT-0500 (CDT), +mtime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT), +ctime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT) } Got file info successfully! isFile ? true @@ -1449,13 +1378,9 @@ This method will over-write the file if the file already exists. If you want to Here is the description of the parameters used − - **path** − This is the string having the file name including path. - - **data** − This is the String or Buffer to be written into the file. - - **options** − The third parameter is an object which will hold {encoding, mode, flag}. By default. encoding is utf8, mode is octal value 0666. and flag is 'w' - - **callback** − This is the callback function which gets a single parameter err that returns an error in case of any writing error. - ### Example @@ -1489,17 +1414,11 @@ This method will use file descriptor to read the file. If you want to read the f Here is the description of the parameters used − - **fd** − This is the file descriptor returned by fs.open(). - - **buffer** − This is the buffer that the data will be written to. - - **offset** − This is the offset in the buffer to start writing at. - - **length** − This is an integer specifying the number of bytes to read. - - **position** − This is an integer specifying where to begin reading from in the file. If position is null, data will be read from the current file position. - - **callback** − This is the callback function which gets the three arguments, (err, bytesRead, buffer). - ### Example @@ -1533,9 +1452,7 @@ fs.close(fd, callback) Here is the description of the parameters used − - **fd** − This is the file descriptor returned by file fs.open() method. - - **callback** − This is the callback function No arguments other than a possible exception are given to the completion callback. - ### Example @@ -1570,11 +1487,8 @@ fs.ftruncate(fd, len, callback) Here is the description of the parameters used − - **fd** − This is the file descriptor returned by fs.open(). - - **len** − This is the length of the file after which the file will be truncated. - - **callback** − This is the callback function No arguments other than a possible exception are given to the completion callback. - ### Example @@ -1593,7 +1507,7 @@ File opened successfully! Going to truncate the file after 10 bytes File truncated successfully. Going to read the same file -Tutorials +Tutorials File closed successfully. ## Delete a File @@ -1609,9 +1523,7 @@ fs.unlink(path, callback) Here is the description of the parameters used − - **path** − This is the file name including path. - - **callback** − This is the callback function No arguments other than a possible exception are given to the completion callback. - ### Example @@ -1641,11 +1553,8 @@ fs.mkdir(path\[, mode\], callback) Here is the description of the parameters used − - **path** − This is the directory name including path. - - **mode** − This is the directory permission to be set. Defaults to 0777. - - **callback** − This is the callback function No arguments other than a possible exception are given to the completion callback. - ### Example @@ -1675,9 +1584,7 @@ fs.readdir(path, callback) Here is the description of the parameters used − - **path** − This is the directory name including path. - - **callback** − This is the callback function which gets two arguments (err, files) where files is an array of the names of the files in the directory excluding '.' and '..'. - ### Example @@ -1695,7 +1602,7 @@ Going to read directory /tmp ccmzx99o.out ccyCSbkF.out employee.ser -hsperfdata\_apache +hsperfdata_apache test test.txt @@ -1712,9 +1619,7 @@ fs.rmdir(path, callback) Here is the description of the parameters used − - **path** − This is the directory name including path. - - **callback** − This is the callback function No arguments other than a possible exception are given to the completion callback. - ### Example @@ -1732,7 +1637,7 @@ Going to read directory /tmp ccmzx99o.out ccyCSbkF.out employee.ser -hsperfdata\_apache +hsperfdata_apache test.txt ## Methods Reference @@ -1757,7 +1662,7 @@ $ node main.js Based on the location of your program, it will print the main file name as follows − -/web/com/1427091028\_21099/main.js +/web/com/1427091028_21099/main.js ## \_\_dirname @@ -1775,7 +1680,7 @@ $ node main.js Based on the location of your program, it will print current directory name as follows − -/web/com/1427091028\_21099 +/web/com/1427091028_21099 ## setTimeout(cb, ms) @@ -1902,13 +1807,9 @@ A Web application is usually divided into four layers − ![Web Architecture](https://www.tutorialspoint.com/nodejs/images/web_architecture.jpg) - **Client** − This layer consists of web browsers, mobile browsers or applications which can make HTTP requests to the web server. - - **Server** − This layer has the Web server which can intercept the requests made by the clients and pass them the response. - - **Business** − This layer contains the application server which is utilized by the web server to do the required processing. This layer interacts with the data layer via the database or some external programs. - - **Data** − This layer contains the databases or any other source of data. - ## Creating a Web Server using Node @@ -1918,8 +1819,8 @@ Create a js file named server.js − **File: server.js** -var http \= require('http'); var fs \= require('fs'); var url \= require('url'); // Create a server http.createServer( function (request, response) { // Parse the request containing file name var pathname \= url.parse(request.url).pathname; // Print the name of the file for which request is made. console.log("Request for " + pathname + " received."); // Read the requested file content from file system fs.readFile(pathname.substr(1), function (err, data) { if (err) { console.log(err); // HTTP Status: 404 : NOT FOUND // Content Type: text/plain response.writeHead(404, {'Content-Type': 'text/html'}); } else { //Page found // HTTP Status: 200 : OK // Content Type: text/plain response.writeHead(200, {'Content-Type': 'text/html'}); // Write the content of the file to response body response.write(data.toString()); } // Send the response body - response.end(); }); }).listen(8081); // Console will print the message console.log('Server running at http://127.0.0.1:8081/'); +var http \= require('http'); var fs \= require('fs'); var url \= require('url'); // Create a server http.createServer( function (request, response) { // Parse the request containing file name var pathname \= url.parse(request.url).pathname; // Print the name of the file for which request is made. console.log("Request for " + pathname + " received."); // Read the requested file content from file system fs.readFile(pathname.substr(1), function (err, data) { if (err) { console.log(err); // HTTP Status: 404 : NOT FOUND // Content Type: text/plain response.writeHead(404, {'Content-Type': 'text/html'}); } else { //Page found // HTTP Status: 200 : OK // Content Type: text/plain response.writeHead(200, {'Content-Type': 'text/html'}); // Write the content of the file to response body response.write(data.toString()); } // Send the response body +response.end(); }); }).listen(8081); // Console will print the message console.log('Server running at http://127.0.0.1:8081/'); Next let's create the following html file named index.htm in the same directory where you created server.js. @@ -1982,11 +1883,8 @@ Request for /index.htm received. Express is a minimal and flexible Node.js web application framework that provides a robust set of features to develop web and mobile applications. It facilitates the rapid development of Node based Web applications. Following are some of the core features of Express framework − - Allows to set up middlewares to respond to HTTP Requests. - - Defines a routing table which is used to perform different actions based on HTTP Method and URL. - - Allows to dynamically render HTML Pages based on passing arguments to templates. - ## Installing Express @@ -1994,14 +1892,11 @@ Firstly, install the Express framework globally using NPM so that it can be used $ npm install express --save -The above command saves the installation locally in the **node\_modules** directory and creates a directory express inside node\_modules. You should install the following important modules along with express − +The above command saves the installation locally in the **node_modules** directory and creates a directory express inside node_modules. You should install the following important modules along with express − - **body-parser** − This is a node.js middleware for handling JSON, Raw, Text and URL encoded form data. - - **cookie-parser** − Parse Cookie header and populate req.cookies with an object keyed by the cookie names. - - **multer** − This is a node.js middleware for handling multipart/form-data. - $ npm install body-parser --save $ npm install cookie-parser --save @@ -2012,8 +1907,8 @@ $ npm install multer --save Following is a very basic Express app which starts a server and listens on port 8081 for connection. This app responds with **Hello World!** for requests to the homepage. For every other path, it will respond with a **404 Not Found.** var express \= require('express'); var app \= express(); app.get('/', function (req, res) { res.send('Hello World'); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - - console.log("Example app listening at http://%s:%s", host, port) }) + +console.log("Example app listening at http://%s:%s", host, port) }) Save the above code in a file named server.js and run it with the following command. @@ -2032,13 +1927,11 @@ Open http://127.0.0.1:8081/ in any browser to see the following result. Express application uses a callback function whose parameters are **request** and **response** objects. app.get('/', function (req, res) { - // -- +// -- }) - [Request Object](https://www.tutorialspoint.com/nodejs/nodejs_request_object.htm) − The request object represents the HTTP request and has properties for the request query string, parameters, body, HTTP headers, and so on. - - [Response Object](https://www.tutorialspoint.com/nodejs/nodejs_response_object.htm) − The response object represents the HTTP response that an Express app sends when it gets an HTTP request. - You can print **req** and **res** objects which provide a lot of information related to HTTP request and response including cookies, sessions, URL, etc. @@ -2048,9 +1941,9 @@ We have seen a basic application which serves HTTP request for the homepage. Rou We will extend our Hello World program to handle more types of HTTP requests. -var express \= require('express'); var app \= express(); // This responds with "Hello World" on the homepage app.get('/', function (req, res) { console.log("Got a GET request for the homepage"); res.send('Hello GET'); }) // This responds a POST request for the homepage app.post('/', function (req, res) { console.log("Got a POST request for the homepage"); res.send('Hello POST'); }) // This responds a DELETE request for the /del\_user page. app.delete('/del\_user', function (req, res) { console.log("Got a DELETE request for /del\_user"); res.send('Hello DELETE'); }) // This responds a GET request for the /list\_user page. app.get('/list\_user', function (req, res) { console.log("Got a GET request for /list\_user"); res.send('Page Listing'); }) // This responds a GET request for abcd, abxcd, ab123cd, and so on app.get('/ab\*cd', function(req, res) { console.log("Got a GET request for /ab\*cd"); res.send('Page Pattern Match'); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - - console.log("Example app listening at http://%s:%s", host, port) }) +var express \= require('express'); var app \= express(); // This responds with "Hello World" on the homepage app.get('/', function (req, res) { console.log("Got a GET request for the homepage"); res.send('Hello GET'); }) // This responds a POST request for the homepage app.post('/', function (req, res) { console.log("Got a POST request for the homepage"); res.send('Hello POST'); }) // This responds a DELETE request for the /del_user page. app.delete('/del_user', function (req, res) { console.log("Got a DELETE request for /del_user"); res.send('Hello DELETE'); }) // This responds a GET request for the /list_user page. app.get('/list_user', function (req, res) { console.log("Got a GET request for /list_user"); res.send('Page Listing'); }) // This responds a GET request for abcd, abxcd, ab123cd, and so on app.get('/ab\*cd', function(req, res) { console.log("Got a GET request for /ab\*cd"); res.send('Page Pattern Match'); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port + +console.log("Example app listening at http://%s:%s", host, port) }) Save the above code in a file named server.js and run it with the following command. @@ -2084,7 +1977,7 @@ app.use(express.static('public')); We will keep a few images in **public/images** sub-directory as follows − -node\_modules +node_modules server.js public/ public/images @@ -2094,7 +1987,7 @@ Let's modify "Hello Word" app to add the functionality to handle static files. var express \= require('express'); var app \= express(); app.use(express.static('public')); app.get('/', function (req, res) { res.send('Hello World'); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - console.log("Example app listening at http://%s:%s", host, port) }) +console.log("Example app listening at http://%s:%s", host, port) }) Save the above code in a file named server.js and run it with the following command. @@ -2106,39 +1999,39 @@ Now open http://127.0.0.1:8081/images/logo.png in any browser and see observe fo ## GET Method -Here is a simple example which passes two values using HTML FORM GET method. We are going to use **process\_get** router inside server.js to handle this input. +Here is a simple example which passes two values using HTML FORM GET method. We are going to use **process_get** router inside server.js to handle this input.
        First Name:
        Last Name:
        Let's save above code in index.htm and modify server.js to handle home page requests as well as the input sent by the HTML form. -var express \= require('express'); var app \= express(); app.use(express.static('public')); app.get('/index.htm', function (req, res) { res.sendFile( \_\_dirname + "/" + "index.htm" ); }) app.get('/process\_get', function (req, res) { // Prepare output in JSON format response \= { first\_name:req.query.first\_name, last\_name:req.query.last\_name }; console.log(response); res.end(JSON.stringify(response)); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - - console.log("Example app listening at http://%s:%s", host, port) }) +var express \= require('express'); var app \= express(); app.use(express.static('public')); app.get('/index.htm', function (req, res) { res.sendFile( \_\_dirname + "/" + "index.htm" ); }) app.get('/process_get', function (req, res) { // Prepare output in JSON format response \= { first_name:req.query.first_name, last_name:req.query.last_name }; console.log(response); res.end(JSON.stringify(response)); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port + +console.log("Example app listening at http://%s:%s", host, port) }) Accessing the HTML document using _http://127.0.0.1:8081/index.htm_ will generate the following form − Now you can enter the First and Last Name and then click submit button to see the result and it should return the following result − -{"first\_name":"John","last\_name":"Paul"} +{"first_name":"John","last_name":"Paul"} ## POST Method -Here is a simple example which passes two values using HTML FORM POST method. We are going to use **process\_get** router inside server.js to handle this input. +Here is a simple example which passes two values using HTML FORM POST method. We are going to use **process_get** router inside server.js to handle this input.
        First Name:
        Last Name:
        Let's save the above code in index.htm and modify server.js to handle home page requests as well as the input sent by the HTML form. -var express \= require('express'); var app \= express(); var bodyParser \= require('body-parser'); // Create application/x-www-form-urlencoded parser var urlencodedParser \= bodyParser.urlencoded({ extended: false }) app.use(express.static('public')); app.get('/index.htm', function (req, res) { res.sendFile( \_\_dirname + "/" + "index.htm" ); }) app.post('/process\_post', urlencodedParser, function (req, res) { // Prepare output in JSON format response \= { first\_name:req.body.first\_name, last\_name:req.body.last\_name }; console.log(response); res.end(JSON.stringify(response)); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - - console.log("Example app listening at http://%s:%s", host, port) }) +var express \= require('express'); var app \= express(); var bodyParser \= require('body-parser'); // Create application/x-www-form-urlencoded parser var urlencodedParser \= bodyParser.urlencoded({ extended: false }) app.use(express.static('public')); app.get('/index.htm', function (req, res) { res.sendFile( \_\_dirname + "/" + "index.htm" ); }) app.post('/process_post', urlencodedParser, function (req, res) { // Prepare output in JSON format response \= { first_name:req.body.first_name, last_name:req.body.last_name }; console.log(response); res.end(JSON.stringify(response)); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port + +console.log("Example app listening at http://%s:%s", host, port) }) Accessing the HTML document using _http://127.0.0.1:8081/index.htm_ will generate the following form − Now you can enter the First and Last Name and then click the submit button to see the following result − -{"first\_name":"John","last\_name":"Paul"} +{"first_name":"John","last_name":"Paul"} ## File Upload @@ -2148,16 +2041,14 @@ The following HTML code creates a file uploader form. This form has method attri Let's save above code in index.htm and modify server.js to handle home page requests as well as file upload. -var express \= require('express'); var app \= express(); var fs \= require("fs"); var bodyParser \= require('body-parser'); var multer \= require('multer'); app.use(express.static('public')); app.use(bodyParser.urlencoded({ extended: false })); app.use(multer({ dest: '/tmp/'})); app.get('/index.htm', function (req, res) { res.sendFile( \_\_dirname + "/" + "index.htm" ); }) app.post('/file\_upload', function (req, res) { console.log(req.files.file.name); console.log(req.files.file.path); console.log(req.files.file.type); var file \= \_\_dirname + "/" + req.files.file.name; fs.readFile( req.files.file.path, function (err, data) { fs.writeFile(file, data, function (err) { if( err ) { console.log( err ); } else { response \= { message:'File uploaded successfully', filename:req.files.file.name }; } console.log( response ); res.end( JSON.stringify( response ) ); }); }); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - - console.log("Example app listening at http://%s:%s", host, port) }) +var express \= require('express'); var app \= express(); var fs \= require("fs"); var bodyParser \= require('body-parser'); var multer \= require('multer'); app.use(express.static('public')); app.use(bodyParser.urlencoded({ extended: false })); app.use(multer({ dest: '/tmp/'})); app.get('/index.htm', function (req, res) { res.sendFile( \_\_dirname + "/" + "index.htm" ); }) app.post('/file_upload', function (req, res) { console.log(req.files.file.name); console.log(req.files.file.path); console.log(req.files.file.type); var file \= \_\_dirname + "/" + req.files.file.name; fs.readFile( req.files.file.path, function (err, data) { fs.writeFile(file, data, function (err) { if( err ) { console.log( err ); } else { response \= { message:'File uploaded successfully', filename:req.files.file.name }; } console.log( response ); res.end( JSON.stringify( response ) ); }); }); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port + +console.log("Example app listening at http://%s:%s", host, port) }) Accessing the HTML document using _http://127.0.0.1:8081/index.htm_ will generate the following form − **File Upload:** -Select a file to upload: - - +Select a file to upload: NOTE: This is just dummy form and would not work, but it must work at your server. @@ -2178,13 +2069,9 @@ A REST Server simply provides access to resources and REST client accesses and m Following four HTTP methods are commonly used in REST based architecture. - **GET** − This is used to provide a read only access to a resource. - - **PUT** − This is used to create a new resource. - - **DELETE** − This is used to remove a resource. - - **POST** − This is used to update a existing resource or create a new resource. - ## RESTful Web Services @@ -2259,7 +2146,7 @@ Let's implement our first RESTful API **listUsers** using the following code in _server.js_ var express \= require('express'); var app \= express(); var fs \= require("fs"); app.get('/listUsers', function (req, res) { fs.readFile( \_\_dirname + "/" + "users.json", 'utf8', function (err, data) { console.log( data ); res.end( data ); }); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - console.log("Example app listening at http://%s:%s", host, port) }) +console.log("Example app listening at http://%s:%s", host, port) }) Now try to access defined API using _URL: http://127.0.0.1:8081/listUsers_ and _HTTP Method : GET_ on local machine using any REST client. This should produce following result − @@ -2278,7 +2165,7 @@ You can accept the same input in the form of JSON using Ajax call but for teachi _server.js_ var express \= require('express'); var app \= express(); var fs \= require("fs"); var user \= { "user4" : { "name" : "mohit", "password" : "password4", "profession" : "teacher", "id": 4 } } app.post('/addUser', function (req, res) { // First read existing users. fs.readFile( \_\_dirname + "/" + "users.json", 'utf8', function (err, data) { data \= JSON.parse( data ); data\["user4"\] \= user\["user4"\]; console.log( data ); res.end( JSON.stringify(data)); }); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - console.log("Example app listening at http://%s:%s", host, port) }) +console.log("Example app listening at http://%s:%s", host, port) }) Now try to access defined API using _URL: http://127.0.0.1:8081/addUser_ and _HTTP Method : POST_ on local machine using any REST client. This should produce following result − @@ -2291,7 +2178,7 @@ Now we will implement an API which will be called using user ID and it will disp _server.js_ var express \= require('express'); var app \= express(); var fs \= require("fs"); app.get('/:id', function (req, res) { // First read existing users. fs.readFile( \_\_dirname + "/" + "users.json", 'utf8', function (err, data) { var users \= JSON.parse( data ); var user \= users\["user" + req.params.id\] console.log( user ); res.end( JSON.stringify(user)); }); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - console.log("Example app listening at http://%s:%s", host, port) }) +console.log("Example app listening at http://%s:%s", host, port) }) Now try to access defined API using _URL: http://127.0.0.1:8081/2_ and _HTTP Method : GET_ on local machine using any REST client. This should produce following result − @@ -2304,7 +2191,7 @@ This API is very similar to addUser API where we receive input data through req. **server.js** var express \= require('express'); var app \= express(); var fs \= require("fs"); var id \= 2; app.delete('/deleteUser', function (req, res) { // First read existing users. fs.readFile( \_\_dirname + "/" + "users.json", 'utf8', function (err, data) { data \= JSON.parse( data ); delete data\["user" + 2\]; console.log( data ); res.end( JSON.stringify(data)); }); }) var server \= app.listen(8081, function () { var host \= server.address().address var port \= server.address().port - console.log("Example app listening at http://%s:%s", host, port) }) +console.log("Example app listening at http://%s:%s", host, port) }) Now try to access defined API using _URL: http://127.0.0.1:8081/deleteUser_ and _HTTP Method : DELETE_ on local machine using any REST client. This should produce following result − @@ -2315,49 +2202,36 @@ Node.js runs in a single-thread mode, but it uses an event-driven paradigm to ha Child processes always have three streams **child.stdin**, **child.stdout**, and **child.stderr** which may be shared with the stdio streams of the parent process. -Node provides **child\_process** module which has the following three major ways to create a child process. +Node provides **child_process** module which has the following three major ways to create a child process. -- **exec** − child\_process.exec method runs a command in a shell/console and buffers the output. - -- **spawn** − child\_process.spawn launches a new process with a given command. - -- **fork** − The child\_process.fork method is a special case of the spawn() to create child processes. - +- **exec** − child_process.exec method runs a command in a shell/console and buffers the output. +- **spawn** − child_process.spawn launches a new process with a given command. +- **fork** − The child_process.fork method is a special case of the spawn() to create child processes. ## The exec() method -child\_process.exec method runs a command in a shell and buffers the output. It has the following signature − +child_process.exec method runs a command in a shell and buffers the output. It has the following signature − -child\_process.exec(command\[, options\], callback) +child_process.exec(command\[, options\], callback) ### Parameters Here is the description of the parameters used − - **command** (String) The command to run, with space-separated arguments - - **options** (Object) may comprise one or more of the following options − - + - **cwd** (String) Current working directory of the child process - - **env** (Object) Environment key-value pairs - - **encoding** (String) (Default: 'utf8') - - **shell** (String) Shell to execute the command with (Default: '/bin/sh' on UNIX, 'cmd.exe' on Windows, The shell should understand the -c switch on UNIX or /s /c on Windows. On Windows, command line parsing should be compatible with cmd.exe.) - - **timeout** (Number) (Default: 0) - - **maxBuffer** (Number) (Default: 200\*1024) - - **killSignal** (String) (Default: 'SIGTERM') - - **uid** (Number) Sets the user identity of the process. - - **gid** (Number) Sets the group identity of the process. - + - **callback** The function gets three arguments **error**, **stdout,** and **stderr** which are called with the output when the process terminates. - The exec() method returns a buffer with a max size and waits for the process to end and tries to return all the buffered data at once. @@ -2371,7 +2245,7 @@ console.log("Child Process " + process.argv\[2\] + " executed." ); **File: master.js** -const fs \= require('fs'); const child\_process \= require('child\_process'); for(var i\=0; i<3; i++) { var workerProcess \= child\_process.exec('node support.js '+i,function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); }); workerProcess.on('exit', function (code) { console.log('Child process exited with exit code '+code); }); } +const fs \= require('fs'); const child_process \= require('child_process'); for(var i\=0; i<3; i++) { var workerProcess \= child_process.exec('node support.js '+i,function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); }); workerProcess.on('exit', function (code) { console.log('Child process exited with exit code '+code); }); } Now run the master.js to see the result − @@ -2392,34 +2266,25 @@ stdout: Child Process 2 executed. ## The spawn() Method -child\_process.spawn method launches a new process with a given command. It has the following signature − +child_process.spawn method launches a new process with a given command. It has the following signature − -child\_process.spawn(command\[, args\]\[, options\]) +child_process.spawn(command\[, args\]\[, options\]) ### Parameters Here is the description of the parameters used − - **command** (String) The command to run - - **args** (Array) List of string arguments - - **options** (Object) may comprise one or more of the following options − - + - **cwd** (String) Current working directory of the child process. - - **env** (Object) Environment key-value pairs. - - **stdio** (Array) String Child's stdio configuration. - - **customFds** (Array) Deprecated File descriptors for the child to use for stdio. - - **detached** (Boolean) The child will be a process group leader. - - **uid** (Number) Sets the user identity of the process. - - **gid** (Number) Sets the group identity of the process. - The spawn() method returns streams (stdout &stderr) and it should be used when the process returns a volume amount of data. spawn() starts receiving the response as soon as the process starts executing. @@ -2433,7 +2298,7 @@ console.log("Child Process " + process.argv\[2\] + " executed." ); **File: master.js** -const fs \= require('fs'); const child\_process \= require('child\_process'); for(var i \= 0; i<3; i++) { var workerProcess \= child\_process.spawn('node', \['support.js', i\]); workerProcess.stdout.on('data', function (data) { console.log('stdout: ' + data); }); workerProcess.stderr.on('data', function (data) { console.log('stderr: ' + data); }); workerProcess.on('close', function (code) { console.log('child process exited with code ' + code); }); } +const fs \= require('fs'); const child_process \= require('child_process'); for(var i \= 0; i<3; i++) { var workerProcess \= child_process.spawn('node', \['support.js', i\]); workerProcess.stdout.on('data', function (data) { console.log('stdout: ' + data); }); workerProcess.stderr.on('data', function (data) { console.log('stderr: ' + data); }); workerProcess.on('close', function (code) { console.log('child process exited with code ' + code); }); } Now run the master.js to see the result − @@ -2453,34 +2318,25 @@ child process exited with code 0 ## The fork() Method -child\_process.fork method is a special case of spawn() to create Node processes. It has the following signature − +child_process.fork method is a special case of spawn() to create Node processes. It has the following signature − -child\_process.fork(modulePath\[, args\]\[, options\]) +child_process.fork(modulePath\[, args\]\[, options\]) ### Parameters Here is the description of the parameters used − - **modulePath** (String) The module to run in the child. - - **args** (Array) List of string arguments - - **options** (Object) may comprise one or more of the following options − - + - **cwd** (String) Current working directory of the child process. - - **env** (Object) Environment key-value pairs. - - **execPath** (String) Executable used to create the child process. - - **execArgv** (Array) List of string arguments passed to the executable (Default: process.execArgv). - - **silent** (Boolean) If true, stdin, stdout, and stderr of the child will be piped to the parent, otherwise they will be inherited from the parent, see the "pipe" and "inherit" options for spawn()'s stdio for more details (default is false). - - **uid** (Number) Sets the user identity of the process. - - **gid** (Number) Sets the group identity of the process. - The fork method returns an object with a built-in communication channel in addition to having all the methods in a normal ChildProcess instance. @@ -2494,7 +2350,7 @@ console.log("Child Process " + process.argv\[2\] + " executed." ); **File: master.js** -const fs \= require('fs'); const child\_process \= require('child\_process'); for(var i\=0; i<3; i++) { var worker\_process \= child\_process.fork("support.js", \[i\]); worker\_process.on('close', function (code) { console.log('child process exited with code ' + code); }); } +const fs \= require('fs'); const child_process \= require('child_process'); for(var i\=0; i<3; i++) { var worker_process \= child_process.fork("support.js", \[i\]); worker_process.on('close', function (code) { console.log('child process exited with code ' + code); }); } Now run the master.js to see the result − @@ -2525,10 +2381,10 @@ $ wget https://s3.amazonaws.com/nodejx/jx\_rh64.zip ### Step 2 -Unpack the downloaded file **jx\_rh64.zip**and copy the jx binary into /usr/bin or may be in any other directory based on your system setup. +Unpack the downloaded file **jx_rh64.zip**and copy the jx binary into /usr/bin or may be in any other directory based on your system setup. -$ unzip jx\_rh64.zip -$ cp jx\_rh64/jx /usr/bin +$ unzip jx_rh64.zip +$ cp jx_rh64/jx /usr/bin ### Step 3 @@ -2547,12 +2403,12 @@ v0.10.32 Consider you have a project with the following directories where you kept all your files including Node.js, main file, index.js, and all the modules installed locally. -drwxr-xr-x 2 root root 4096 Nov 13 12:42 images --rwxr-xr-x 1 root root 30457 Mar 6 12:19 index.htm --rwxr-xr-x 1 root root 30452 Mar 1 12:54 index.js -drwxr-xr-x 23 root root 4096 Jan 15 03:48 node\_modules -drwxr-xr-x 2 root root 4096 Mar 21 06:10 scripts -drwxr-xr-x 2 root root 4096 Feb 15 11:56 style +drwxr-xr-x 2 root root 4096 Nov 13 12:42 images +-rwxr-xr-x 1 root root 30457 Mar 6 12:19 index.htm +-rwxr-xr-x 1 root root 30452 Mar 1 12:54 index.js +drwxr-xr-x 23 root root 4096 Jan 15 03:48 node_modules +drwxr-xr-x 2 root root 4096 Mar 21 06:10 scripts +drwxr-xr-x 2 root root 4096 Feb 15 11:56 style To package the above project, you simply need to go inside this directory and issue the following jx command. Assuming index.js is the entry file for your Node.js project − @@ -2561,18 +2417,16 @@ $ jx package index.js index Here you could have used any other package name instead of **index.** We have used **index** because we wanted to keep our main file name as index.jx. However, the above command will pack everything and will create the following two files − - **index.jxp** This is an intermediate file which contains the complete project detail needed to compile the project. - - **index.jx** This is the binary file having the complete package that is ready to be shipped to your client or to your production environment. - ## Launching JX File Consider your original Node.js project was running as follows − -$ node index.js command\_line\_arguments +$ node index.js command_line_arguments After compiling your package using JXcore, it can be started as follows − -$ jx index.jx command\_line\_arguments +$ jx index.jx command_line_arguments To know more on JXcore, you can check its official website. diff --git a/notes/BGOONZ_BLOG_2.0.wiki/old-version-of-index.md.md b/notes/BGOONZ_BLOG_2.0.wiki/old-version-of-index.md.md index 6c1e066c0e..c5b8ed794e 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/old-version-of-index.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/old-version-of-index.md.md @@ -1,307 +1,307 @@ --- title: Web Dev Hub Home sections: - - section_id: Intro - type: section_hero - title: 'I am a musician, electrical engineer & web developer' - image: images/cool annimation.gif - content: "###### **A passionate student of web development from New Jersey U.S.A**\n\n[](https://www.vagrantup.com/)[![](https://img.icons8.com/color/96/000000/gmail.png)](mailto:bryan.guner@gmail.com)[![](https://img.icons8.com/color/96/000000/youtube.png)](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos)[![](https://img.icons8.com/color/96/000000/instagram-new.png)](https://www.instagram.com/bgoonz/?hl=en)[![](https://img.icons8.com/color/96/000000/pinterest--v1.png)](https://www.pinterest.com/bryanguner/\\_saved/)[![](https://img.icons8.com/color/96/000000/linkedin.png)](https://www.linkedin.com/in/bryan-guner-046199128/)\_[![](https://img.icons8.com/color/96/000000/medium-logo.png)](https://bryanguner.medium.com/)\n\n[](https://webpack.js.org/)[\_](https://www.adobe.com/products/xd.html)\n" - actions: - - label: Contact - url: 'https://sidebar-blog.netlify.app/contact/' - style: secondary - icon_class: linkedin - new_window: true - no_follow: false - type: action - - section_id: features - type: section_grid - col_number: three - grid_items: - - content: > - Memoization, Tabulation, and Sorting Algorithms by Example + - section_id: Intro + type: section_hero + title: 'I am a musician, electrical engineer & web developer' + image: images/cool annimation.gif + content: "###### **A passionate student of web development from New Jersey U.S.A**\n\n[](https://www.vagrantup.com/)[![](https://img.icons8.com/color/96/000000/gmail.png)](mailto:bryan.guner@gmail.com)[![](https://img.icons8.com/color/96/000000/youtube.png)](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos)[![](https://img.icons8.com/color/96/000000/instagram-new.png)](https://www.instagram.com/bgoonz/?hl=en)[![](https://img.icons8.com/color/96/000000/pinterest--v1.png)](https://www.pinterest.com/bryanguner/\\_saved/)[![](https://img.icons8.com/color/96/000000/linkedin.png)](https://www.linkedin.com/in/bryan-guner-046199128/)\_[![](https://img.icons8.com/color/96/000000/medium-logo.png)](https://bryanguner.medium.com/)\n\n[](https://webpack.js.org/)[\_](https://www.adobe.com/products/xd.html)\n" + actions: + - label: Contact + url: 'https://sidebar-blog.netlify.app/contact/' + style: secondary + icon_class: linkedin + new_window: true + no_follow: false + type: action + - section_id: features + type: section_grid + col_number: three + grid_items: + - content: > + Memoization, Tabulation, and Sorting Algorithms by Example - Why is looking at runtime not a reliable method of calculating time - complexity? - actions: - - label: Get Started - url: /docs - style: link - title: A Quick Guide To Big O - image: images/my-back.png - title_url: >- - https://medium.com/star-gazers/a-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522 - - content: > - *Python has a built in help function that let’s you see a description - of the source code without having to navigate to it… “-SickNasty … - Autor Unknown” .* - actions: - - label: View Posts - url: >- - https://levelup.gitconnected.com/python-study-guide-for-a-native-javascript-developer-5cfdf3d2bdfb - style: link - image_alt: python - title: Python Guide - title_url: >- - https://levelup.gitconnected.com/python-study-guide-for-a-native-javascript-developer-5cfdf3d2bdfb - image: images/smiling-maple.png - - content: > - This section exists for me to day dream ideas for the future... and - maybe... just maybe, hold myself accountable to them. - actions: - - label: Learn More - url: /docs/tools + Why is looking at runtime not a reliable method of calculating time + complexity? + actions: + - label: Get Started + url: /docs + style: link + title: A Quick Guide To Big O + image: images/my-back.png + title_url: >- + https://medium.com/star-gazers/a-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522 + - content: > + *Python has a built in help function that let’s you see a description + of the source code without having to navigate to it… “-SickNasty … + Autor Unknown” .* + actions: + - label: View Posts + url: >- + https://levelup.gitconnected.com/python-study-guide-for-a-native-javascript-developer-5cfdf3d2bdfb + style: link + image_alt: python + title: Python Guide + title_url: >- + https://levelup.gitconnected.com/python-study-guide-for-a-native-javascript-developer-5cfdf3d2bdfb + image: images/smiling-maple.png + - content: > + This section exists for me to day dream ideas for the future... and + maybe... just maybe, hold myself accountable to them. + actions: + - label: Learn More + url: /docs/tools + style: link + title: Guitar Effects Triggering w DTW + title_url: 'https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering' + image: images/panoramic-owl.png + - title_url: 'https://bryanguner.medium.com/introductory-react-part-2-cda01615a186' + image_alt: img of dtw + content: > + As I learn to build web applications in React I will blog about it in + this series in an attempt to capture the questions that a complete + beginner might encounter that a more seasoned developer would take for + granted! + actions: [] + type: grid_item + title: Beginner Guide React + image: images/successful-panda.gif + - title_url: 'https://dev.to/bgoonz/scope-and-context-in-javascript-5cma' + image_alt: img of react + content: "Scope & Context in JS\n\nThe\_**scope**\_of a program in JavaScript is the set of variables that are available for use within the program. \n" + actions: [] + type: grid_item + image: images/pleasant-birch.png + title: Scope & Closure + - image_alt: Every idea needs a medium + content: > + PostgreSQL Cheat Sheet, Everything You Need to Get Started With VSCode + + Extensions & Resources, Super Simple Intro To HTML, Understanding + Git... etc.... + actions: [] + type: grid_item + title: My Medium Blog + image: images/curious-mustard.png + title_url: >- + https://bryanguner.medium.com/a-list-of-all-of-my-articles-to-link-to-future-posts-1f6f88ebdf5b + - section_id: Web Audio DAW + image_alt: medium + image_position: left + actions: + - label: Go To Web Audio Daw + url: 'https://mihirbegmusiclab.netlify.app/' + style: primary + icon_class: dev + new_window: true + no_follow: false + type: action + type: section_content + image: images/goals.jpg + title: Web Audio DAW + - title: Music + section_id: guitar + image_alt: bryan-guner + image_position: left + content: >- + + actions: + - label: Youtube + url: 'https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA' style: link - title: Guitar Effects Triggering w DTW - title_url: 'https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering' - image: images/panoramic-owl.png - - title_url: 'https://bryanguner.medium.com/introductory-react-part-2-cda01615a186' - image_alt: img of dtw - content: > - As I learn to build web applications in React I will blog about it in - this series in an attempt to capture the questions that a complete - beginner might encounter that a more seasoned developer would take for - granted! - actions: [] - type: grid_item - title: Beginner Guide React - image: images/successful-panda.gif - - title_url: 'https://dev.to/bgoonz/scope-and-context-in-javascript-5cma' - image_alt: img of react - content: "Scope & Context in JS\n\nThe\_**scope**\_of a program in JavaScript is the set of variables that are available for use within the program. \n" - actions: [] - type: grid_item - image: images/pleasant-birch.png - title: Scope & Closure - - image_alt: Every idea needs a medium - content: > - PostgreSQL Cheat Sheet, Everything You Need to Get Started With VSCode - + Extensions & Resources, Super Simple Intro To HTML, Understanding - Git... etc.... - actions: [] - type: grid_item - title: My Medium Blog - image: images/curious-mustard.png - title_url: >- - https://bryanguner.medium.com/a-list-of-all-of-my-articles-to-link-to-future-posts-1f6f88ebdf5b - - section_id: Web Audio DAW - image_alt: medium - image_position: left - actions: - - label: Go To Web Audio Daw - url: 'https://mihirbegmusiclab.netlify.app/' - style: primary - icon_class: dev - new_window: true - no_follow: false - type: action - type: section_content - image: images/goals.jpg - title: Web Audio DAW - - title: Music - section_id: guitar - image_alt: bryan-guner - image_position: left - content: >- - - actions: - - label: Youtube - url: 'https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA' - style: link - icon_class: youtube - new_window: true - no_follow: false - type: action - type: section_content - - section_id: Music - image_alt: listen to my playlist - image_position: left - content: > - - actions: [] - type: section_content - title: Spotify - - title: Current Interests - section_id: interests - subtitle: From github repositories to existential questions. - col_number: three - grid_items: - - title: Angolia - title_url: angolia - image_alt: angolia - content: | - ## Full Text Search + icon_class: youtube + new_window: true + no_follow: false + type: action + type: section_content + - section_id: Music + image_alt: listen to my playlist + image_position: left + content: > + + actions: [] + type: section_content + title: Spotify + - title: Current Interests + section_id: interests + subtitle: From github repositories to existential questions. + col_number: three + grid_items: + - title: Angolia + title_url: angolia + image_alt: angolia + content: | + ## Full Text Search - [Full Text Search](https://www.algolia.com/) + [Full Text Search](https://www.algolia.com/) - ## - actions: [] - type: grid_item - image: images/spectacular-turmeric.png - - title: Convolutional Neural Networks - title_url: neural networks - image_alt: neural networks - content: >+ - Artificial neural networks, usually simply called neural networks, are - computing systems vaguely inspired by the biological [neural - networks](https://github.com/tensorflow/tensorflow)![](/\_static/app-assets/neural.PNG) + ## + actions: [] + type: grid_item + image: images/spectacular-turmeric.png + - title: Convolutional Neural Networks + title_url: neural networks + image_alt: neural networks + content: >+ + Artificial neural networks, usually simply called neural networks, are + computing systems vaguely inspired by the biological [neural + networks](https://github.com/tensorflow/tensorflow)![](/\_static/app-assets/neural.PNG) - actions: [] - type: grid_item - image: images/neural.PNG - - title: Jamstack - title_url: jamstack - image_alt: jamstack - content: > - ## Why Jamstack + actions: [] + type: grid_item + image: images/neural.PNG + - title: Jamstack + title_url: jamstack + image_alt: jamstack + content: > + ## Why Jamstack - *Jamstack is the new standard architecture for the web. Using Git - workflows and modern build tools, pre-rendered content is served to a - CDN and made dynamic through APIs and serverless functions. - Technologies in the stack include JavaScript frameworks, Static Site - Generators, Headless CMSs, and CDNs.* - actions: [] - type: grid_item - image: images/jamstack.png - type: section_grid - - title: Code Playground(s) - section_id: code-playground - image_alt: lorem-ipsum - image_position: left - content: |- - - actions: [] - type: section_content - - section_id: features-two-col - type: section_grid - title: Resume & Portfolio - col_number: two - grid_items: - - title: Resume - actions: - - label: Learn More - url: 'https://1drv.ms/b/s!AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A' - style: link - - label: Download PDF - url: '#' - style: link + *Jamstack is the new standard architecture for the web. Using Git + workflows and modern build tools, pre-rendered content is served to a + CDN and made dynamic through APIs and serverless functions. + Technologies in the stack include JavaScript frameworks, Static Site + Generators, Headless CMSs, and CDNs.* + actions: [] + type: grid_item + image: images/jamstack.png + type: section_grid + - title: Code Playground(s) + section_id: code-playground + image_alt: lorem-ipsum + image_position: left + content: |- + + actions: [] + type: section_content + - section_id: features-two-col + type: section_grid + title: Resume & Portfolio + col_number: two + grid_items: + - title: Resume + actions: + - label: Learn More + url: 'https://1drv.ms/b/s!AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A' + style: link + - label: Download PDF + url: '#' + style: link + icon_class: dev + new_window: false + no_follow: false + type: action + image: images/resume.JPG + title_url: >- + https://github.com/bgoonz/resume-cv-portfolio-samples/raw/master/2021-resume/bryan-guner-resume-2021.pdf + - title: Showcase + content: | + ![](/\_static/app-assets/lambda-demo1.gif)My Projects! + actions: + - label: Learn More + url: /showcase + style: link + image: images/My Post.png + - title: Mini Projects + section_id: Mini Projects + image_alt: lorem-ipsum + image_position: left + content: | + + actions: + - label: Go To Mini Projects Page + url: 'https://iframeshowcase.netlify.app/' + style: primary + icon_class: dev + new_window: true + no_follow: false + type: action + type: section_content + - title: Mini Projects + section_id: lorem-ipsum + image_alt: lorem-ipsum + image_position: left + content: |- + + actions: [] + type: section_content + - title: Blog-Archive + section_id: lorem-ipsum + image_alt: lorem-ipsum + image_position: left + content: |- + + actions: [] + type: section_content + - title: Nextjs & SanityCMS Blog W Comments + section_id: blog + image_alt: blog + image_position: left + content: |- + + actions: [] + type: section_content + - title: Contact + section_id: lorem-ipsum + actions: + - label: Contact + url: /docs/faq/contact + style: primary icon_class: dev new_window: false no_follow: false type: action - image: images/resume.JPG - title_url: >- - https://github.com/bgoonz/resume-cv-portfolio-samples/raw/master/2021-resume/bryan-guner-resume-2021.pdf - - title: Showcase - content: | - ![](/\_static/app-assets/lambda-demo1.gif)My Projects! - actions: - - label: Learn More - url: /showcase - style: link - image: images/My Post.png - - title: Mini Projects - section_id: Mini Projects - image_alt: lorem-ipsum - image_position: left - content: | - - actions: - - label: Go To Mini Projects Page - url: 'https://iframeshowcase.netlify.app/' - style: primary - icon_class: dev - new_window: true - no_follow: false - type: action - type: section_content - - title: Mini Projects - section_id: lorem-ipsum - image_alt: lorem-ipsum - image_position: left - content: |- - - actions: [] - type: section_content - - title: Blog-Archive - section_id: lorem-ipsum - image_alt: lorem-ipsum - image_position: left - content: |- - - actions: [] - type: section_content - - title: Nextjs & SanityCMS Blog W Comments - section_id: blog - image_alt: blog - image_position: left - content: |- - - actions: [] - type: section_content - - title: Contact - section_id: lorem-ipsum - actions: - - label: Contact - url: /docs/faq/contact - style: primary - icon_class: dev - new_window: false - no_follow: false - type: action - type: section_cta + type: section_cta seo: - title: Web-Dev-Hub - description: >- - my resource sharing and blog site ... centered mostly on web development and - just a bit of audio production / generally nerdy things I find interesting. - extra: - - name: 'og:type' - value: website - keyName: property - - name: 'og:title' - value: Web-Dev-Hub - keyName: property - - name: 'og:description' - value: >- - my resource sharing and blog site ... centered mostly on web development - and just a bit of audio production / generally nerdy things I find - interesting. - keyName: property - - name: 'og:image' - value: images/code.png - keyName: property - relativeUrl: true - - name: 'twitter:card' - value: summary_large_image - - name: 'twitter:title' - value: Web-Dev-Hub - - name: 'twitter:description' - value: Web-Dev-Hub - - name: 'twitter:image' - value: images/4.jpg - relativeUrl: true + title: Web-Dev-Hub + description: >- + my resource sharing and blog site ... centered mostly on web development and + just a bit of audio production / generally nerdy things I find interesting. + extra: + - name: 'og:type' + value: website + keyName: property + - name: 'og:title' + value: Web-Dev-Hub + keyName: property + - name: 'og:description' + value: >- + my resource sharing and blog site ... centered mostly on web development + and just a bit of audio production / generally nerdy things I find + interesting. + keyName: property + - name: 'og:image' + value: images/code.png + keyName: property + relativeUrl: true + - name: 'twitter:card' + value: summary_large_image + - name: 'twitter:title' + value: Web-Dev-Hub + - name: 'twitter:description' + value: Web-Dev-Hub + - name: 'twitter:image' + value: images/4.jpg + relativeUrl: true template: advanced --- diff --git a/notes/BGOONZ_BLOG_2.0.wiki/optimize-vscode.md.md b/notes/BGOONZ_BLOG_2.0.wiki/optimize-vscode.md.md index 953bb4a569..2f5e988e9e 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/optimize-vscode.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/optimize-vscode.md.md @@ -1,10 +1,11 @@ - # VS Code Performance – How to Optimize Visual Studio Code and Choose the "Best" Extensions > ## Excerpt -> Visual Studio Code (VS Code) is designed to be lightweight. It has a tight set of core features, and you can add extra features through extensions. But performance will inevitably be affected as your collection of extensions grows. Do you evaluate the performance of an extension before installing it? What +> +> Visual Studio Code (VS Code) is designed to be lightweight. It has a tight set of core features, and you can add extra features through extensions. But performance will inevitably be affected as your collection of extensions grows. Do you evaluate the performance of an extension before installing it? What --- + Visual Studio Code (VS Code) is designed to be lightweight. It has a tight set of core features, and you can add extra features through extensions. But performance will inevitably be affected as your collection of extensions grows. @@ -68,44 +69,42 @@ Most lists of extensions talk about the cool features, and little else. If somet Some of the criteria that I suggest involves looking at source code. Don't be put off by that. To gather the key facts only takes a couple of minutes. I will show you how! 1. **Is the feature I need available in VS Code already?** - + I demonstrated that you don't need many popular extensions in an article ["VS Code: you don't need that extension"](https://roboleary.net/vscode/2020/08/05/dont-need-extensions.html). You can consult the [VS Code docs](https://code.visualstudio.com/Docs) to check on a particular feature. - + 2. **Does the extension have the features I need?** - + Consult the extension page on Visual Studio Marketplace to find this out. - + 3. **When is an extension loaded and active?** - + I'll discuss this in detail in the section [Activation Events](https://www.freecodecamp.org/news/optimize-vscode-performance-best-extensions/#activation-events). You need to check the _package.json_ of the source code to find this out in advance. - + You can run the **Developer: Startup Performance** command to see the Activation Events of installed extensions. I discuss this further in the section [How to audit performance.](https://www.freecodecamp.org/news/optimize-vscode-performance-best-extensions/#how-to-audit-performance) - + 4. **Are resources optimized?** - + You need to check the source code to see if it uses a bundler. You can check the _package.json_ to see if the _scripts_ section has a pre-build step for bundling. - + The VSIX extension file is a compressed archive of files for the code and the listing in the marketplace. Developers often include unnecessary files. There is a _.vscodeignore_ file to exclude files. - + The number of files that the VSIX contains has an impact on the cold activation time. The cold activation time is the first run of the extension after you install it. It tends to be slower than other times. I guess this is because the VSIX is uncompressed and cached. - + This is what the [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur) extension looks like when you open it in [7Zip](https://www.7-zip.org/). - ![vetur VSIX opened in 7zip](https://www.freecodecamp.org/news/content/images/2020/10/vetur-7zip.png) 5. **Have there been any performance issues reported recently, which are unresolved?** - + You can uncover these by auditing the performance of the extension. You need to check the issues on the Git repo also. - + 6. **Does the code have tests?** - + The extension is going to be more susceptible to bugs without tests. You need to check the source code to see if there are tests. - + 7. **Is it actively maintained?** - + The _Project Details_ section of the extension page gives an overview of the activity of the public Git repo. In some cases, an extension may be "done", so maintenance is not an important consideration. - ![Marktetplace Page Project Details](https://www.freecodecamp.org/news/content/images/2020/10/marketplace-maintenance.png) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/possibly-useful-snippets.md.md b/notes/BGOONZ_BLOG_2.0.wiki/possibly-useful-snippets.md.md index ac99c40836..2297c7e704 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/possibly-useful-snippets.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/possibly-useful-snippets.md.md @@ -1,63 +1,51 @@ - - - ## Puppeteer: ```js const puppeteer = require('puppeteer'); (async () => { - const browser = await puppeteer.launch(); - const page = await browser.newPage(); - await page.emulate(puppeteer.devices['iPhone 6']); - await page.goto('https://www.nytimes.com/'); - await page.screenshot({ path: 'full.png', fullPage: true }); - await browser.close(); + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + await page.emulate(puppeteer.devices['iPhone 6']); + await page.goto('https://www.nytimes.com/'); + await page.screenshot({ path: 'full.png', fullPage: true }); + await browser.close(); })(); - ``` - - - --- - # Dark Mode: ```js - import { useState, useEffect } from 'react'; export const useLocalStorage = (key, initialValue) => { - const [storedValue, setStoredValue] = useState(() => { - const value = localStorage.getItem(key); - return value ? JSON.parse(value) : initialValue; - }); + const [storedValue, setStoredValue] = useState(() => { + const value = localStorage.getItem(key); + return value ? JSON.parse(value) : initialValue; + }); - const setValue = value => { - setStoredValue(value); - localStorage.setItem(key, JSON.stringify(value)); - } + const setValue = (value) => { + setStoredValue(value); + localStorage.setItem(key, JSON.stringify(value)); + }; - return [storedValue, setValue]; -} + return [storedValue, setValue]; +}; export const useDarkMode = () => { - const [isDark, setIsdark] = useLocalStorage('dark', false); + const [isDark, setIsdark] = useLocalStorage('dark', false); - const toggleDark = () => { - document.body.classList.toggle('dark-mode') - setIsdark(!isDark); - } + const toggleDark = () => { + document.body.classList.toggle('dark-mode'); + setIsdark(!isDark); + }; - useEffect(() => { - isDark - ? document.body.classList.add('dark-mode') - : document.body.classList.remove('dark-mode'); - }, [isDark]) + useEffect(() => { + isDark ? document.body.classList.add('dark-mode') : document.body.classList.remove('dark-mode'); + }, [isDark]); - return [isDark, toggleDark]; -} - -``` \ No newline at end of file + return [isDark, toggleDark]; +}; +``` diff --git a/notes/BGOONZ_BLOG_2.0.wiki/privacy-policy.md.md b/notes/BGOONZ_BLOG_2.0.wiki/privacy-policy.md.md index f1e454fb38..ea776b0498 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/privacy-policy.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/privacy-policy.md.md @@ -1,52 +1,46 @@ -Privacy Policy -============== +# Privacy Policy Last updated: October 20, 2021 This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You. -We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the [Privacy Policy Generator](https://www.termsfeed.com/privacy-policy-generator/). +We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the [Privacy Policy Generator](https://www.termsfeed.com/privacy-policy-generator/). -Interpretation and Definitions -============================== +# Interpretation and Definitions -Interpretation --------------- +## Interpretation The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. -Definitions ------------ +## Definitions For the purposes of this Privacy Policy: -- **Account** means a unique account created for You to access our Service or parts of our Service. +- **Account** means a unique account created for You to access our Service or parts of our Service. -- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to WebDevHub. +- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to WebDevHub. -- **Cookies** are small files that are placed on Your computer, mobile device or any other device by a website, containing the details of Your browsing history on that website among its many uses. +- **Cookies** are small files that are placed on Your computer, mobile device or any other device by a website, containing the details of Your browsing history on that website among its many uses. -- **Country** refers to: New Jersey, United States +- **Country** refers to: New Jersey, United States -- **Device** means any device that can access the Service such as a computer, a cellphone or a digital tablet. +- **Device** means any device that can access the Service such as a computer, a cellphone or a digital tablet. -- **Personal Data** is any information that relates to an identified or identifiable individual. +- **Personal Data** is any information that relates to an identified or identifiable individual. -- **Service** refers to the Website. +- **Service** refers to the Website. -- **Service Provider** means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used. +- **Service Provider** means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used. -- **Usage Data** refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit). +- **Usage Data** refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit). -- **Website** refers to WebDevHub, accessible from  +- **Website** refers to WebDevHub, accessible from -- **You** means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. +- **You** means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. -Collecting and Using Your Personal Data -======================================= +# Collecting and Using Your Personal Data -Types of Data Collected ------------------------ +## Types of Data Collected ### Personal Data @@ -72,11 +66,11 @@ We may also collect information that Your browser sends whenever You visit our S We use Cookies and similar tracking technologies to track the activity on Our Service and store certain information. Tracking technologies used are beacons, tags, and scripts to collect and track information and to improve and analyze Our Service. The technologies We use may include: -- **Cookies or Browser Cookies.** A cookie is a small file placed on Your Device. You can instruct Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do not accept Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your browser setting so that it will refuse Cookies, our Service may use Cookies. -- **Flash Cookies.** Certain features of our Service may use local stored objects (or Flash Cookies) to collect and store information about Your preferences or Your activity on our Service. Flash Cookies are not managed by the same browser settings as those used for Browser Cookies. For more information on how You can delete Flash Cookies, please read "Where can I change the settings for disabling, or deleting local shared objects?" available at  -- **Web Beacons.** Certain sections of our Service and our emails may contain small electronic files known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit the Company, for example, to count users who have visited those pages or opened an email and for other related website statistics (for example, recording the popularity of a certain section and verifying system and server integrity). +- **Cookies or Browser Cookies.** A cookie is a small file placed on Your Device. You can instruct Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do not accept Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your browser setting so that it will refuse Cookies, our Service may use Cookies. +- **Flash Cookies.** Certain features of our Service may use local stored objects (or Flash Cookies) to collect and store information about Your preferences or Your activity on our Service. Flash Cookies are not managed by the same browser settings as those used for Browser Cookies. For more information on how You can delete Flash Cookies, please read "Where can I change the settings for disabling, or deleting local shared objects?" available at +- **Web Beacons.** Certain sections of our Service and our emails may contain small electronic files known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit the Company, for example, to count users who have visited those pages or opened an email and for other related website statistics (for example, recording the popularity of a certain section and verifying system and server integrity). -Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web browser. You can learn more about cookies here: [Cookies by TermsFeed Generator](https://www.termsfeed.com/privacy-policy-generator/#faq-8). +Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web browser. You can learn more about cookies here: [Cookies by TermsFeed Generator](https://www.termsfeed.com/privacy-policy-generator/#faq-8). We use both Session and Persistent Cookies for the purposes set out below: @@ -106,45 +100,42 @@ We use both Session and Persistent Cookies for the purposes set out below: For more information about the cookies we use and your choices regarding cookies, please visit our Cookies Policy or the Cookies section of our Privacy Policy. -Use of Your Personal Data -------------------------- +## Use of Your Personal Data The Company may use Personal Data for the following purposes: - **To provide and maintain our Service**, including to monitor the usage of our Service. -- **To manage Your Account:** to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user. +- **To manage Your Account:** to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user. -- **For the performance of a contract:** the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service. +- **For the performance of a contract:** the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service. -- **To contact You:** To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation. +- **To contact You:** To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation. -- **To provide You** with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information. +- **To provide You** with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information. -- **To manage Your requests:** To attend and manage Your requests to Us. +- **To manage Your requests:** To attend and manage Your requests to Us. -- **For business transfers:** We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred. +- **For business transfers:** We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred. - **For other purposes**: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience. We may share Your personal information in the following situations: -- **With Service Providers:** We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You. -- **For business transfers:** We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company. -- **With Affiliates:** We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us. -- **With business partners:** We may share Your information with Our business partners to offer You certain products, services or promotions. -- **With other users:** when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside. +- **With Service Providers:** We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You. +- **For business transfers:** We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company. +- **With Affiliates:** We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us. +- **With business partners:** We may share Your information with Our business partners to offer You certain products, services or promotions. +- **With other users:** when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside. - **With Your consent**: We may disclose Your personal information for any other purpose with Your consent. -Retention of Your Personal Data -------------------------------- +## Retention of Your Personal Data The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies. The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods. -Transfer of Your Personal Data ------------------------------- +## Transfer of Your Personal Data Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to --- and maintained on --- computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction. @@ -152,8 +143,7 @@ Your consent to this Privacy Policy followed by Your submission of such informat The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information. -Disclosure of Your Personal Data --------------------------------- +## Disclosure of Your Personal Data ### Business Transactions @@ -173,27 +163,23 @@ The Company may disclose Your Personal Data in the good faith belief that such a - Protect the personal safety of Users of the Service or the public - Protect against legal liability -Security of Your Personal Data ------------------------------- +## Security of Your Personal Data The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security. -Children's Privacy -================== +# Children's Privacy Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers. If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information. -Links to Other Websites -======================= +# Links to Other Websites Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit. We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services. -Changes to this Privacy Policy -============================== +# Changes to this Privacy Policy We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page. @@ -201,9 +187,8 @@ We will let You know via email and/or a prominent notice on Our Service, prior t You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page. -Contact Us -========== +# Contact Us If you have any questions about this Privacy Policy, You can contact us: -- By email: bryan.guner.dev@gmail.com \ No newline at end of file +- By email: bryan.guner.dev@gmail.com diff --git a/notes/BGOONZ_BLOG_2.0.wiki/random-stuff.md.md b/notes/BGOONZ_BLOG_2.0.wiki/random-stuff.md.md index d134853f1d..1e81446d41 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/random-stuff.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/random-stuff.md.md @@ -1,17 +1,9 @@ https://app.stackbit.com/studio/609b2d7c71a5dd0016f36326?previewToken=9eb306c2-4cbd-475e-b37f-21e2876c6752 - - Netlify-acess-token: crR4Wt8UZ1G59pwyU51Ez_L4G_v7rRbEUobEoVgbQiI - - - - - old package.json: - ``` { "name": "bgoonzblog", @@ -55,4 +47,4 @@ old package.json: "sprintf-js": "1.1.2" } } -``` \ No newline at end of file +``` diff --git a/notes/BGOONZ_BLOG_2.0.wiki/random.md.md b/notes/BGOONZ_BLOG_2.0.wiki/random.md.md index d4fd8e6515..0ce6905413 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/random.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/random.md.md @@ -1,17 +1,14 @@ www.algolia.com/interface-demos/2e4a0ba7-4fc8-4ed3-ab24-9b3d53e9b894 +- [jsanimate](https://jsanimate-gnj46.ondigitalocean.app/) -- [jsanimate](https://jsanimate-gnj46.ondigitalocean.app/) - - - - ## Excerpt +> > In this guide, walk through file processing in Node.js, from handling files and editing metadata to working with links and directories. --- + As a Node.js developer, there’s a good chance that at some point you’ve imported the `fs` module and written some code that’s interacted with the file system. What you might not know is that the `fs` module is a fully-featured, standards-based, cross-platform module that exposes not one, but three APIs that cater to synchronous and asynchronous programming styles. @@ -99,7 +100,7 @@ All of the functions available in the `FileHandle` class are also available as t Reading a file seems like such a simple task. However, there are several different options that can be specified depending on what you need to do with a file: - const data \= await fsPromises.readFile(path); const noData \= await fsPromises.readFile(path, { flag: 'w'}); const base64data \= await fsPromises.readFile(path, { encoding: 'base64' }); const controller \= new AbortController(); const { signal } \= controller; const promise \= fsPromises.readFile(path, { signal: signal }); console.log(\`started reading file at ${path}\`); controller.abort(); console.log('read operation aborted before it could be completed') await promise; +const data \= await fsPromises.readFile(path); const noData \= await fsPromises.readFile(path, { flag: 'w'}); const base64data \= await fsPromises.readFile(path, { encoding: 'base64' }); const controller \= new AbortController(); const { signal } \= controller; const promise \= fsPromises.readFile(path, { signal: signal }); console.log(\`started reading file at ${path}\`); controller.abort(); console.log('read operation aborted before it could be completed') await promise; Example 1 is as simple as it gets, if all you want to do is get the contents of a file. @@ -113,7 +114,7 @@ Example 4 demonstrates how to interrupt a file read operation and abort it. This The `copyFile` function can make a copy of a file and give you some control over what happens if the destination file exists already: - await fsPromises.copyFile('source.txt', 'dest.txt'); await fsPromises.copyFile('source.txt', 'dest.txt', fs.constants.COPYFILE\_EXCL); +await fsPromises.copyFile('source.txt', 'dest.txt'); await fsPromises.copyFile('source.txt', 'dest.txt', fs.constants.COPYFILE_EXCL); Example 1 will overwrite `dest.txt` if it exists already. In example 2, we pass in the `COPYFILE_EXCL` flag to override the default behavior and fail if `dest.txt` exists already. @@ -127,7 +128,7 @@ There are three ways to write to a file: Each of these functions helps to implement different use cases. - await fsPromises.appendFile('data.txt', '67890'); await fsPromises.appendFile('data2.txt', '123'); await fsPromises.writeFile('data3.txt', '67890'); await fsPromises.writeFile('data4.txt', '12345'); await fsPromises.truncate('data5.txt', 5); +await fsPromises.appendFile('data.txt', '67890'); await fsPromises.appendFile('data2.txt', '123'); await fsPromises.writeFile('data3.txt', '67890'); await fsPromises.writeFile('data4.txt', '12345'); await fsPromises.truncate('data5.txt', 5); Examples 1 and 2 demonstrate how to use the `appendFile` function to append data to existing or new files. If a file doesn’t exist, `appendFile` will create it first. @@ -139,7 +140,7 @@ Example 5 demonstrates how to use the `truncate` function to trim the contents o The promise API provides a single, performant `watch` function that can watch a file for changes. -const abortController \= new AbortController(); const { signal } \= abortController; setTimeout(() \=> abortController.abort(), 3000); const watchEventAsyncIterator \= fsPromises.watch(path, { signal }); setTimeout(() \=> { fs.writeFileSync(path, 'new data'); console.log(\`modified ${path}\`); }, 1000); for await (const event of watchEventAsyncIterator) { console.log(\`'${event.eventType}' watch event was raised for ${event.filename}\`); } +const abortController \= new AbortController(); const { signal } \= abortController; setTimeout(() \=> abortController.abort(), 3000); const watchEventAsyncIterator \= fsPromises.watch(path, { signal }); setTimeout(() \=> { fs.writeFileSync(path, 'new data'); console.log(\`modified ${path}\`); }, 1000); for await (const event of watchEventAsyncIterator) { console.log(\`'${event.eventType}' watch event was raised for ${event.filename}\`); } The `watch` function can watch a file for changes indefinitely. Each time a change is observed, a watch event is raised. The `watch` function returns an async iterable, which is essentially a way for the function to return an unbounded series of promises. On line 12, we take advantage of the `for await … of` syntactic sugar to wait for and iterate each watch event as it is received. @@ -153,7 +154,7 @@ So far, we have focused on reading and modifying the contents of a file, but you The `stat` function is used to retrieve file metadata, or “statistics” like file size, permissions, and ownership. - const fileStats \= await fsPromises.stat('file1.txt'); console.log(fileStats) console.log(\`size of file1.txt is ${fileStats.size}\`); +const fileStats \= await fsPromises.stat('file1.txt'); console.log(fileStats) console.log(\`size of file1.txt is ${fileStats.size}\`); This example demonstrates the full list of metadata that can be retrieved for a file or directory. @@ -165,7 +166,7 @@ const newAccessTime \= new Date(2020,0,1); const newModificationTime \= new Date The `realpath` function is useful for resolving relative paths and symbolic links to full paths: - const realPath \= await fsPromises.realpath('./test1.txt'); console.log(realPath); const symLinkRealPath \= await fsPromises.realpath('./symlink1'); console.log(symLinkRealPath); +const realPath \= await fsPromises.realpath('./test1.txt'); console.log(realPath); const symLinkRealPath \= await fsPromises.realpath('./symlink1'); console.log(symLinkRealPath); ## File permissions and ownership @@ -173,7 +174,7 @@ Please keep in mind as we continue in this section that file permission and owne If you are not sure whether your application has the necessary permissions to access or execute files on [the file system](https://blog.logrocket.com/the-perfect-architecture-flow-for-your-next-node-js-project/), you can use the `access` function to test it: - try { await fsPromises.access('test1.txt'); console.log('test1.txt can be accessed'); } catch (err) { } try { await fsPromises.access('test2.txt', fs.constants.X\_OK); } catch(err) { } +try { await fsPromises.access('test1.txt'); console.log('test1.txt can be accessed'); } catch (err) { } try { await fsPromises.access('test2.txt', fs.constants.X_OK); } catch(err) { } File permissions can be modified using the `chmod` function. For example, we can remove execute access from a file by passing a special mode string: @@ -183,7 +184,7 @@ The `00666` mode string is a special five-digit number that is composed of multi File ownership can also be modified using the `chown` function: -// set user and group ownership on a file const root\_uid\= 0; const root\_gid \= 0; await fsPromises.chown('test1.txt', root\_uid, root\_gid); +// set user and group ownership on a file const root_uid\= 0; const root_gid \= 0; await fsPromises.chown('test1.txt', root_uid, root_gid); In this example, we update the file so that it is owned by the root user and root group. The `uid` of the root user and `gid` of the root group are always `0` on Linux. @@ -203,11 +204,11 @@ On the other hand, a hard link pointing to a file will still be valid and contai We can easily create soft and hard links with the `fs` module. Use the `symlink` function to create soft links and the `link` function to create hard links. - const softLink \= await fsPromises.symlink('file.txt', 'softLinkedFile.txt'); const hardLink \= await fsPromises.link('file.txt', 'hardLinkedFile.txt'); +const softLink \= await fsPromises.symlink('file.txt', 'softLinkedFile.txt'); const hardLink \= await fsPromises.link('file.txt', 'hardLinkedFile.txt'); What if you want to determine the underlying file that a link points to? This is where the `readlink` function comes in. -\> console.log(await fsPromises.readlink('softLinkedFile.txt')); console.log(await fsPromises.readLink('hardLinkedFile.txt')); +\> console.log(await fsPromises.readlink('softLinkedFile.txt')); console.log(await fsPromises.readLink('hardLinkedFile.txt')); The `readlink` function can read soft links, but not hard links. A hard link is indistinguishable from the original file it links to. In fact, all files are technically hard links. The `readlink` function essentially sees it as just another regular file and throws an `EINVAL` error. @@ -219,7 +220,7 @@ The `unlink` function actually serves as a general purpose function that can als You can modify a soft link’s metadata much like you would a normal file’s: - const linkStats \= await fsPromises.lstat(path); const newAccessTime \= new Date(2020,0,1); const newModifyTime \= new Date(2020,0,1); await fsPromises.lutimes('softLinkedFile.txt', newAccessTime, newModifyTime); await fsPromises.lchmod('softLinkedFile.txt', '00666'); const root\_uid\= 0; const root\_gid \= 0; await fsPromises.lchown('softLinkedFile.txt', root\_uid, root\_gid); +const linkStats \= await fsPromises.lstat(path); const newAccessTime \= new Date(2020,0,1); const newModifyTime \= new Date(2020,0,1); await fsPromises.lutimes('softLinkedFile.txt', newAccessTime, newModifyTime); await fsPromises.lchmod('softLinkedFile.txt', '00666'); const root_uid\= 0; const root_gid \= 0; await fsPromises.lchown('softLinkedFile.txt', root_uid, root_gid); Aside from each function being prefixed with an `l`, these functions operate identically to their equivalent file functions. @@ -235,7 +236,7 @@ Be sure to call the `close` function to release the handle on the directory when The `fs` module also includes functions that hide the opening and closing of directory resource handles for you. For example, you can create, rename, and delete directories: - await fsPromises.mkdir('sampleDir'); await fsPromises.mkdir('nested1/nested2/nested3', { recursive: true }); await fsPromises.rename('sampleDir', 'sampleDirRenamed'); await fsPromises.rmdir('sampleDirRenamed'); await fsPromises.rm('nested1', { recursive: true }); await fsPromises.rm('nested1', { recursive: true, force: true }); +await fsPromises.mkdir('sampleDir'); await fsPromises.mkdir('nested1/nested2/nested3', { recursive: true }); await fsPromises.rename('sampleDir', 'sampleDirRenamed'); await fsPromises.rmdir('sampleDirRenamed'); await fsPromises.rm('nested1', { recursive: true }); await fsPromises.rm('nested1', { recursive: true, force: true }); Examples 2, 5, and 6 demonstrate the `recursive` option, which is especially helpful if you don’t know if a path will exist before creating or deleting it. @@ -243,7 +244,7 @@ There are two options to read the contents of a directory. By default, the `read You can pass the `withFileTypes` option to get a list of `Dirent` directory entry objects instead. These objects contain the name and type of each file system object in the requested directory. For example: - const files \= await fsPromises.readdir('anotherDir'); for (const file in files) { console.log(file); } const dirents \= await fsPromises.readdir('anotherDir', {withFileTypes: true}); for (const entry in dirents) { if (entry.isFile()) { console.log(\`file name: ${entry.name}\`); } else if (entry.isDirectory()) { console.log(\`directory name: ${entry.name}\`); } else if (entry.isSymbolicLink()) { console.log(\`symbolic link name: ${entry.name}\`); } } +const files \= await fsPromises.readdir('anotherDir'); for (const file in files) { console.log(file); } const dirents \= await fsPromises.readdir('anotherDir', {withFileTypes: true}); for (const entry in dirents) { if (entry.isFile()) { console.log(\`file name: ${entry.name}\`); } else if (entry.isDirectory()) { console.log(\`directory name: ${entry.name}\`); } else if (entry.isSymbolicLink()) { console.log(\`symbolic link name: ${entry.name}\`); } } The `readdir` function does not provide a recursive option to read the contents of sub-directories. You’ll have to write your own recursive function or rely on a third-party module like [`recursive-readdir]()`](https://www.npmjs.com/package/recursive-readdir). diff --git a/notes/BGOONZ_BLOG_2.0.wiki/ref-type.md b/notes/BGOONZ_BLOG_2.0.wiki/ref-type.md index 674cffc7bd..09a006c602 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/ref-type.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/ref-type.md @@ -1,18 +1,18 @@ EN -- -- read this before commenting… -- If you have suggestions what to improve - please [submit a GitHub issue](https://github.com/javascript-tutorial/en.javascript.info/issues/new) or a pull request instead of commenting. -- If you can't understand something in the article – please elaborate. -- To insert few words of code, use the `` tag, for several lines – wrap them in `
        ` tag, for more than 10 lines – use a sandbox ([plnkr](https://plnkr.co/edit/?p=preview), [jsbin](https://jsbin.com), [codepen](http://codepen.io)…)
        +-   If you have suggestions what to improve - please [submit a GitHub issue](https://github.com/javascript-tutorial/en.javascript.info/issues/new) or a pull request instead of commenting.
        +-   If you can't understand something in the article – please elaborate.
        +-   To insert few words of code, use the `` tag, for several lines – wrap them in `
        ` tag, for more than 10 lines – use a sandbox ([plnkr](https://plnkr.co/edit/?p=preview), [jsbin](https://jsbin.com), [codepen](http://codepen.io)…)
         
         
         
         #### Chapter
         
        -- Miscellaneous
        +-   Miscellaneous
         
         #### Lesson navigation
         
        -- Reference type explained
        -- Summary
        +-   Reference type explained
        +-   Summary
         
        -- Tasks (2)
        -- Comments
        +-   Tasks (2)
        +-   Comments
         
         Share
         
        @@ -279,7 +279,7 @@ Share
         
         Edit on GitHub
         
        -- about the project
        -- contact us
        -- terms of usage
        -- privacy policy
        \ No newline at end of file
        +-   about the project
        +-   contact us
        +-   terms of usage
        +-   privacy policy
        diff --git a/notes/BGOONZ_BLOG_2.0.wiki/search-engine-simulation.md.md b/notes/BGOONZ_BLOG_2.0.wiki/search-engine-simulation.md.md
        index bdd4e5371e..321df28266 100644
        --- a/notes/BGOONZ_BLOG_2.0.wiki/search-engine-simulation.md.md
        +++ b/notes/BGOONZ_BLOG_2.0.wiki/search-engine-simulation.md.md
        @@ -6,7 +6,7 @@ https://bgoonz-blog.netlify.app/
         
         #### Page layout as seen by the robots
         
        -This app works best with JavaScript enabled.[](https://bgoonz-blog.netlify.app/)Open Menu[Navigation](https://bgoonz-blog.netlify.app/docs/sitemap)Sub-menu[Docs](https://bgoonz-blog.netlify.app/docs)[Showcase](https://bgoonz-blog.netlify.app/showcase)[Contact!](https://bgoonz-blog.netlify.app/docs/faq/contact)[Python](https://bgoonz-blog.netlify.app/docs/python/python-ds)[JavaScript](https://bgoonz-blog.netlify.app/javascript)[Blog](https://bgoonz-blog.netlify.app/blog/)Sub-menu[Blog-Post-Archive](https://bgoonz.blogspot.com/)[Top Blog Posts](https://blog-w-comments.vercel.app/)[platform docs](https://bgoonz-blog.netlify.app/blog/platform-docs/)[nodejs](https://bgoonz-blog.netlify.app/docs/articles/nodejs/)[Blog w Comments](https://bgoonz-blog.netlify.app/blogWcomments/)[Job Search](https://bgoonz-blog.netlify.app/docs/interview/job-search-nav/)Sub-menu[Job Boards](https://bgoonz-blog.netlify.app/interview/job-boards)[Archive](https://bgoonz-blog.netlify.app/docs/tools/Archive)Sub-menu[Resource-Archive-Server](https://github.com/bgoonz/Learning-Assets)[Bootcamp Resources](https://lambda-resources.netlify.app/)[OG-Blog](https://web-dev-resource-hub.netlify.app/)[Gallery](https://bgoonz-blog.netlify.app/docs/gallery)[Top Repos](https://bgoonz-blog.netlify.app/docs)[MY_DOCS](https://bryan-guner.gitbook.io/my-docs/)[Projects](https://bgoonz-blog.netlify.app/docs/projects)Sub-menu[Potluck Planner](https://potluck-landing.netlify.app/)[Meditation App](https://meditate42app.netlify.app/)[WebAudioLab](https://panoramic-eggplant-452e4.netlify.app/)[SearchAwesome](https://bgoonz.github.io/searchAwesome/)[Condensed -Portfolio](https://bg-portfolio.netlify.app/)[Family Promise Tracker](https://a.familypromiseservicetracker.dev/)[DTW-Guitar-FX-Automation](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering)[Embeds Blog](https://friendly-panda-b61ab.netlify.app/)[alt-blogs](https://bgoonz-blog-v3-0.netlify.app/)[Games](https://bgoonz-games.netlify.app/)[Blog Backup](https://bgoonz-blog-v3-0.netlify.app/)[Cover Letter](https://bgoonz-cv.netlify.app/)[Project Centric](https://project-portfolio42.netlify.app/)[Wordpress Blog](https://web-dev-hub.com/)[Project Portfolio Gallery](https://project-portfolio42.netlify.app/)[github-stats-website](https://bgoonz.github.io/github-stats-website/)[Tools](https://bgoonz-blog.netlify.app/docs/tools)Sub-menu[Github HTML Previewer](https://githtmlpreview.netlify.app/)[Text Tools](https://devtools42.netlify.app/)[Ternary 2 If Else](https://ternary42.netlify.app/)[Job Search Resources](https://determined-dijkstra-ee7390.netlify.app/)[Setup Checker](https://github.com/bgoonz/web-dev-setup-checker)[PotluckPlanner](https://potluck-landing.netlify.app/)[WebDev Quizzes](https://web-dev-interview-prep-quiz-website.netlify.app/)[Github-Advanced-Search](https://github.com/search/advanced)Close Menu[](https://github.com/bgoonz/BGOONZ_BLOG_2.0)I am a musician, electrical engineer & web developerPlease note that this website is in development and is often broken![](https://www.vagrantup.com/)[](mailto:bryan.guner@gmail.com)[](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos)[](https://www.instagram.com/bgoonz/?hl=en)[](https://www.pinterest.com/bryanguner/_saved/)[](https://www.linkedin.com/in/bryan-guner-046199128/)[ ](https://webpack.js.org/)[](https://www.adobe.com/products/xd.html)[](https://app.netlify.com/sites/bgoonz-blog/deploys)[](https://github.com/bgoonz/github-readme-activity-graph)[Contact](https://sidebar-blog.netlify.app/contact/)[A Quick Guide To Big O](https://medium.com/star-gazers/a-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522)Memoization, Tabulation, and Sorting Algorithms by Example Why is looking at runtime not a reliable method of calculating time complexity?[Get Started](https://bgoonz-blog.netlify.app/docs)[Python Guide](https://bgoonzblog20master.gatsbyjs.io/docs/python/)Python has a built in help function that let's you see a description of the source code without having to navigate to it... "-SickNasty ... Autor Unknown" .[View Posts](https://bgoonzblog20master.gatsbyjs.io/docs/python/)[Guitar Effects Triggering w DTW](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering) [Learn More](https://bgoonz-blog.netlify.app/docs/tools)[Beginner Guide React](https://bryanguner.medium.com/introductory-react-part-2-cda01615a186)As I learn to build web applications in React I will blog about it in this series in an attempt to capture the questions that a complete beginner might encounter that a more seasoned developer would take for granted![Scope & Closure](https://dev.to/bgoonz/scope-and-context-in-javascript-5cma)Scope & Context in JSThe scope of a program in JavaScript is the set of variables that are available for use within the program. [Web Audio Daw](https://mihirbeg28.netlify.app/)PostgreSQL Cheat Sheet, Everything You Need to Get Started With VSCodeExtensions & Resources, Super Simple Intro To HTML, Understanding Git... etc....Current InterestsFrom github repositories to existential questions.[Angolia](https://bgoonz-blog.netlify.app/angolia)Full Text Search[Full Text Search](https://www.algolia.com/)[Convolutional Neural Networks](https://bgoonz-blog.netlify.app/neural)Artificial neural networks, usually simply called neural networks, are computing systems vaguely inspired by the biological [neural networks](https://github.com/tensorflow/tensorflow)[Jamstack](https://bgoonz-blog.netlify.app/jamstack)Why Jamstack Jamstack is the new standard architecture for theweb. Using Git workflows and modern build tools, pre-rendered content is served to a CDN and made dynamic through APIs and serverless functions. Technologies in the stack include JavaScript frameworks, Static Site Generators, Headless CMSs, and CDNs.[Asynchronous JavaScript](https://bgoonz-blog.netlify.app/lorem-ipsum)The term asynchronous refers to two or more objects or events not existing or happening at the same time (or multiple related things happening without waiting for the previous one to complete). In computing, the word "asynchronous" is used in two major contexts.[NJ Devils](https://www.allaboutthejersey.com/)New Jersey Devils Hockey Team(Hockey in general)Team identity[](https://en.wikipedia.org/wiki/File:OldDevils.png)The old green style jerseys used from 1982 to 1992The jerseys used from 1992 to 2017[Sean Avery](https://en.wikipedia.org/wiki/Sean_Avery) of the [New York Rangers](https://en.wikipedia.org/wiki/New_York_Rangers) attempts to distract Brodeur during the [2008 Stanley Cup playoffs](https://en.wikipedia.org/wiki/2008_Stanley_Cup_playoffs). The playoff series was the fifth to feature the [Devils--Rangers rivalry](https://en.wikipedia.org/wiki/Devils%E2%80%93Rangers_rivalry).[lorem-ipsum](https://www.xml-sitemaps.com/#)[ITER Fusion Reactor Experiment (Southern France)](https://bgoonz-blog.netlify.app/lorem-ipsum)Break Even Nuclear Fusion CandidateIn December, researchers at the Joint European Torus (JET) started conducting fusion experiments with tritium --- a rare and radioactive isotope of hydrogen. The facility is a one-tenth-volume mock-up of the US$22-billion ITER project and has the same doughnut-shaped 'tokamak' design --- the world's most developed approach to fusion energy. It is the first time since 1997 that researchers have done experiments in a tokamak with any significant amount of tritium.ToolsResume & Portfolio[Resume](https://github.com/bgoonz/resume-cv-portfolio-samples/raw/master/2021-resume/bryan-guner-resume-2021.pdf)[Learn More](https://1drv.ms/b/s!AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A)[Download PDF](https://www.xml-sitemaps.com/#)ShowcaseMy Projects![Learn More](https://bgoonz-blog.netlify.app/showcase)Blog-Archive-And-Mini-ProjectsWeb Audio DAW[Go To Web Audio Daw](https://mihirbegmusiclab.netlify.app/)Quick Linksquick links home[About](https://bgoonz-blog.netlify.app/docs/about/)Web-Dev-Hub is my personal blogand documentation site[Learn More](https://bgoonz-blog.netlify.app/docs/about/)[Articles](https://bgoonz-blog.netlify.app/docs/articles/)resources[Learn More](https://bgoonz-blog.netlify.app/docs/articles/)[Audio](https://bgoonz-blog.netlify.app/docs/audio/)Audio Projects[Learn More](https://bgoonz-blog.netlify.app/docs/audio/)[Career](https://bgoonz-blog.netlify.app/docs/career/)Reference materials and descriptions of fundamental concepts as well as visua[Learn More](https://bgoonz-blog.netlify.app/docs/career/)[Community](https://bgoonz-blog.netlify.app/docs/community/)We'd love it if you participate in the Libris community. Find out how to get connected.[Learn More](https://bgoonz-blog.netlify.app/docs/community/)[Content](https://bgoonz-blog.netlify.app/docs/content/)In this section you'll learn how to add syntax highlighting, examples, callouts and much more.[Learn More](https://bgoonz-blog.netlify.app/docs/content/)[CSS](https://bgoonz-blog.netlify.app/docs/css/)In this section you'll learn how to add syntax highlighting, examples, callouts and much more.[Learn More](https://bgoonz-blog.netlify.app/docs/css/)[Data Structures](https://bgoonz-blog.netlify.app/docs/data-structures/)In this section you'll learn how to add syntax highlighting, examples, callouts and much more.[Learn More](https://bgoonz-blog.netlify.app/docs/data-structures/)[Docs](https://bgoonz-blog.netlify.app/docs/docs/)Documentation[Learn More](https://bgoonz-blog.netlify.app/docs/docs/)[FAQ](https://bgoonz-blog.netlify.app/docs/faq/)In this section you'll find commonly asked questions regarding the Libris theme. If you have questions, don't hesitate to ask us directly.[Learn More](https://bgoonz-blog.netlify.app/docs/faq/)[Interactive](https://bgoonz-blog.netlify.app/docs/interact/)feel free to try the examples[Learn More](https://bgoonz-blog.netlify.app/docs/interact/)[Javascript](https://bgoonz-blog.netlify.app/docs/javascript/)Javascript articles and docs[Learn More](https://bgoonz-blog.netlify.app/docs/javascript/)[Interviewing](https://bgoonz-blog.netlify.app/docs/interview/)These are some of my active projects.[Learn More](https://bgoonz-blog.netlify.app/docs/interview/)[Leetcode](https://bgoonz-blog.netlify.app/docs/leetcode/)feel free to try the examples[Learn More](https://bgoonz-blog.netlify.app/docs/leetcode/)[Projects](https://bgoonz-blog.netlify.app/docs/projects/)We'd love it if you participate in the Web-Dev-Hubcommunity. Find out how to get connected.[Learn More](https://bgoonz-blog.netlify.app/docs/projects/)[Python](https://bgoonz-blog.netlify.app/docs/python/)Python[Learn More](https://bgoonz-blog.netlify.app/docs/python/)[QuickRef](https://bgoonz-blog.netlify.app/docs/quick-reference/)In this section you'll find basic information about Web-Dev-Hub and how to use it.[Learn More](https://bgoonz-blog.netlify.app/docs/quick-reference/)[React](https://bgoonz-blog.netlify.app/docs/react/)To make it easy to write documentation in plain Markdown, most React are styled using Markdown elements with few additional CSS classes.[Learn More](https://bgoonz-blog.netlify.app/docs/react/)[Reference](https://bgoonz-blog.netlify.app/docs/reference/)helpful reference guides[Learn More](https://bgoonz-blog.netlify.app/docs/reference/)[Tools](https://bgoonz-blog.netlify.app/docs/tools/)See some interesting tools developed by the Web-Dev-Hubcommunity to help automate parts of your workflow.[Learn More](https://bgoonz-blog.netlify.app/docs/tools/)[Tips](https://bgoonz-blog.netlify.app/docs/tips/)lorem-ipsum[Learn More](https://bgoonz-blog.netlify.app/docs/tips/)[Tutorials](https://bgoonz-blog.netlify.app/docs/tutorials/)Walkthroughs of various development activities and skills[Learn More](https://bgoonz-blog.netlify.app/docs/tutorials/)Contactget in touch! +1 (551) - 254 - 5505[Contact](https://bgoonz-blog.netlify.app/docs/faq/contact)[email](https://bgoonz-blog.netlify.app/mailto:bryan.guner@gmail.com)[Collaborate](https://webdevhub.jetbrains.space/oauth/auth/invite/419dd305ba717a392a02aa5b4e41e09c)[Subscribe (Youtube)](https://bgoonz-blog.netlify.app/) [index](https://search.freefind.com/siteindex.html?si=14588965)[sitemap](https://search.freefind.com/find.html?si=14588965&m=0&p=0)[advanced](https://search.freefind.com/find.html?si=14588965&pid=a)[search engine](https://www.freefind.com/)[byfreefind](https://www.freefind.com/)[Save to PDF](https://pdfcrowd.com/url_to_pdf/?)@bgoonz on almost every platform[BLM](https://random-static-html-deploys.netlify.app/blm.html) [Twitter](https://twitter.com/bgooonz)[LinkedIn](https://www.linkedin.com/in/bryan-guner-046199128/)[GitHub](https://github.com/bgoonz)[Youtube](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA)[Instagram](https://www.instagram.com/bgoonz/?hl=en)[dev.to](https://dev.to/bgoonz) [Chat with us](https://www.livechatinc.com/chat-with/13199361/), powered by [LiveChat](https://www.livechatinc.com/?welcome) ☝️ ☝️ Get In Touch[(551) 254-5505](tel:+15512545505)[Free Click to Call button](https://elfsight.com/click-to-call-widget/?utm_source=websites&utm_medium=clients&utm_content=click-to-call&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget)Call Call Visitor CounterToday4412/17/20214012/18/202144Yesterday40[Free Visitor Counter widget](https://elfsight.com/visitor-counter-widget/?utm_source=websites&utm_medium=clients&utm_content=visitor-counter&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget) Filters Home 150 Henley Place from 9am to 6pm CET Monday-Friday [15512545505](tel:15512545505) Clear Done Home [Directions ](https://www.google.com/maps/dir/?api=1&destination=40.7670206,)150 Henley Place [google.com](https://google.com/) [15512545505](tel:15512545505)  from 9am to 6pm CET Monday-Friday My base of operations MapTerrainSatelliteLabels[](https://maps.google.com/maps?ll=40.768166,-74.016988&z=17&t=m&hl=en&gl=US&mapclient=apiv3)Keyboard shortcutsMap DataMap data ©2021 Google[Terms of Use](https://www.google.com/intl/en_US/help/terms_maps.html)[Report a map error](https://www.google.com/maps/@40.7681663,-74.0169881,17z/data=!10m1!1e1!12b1?source=apiv3&rapsrc=apiv3)Map data ©2021 Google [Free Google Maps widget ](https://elfsight.com/google-maps-widget/?utm_source=websites&utm_medium=clients&utm_content=google-maps&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget)AddThis Sharing[Facebook](https://www.xml-sitemaps.com/#)[Twitter](https://www.xml-sitemaps.com/#)[Print](https://www.xml-sitemaps.com/#)[Email](https://www.xml-sitemaps.com/#)[Pinterest](https://www.xml-sitemaps.com/#)[Gmail](https://www.xml-sitemaps.com/#)[LinkedIn](https://www.xml-sitemaps.com/#)[](https://www.xml-sitemaps.com/#)Close[](https://bgoonz-blog.netlify.app/)[AddThis](https://www.addthis.com/website-tools/overview?utm_source=AddThis%20Tools&utm_medium=image)BESbswy
        +This app works best with JavaScript enabled.[](https://bgoonz-blog.netlify.app/)Open Menu[Navigation](https://bgoonz-blog.netlify.app/docs/sitemap)Sub-menu[Docs](https://bgoonz-blog.netlify.app/docs)[Showcase](https://bgoonz-blog.netlify.app/showcase)[Contact!](https://bgoonz-blog.netlify.app/docs/faq/contact)[Python](https://bgoonz-blog.netlify.app/docs/python/python-ds)[JavaScript](https://bgoonz-blog.netlify.app/javascript)[Blog](https://bgoonz-blog.netlify.app/blog/)Sub-menu[Blog-Post-Archive](https://bgoonz.blogspot.com/)[Top Blog Posts](https://blog-w-comments.vercel.app/)[platform docs](https://bgoonz-blog.netlify.app/blog/platform-docs/)[nodejs](https://bgoonz-blog.netlify.app/docs/articles/nodejs/)[Blog w Comments](https://bgoonz-blog.netlify.app/blogWcomments/)[Job Search](https://bgoonz-blog.netlify.app/docs/interview/job-search-nav/)Sub-menu[Job Boards](https://bgoonz-blog.netlify.app/interview/job-boards)[Archive](https://bgoonz-blog.netlify.app/docs/tools/Archive)Sub-menu[Resource-Archive-Server](https://github.com/bgoonz/Learning-Assets)[Bootcamp Resources](https://lambda-resources.netlify.app/)[OG-Blog](https://web-dev-resource-hub.netlify.app/)[Gallery](https://bgoonz-blog.netlify.app/docs/gallery)[Top Repos](https://bgoonz-blog.netlify.app/docs)[MY_DOCS](https://bryan-guner.gitbook.io/my-docs/)[Projects](https://bgoonz-blog.netlify.app/docs/projects)Sub-menu[Potluck Planner](https://potluck-landing.netlify.app/)[Meditation App](https://meditate42app.netlify.app/)[WebAudioLab](https://panoramic-eggplant-452e4.netlify.app/)[SearchAwesome](https://bgoonz.github.io/searchAwesome/)[Condensed -Portfolio](https://bg-portfolio.netlify.app/)[Family Promise Tracker](https://a.familypromiseservicetracker.dev/)[DTW-Guitar-FX-Automation](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering)[Embeds Blog](https://friendly-panda-b61ab.netlify.app/)[alt-blogs](https://bgoonz-blog-v3-0.netlify.app/)[Games](https://bgoonz-games.netlify.app/)[Blog Backup](https://bgoonz-blog-v3-0.netlify.app/)[Cover Letter](https://bgoonz-cv.netlify.app/)[Project Centric](https://project-portfolio42.netlify.app/)[Wordpress Blog](https://web-dev-hub.com/)[Project Portfolio Gallery](https://project-portfolio42.netlify.app/)[github-stats-website](https://bgoonz.github.io/github-stats-website/)[Tools](https://bgoonz-blog.netlify.app/docs/tools)Sub-menu[Github HTML Previewer](https://githtmlpreview.netlify.app/)[Text Tools](https://devtools42.netlify.app/)[Ternary 2 If Else](https://ternary42.netlify.app/)[Job Search Resources](https://determined-dijkstra-ee7390.netlify.app/)[Setup Checker](https://github.com/bgoonz/web-dev-setup-checker)[PotluckPlanner](https://potluck-landing.netlify.app/)[WebDev Quizzes](https://web-dev-interview-prep-quiz-website.netlify.app/)[Github-Advanced-Search](https://github.com/search/advanced)Close Menu[](https://github.com/bgoonz/BGOONZ_BLOG_2.0)I am a musician, electrical engineer & web developerPlease note that this website is in development and is often broken![](https://www.vagrantup.com/)[](mailto:bryan.guner@gmail.com)[](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos)[](https://www.instagram.com/bgoonz/?hl=en)[](https://www.pinterest.com/bryanguner/_saved/)[](https://www.linkedin.com/in/bryan-guner-046199128/)[ ](https://webpack.js.org/)[](https://www.adobe.com/products/xd.html)[](https://app.netlify.com/sites/bgoonz-blog/deploys)[](https://github.com/bgoonz/github-readme-activity-graph)[Contact](https://sidebar-blog.netlify.app/contact/)[A Quick Guide To Big O](https://medium.com/star-gazers/a-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522)Memoization, Tabulation, and Sorting Algorithms by Example Why is looking at runtime not a reliable method of calculating time complexity?[Get Started](https://bgoonz-blog.netlify.app/docs)[Python Guide](https://bgoonzblog20master.gatsbyjs.io/docs/python/)Python has a built in help function that let's you see a description of the source code without having to navigate to it... "-SickNasty ... Autor Unknown" .[View Posts](https://bgoonzblog20master.gatsbyjs.io/docs/python/)[Guitar Effects Triggering w DTW](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering) [Learn More](https://bgoonz-blog.netlify.app/docs/tools)[Beginner Guide React](https://bryanguner.medium.com/introductory-react-part-2-cda01615a186)As I learn to build web applications in React I will blog about it in this series in an attempt to capture the questions that a complete beginner might encounter that a more seasoned developer would take for granted![Scope & Closure](https://dev.to/bgoonz/scope-and-context-in-javascript-5cma)Scope & Context in JSThe scope of a program in JavaScript is the set of variables that are available for use within the program. [Web Audio Daw](https://mihirbeg28.netlify.app/)PostgreSQL Cheat Sheet, Everything You Need to Get Started With VSCodeExtensions & Resources, Super Simple Intro To HTML, Understanding Git... etc....Current InterestsFrom github repositories to existential questions.[Angolia](https://bgoonz-blog.netlify.app/angolia)Full Text Search[Full Text Search](https://www.algolia.com/)[Convolutional Neural Networks](https://bgoonz-blog.netlify.app/neural)Artificial neural networks, usually simply called neural networks, are computing systems vaguely inspired by the biological [neural networks](https://github.com/tensorflow/tensorflow)[Jamstack](https://bgoonz-blog.netlify.app/jamstack)Why Jamstack Jamstack is the new standard architecture for theweb. Using Git workflows and modern build tools, pre-rendered content is served to a CDN and made dynamic through APIs and serverless functions. Technologies in the stack include JavaScript frameworks, Static Site Generators, Headless CMSs, and CDNs.[Asynchronous JavaScript](https://bgoonz-blog.netlify.app/lorem-ipsum)The term asynchronous refers to two or more objects or events not existing or happening at the same time (or multiple related things happening without waiting for the previous one to complete). In computing, the word "asynchronous" is used in two major contexts.[NJ Devils](https://www.allaboutthejersey.com/)New Jersey Devils Hockey Team(Hockey in general)Team identity[](https://en.wikipedia.org/wiki/File:OldDevils.png)The old green style jerseys used from 1982 to 1992The jerseys used from 1992 to 2017[Sean Avery](https://en.wikipedia.org/wiki/Sean_Avery) of the [New York Rangers](https://en.wikipedia.org/wiki/New_York_Rangers) attempts to distract Brodeur during the [2008 Stanley Cup playoffs](https://en.wikipedia.org/wiki/2008_Stanley_Cup_playoffs). The playoff series was the fifth to feature the [Devils--Rangers rivalry](https://en.wikipedia.org/wiki/Devils%E2%80%93Rangers_rivalry).[lorem-ipsum](https://www.xml-sitemaps.com/#)[ITER Fusion Reactor Experiment (Southern France)](https://bgoonz-blog.netlify.app/lorem-ipsum)Break Even Nuclear Fusion CandidateIn December, researchers at the Joint European Torus (JET) started conducting fusion experiments with tritium --- a rare and radioactive isotope of hydrogen. The facility is a one-tenth-volume mock-up of the US$22-billion ITER project and has the same doughnut-shaped 'tokamak' design --- the world's most developed approach to fusion energy. It is the first time since 1997 that researchers have done experiments in a tokamak with any significant amount of tritium.ToolsResume & Portfolio[Resume](https://github.com/bgoonz/resume-cv-portfolio-samples/raw/master/2021-resume/bryan-guner-resume-2021.pdf)[Learn More](https://1drv.ms/b/s!AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A)[Download PDF](https://www.xml-sitemaps.com/#)ShowcaseMy Projects![Learn More](https://bgoonz-blog.netlify.app/showcase)Blog-Archive-And-Mini-ProjectsWeb Audio DAW[Go To Web Audio Daw](https://mihirbegmusiclab.netlify.app/)Quick Linksquick links home[About](https://bgoonz-blog.netlify.app/docs/about/)Web-Dev-Hub is my personal blogand documentation site[Learn More](https://bgoonz-blog.netlify.app/docs/about/)[Articles](https://bgoonz-blog.netlify.app/docs/articles/)resources[Learn More](https://bgoonz-blog.netlify.app/docs/articles/)[Audio](https://bgoonz-blog.netlify.app/docs/audio/)Audio Projects[Learn More](https://bgoonz-blog.netlify.app/docs/audio/)[Career](https://bgoonz-blog.netlify.app/docs/career/)Reference materials and descriptions of fundamental concepts as well as visua[Learn More](https://bgoonz-blog.netlify.app/docs/career/)[Community](https://bgoonz-blog.netlify.app/docs/community/)We'd love it if you participate in the Libris community. Find out how to get connected.[Learn More](https://bgoonz-blog.netlify.app/docs/community/)[Content](https://bgoonz-blog.netlify.app/docs/content/)In this section you'll learn how to add syntax highlighting, examples, callouts and much more.[Learn More](https://bgoonz-blog.netlify.app/docs/content/)[CSS](https://bgoonz-blog.netlify.app/docs/css/)In this section you'll learn how to add syntax highlighting, examples, callouts and much more.[Learn More](https://bgoonz-blog.netlify.app/docs/css/)[Data Structures](https://bgoonz-blog.netlify.app/docs/data-structures/)In this section you'll learn how to add syntax highlighting, examples, callouts and much more.[Learn More](https://bgoonz-blog.netlify.app/docs/data-structures/)[Docs](https://bgoonz-blog.netlify.app/docs/docs/)Documentation[Learn More](https://bgoonz-blog.netlify.app/docs/docs/)[FAQ](https://bgoonz-blog.netlify.app/docs/faq/)In this section you'll find commonly asked questions regarding the Libris theme. If you have questions, don't hesitate to ask us directly.[Learn More](https://bgoonz-blog.netlify.app/docs/faq/)[Interactive](https://bgoonz-blog.netlify.app/docs/interact/)feel free to try the examples[Learn More](https://bgoonz-blog.netlify.app/docs/interact/)[Javascript](https://bgoonz-blog.netlify.app/docs/javascript/)Javascript articles and docs[Learn More](https://bgoonz-blog.netlify.app/docs/javascript/)[Interviewing](https://bgoonz-blog.netlify.app/docs/interview/)These are some of my active projects.[Learn More](https://bgoonz-blog.netlify.app/docs/interview/)[Leetcode](https://bgoonz-blog.netlify.app/docs/leetcode/)feel free to try the examples[Learn More](https://bgoonz-blog.netlify.app/docs/leetcode/)[Projects](https://bgoonz-blog.netlify.app/docs/projects/)We'd love it if you participate in the Web-Dev-Hubcommunity. Find out how to get connected.[Learn More](https://bgoonz-blog.netlify.app/docs/projects/)[Python](https://bgoonz-blog.netlify.app/docs/python/)Python[Learn More](https://bgoonz-blog.netlify.app/docs/python/)[QuickRef](https://bgoonz-blog.netlify.app/docs/quick-reference/)In this section you'll find basic information about Web-Dev-Hub and how to use it.[Learn More](https://bgoonz-blog.netlify.app/docs/quick-reference/)[React](https://bgoonz-blog.netlify.app/docs/react/)To make it easy to write documentation in plain Markdown, most React are styled using Markdown elements with few additional CSS classes.[Learn More](https://bgoonz-blog.netlify.app/docs/react/)[Reference](https://bgoonz-blog.netlify.app/docs/reference/)helpful reference guides[Learn More](https://bgoonz-blog.netlify.app/docs/reference/)[Tools](https://bgoonz-blog.netlify.app/docs/tools/)See some interesting tools developed by the Web-Dev-Hubcommunity to help automate parts of your workflow.[Learn More](https://bgoonz-blog.netlify.app/docs/tools/)[Tips](https://bgoonz-blog.netlify.app/docs/tips/)lorem-ipsum[Learn More](https://bgoonz-blog.netlify.app/docs/tips/)[Tutorials](https://bgoonz-blog.netlify.app/docs/tutorials/)Walkthroughs of various development activities and skills[Learn More](https://bgoonz-blog.netlify.app/docs/tutorials/)Contactget in touch! +1 (551) - 254 - 5505[Contact](https://bgoonz-blog.netlify.app/docs/faq/contact)[email](https://bgoonz-blog.netlify.app/mailto:bryan.guner@gmail.com)[Collaborate](https://webdevhub.jetbrains.space/oauth/auth/invite/419dd305ba717a392a02aa5b4e41e09c)[Subscribe (Youtube)](https://bgoonz-blog.netlify.app/) [index](https://search.freefind.com/siteindex.html?si=14588965)[sitemap](https://search.freefind.com/find.html?si=14588965&m=0&p=0)[advanced](https://search.freefind.com/find.html?si=14588965&pid=a)[search engine](https://www.freefind.com/)[byfreefind](https://www.freefind.com/)[Save to PDF](https://pdfcrowd.com/url_to_pdf/?)@bgoonz on almost every platform[BLM](https://random-static-html-deploys.netlify.app/blm.html) [Twitter](https://twitter.com/bgooonz)[LinkedIn](https://www.linkedin.com/in/bryan-guner-046199128/)[GitHub](https://github.com/bgoonz)[Youtube](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA)[Instagram](https://www.instagram.com/bgoonz/?hl=en)[dev.to](https://dev.to/bgoonz) [Chat with us](https://www.livechatinc.com/chat-with/13199361/), powered by [LiveChat](https://www.livechatinc.com/?welcome) ☝️ ☝️ Get In Touch[(551) 254-5505](tel:+15512545505)[Free Click to Call button](https://elfsight.com/click-to-call-widget/?utm_source=websites&utm_medium=clients&utm_content=click-to-call&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget)Call Call Visitor CounterToday4412/17/20214012/18/202144Yesterday40[Free Visitor Counter widget](https://elfsight.com/visitor-counter-widget/?utm_source=websites&utm_medium=clients&utm_content=visitor-counter&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget) Filters Home 150 Henley Place from 9am to 6pm CET Monday-Friday [15512545505](tel:15512545505) Clear Done Home [Directions ](https://www.google.com/maps/dir/?api=1&destination=40.7670206,)150 Henley Place [google.com](https://google.com/) [15512545505](tel:15512545505)  from 9am to 6pm CET Monday-Friday My base of operations MapTerrainSatelliteLabels[](https://maps.google.com/maps?ll=40.768166,-74.016988&z=17&t=m&hl=en&gl=US&mapclient=apiv3)Keyboard shortcutsMap DataMap data ©2021 Google[Terms of Use](https://www.google.com/intl/en_US/help/terms_maps.html)[Report a map error](https://www.google.com/maps/@40.7681663,-74.0169881,17z/data=!10m1!1e1!12b1?source=apiv3&rapsrc=apiv3)Map data ©2021 Google [Free Google Maps widget ](https://elfsight.com/google-maps-widget/?utm_source=websites&utm_medium=clients&utm_content=google-maps&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget)AddThis Sharing[Facebook](https://www.xml-sitemaps.com/#)[Twitter](https://www.xml-sitemaps.com/#)[Print](https://www.xml-sitemaps.com/#)[Email](https://www.xml-sitemaps.com/#)[Pinterest](https://www.xml-sitemaps.com/#)[Gmail](https://www.xml-sitemaps.com/#)[LinkedIn](https://www.xml-sitemaps.com/#)[](https://www.xml-sitemaps.com/#)Close[](https://bgoonz-blog.netlify.app/)[AddThis](https://www.addthis.com/website-tools/overview?utm_source=AddThis%20Tools&utm_medium=image)BESbswy
         
         #### Received HTTP Headers
         
        @@ -22,144 +22,144 @@ x-nf-request-id: 01FQ91KP7DKJQE2FV8M77QY6WC
         
         #### Internal Links Found
         
        -| 1 | [open_in_new](https://bgoonz-blog.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 2 | [open_in_new](https://bgoonz-blog.netlify.app/docs/sitemap "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fsitemap&se=googlebot "Check this page with SE bot simulator") |
        -| 3 | [open_in_new](https://bgoonz-blog.netlify.app/docs "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs&se=googlebot "Check this page with SE bot simulator") |
        -| 4 | [open_in_new](https://bgoonz-blog.netlify.app/showcase "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fshowcase&se=googlebot "Check this page with SE bot simulator") |
        -| 5 | [open_in_new](https://bgoonz-blog.netlify.app/docs/faq/contact "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ffaq%2Fcontact&se=googlebot "Check this page with SE bot simulator") |
        -| 6 | [open_in_new](https://bgoonz-blog.netlify.app/docs/python/python-ds "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fpython%2Fpython-ds&se=googlebot "Check this page with SE bot simulator") |
        -| 7 | [open_in_new](https://bgoonz-blog.netlify.app/javascript "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fjavascript&se=googlebot "Check this page with SE bot simulator") |
        -| 8 | [open_in_new](https://bgoonz-blog.netlify.app/blog/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 9 | [open_in_new](https://bgoonz-blog.netlify.app/blog/platform-docs/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2Fplatform-docs%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 10 | [open_in_new](https://bgoonz-blog.netlify.app/docs/articles/nodejs/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Farticles%2Fnodejs%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 11 | [open_in_new](https://bgoonz-blog.netlify.app/blogWcomments/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2FblogWcomments%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 12 | [open_in_new](https://bgoonz-blog.netlify.app/docs/interview/job-search-nav/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Finterview%2Fjob-search-nav%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 13 | [open_in_new](https://bgoonz-blog.netlify.app/interview/job-boards "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Finterview%2Fjob-boards&se=googlebot "Check this page with SE bot simulator") |
        -| 14 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tools/Archive "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftools%2FArchive&se=googlebot "Check this page with SE bot simulator") |
        -| 15 | [open_in_new](https://bgoonz-blog.netlify.app/docs/gallery "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fgallery&se=googlebot "Check this page with SE bot simulator") |
        -| 16 | [open_in_new](https://bgoonz-blog.netlify.app/docs/projects "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fprojects&se=googlebot "Check this page with SE bot simulator") |
        -| 17 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tools "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftools&se=googlebot "Check this page with SE bot simulator") |
        -| 18 | [open_in_new](https://bgoonz-blog.netlify.app/angolia "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fangolia&se=googlebot "Check this page with SE bot simulator") |
        -| 19 | [open_in_new](https://bgoonz-blog.netlify.app/neural%20networks "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fneural+networks&se=googlebot "Check this page with SE bot simulator") |
        -| 20 | [open_in_new](https://bgoonz-blog.netlify.app/jamstack "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fjamstack&se=googlebot "Check this page with SE bot simulator") |
        -| 21 | [open_in_new](https://bgoonz-blog.netlify.app/lorem-ipsum "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Florem-ipsum&se=googlebot "Check this page with SE bot simulator") |
        -| 22 | [open_in_new](https://bgoonz-blog.netlify.app/docs/about/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fabout%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 23 | [open_in_new](https://bgoonz-blog.netlify.app/docs/articles/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Farticles%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 24 | [open_in_new](https://bgoonz-blog.netlify.app/docs/audio/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Faudio%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 25 | [open_in_new](https://bgoonz-blog.netlify.app/docs/career/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcareer%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 26 | [open_in_new](https://bgoonz-blog.netlify.app/docs/community/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcommunity%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 27 | [open_in_new](https://bgoonz-blog.netlify.app/docs/content/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcontent%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 28 | [open_in_new](https://bgoonz-blog.netlify.app/docs/css/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcss%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 29 | [open_in_new](https://bgoonz-blog.netlify.app/docs/data-structures/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fdata-structures%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 30 | [open_in_new](https://bgoonz-blog.netlify.app/docs/docs/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fdocs%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 31 | [open_in_new](https://bgoonz-blog.netlify.app/docs/faq/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ffaq%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 32 | [open_in_new](https://bgoonz-blog.netlify.app/docs/interact/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Finteract%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 33 | [open_in_new](https://bgoonz-blog.netlify.app/docs/javascript/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fjavascript%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 34 | [open_in_new](https://bgoonz-blog.netlify.app/docs/interview/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Finterview%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 35 | [open_in_new](https://bgoonz-blog.netlify.app/docs/leetcode/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fleetcode%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 36 | [open_in_new](https://bgoonz-blog.netlify.app/docs/projects/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fprojects%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 37 | [open_in_new](https://bgoonz-blog.netlify.app/docs/python/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fpython%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 38 | [open_in_new](https://bgoonz-blog.netlify.app/docs/quick-reference/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fquick-reference%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 39 | [open_in_new](https://bgoonz-blog.netlify.app/docs/react/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Freact%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 40 | [open_in_new](https://bgoonz-blog.netlify.app/docs/reference/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Freference%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 41 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tools/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftools%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 42 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tips/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftips%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 43 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tutorials/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftutorials%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 44 | [open_in_new](https://bgoonz-blog.netlify.app/mailto:bryan.guner@gmail.com "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fmailto%3Abryan.guner%40gmail.com&se=googlebot "Check this page with SE bot simulator") |
        -| 45 | [open_in_new](https://bgoonz-blog.netlify.app/%20https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA?sub_confirmation=1 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2F+https%3A%2F%2Fwww.youtube.com%2Fchannel%2FUC9-rYyUMsnEBK8G8fCyrXXA%3Fsub_confirmation%3D1&se=googlebot "Check this page with SE bot simulator") |
        -| 46 | [open_in_new](https://bgoonz-blog.netlify.app/about:blank "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fabout%3Ablank&se=googlebot "Check this page with SE bot simulator") |
        +| 1 | [open_in_new](https://bgoonz-blog.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 2 | [open_in_new](https://bgoonz-blog.netlify.app/docs/sitemap 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fsitemap&se=googlebot 'Check this page with SE bot simulator') |
        +| 3 | [open_in_new](https://bgoonz-blog.netlify.app/docs 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs&se=googlebot 'Check this page with SE bot simulator') |
        +| 4 | [open_in_new](https://bgoonz-blog.netlify.app/showcase 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fshowcase&se=googlebot 'Check this page with SE bot simulator') |
        +| 5 | [open_in_new](https://bgoonz-blog.netlify.app/docs/faq/contact 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ffaq%2Fcontact&se=googlebot 'Check this page with SE bot simulator') |
        +| 6 | [open_in_new](https://bgoonz-blog.netlify.app/docs/python/python-ds 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fpython%2Fpython-ds&se=googlebot 'Check this page with SE bot simulator') |
        +| 7 | [open_in_new](https://bgoonz-blog.netlify.app/javascript 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fjavascript&se=googlebot 'Check this page with SE bot simulator') |
        +| 8 | [open_in_new](https://bgoonz-blog.netlify.app/blog/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 9 | [open_in_new](https://bgoonz-blog.netlify.app/blog/platform-docs/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2Fplatform-docs%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 10 | [open_in_new](https://bgoonz-blog.netlify.app/docs/articles/nodejs/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Farticles%2Fnodejs%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 11 | [open_in_new](https://bgoonz-blog.netlify.app/blogWcomments/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2FblogWcomments%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 12 | [open_in_new](https://bgoonz-blog.netlify.app/docs/interview/job-search-nav/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Finterview%2Fjob-search-nav%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 13 | [open_in_new](https://bgoonz-blog.netlify.app/interview/job-boards 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Finterview%2Fjob-boards&se=googlebot 'Check this page with SE bot simulator') |
        +| 14 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tools/Archive 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftools%2FArchive&se=googlebot 'Check this page with SE bot simulator') |
        +| 15 | [open_in_new](https://bgoonz-blog.netlify.app/docs/gallery 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fgallery&se=googlebot 'Check this page with SE bot simulator') |
        +| 16 | [open_in_new](https://bgoonz-blog.netlify.app/docs/projects 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fprojects&se=googlebot 'Check this page with SE bot simulator') |
        +| 17 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tools 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftools&se=googlebot 'Check this page with SE bot simulator') |
        +| 18 | [open_in_new](https://bgoonz-blog.netlify.app/angolia 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fangolia&se=googlebot 'Check this page with SE bot simulator') |
        +| 19 | [open_in_new](https://bgoonz-blog.netlify.app/neural%20networks 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fneural+networks&se=googlebot 'Check this page with SE bot simulator') |
        +| 20 | [open_in_new](https://bgoonz-blog.netlify.app/jamstack 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fjamstack&se=googlebot 'Check this page with SE bot simulator') |
        +| 21 | [open_in_new](https://bgoonz-blog.netlify.app/lorem-ipsum 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Florem-ipsum&se=googlebot 'Check this page with SE bot simulator') |
        +| 22 | [open_in_new](https://bgoonz-blog.netlify.app/docs/about/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fabout%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 23 | [open_in_new](https://bgoonz-blog.netlify.app/docs/articles/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Farticles%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 24 | [open_in_new](https://bgoonz-blog.netlify.app/docs/audio/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Faudio%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 25 | [open_in_new](https://bgoonz-blog.netlify.app/docs/career/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcareer%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 26 | [open_in_new](https://bgoonz-blog.netlify.app/docs/community/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcommunity%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 27 | [open_in_new](https://bgoonz-blog.netlify.app/docs/content/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcontent%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 28 | [open_in_new](https://bgoonz-blog.netlify.app/docs/css/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fcss%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 29 | [open_in_new](https://bgoonz-blog.netlify.app/docs/data-structures/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fdata-structures%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 30 | [open_in_new](https://bgoonz-blog.netlify.app/docs/docs/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fdocs%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 31 | [open_in_new](https://bgoonz-blog.netlify.app/docs/faq/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ffaq%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 32 | [open_in_new](https://bgoonz-blog.netlify.app/docs/interact/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Finteract%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 33 | [open_in_new](https://bgoonz-blog.netlify.app/docs/javascript/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fjavascript%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 34 | [open_in_new](https://bgoonz-blog.netlify.app/docs/interview/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Finterview%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 35 | [open_in_new](https://bgoonz-blog.netlify.app/docs/leetcode/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fleetcode%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 36 | [open_in_new](https://bgoonz-blog.netlify.app/docs/projects/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fprojects%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 37 | [open_in_new](https://bgoonz-blog.netlify.app/docs/python/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fpython%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 38 | [open_in_new](https://bgoonz-blog.netlify.app/docs/quick-reference/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fquick-reference%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 39 | [open_in_new](https://bgoonz-blog.netlify.app/docs/react/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Freact%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 40 | [open_in_new](https://bgoonz-blog.netlify.app/docs/reference/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Freference%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 41 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tools/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftools%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 42 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tips/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftips%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 43 | [open_in_new](https://bgoonz-blog.netlify.app/docs/tutorials/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Ftutorials%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 44 | [open_in_new](https://bgoonz-blog.netlify.app/mailto:bryan.guner@gmail.com 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fmailto%3Abryan.guner%40gmail.com&se=googlebot 'Check this page with SE bot simulator') |
        +| 45 | [open_in_new](https://bgoonz-blog.netlify.app/%20https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA?sub_confirmation=1 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2F+https%3A%2F%2Fwww.youtube.com%2Fchannel%2FUC9-rYyUMsnEBK8G8fCyrXXA%3Fsub_confirmation%3D1&se=googlebot 'Check this page with SE bot simulator') |
        +| 46 | [open_in_new](https://bgoonz-blog.netlify.app/about:blank 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fabout%3Ablank&se=googlebot 'Check this page with SE bot simulator') |
         
        -#### blockRestricted with [robots.txt](https://bgoonz-blog.netlify.app/robots.txt)
        +#### blockRestricted with [robots.txt](https://bgoonz-blog.netlify.app/robots.txt)
         
         none found
         
         #### blockRestricted with rel="nofollow" attribute
         
        -| 1 | [open_in_new](https://www.freefind.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.freefind.com&se=googlebot "Check this page with SE bot simulator") |
        -| 2 | [open_in_new](https://www.freefind.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.freefind.com&se=googlebot "Check this page with SE bot simulator") |
        -| 3 | [open_in_new](https://www.livechatinc.com/chat-with/13199361/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.livechatinc.com%2Fchat-with%2F13199361%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 4 | [open_in_new](https://www.google.com/maps/dir/?api=1&destination=40.7670206,%20-74.01698809999999 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.google.com%2Fmaps%2Fdir%2F%3Fapi%3D1%26amp%3Bdestination%3D40.7670206%2C+-74.01698809999999&se=googlebot "Check this page with SE bot simulator") |
        -| 5 | [open_in_new](https://google.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgoogle.com&se=googlebot "Check this page with SE bot simulator") |
        +| 1 | [open_in_new](https://www.freefind.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.freefind.com&se=googlebot 'Check this page with SE bot simulator') |
        +| 2 | [open_in_new](https://www.freefind.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.freefind.com&se=googlebot 'Check this page with SE bot simulator') |
        +| 3 | [open_in_new](https://www.livechatinc.com/chat-with/13199361/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.livechatinc.com%2Fchat-with%2F13199361%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 4 | [open_in_new](https://www.google.com/maps/dir/?api=1&destination=40.7670206,%20-74.01698809999999 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.google.com%2Fmaps%2Fdir%2F%3Fapi%3D1%26amp%3Bdestination%3D40.7670206%2C+-74.01698809999999&se=googlebot 'Check this page with SE bot simulator') |
        +| 5 | [open_in_new](https://google.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgoogle.com&se=googlebot 'Check this page with SE bot simulator') |
         
         #### External URLs
         
        -| 1 | [open_in_new](https://minnesotafreedomfund.org/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fminnesotafreedomfund.org%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 2 | [open_in_new](http://blmbadge.unicornplatform.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=http%3A%2F%2Fblmbadge.unicornplatform.com&se=googlebot "Check this page with SE bot simulator") |
        -| 3 | [open_in_new](https://bgoonz.blogspot.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.blogspot.com%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 4 | [open_in_new](https://blog-w-comments.vercel.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fblog-w-comments.vercel.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 5 | [open_in_new](https://github.com/bgoonz/Learning-Assets "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2FLearning-Assets&se=googlebot "Check this page with SE bot simulator") |
        -| 6 | [open_in_new](https://lambda-resources.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Flambda-resources.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 7 | [open_in_new](https://web-dev-resource-hub.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fweb-dev-resource-hub.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 8 | [open_in_new](https://bryan-guner.gitbook.io/my-docs/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbryan-guner.gitbook.io%2Fmy-docs%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 9 | [open_in_new](https://potluck-landing.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fpotluck-landing.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 10 | [open_in_new](https://meditate42app.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmeditate42app.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 11 | [open_in_new](https://panoramic-eggplant-452e4.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fpanoramic-eggplant-452e4.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 12 | [open_in_new](https://bgoonz.github.io/searchAwesome/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.github.io%2FsearchAwesome%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 13 | [open_in_new](https://bg-portfolio.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbg-portfolio.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 14 | [open_in_new](https://a.familypromiseservicetracker.dev/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fa.familypromiseservicetracker.dev%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 15 | [open_in_new](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2FRevamped-Automatic-Guitar-Effect-Triggering&se=googlebot "Check this page with SE bot simulator") |
        -| 16 | [open_in_new](https://friendly-panda-b61ab.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Ffriendly-panda-b61ab.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 17 | [open_in_new](https://bgoonz-blog-v3-0.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog-v3-0.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 18 | [open_in_new](https://bgoonz-games.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-games.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 19 | [open_in_new](https://bgoonz-cv.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-cv.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 20 | [open_in_new](https://project-portfolio42.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fproject-portfolio42.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 21 | [open_in_new](https://web-dev-hub.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fweb-dev-hub.com%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 22 | [open_in_new](https://bgoonz.github.io/github-stats-website/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.github.io%2Fgithub-stats-website%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 23 | [open_in_new](https://githtmlpreview.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithtmlpreview.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 24 | [open_in_new](https://devtools42.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdevtools42.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 25 | [open_in_new](https://ternary42.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fternary42.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 26 | [open_in_new](https://determined-dijkstra-ee7390.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdetermined-dijkstra-ee7390.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 27 | [open_in_new](https://github.com/bgoonz/web-dev-setup-checker "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2Fweb-dev-setup-checker&se=googlebot "Check this page with SE bot simulator") |
        -| 28 | [open_in_new](https://web-dev-interview-prep-quiz-website.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fweb-dev-interview-prep-quiz-website.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 29 | [open_in_new](https://github.com/search/advanced "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fsearch%2Fadvanced&se=googlebot "Check this page with SE bot simulator") |
        -| 30 | [open_in_new](https://github.com/bgoonz/BGOONZ_BLOG_2.0 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2FBGOONZ_BLOG_2.0&se=googlebot "Check this page with SE bot simulator") |
        -| 31 | [open_in_new](https://www.vagrantup.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.vagrantup.com%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 32 | [open_in_new](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.youtube.com%2Fchannel%2FUC9-rYyUMsnEBK8G8fCyrXXA%2Fvideos&se=googlebot "Check this page with SE bot simulator") |
        -| 33 | [open_in_new](https://www.instagram.com/bgoonz/?hl=en "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.instagram.com%2Fbgoonz%2F%3Fhl%3Den&se=googlebot "Check this page with SE bot simulator") |
        -| 34 | [open_in_new](https://www.pinterest.com/bryanguner/_saved/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.pinterest.com%2Fbryanguner%2F_saved%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 35 | [open_in_new](https://www.linkedin.com/in/bryan-guner-046199128/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fbryan-guner-046199128%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 36 | [open_in_new](https://webpack.js.org/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwebpack.js.org%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 37 | [open_in_new](https://www.adobe.com/products/xd.html "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.adobe.com%2Fproducts%2Fxd.html&se=googlebot "Check this page with SE bot simulator") |
        -| 38 | [open_in_new](https://app.netlify.com/sites/bgoonz-blog/deploys "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fapp.netlify.com%2Fsites%2Fbgoonz-blog%2Fdeploys&se=googlebot "Check this page with SE bot simulator") |
        -| 39 | [open_in_new](https://github.com/bgoonz/github-readme-activity-graph "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2Fgithub-readme-activity-graph&se=googlebot "Check this page with SE bot simulator") |
        -| 40 | [open_in_new](https://sidebar-blog.netlify.app/contact/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsidebar-blog.netlify.app%2Fcontact%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 41 | [open_in_new](https://medium.com/star-gazers/a-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmedium.com%2Fstar-gazers%2Fa-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522&se=googlebot "Check this page with SE bot simulator") |
        -| 42 | [open_in_new](https://bgoonzblog20master.gatsbyjs.io/docs/python/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonzblog20master.gatsbyjs.io%2Fdocs%2Fpython%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 43 | [open_in_new](https://bryanguner.medium.com/introductory-react-part-2-cda01615a186 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbryanguner.medium.com%2Fintroductory-react-part-2-cda01615a186&se=googlebot "Check this page with SE bot simulator") |
        -| 44 | [open_in_new](https://dev.to/bgoonz/scope-and-context-in-javascript-5cma "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdev.to%2Fbgoonz%2Fscope-and-context-in-javascript-5cma&se=googlebot "Check this page with SE bot simulator") |
        -| 45 | [open_in_new](https://mihirbeg28.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmihirbeg28.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 46 | [open_in_new](https://www.algolia.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.algolia.com%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 47 | [open_in_new](https://github.com/tensorflow/tensorflow "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Ftensorflow%2Ftensorflow&se=googlebot "Check this page with SE bot simulator") |
        -| 48 | [open_in_new](https://www.allaboutthejersey.com/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.allaboutthejersey.com%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 49 | [open_in_new](https://en.wikipedia.org/wiki/File:OldDevils.png "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFile%3AOldDevils.png&se=googlebot "Check this page with SE bot simulator") |
        -| 50 | [open_in_new](https://en.wikipedia.org/wiki/Sean_Avery "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FSean_Avery&se=googlebot "Check this page with SE bot simulator") |
        -| 51 | [open_in_new](https://en.wikipedia.org/wiki/New_York_Rangers "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FNew_York_Rangers&se=googlebot "Check this page with SE bot simulator") |
        -| 52 | [open_in_new](https://en.wikipedia.org/wiki/2008_Stanley_Cup_playoffs "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2F2008_Stanley_Cup_playoffs&se=googlebot "Check this page with SE bot simulator") |
        -| 53 | [open_in_new](https://en.wikipedia.org/wiki/Devils%E2%80%93Rangers_rivalry "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDevils%25E2%2580%2593Rangers_rivalry&se=googlebot "Check this page with SE bot simulator") |
        -| 54 | [open_in_new](https://github.com/bgoonz/resume-cv-portfolio-samples/raw/master/2021-resume/bryan-guner-resume-2021.pdf "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2Fresume-cv-portfolio-samples%2Fraw%2Fmaster%2F2021-resume%2Fbryan-guner-resume-2021.pdf&se=googlebot "Check this page with SE bot simulator") |
        -| 55 | [open_in_new](https://1drv.ms/b/s!AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2F1drv.ms%2Fb%2Fs%21AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A&se=googlebot "Check this page with SE bot simulator") |
        -| 56 | [open_in_new](https://mihirbegmusiclab.netlify.app/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmihirbegmusiclab.netlify.app%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 57 | [open_in_new](https://webdevhub.jetbrains.space/oauth/auth/invite/419dd305ba717a392a02aa5b4e41e09c "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwebdevhub.jetbrains.space%2Foauth%2Fauth%2Finvite%2F419dd305ba717a392a02aa5b4e41e09c&se=googlebot "Check this page with SE bot simulator") |
        -| 58 | [open_in_new](https://search.freefind.com/siteindex.html?si=14588965 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsearch.freefind.com%2Fsiteindex.html%3Fsi%3D14588965&se=googlebot "Check this page with SE bot simulator") |
        -| 59 | [open_in_new](https://search.freefind.com/find.html?si=14588965&m=0&p=0 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsearch.freefind.com%2Ffind.html%3Fsi%3D14588965%26amp%3Bm%3D0%26amp%3Bp%3D0&se=googlebot "Check this page with SE bot simulator") |
        -| 60 | [open_in_new](https://search.freefind.com/find.html?si=14588965&pid=a "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsearch.freefind.com%2Ffind.html%3Fsi%3D14588965%26amp%3Bpid%3Da&se=googlebot "Check this page with SE bot simulator") |
        -| 61 | [open_in_new](https://pdfcrowd.com/url_to_pdf/? "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fpdfcrowd.com%2Furl_to_pdf%2F%3F&se=googlebot "Check this page with SE bot simulator") |
        -| 62 | [open_in_new](https://random-static-html-deploys.netlify.app/blm.html "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Frandom-static-html-deploys.netlify.app%2Fblm.html&se=googlebot "Check this page with SE bot simulator") |
        -| 63 | [open_in_new](https://twitter.com/bgooonz "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Ftwitter.com%2Fbgooonz&se=googlebot "Check this page with SE bot simulator") |
        -| 64 | [open_in_new](https://github.com/bgoonz "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz&se=googlebot "Check this page with SE bot simulator") |
        -| 65 | [open_in_new](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.youtube.com%2Fchannel%2FUC9-rYyUMsnEBK8G8fCyrXXA&se=googlebot "Check this page with SE bot simulator") |
        -| 66 | [open_in_new](https://dev.to/bgoonz "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdev.to%2Fbgoonz&se=googlebot "Check this page with SE bot simulator") |
        -| 67 | [open_in_new](https://www.livechatinc.com/?welcome "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.livechatinc.com%2F%3Fwelcome&se=googlebot "Check this page with SE bot simulator") |
        -| 68 | [open_in_new](https://elfsight.com/click-to-call-widget/?utm_source=websites&utm_medium=clients&utm_content=click-to-call&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Felfsight.com%2Fclick-to-call-widget%2F%3Futm_source%3Dwebsites%26amp%3Butm_medium%3Dclients%26amp%3Butm_content%3Dclick-to-call%26amp%3Butm_term%3Dbgoonz-blog.netlify.app%26amp%3Butm_campaign%3Dfree-widget&se=googlebot "Check this page with SE bot simulator") |
        -| 69 | [open_in_new](https://elfsight.com/visitor-counter-widget/?utm_source=websites&utm_medium=clients&utm_content=visitor-counter&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Felfsight.com%2Fvisitor-counter-widget%2F%3Futm_source%3Dwebsites%26amp%3Butm_medium%3Dclients%26amp%3Butm_content%3Dvisitor-counter%26amp%3Butm_term%3Dbgoonz-blog.netlify.app%26amp%3Butm_campaign%3Dfree-widget&se=googlebot "Check this page with SE bot simulator") |
        -| 70 | [open_in_new](https://maps.google.com/maps?ll=40.768166,-74.016988&z=17&t=m&hl=en&gl=US&mapclient=apiv3 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmaps.google.com%2Fmaps%3Fll%3D40.768166%2C-74.016988%26amp%3Bz%3D17%26amp%3Bt%3Dm%26amp%3Bhl%3Den%26amp%3Bgl%3DUS%26amp%3Bmapclient%3Dapiv3&se=googlebot "Check this page with SE bot simulator") |
        -| 71 | [open_in_new](https://www.google.com/intl/en_US/help/terms_maps.html "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.google.com%2Fintl%2Fen_US%2Fhelp%2Fterms_maps.html&se=googlebot "Check this page with SE bot simulator") |
        -| 72 | [open_in_new](https://www.google.com/maps/@40.7681663,-74.0169881,17z/data=!10m1!1e1!12b1?source=apiv3&rapsrc=apiv3 "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4040.7681663%2C-74.0169881%2C17z%2Fdata%3D%2110m1%211e1%2112b1%3Fsource%3Dapiv3%26amp%3Brapsrc%3Dapiv3&se=googlebot "Check this page with SE bot simulator") |
        -| 73 | [open_in_new](https://elfsight.com/google-maps-widget/?utm_source=websites&utm_medium=clients&utm_content=google-maps&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Felfsight.com%2Fgoogle-maps-widget%2F%3Futm_source%3Dwebsites%26amp%3Butm_medium%3Dclients%26amp%3Butm_content%3Dgoogle-maps%26amp%3Butm_term%3Dbgoonz-blog.netlify.app%26amp%3Butm_campaign%3Dfree-widget&se=googlebot "Check this page with SE bot simulator") |
        -| 74 | [open_in_new](https://www.addthis.com/website-tools/overview?utm_source=AddThis%20Tools&utm_medium=image "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.addthis.com%2Fwebsite-tools%2Foverview%3Futm_source%3DAddThis%2520Tools%26amp%3Butm_medium%3Dimage&se=googlebot "Check this page with SE bot simulator") |
        -| 75 | [open_in_new](https://www.googletagmanager.com/ns.html?id=GTM-5S5XXNR "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.googletagmanager.com%2Fns.html%3Fid%3DGTM-5S5XXNR&se=googlebot "Check this page with SE bot simulator") |
        -| 76 | [open_in_new](https://random-static-html-deploys.netlify.app/showcase2.html "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Frandom-static-html-deploys.netlify.app%2Fshowcase2.html&se=googlebot "Check this page with SE bot simulator") |
        -| 77 | [open_in_new](https://bgoonz.github.io/fb-and-twitter-api-embeds/ "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.github.io%2Ffb-and-twitter-api-embeds%2F&se=googlebot "Check this page with SE bot simulator") |
        -| 78 | [open_in_new](https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html "Open this page in a new windows") |  | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fs7.addthis.com%2Fstatic%2Fsh.f48a1a04fe8dbf021b4cda1d.html&se=googlebot "Check this page with SE bot simulator")
        +| 1 | [open_in_new](https://minnesotafreedomfund.org/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fminnesotafreedomfund.org%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 2 | [open_in_new](http://blmbadge.unicornplatform.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=http%3A%2F%2Fblmbadge.unicornplatform.com&se=googlebot 'Check this page with SE bot simulator') |
        +| 3 | [open_in_new](https://bgoonz.blogspot.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.blogspot.com%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 4 | [open_in_new](https://blog-w-comments.vercel.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fblog-w-comments.vercel.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 5 | [open_in_new](https://github.com/bgoonz/Learning-Assets 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2FLearning-Assets&se=googlebot 'Check this page with SE bot simulator') |
        +| 6 | [open_in_new](https://lambda-resources.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Flambda-resources.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 7 | [open_in_new](https://web-dev-resource-hub.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fweb-dev-resource-hub.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 8 | [open_in_new](https://bryan-guner.gitbook.io/my-docs/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbryan-guner.gitbook.io%2Fmy-docs%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 9 | [open_in_new](https://potluck-landing.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fpotluck-landing.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 10 | [open_in_new](https://meditate42app.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmeditate42app.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 11 | [open_in_new](https://panoramic-eggplant-452e4.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fpanoramic-eggplant-452e4.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 12 | [open_in_new](https://bgoonz.github.io/searchAwesome/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.github.io%2FsearchAwesome%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 13 | [open_in_new](https://bg-portfolio.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbg-portfolio.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 14 | [open_in_new](https://a.familypromiseservicetracker.dev/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fa.familypromiseservicetracker.dev%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 15 | [open_in_new](https://github.com/bgoonz/Revamped-Automatic-Guitar-Effect-Triggering 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2FRevamped-Automatic-Guitar-Effect-Triggering&se=googlebot 'Check this page with SE bot simulator') |
        +| 16 | [open_in_new](https://friendly-panda-b61ab.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Ffriendly-panda-b61ab.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 17 | [open_in_new](https://bgoonz-blog-v3-0.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-blog-v3-0.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 18 | [open_in_new](https://bgoonz-games.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-games.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 19 | [open_in_new](https://bgoonz-cv.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz-cv.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 20 | [open_in_new](https://project-portfolio42.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fproject-portfolio42.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 21 | [open_in_new](https://web-dev-hub.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fweb-dev-hub.com%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 22 | [open_in_new](https://bgoonz.github.io/github-stats-website/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.github.io%2Fgithub-stats-website%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 23 | [open_in_new](https://githtmlpreview.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithtmlpreview.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 24 | [open_in_new](https://devtools42.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdevtools42.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 25 | [open_in_new](https://ternary42.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fternary42.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 26 | [open_in_new](https://determined-dijkstra-ee7390.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdetermined-dijkstra-ee7390.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 27 | [open_in_new](https://github.com/bgoonz/web-dev-setup-checker 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2Fweb-dev-setup-checker&se=googlebot 'Check this page with SE bot simulator') |
        +| 28 | [open_in_new](https://web-dev-interview-prep-quiz-website.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fweb-dev-interview-prep-quiz-website.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 29 | [open_in_new](https://github.com/search/advanced 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fsearch%2Fadvanced&se=googlebot 'Check this page with SE bot simulator') |
        +| 30 | [open_in_new](https://github.com/bgoonz/BGOONZ_BLOG_2.0 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2FBGOONZ_BLOG_2.0&se=googlebot 'Check this page with SE bot simulator') |
        +| 31 | [open_in_new](https://www.vagrantup.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.vagrantup.com%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 32 | [open_in_new](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA/videos 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.youtube.com%2Fchannel%2FUC9-rYyUMsnEBK8G8fCyrXXA%2Fvideos&se=googlebot 'Check this page with SE bot simulator') |
        +| 33 | [open_in_new](https://www.instagram.com/bgoonz/?hl=en 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.instagram.com%2Fbgoonz%2F%3Fhl%3Den&se=googlebot 'Check this page with SE bot simulator') |
        +| 34 | [open_in_new](https://www.pinterest.com/bryanguner/_saved/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.pinterest.com%2Fbryanguner%2F_saved%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 35 | [open_in_new](https://www.linkedin.com/in/bryan-guner-046199128/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fbryan-guner-046199128%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 36 | [open_in_new](https://webpack.js.org/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwebpack.js.org%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 37 | [open_in_new](https://www.adobe.com/products/xd.html 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.adobe.com%2Fproducts%2Fxd.html&se=googlebot 'Check this page with SE bot simulator') |
        +| 38 | [open_in_new](https://app.netlify.com/sites/bgoonz-blog/deploys 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fapp.netlify.com%2Fsites%2Fbgoonz-blog%2Fdeploys&se=googlebot 'Check this page with SE bot simulator') |
        +| 39 | [open_in_new](https://github.com/bgoonz/github-readme-activity-graph 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2Fgithub-readme-activity-graph&se=googlebot 'Check this page with SE bot simulator') |
        +| 40 | [open_in_new](https://sidebar-blog.netlify.app/contact/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsidebar-blog.netlify.app%2Fcontact%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 41 | [open_in_new](https://medium.com/star-gazers/a-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmedium.com%2Fstar-gazers%2Fa-quick-guide-to-big-o-notation-memoization-tabulation-and-sorting-algorithms-by-example-803ff193c522&se=googlebot 'Check this page with SE bot simulator') |
        +| 42 | [open_in_new](https://bgoonzblog20master.gatsbyjs.io/docs/python/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonzblog20master.gatsbyjs.io%2Fdocs%2Fpython%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 43 | [open_in_new](https://bryanguner.medium.com/introductory-react-part-2-cda01615a186 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbryanguner.medium.com%2Fintroductory-react-part-2-cda01615a186&se=googlebot 'Check this page with SE bot simulator') |
        +| 44 | [open_in_new](https://dev.to/bgoonz/scope-and-context-in-javascript-5cma 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdev.to%2Fbgoonz%2Fscope-and-context-in-javascript-5cma&se=googlebot 'Check this page with SE bot simulator') |
        +| 45 | [open_in_new](https://mihirbeg28.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmihirbeg28.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 46 | [open_in_new](https://www.algolia.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.algolia.com%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 47 | [open_in_new](https://github.com/tensorflow/tensorflow 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Ftensorflow%2Ftensorflow&se=googlebot 'Check this page with SE bot simulator') |
        +| 48 | [open_in_new](https://www.allaboutthejersey.com/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.allaboutthejersey.com%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 49 | [open_in_new](https://en.wikipedia.org/wiki/File:OldDevils.png 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFile%3AOldDevils.png&se=googlebot 'Check this page with SE bot simulator') |
        +| 50 | [open_in_new](https://en.wikipedia.org/wiki/Sean_Avery 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FSean_Avery&se=googlebot 'Check this page with SE bot simulator') |
        +| 51 | [open_in_new](https://en.wikipedia.org/wiki/New_York_Rangers 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FNew_York_Rangers&se=googlebot 'Check this page with SE bot simulator') |
        +| 52 | [open_in_new](https://en.wikipedia.org/wiki/2008_Stanley_Cup_playoffs 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2F2008_Stanley_Cup_playoffs&se=googlebot 'Check this page with SE bot simulator') |
        +| 53 | [open_in_new](https://en.wikipedia.org/wiki/Devils%E2%80%93Rangers_rivalry 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDevils%25E2%2580%2593Rangers_rivalry&se=googlebot 'Check this page with SE bot simulator') |
        +| 54 | [open_in_new](https://github.com/bgoonz/resume-cv-portfolio-samples/raw/master/2021-resume/bryan-guner-resume-2021.pdf 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz%2Fresume-cv-portfolio-samples%2Fraw%2Fmaster%2F2021-resume%2Fbryan-guner-resume-2021.pdf&se=googlebot 'Check this page with SE bot simulator') |
        +| 55 | [open_in_new](https://1drv.ms/b/s!AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2F1drv.ms%2Fb%2Fs%21AkGiZ9n9CRDSpLsZsnPtiN7p77vq6A&se=googlebot 'Check this page with SE bot simulator') |
        +| 56 | [open_in_new](https://mihirbegmusiclab.netlify.app/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmihirbegmusiclab.netlify.app%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 57 | [open_in_new](https://webdevhub.jetbrains.space/oauth/auth/invite/419dd305ba717a392a02aa5b4e41e09c 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwebdevhub.jetbrains.space%2Foauth%2Fauth%2Finvite%2F419dd305ba717a392a02aa5b4e41e09c&se=googlebot 'Check this page with SE bot simulator') |
        +| 58 | [open_in_new](https://search.freefind.com/siteindex.html?si=14588965 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsearch.freefind.com%2Fsiteindex.html%3Fsi%3D14588965&se=googlebot 'Check this page with SE bot simulator') |
        +| 59 | [open_in_new](https://search.freefind.com/find.html?si=14588965&m=0&p=0 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsearch.freefind.com%2Ffind.html%3Fsi%3D14588965%26amp%3Bm%3D0%26amp%3Bp%3D0&se=googlebot 'Check this page with SE bot simulator') |
        +| 60 | [open_in_new](https://search.freefind.com/find.html?si=14588965&pid=a 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fsearch.freefind.com%2Ffind.html%3Fsi%3D14588965%26amp%3Bpid%3Da&se=googlebot 'Check this page with SE bot simulator') |
        +| 61 | [open_in_new](https://pdfcrowd.com/url_to_pdf/? 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fpdfcrowd.com%2Furl_to_pdf%2F%3F&se=googlebot 'Check this page with SE bot simulator') |
        +| 62 | [open_in_new](https://random-static-html-deploys.netlify.app/blm.html 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Frandom-static-html-deploys.netlify.app%2Fblm.html&se=googlebot 'Check this page with SE bot simulator') |
        +| 63 | [open_in_new](https://twitter.com/bgooonz 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Ftwitter.com%2Fbgooonz&se=googlebot 'Check this page with SE bot simulator') |
        +| 64 | [open_in_new](https://github.com/bgoonz 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fgithub.com%2Fbgoonz&se=googlebot 'Check this page with SE bot simulator') |
        +| 65 | [open_in_new](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.youtube.com%2Fchannel%2FUC9-rYyUMsnEBK8G8fCyrXXA&se=googlebot 'Check this page with SE bot simulator') |
        +| 66 | [open_in_new](https://dev.to/bgoonz 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fdev.to%2Fbgoonz&se=googlebot 'Check this page with SE bot simulator') |
        +| 67 | [open_in_new](https://www.livechatinc.com/?welcome 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.livechatinc.com%2F%3Fwelcome&se=googlebot 'Check this page with SE bot simulator') |
        +| 68 | [open_in_new](https://elfsight.com/click-to-call-widget/?utm_source=websites&utm_medium=clients&utm_content=click-to-call&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Felfsight.com%2Fclick-to-call-widget%2F%3Futm_source%3Dwebsites%26amp%3Butm_medium%3Dclients%26amp%3Butm_content%3Dclick-to-call%26amp%3Butm_term%3Dbgoonz-blog.netlify.app%26amp%3Butm_campaign%3Dfree-widget&se=googlebot 'Check this page with SE bot simulator') |
        +| 69 | [open_in_new](https://elfsight.com/visitor-counter-widget/?utm_source=websites&utm_medium=clients&utm_content=visitor-counter&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Felfsight.com%2Fvisitor-counter-widget%2F%3Futm_source%3Dwebsites%26amp%3Butm_medium%3Dclients%26amp%3Butm_content%3Dvisitor-counter%26amp%3Butm_term%3Dbgoonz-blog.netlify.app%26amp%3Butm_campaign%3Dfree-widget&se=googlebot 'Check this page with SE bot simulator') |
        +| 70 | [open_in_new](https://maps.google.com/maps?ll=40.768166,-74.016988&z=17&t=m&hl=en&gl=US&mapclient=apiv3 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fmaps.google.com%2Fmaps%3Fll%3D40.768166%2C-74.016988%26amp%3Bz%3D17%26amp%3Bt%3Dm%26amp%3Bhl%3Den%26amp%3Bgl%3DUS%26amp%3Bmapclient%3Dapiv3&se=googlebot 'Check this page with SE bot simulator') |
        +| 71 | [open_in_new](https://www.google.com/intl/en_US/help/terms_maps.html 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.google.com%2Fintl%2Fen_US%2Fhelp%2Fterms_maps.html&se=googlebot 'Check this page with SE bot simulator') |
        +| 72 | [open_in_new](https://www.google.com/maps/@40.7681663,-74.0169881,17z/data=!10m1!1e1!12b1?source=apiv3&rapsrc=apiv3 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4040.7681663%2C-74.0169881%2C17z%2Fdata%3D%2110m1%211e1%2112b1%3Fsource%3Dapiv3%26amp%3Brapsrc%3Dapiv3&se=googlebot 'Check this page with SE bot simulator') |
        +| 73 | [open_in_new](https://elfsight.com/google-maps-widget/?utm_source=websites&utm_medium=clients&utm_content=google-maps&utm_term=bgoonz-blog.netlify.app&utm_campaign=free-widget 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Felfsight.com%2Fgoogle-maps-widget%2F%3Futm_source%3Dwebsites%26amp%3Butm_medium%3Dclients%26amp%3Butm_content%3Dgoogle-maps%26amp%3Butm_term%3Dbgoonz-blog.netlify.app%26amp%3Butm_campaign%3Dfree-widget&se=googlebot 'Check this page with SE bot simulator') |
        +| 74 | [open_in_new](https://www.addthis.com/website-tools/overview?utm_source=AddThis%20Tools&utm_medium=image 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.addthis.com%2Fwebsite-tools%2Foverview%3Futm_source%3DAddThis%2520Tools%26amp%3Butm_medium%3Dimage&se=googlebot 'Check this page with SE bot simulator') |
        +| 75 | [open_in_new](https://www.googletagmanager.com/ns.html?id=GTM-5S5XXNR 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fwww.googletagmanager.com%2Fns.html%3Fid%3DGTM-5S5XXNR&se=googlebot 'Check this page with SE bot simulator') |
        +| 76 | [open_in_new](https://random-static-html-deploys.netlify.app/showcase2.html 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Frandom-static-html-deploys.netlify.app%2Fshowcase2.html&se=googlebot 'Check this page with SE bot simulator') |
        +| 77 | [open_in_new](https://bgoonz.github.io/fb-and-twitter-api-embeds/ 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fbgoonz.github.io%2Ffb-and-twitter-api-embeds%2F&se=googlebot 'Check this page with SE bot simulator') |
        +| 78 | [open_in_new](https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html 'Open this page in a new windows') | | [search](https://www.xml-sitemaps.com/se-bot-simulator.html?go=1&pageurl=https%3A%2F%2Fs7.addthis.com%2Fstatic%2Fsh.f48a1a04fe8dbf021b4cda1d.html&se=googlebot 'Check this page with SE bot simulator')
         
        - |
        \ No newline at end of file
        +|
        diff --git a/notes/BGOONZ_BLOG_2.0.wiki/sourcecode.md.md b/notes/BGOONZ_BLOG_2.0.wiki/sourcecode.md.md
        index 5995b16955..123a8a30e1 100644
        --- a/notes/BGOONZ_BLOG_2.0.wiki/sourcecode.md.md
        +++ b/notes/BGOONZ_BLOG_2.0.wiki/sourcecode.md.md
        @@ -7,291 +7,291 @@
         .
         ├── Combined_____-_____Doc.md
         ├── components
        -│   ├── ActionLink.js
        -│   ├── CtaButtons.js
        -│   ├── DarkToggle
        -│   │   ├── index.js
        -│   │   └── styles.js
        -│   ├── DocsMenu.js
        -│   ├── DocsSubmenu.js
        -│   ├── Footer.js
        -│   ├── Header.js
        -│   ├── Icon.js
        -│   ├── Layout.js
        -│   ├── SectionContent.js
        -│   ├── SectionCta.js
        -│   ├── SectionDocs.js
        -│   ├── SectionGrid.js
        -│   ├── SectionHero.js
        -│   ├── Submenu.js
        -│   ├── global.css
        -│   └── index.js
        +│   ├── ActionLink.js
        +│   ├── CtaButtons.js
        +│   ├── DarkToggle
        +│   │   ├── index.js
        +│   │   └── styles.js
        +│   ├── DocsMenu.js
        +│   ├── DocsSubmenu.js
        +│   ├── Footer.js
        +│   ├── Header.js
        +│   ├── Icon.js
        +│   ├── Layout.js
        +│   ├── SectionContent.js
        +│   ├── SectionCta.js
        +│   ├── SectionDocs.js
        +│   ├── SectionGrid.js
        +│   ├── SectionHero.js
        +│   ├── Submenu.js
        +│   ├── global.css
        +│   └── index.js
         ├── data
        -│   └── doc_sections.yml
        +│   └── doc_sections.yml
         ├── hooks
        -│   ├── addScript.js
        -│   ├── index.js
        -│   ├── useDarkMode.js
        -│   ├── useEventListener.js
        -│   ├── useMediaQuery.js
        -│   ├── useOnClickOutside.js
        -│   ├── useQueryParam.js
        -│   ├── useSize.js
        -│   └── useStorage.js
        +│   ├── addScript.js
        +│   ├── index.js
        +│   ├── useDarkMode.js
        +│   ├── useEventListener.js
        +│   ├── useMediaQuery.js
        +│   ├── useOnClickOutside.js
        +│   ├── useQueryParam.js
        +│   ├── useSize.js
        +│   └── useStorage.js
         ├── html.js
         ├── pages
        -│   ├── blog
        -│   │   ├── 300-react-questions.md
        -│   │   ├── awesome-graphql.md
        -│   │   ├── big-o-complexity.md
        -│   │   ├── blog-archive.md
        -│   │   ├── blogwcomments.md
        -│   │   ├── data-structures.md
        -│   │   ├── flow-control-in-python.md
        -│   │   ├── functions-in-python.md
        -│   │   ├── git-gateway.md
        -│   │   ├── index.md
        -│   │   ├── interview-questions-js.md
        -│   │   ├── netlify-cms.md
        -│   │   ├── platform-docs.md
        -│   │   ├── python-for-js-dev.md
        -│   │   ├── python-resources.md
        -│   │   ├── web-dev-trends.md
        -│   │   └── web-scraping.md
        -│   ├── docs
        -│   │   ├── about
        -│   │   │   ├── eng-portfolio.md
        -│   │   │   ├── ideas-for-this-website.md
        -│   │   │   ├── index.md
        -│   │   │   ├── intrests.md
        -│   │   │   ├── job-search.md
        -│   │   │   └── resume.md
        -│   │   ├── articles
        -│   │   │   ├── basic-web-dev.md
        -│   │   │   ├── buffers.md
        -│   │   │   ├── dev-dep.md
        -│   │   │   ├── event-loop.md
        -│   │   │   ├── fs-module.md
        -│   │   │   ├── how-the-web-works.md
        -│   │   │   ├── http.md
        -│   │   │   ├── index.md
        -│   │   │   ├── install.md
        -│   │   │   ├── intro.md
        -│   │   │   ├── modules.md
        -│   │   │   ├── nextjs.md
        -│   │   │   ├── node-api-express.md
        -│   │   │   ├── node-cli-args.md
        -│   │   │   ├── node-common-modules.md
        -│   │   │   ├── node-env-variables.md
        -│   │   │   ├── node-js-language.md
        -│   │   │   ├── node-package-manager.md
        -│   │   │   ├── node-repl.md
        -│   │   │   ├── node-run-cli.md
        -│   │   │   ├── nodejs.md
        -│   │   │   ├── nodevsbrowser.md
        -│   │   │   ├── npm.md
        -│   │   │   ├── npx.md
        -│   │   │   ├── os-module.md
        -│   │   │   ├── reading-files.md
        -│   │   │   ├── semantic-html.md
        -│   │   │   ├── semantic.md
        -│   │   │   ├── the-uniform-resource-locator-(url).md
        -│   │   │   ├── understanding-firebase.md
        -│   │   │   ├── v8.md
        -│   │   │   ├── web-standards-checklist.md
        -│   │   │   ├── webdev-tools.md
        -│   │   │   └── writing-files.md
        -│   │   ├── audio
        -│   │   │   ├── audio-feature-extraction.md
        -│   │   │   ├── audio.md
        -│   │   │   ├── dfft.md
        -│   │   │   ├── discrete-fft.md
        -│   │   │   ├── dtw-python-explained.md
        -│   │   │   ├── dynamic-time-warping.md
        -│   │   │   ├── index.md
        -│   │   │   └── web-audio-api.md
        -│   │   ├── career
        -│   │   │   ├── dev-interview.md
        -│   │   │   ├── index.md
        -│   │   │   ├── interview-dos-n-donts.md
        -│   │   │   └── job-boards.md
        -│   │   ├── community
        -│   │   │   ├── an-open-letter-2-future-developers.md
        -│   │   │   ├── index.md
        -│   │   │   └── video-chat.md
        -│   │   ├── content
        -│   │   │   ├── algo.md
        -│   │   │   ├── archive.md
        -│   │   │   ├── gatsby-Queries-Mutations.md
        -│   │   │   ├── history-api.md
        -│   │   │   ├── index.md
        -│   │   │   ├── main-projects.md
        -│   │   │   └── trouble-shooting.md
        -│   │   ├── data-structures
        -│   │   │   └── index.md
        -│   │   ├── docs
        -│   │   │   ├── appendix.md
        -│   │   │   ├── art-of-command-line.md
        -│   │   │   ├── bash.md
        -│   │   │   ├── content.md
        -│   │   │   ├── css.md
        -│   │   │   ├── data-structures-docs.md
        -│   │   │   ├── es-6-features.md
        -│   │   │   ├── git-reference.md
        -│   │   │   ├── git-repos.md
        -│   │   │   ├── html-spec.md
        -│   │   │   ├── index.md
        -│   │   │   ├── markdown.md
        -│   │   │   ├── no-whiteboarding.md
        -│   │   │   ├── node-docs-complete.md
        -│   │   │   ├── node-docs-full.md
        -│   │   │   ├── regex-in-js.md
        -│   │   │   └── sitemap.md
        -│   │   ├── faq
        -│   │   │   ├── contact.md
        -│   │   │   ├── index.md
        -│   │   │   └── plug-ins.md
        -│   │   ├── gists.md
        -│   │   ├── index.md
        -│   │   ├── interact
        -│   │   │   ├── callstack-visual.md
        -│   │   │   ├── clock.md
        -│   │   │   ├── index.md
        -│   │   │   ├── jupyter-notebooks.md
        -│   │   │   ├── other-sites.md
        -│   │   │   └── video-chat.md
        -│   │   ├── interview
        -│   │   │   ├── index.md
        -│   │   │   ├── job-search-nav.md
        -│   │   │   └── review-concepts.md
        -│   │   ├── javascript
        -│   │   │   ├── arrow-functions.md
        -│   │   │   ├── asyncjs.md
        -│   │   │   ├── await-keyword.md
        -│   │   │   ├── bigo.md
        -│   │   │   ├── clean-code.md
        -│   │   │   ├── constructor-functions.md
        -│   │   │   ├── index.md
        -│   │   │   ├── promises.md
        -│   │   │   ├── review.md
        -│   │   │   └── this-is-about-this.md
        -│   │   ├── leetcode
        -│   │   │   └── index.md
        -│   │   ├── privacy-policy.md
        -│   │   ├── projects
        -│   │   │   ├── embeded-websites.md
        -│   │   │   ├── index.md
        -│   │   │   ├── list-of-projects.md
        -│   │   │   ├── mini-projects.md
        -│   │   │   └── my-websites.md
        -│   │   ├── python
        -│   │   │   ├── at-length.md
        -│   │   │   ├── cheat-sheet.md
        -│   │   │   ├── comprehensive-guide.md
        -│   │   │   ├── examples.md
        -│   │   │   ├── flow-control.md
        -│   │   │   ├── functions.md
        -│   │   │   ├── google-sheets-api.md
        -│   │   │   ├── index.md
        -│   │   │   ├── intro-for-js-devs.md
        -│   │   │   ├── python-ds.md
        -│   │   │   └── snippets.md
        -│   │   ├── quick-reference
        -│   │   │   ├── Emmet.md
        -│   │   │   ├── all-emojis.md
        -│   │   │   ├── create-react-app.md
        -│   │   │   ├── git-bash.md
        -│   │   │   ├── git-tricks.md
        -│   │   │   ├── google-firebase.md
        -│   │   │   ├── heroku-error-codes.md
        -│   │   │   ├── index.md
        -│   │   │   ├── installation.md
        -│   │   │   ├── markdown-dropdowns.md
        -│   │   │   ├── minifiction.md
        -│   │   │   ├── new-repo-instructions.md
        -│   │   │   ├── psql-setup.md
        -│   │   │   ├── pull-request-rubric.md
        -│   │   │   ├── quick-links.md
        -│   │   │   ├── topRepos.md
        -│   │   │   ├── understanding-path.md
        -│   │   │   └── vscode-themes.md
        -│   │   ├── react
        -│   │   │   ├── ajax-n-apis.md
        -│   │   │   ├── cheatsheet.md
        -│   │   │   ├── createReactApp.md
        -│   │   │   ├── demo.md
        -│   │   │   ├── dont-use-index-as-keys.md
        -│   │   │   ├── index.md
        -│   │   │   ├── jsx.md
        -│   │   │   ├── react-docs.md
        -│   │   │   ├── react-in-depth.md
        -│   │   │   ├── react2.md
        -│   │   │   └── render-elements.md
        -│   │   ├── reference
        -│   │   │   ├── awesome-lists.md
        -│   │   │   ├── awesome-static.md
        -│   │   │   ├── bash-commands.md
        -│   │   │   ├── bookmarks.md
        -│   │   │   ├── embed-the-web.md
        -│   │   │   ├── github-search.md
        -│   │   │   ├── google-cloud.md
        -│   │   │   ├── how-2-reinstall-npm.md
        -│   │   │   ├── how-to-kill-a-process.md
        -│   │   │   ├── index.md
        -│   │   │   ├── installing-node.md
        -│   │   │   ├── intro-to-nodejs.md
        -│   │   │   ├── notes-template.md
        -│   │   │   ├── psql.md
        -│   │   │   ├── resources.md
        -│   │   │   ├── vscode.md
        -│   │   │   └── web-api's.md
        -│   │   ├── search.md
        -│   │   ├── sitemap.md
        -│   │   ├── tips
        -│   │   │   ├── array-methods.md
        -│   │   │   ├── index.md
        -│   │   │   └── insert-into-array.md
        -│   │   ├── tools
        -│   │   │   ├── Archive.md
        -│   │   │   ├── data-structures.md
        -│   │   │   ├── dev-utilities.md
        -│   │   │   ├── index.md
        -│   │   │   └── markdown-html.md
        -│   │   └── tutorials
        -│   │       ├── enviorment-setup.md
        -│   │       └── index.md
        -│   ├── index.md
        -│   ├── privacy-policy.md
        -│   ├── readme.md
        -│   └── showcase.md
        +│   ├── blog
        +│   │   ├── 300-react-questions.md
        +│   │   ├── awesome-graphql.md
        +│   │   ├── big-o-complexity.md
        +│   │   ├── blog-archive.md
        +│   │   ├── blogwcomments.md
        +│   │   ├── data-structures.md
        +│   │   ├── flow-control-in-python.md
        +│   │   ├── functions-in-python.md
        +│   │   ├── git-gateway.md
        +│   │   ├── index.md
        +│   │   ├── interview-questions-js.md
        +│   │   ├── netlify-cms.md
        +│   │   ├── platform-docs.md
        +│   │   ├── python-for-js-dev.md
        +│   │   ├── python-resources.md
        +│   │   ├── web-dev-trends.md
        +│   │   └── web-scraping.md
        +│   ├── docs
        +│   │   ├── about
        +│   │   │   ├── eng-portfolio.md
        +│   │   │   ├── ideas-for-this-website.md
        +│   │   │   ├── index.md
        +│   │   │   ├── intrests.md
        +│   │   │   ├── job-search.md
        +│   │   │   └── resume.md
        +│   │   ├── articles
        +│   │   │   ├── basic-web-dev.md
        +│   │   │   ├── buffers.md
        +│   │   │   ├── dev-dep.md
        +│   │   │   ├── event-loop.md
        +│   │   │   ├── fs-module.md
        +│   │   │   ├── how-the-web-works.md
        +│   │   │   ├── http.md
        +│   │   │   ├── index.md
        +│   │   │   ├── install.md
        +│   │   │   ├── intro.md
        +│   │   │   ├── modules.md
        +│   │   │   ├── nextjs.md
        +│   │   │   ├── node-api-express.md
        +│   │   │   ├── node-cli-args.md
        +│   │   │   ├── node-common-modules.md
        +│   │   │   ├── node-env-variables.md
        +│   │   │   ├── node-js-language.md
        +│   │   │   ├── node-package-manager.md
        +│   │   │   ├── node-repl.md
        +│   │   │   ├── node-run-cli.md
        +│   │   │   ├── nodejs.md
        +│   │   │   ├── nodevsbrowser.md
        +│   │   │   ├── npm.md
        +│   │   │   ├── npx.md
        +│   │   │   ├── os-module.md
        +│   │   │   ├── reading-files.md
        +│   │   │   ├── semantic-html.md
        +│   │   │   ├── semantic.md
        +│   │   │   ├── the-uniform-resource-locator-(url).md
        +│   │   │   ├── understanding-firebase.md
        +│   │   │   ├── v8.md
        +│   │   │   ├── web-standards-checklist.md
        +│   │   │   ├── webdev-tools.md
        +│   │   │   └── writing-files.md
        +│   │   ├── audio
        +│   │   │   ├── audio-feature-extraction.md
        +│   │   │   ├── audio.md
        +│   │   │   ├── dfft.md
        +│   │   │   ├── discrete-fft.md
        +│   │   │   ├── dtw-python-explained.md
        +│   │   │   ├── dynamic-time-warping.md
        +│   │   │   ├── index.md
        +│   │   │   └── web-audio-api.md
        +│   │   ├── career
        +│   │   │   ├── dev-interview.md
        +│   │   │   ├── index.md
        +│   │   │   ├── interview-dos-n-donts.md
        +│   │   │   └── job-boards.md
        +│   │   ├── community
        +│   │   │   ├── an-open-letter-2-future-developers.md
        +│   │   │   ├── index.md
        +│   │   │   └── video-chat.md
        +│   │   ├── content
        +│   │   │   ├── algo.md
        +│   │   │   ├── archive.md
        +│   │   │   ├── gatsby-Queries-Mutations.md
        +│   │   │   ├── history-api.md
        +│   │   │   ├── index.md
        +│   │   │   ├── main-projects.md
        +│   │   │   └── trouble-shooting.md
        +│   │   ├── data-structures
        +│   │   │   └── index.md
        +│   │   ├── docs
        +│   │   │   ├── appendix.md
        +│   │   │   ├── art-of-command-line.md
        +│   │   │   ├── bash.md
        +│   │   │   ├── content.md
        +│   │   │   ├── css.md
        +│   │   │   ├── data-structures-docs.md
        +│   │   │   ├── es-6-features.md
        +│   │   │   ├── git-reference.md
        +│   │   │   ├── git-repos.md
        +│   │   │   ├── html-spec.md
        +│   │   │   ├── index.md
        +│   │   │   ├── markdown.md
        +│   │   │   ├── no-whiteboarding.md
        +│   │   │   ├── node-docs-complete.md
        +│   │   │   ├── node-docs-full.md
        +│   │   │   ├── regex-in-js.md
        +│   │   │   └── sitemap.md
        +│   │   ├── faq
        +│   │   │   ├── contact.md
        +│   │   │   ├── index.md
        +│   │   │   └── plug-ins.md
        +│   │   ├── gists.md
        +│   │   ├── index.md
        +│   │   ├── interact
        +│   │   │   ├── callstack-visual.md
        +│   │   │   ├── clock.md
        +│   │   │   ├── index.md
        +│   │   │   ├── jupyter-notebooks.md
        +│   │   │   ├── other-sites.md
        +│   │   │   └── video-chat.md
        +│   │   ├── interview
        +│   │   │   ├── index.md
        +│   │   │   ├── job-search-nav.md
        +│   │   │   └── review-concepts.md
        +│   │   ├── javascript
        +│   │   │   ├── arrow-functions.md
        +│   │   │   ├── asyncjs.md
        +│   │   │   ├── await-keyword.md
        +│   │   │   ├── bigo.md
        +│   │   │   ├── clean-code.md
        +│   │   │   ├── constructor-functions.md
        +│   │   │   ├── index.md
        +│   │   │   ├── promises.md
        +│   │   │   ├── review.md
        +│   │   │   └── this-is-about-this.md
        +│   │   ├── leetcode
        +│   │   │   └── index.md
        +│   │   ├── privacy-policy.md
        +│   │   ├── projects
        +│   │   │   ├── embeded-websites.md
        +│   │   │   ├── index.md
        +│   │   │   ├── list-of-projects.md
        +│   │   │   ├── mini-projects.md
        +│   │   │   └── my-websites.md
        +│   │   ├── python
        +│   │   │   ├── at-length.md
        +│   │   │   ├── cheat-sheet.md
        +│   │   │   ├── comprehensive-guide.md
        +│   │   │   ├── examples.md
        +│   │   │   ├── flow-control.md
        +│   │   │   ├── functions.md
        +│   │   │   ├── google-sheets-api.md
        +│   │   │   ├── index.md
        +│   │   │   ├── intro-for-js-devs.md
        +│   │   │   ├── python-ds.md
        +│   │   │   └── snippets.md
        +│   │   ├── quick-reference
        +│   │   │   ├── Emmet.md
        +│   │   │   ├── all-emojis.md
        +│   │   │   ├── create-react-app.md
        +│   │   │   ├── git-bash.md
        +│   │   │   ├── git-tricks.md
        +│   │   │   ├── google-firebase.md
        +│   │   │   ├── heroku-error-codes.md
        +│   │   │   ├── index.md
        +│   │   │   ├── installation.md
        +│   │   │   ├── markdown-dropdowns.md
        +│   │   │   ├── minifiction.md
        +│   │   │   ├── new-repo-instructions.md
        +│   │   │   ├── psql-setup.md
        +│   │   │   ├── pull-request-rubric.md
        +│   │   │   ├── quick-links.md
        +│   │   │   ├── topRepos.md
        +│   │   │   ├── understanding-path.md
        +│   │   │   └── vscode-themes.md
        +│   │   ├── react
        +│   │   │   ├── ajax-n-apis.md
        +│   │   │   ├── cheatsheet.md
        +│   │   │   ├── createReactApp.md
        +│   │   │   ├── demo.md
        +│   │   │   ├── dont-use-index-as-keys.md
        +│   │   │   ├── index.md
        +│   │   │   ├── jsx.md
        +│   │   │   ├── react-docs.md
        +│   │   │   ├── react-in-depth.md
        +│   │   │   ├── react2.md
        +│   │   │   └── render-elements.md
        +│   │   ├── reference
        +│   │   │   ├── awesome-lists.md
        +│   │   │   ├── awesome-static.md
        +│   │   │   ├── bash-commands.md
        +│   │   │   ├── bookmarks.md
        +│   │   │   ├── embed-the-web.md
        +│   │   │   ├── github-search.md
        +│   │   │   ├── google-cloud.md
        +│   │   │   ├── how-2-reinstall-npm.md
        +│   │   │   ├── how-to-kill-a-process.md
        +│   │   │   ├── index.md
        +│   │   │   ├── installing-node.md
        +│   │   │   ├── intro-to-nodejs.md
        +│   │   │   ├── notes-template.md
        +│   │   │   ├── psql.md
        +│   │   │   ├── resources.md
        +│   │   │   ├── vscode.md
        +│   │   │   └── web-api's.md
        +│   │   ├── search.md
        +│   │   ├── sitemap.md
        +│   │   ├── tips
        +│   │   │   ├── array-methods.md
        +│   │   │   ├── index.md
        +│   │   │   └── insert-into-array.md
        +│   │   ├── tools
        +│   │   │   ├── Archive.md
        +│   │   │   ├── data-structures.md
        +│   │   │   ├── dev-utilities.md
        +│   │   │   ├── index.md
        +│   │   │   └── markdown-html.md
        +│   │   └── tutorials
        +│   │       ├── enviorment-setup.md
        +│   │       └── index.md
        +│   ├── index.md
        +│   ├── privacy-policy.md
        +│   ├── readme.md
        +│   └── showcase.md
         ├── sass
        -│   ├── imports
        -│   │   ├── _animations.scss
        -│   │   ├── _buttons.scss
        -│   │   ├── _docs.scss
        -│   │   ├── _footer.scss
        -│   │   ├── _forms.scss
        -│   │   ├── _functions.scss
        -│   │   ├── _general.scss
        -│   │   ├── _header.scss
        -│   │   ├── _helpers.scss
        -│   │   ├── _icons.scss
        -│   │   ├── _palettes.scss
        -│   │   ├── _posts.scss
        -│   │   ├── _prism.scss
        -│   │   ├── _reset.scss
        -│   │   ├── _sections.scss
        -│   │   ├── _structure.scss
        -│   │   ├── _tables.scss
        -│   │   └── _variables.scss
        -│   └── main.scss
        +│   ├── imports
        +│   │   ├── _animations.scss
        +│   │   ├── _buttons.scss
        +│   │   ├── _docs.scss
        +│   │   ├── _footer.scss
        +│   │   ├── _forms.scss
        +│   │   ├── _functions.scss
        +│   │   ├── _general.scss
        +│   │   ├── _header.scss
        +│   │   ├── _helpers.scss
        +│   │   ├── _icons.scss
        +│   │   ├── _palettes.scss
        +│   │   ├── _posts.scss
        +│   │   ├── _prism.scss
        +│   │   ├── _reset.scss
        +│   │   ├── _sections.scss
        +│   │   ├── _structure.scss
        +│   │   ├── _tables.scss
        +│   │   └── _variables.scss
        +│   └── main.scss
         ├── templates
        -│   ├── advanced.js
        -│   ├── blog.js
        -│   ├── docs.js
        -│   ├── page.js
        -│   ├── post.js
        -│   └── templates.md
        +│   ├── advanced.js
        +│   ├── blog.js
        +│   ├── docs.js
        +│   ├── page.js
        +│   ├── post.js
        +│   └── templates.md
         └── utils
             ├── attribute.js
             ├── blm-badge.js
        @@ -325,8 +325,8 @@
         ├── ActionLink.js
         ├── CtaButtons.js
         ├── DarkToggle
        -│   ├── index.js
        -│   └── styles.js
        +│   ├── index.js
        +│   └── styles.js
         ├── DocsMenu.js
         ├── DocsSubmenu.js
         ├── Footer.js
        @@ -1225,7 +1225,7 @@ export default class Submenu extends React.Component {
         }
         ```
         
        -``` js
        +```js
         import ActionLink from './ActionLink';
         import CtaButtons from './CtaButtons';
         import DocsMenu from './DocsMenu';
        @@ -1276,19 +1276,10 @@ export default {
             Layout,
             addScript
         };
        -
         ```
         
        -
        -
        -
        -
        -
        -
         
         
        -
        -
         
        Click To See Template Sourcecode @@ -1303,9 +1294,7 @@ export default { └── post.js ``` - ```js - import React from 'react'; import _ from 'lodash'; import { graphql } from 'gatsby'; @@ -1339,7 +1328,6 @@ export default class Advanced extends React.Component { --- - ```js import React from 'react'; import _ from 'lodash'; @@ -1427,7 +1415,6 @@ export default class Blog extends React.Component { --- - ```js import React from 'react'; import _ from 'lodash'; @@ -1504,7 +1491,6 @@ export default class Docs extends React.Component { --- - ```js import React from 'react'; import _ from 'lodash'; @@ -1554,59 +1540,60 @@ export default class Page extends React.Component { --- - ```js -import React from 'react'; +import React from 'react'; import _ from 'lodash'; import moment from 'moment-strftime'; -import {graphql} from 'gatsby'; +import { graphql } from 'gatsby'; -import {Layout} from '../components/index'; -import {toStyleObj, withPrefix, htmlToReact} from '../utils'; +import { Layout } from '../components/index'; +import { toStyleObj, withPrefix, htmlToReact } from '../utils'; // this minimal GraphQL query ensures that when 'gatsby develop' is running, // any changes to content files are reflected in browser export const query = graphql` - query($url: String) { - sitePage(path: {eq: $url}) { - id + query ($url: String) { + sitePage(path: { eq: $url }) { + id + } } - } `; export default class Post extends React.Component { render() { return ( -
        -
        - {_.get(this.props, 'pageContext.frontmatter.image', null) && ( -
        - )} -
        -
        - -
        -

        {_.get(this.props, 'pageContext.frontmatter.title', null)}

        - {_.get(this.props, 'pageContext.frontmatter.subtitle', null) && ( -
        - {htmlToReact(_.get(this.props, 'pageContext.frontmatter.subtitle', null))} +
        +
        + {_.get(this.props, 'pageContext.frontmatter.image', null) && ( +
        + )} +
        +
        + +
        +

        {_.get(this.props, 'pageContext.frontmatter.title', null)}

        + {_.get(this.props, 'pageContext.frontmatter.subtitle', null) && ( +
        {htmlToReact(_.get(this.props, 'pageContext.frontmatter.subtitle', null))}
        + )} +
        +
        +
        +
        {htmlToReact(_.get(this.props, 'pageContext.html', null))}
        - )} -
        -
        -
        -
        - {htmlToReact(_.get(this.props, 'pageContext.html', null))} -
        -
        -
        +
        ); } } - - ``` -
        + diff --git a/notes/Combined_____-_____Doc.md b/notes/Combined_____-_____Doc.md index c28a5ac178..723d10e048 100644 --- a/notes/Combined_____-_____Doc.md +++ b/notes/Combined_____-_____Doc.md @@ -17,25 +17,25 @@ If you are new to JavaScript, start with the [guide](https://developer.mozilla.o In the JavaScript reference you can find the following chapters: -[Standard built-in objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) +[Standard built-in objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects) This chapter documents all the JavaScript standard built-in objects, along with their methods and properties. -[Statements and declarations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements) +[Statements and declarations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements) JavaScript applications consist of statements with an appropriate syntax. A single statement may span multiple lines. Multiple statements may occur on a single line if each statement is separated by a semicolon. This isn't a keyword, but a group of keywords. -[Expressions and operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators) +[Expressions and operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators) This chapter documents all the JavaScript language operators, expressions and keywords. -Functions +Functions Chapter about JavaScript functions. -[Classes](classes) +[Classes](classes) Chapter about JavaScript classes introduced in ECMAScript 2015. -[Errors](errors) +[Errors](errors) Chapter about specific errors, exceptions and warnings thrown by JavaScript. -[New in JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript) +[New in JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript) Chapter about JavaScript version history. ### More reference pages @@ -56,7 +56,7 @@ The `Math.abs()` function returns the absolute value of a number. That is, it re ### Parameters -`x` +`x` A number. ### Return value @@ -86,7 +86,7 @@ Passing an empty object, an array with more than one member, a non-numeric strin ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Math.abs' in that specification.
        @@ -125,8 +125,8 @@ Passing an empty object, an array with more than one member, a non-numeric strin - [`Math.sign()`](sign) - [`Math.trunc()`](trunc) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs # Math.acos() @@ -141,7 +141,7 @@ The `Math.acos()` function returns the arccosine (in radians) of a number, that ### Parameters -`x` +`x` A number representing a cosine, where `x` is between `-1` and `1`. ### Return value @@ -169,7 +169,7 @@ For values less than -1 or greater than 1, `Math.acos()` returns [`NaN`](../nan) ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.acos
        @@ -209,8 +209,8 @@ For values less than -1 or greater than 1, `Math.acos()` returns [`NaN`](../nan) - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos # Math.acosh() @@ -225,7 +225,7 @@ The `Math.acosh()` function returns the hyperbolic arc-cosine of a number, that ### Parameters -`x` +`x` A number. ### Return value @@ -258,7 +258,7 @@ For all *x* ≥ 1, we have $\\operatorname{arcosh}(x) = \\ln\\left( {x + \\s ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.acosh
        @@ -297,8 +297,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh # Atomics.add() @@ -311,13 +311,13 @@ The static ` Atomics``.add() ` method adds a given value at a given position in ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to add a `value` to. -`value` +`value` The number to add. ### Return value @@ -341,7 +341,7 @@ The old value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.add
        @@ -441,7 +441,7 @@ The addition operator (`+`) produces the sum of numeric operands or string conca ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Addition operator' in that specification.
        @@ -484,8 +484,8 @@ The addition operator (`+`) produces the sum of numeric operands or string conca - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Addition # AggregateError @@ -494,15 +494,15 @@ The `AggregateError` object represents an error when several errors need to be w ## Constructor -[`AggregateError()`](aggregateerror/aggregateerror) +[`AggregateError()`](aggregateerror/aggregateerror) Creates a new `AggregateError` object. ## Instance properties -[`AggregateError.prototype.message`](error/message) +[`AggregateError.prototype.message`](error/message) Error message, defaults to `""`. -[`AggregateError.prototype.name`](error/name) +[`AggregateError.prototype.name`](error/name) Error name, defaults to `AggregateError`. ## Examples @@ -533,7 +533,7 @@ Error name, defaults to `AggregateError`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-aggregate-error-objects
        @@ -607,7 +607,7 @@ The `Promise.all()` method takes an iterable of promises as an input, and return ### Parameters -`iterable` +`iterable` An [iterable](../../iteration_protocols#the_iterable_protocol) object such as an [`Array`](../array). ### Return value @@ -779,7 +779,7 @@ It is possible to change this behavior by handling possible rejections: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.all
        @@ -815,8 +815,8 @@ No - [`Promise`](../promise) - [`Promise.race()`](race) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all # Promise.allSettled() @@ -833,7 +833,7 @@ In comparison, the Promise returned by [`Promise.all()`](all) may be more approp ### Parameters -`iterable` +`iterable` An [iterable](../../iteration_protocols) object, such as an [`Array`](../array), in which each member is a `Promise`. ### Return value @@ -865,7 +865,7 @@ For each outcome object, a `status` string is present. If the status is `fulfill ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.allsettled
        @@ -904,8 +904,8 @@ No - [`Promise`](../promise) - [`Promise.all()`](all) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled # Warning: -file- is being assigned a //\# sourceMappingURL, but already has one @@ -961,7 +961,7 @@ The `anchor()` method creates a string beginning with an `` start ### Parameters -`name` +`name` A string representing a `name` value to put into the generated `` start tag. ### Return value @@ -986,7 +986,7 @@ will output the following HTML: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.anchor
        @@ -1023,8 +1023,8 @@ No - [`String.prototype.link()`](link) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor # Atomics.and() @@ -1037,13 +1037,13 @@ The static ` Atomics``.and() ` method computes a bitwise AND with a given value ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to compute the bitwise AND. -`value` +`value` The number to compute the bitwise AND with. ### Return value @@ -1081,7 +1081,7 @@ For example, a bitwise AND of `5 & 1` results in `0001` which is 1 in decimal. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.and
        @@ -1158,7 +1158,7 @@ Chrome disabled `SharedArrayBuffer` on January 5, 2018 to help reduce the effica ### Parameters -`iterable` +`iterable` An [iterable](../../iteration_protocols#the_iterable_protocol) object, such as an [`Array`](../array). ### Return value @@ -1251,7 +1251,7 @@ In this example, we have a function that fetches an image and returns a blob. We ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.any
        @@ -1289,8 +1289,8 @@ No - [`Promise.all()`](all) - [`Promise.race()`](race) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/any # Function.prototype.apply() @@ -1304,12 +1304,12 @@ The `apply()` method calls a function with a given `this` value, and `arguments` ### Parameters -`thisArg` +`thisArg` The value of `this` provided for the call to `func`. Note that `this` may not be the actual value seen by the method: if the method is a function in [non-strict mode](../../strict_mode) code, [`null`](../null) and [`undefined`](../undefined) will be replaced with the global object, and primitive values will be boxed. This argument is required. -`argsArray` Optional +`argsArray` Optional An array-like object, specifying the arguments with which `func` should be called, or [`null`](../null) or [`undefined`](../undefined) if no arguments should be provided to the function. Starting with ECMAScript 5 these arguments can be a generic array-like object instead of an array. See below for [browser compatibility](#browser_compatibility) information. @@ -1497,13 +1497,13 @@ The type of individual arguments can be determined by indexing `arguments`: ## Properties -[`arguments.callee`](arguments/callee) +[`arguments.callee`](arguments/callee) Reference to the currently executing function that the arguments belong to. Forbidden in strict mode. -[`arguments.length`](arguments/length) +[`arguments.length`](arguments/length) The number of arguments that were passed to the function. -[`arguments[@@iterator]`](arguments/@@iterator) +[`arguments[@@iterator]`](arguments/@@iterator) Returns a new [Array iterator](../global_objects/array/@@iterator) object that contains the values for each index in `arguments`. ## Examples @@ -1605,7 +1605,7 @@ And also: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arguments-exotic-objects
        @@ -1897,7 +1897,7 @@ To help explain these properties and elements, see this example and then refer t The properties and elements returned from this match are as follows: -
        Property/ElementDescriptionExample
        input +
        Property/ElementDescriptionExample
        input
        Read only
        The original string against which the regular expression was matched."cdbBdbsbz"
        index @@ -1913,126 +1913,126 @@ The properties and elements returned from this match are as follows: ## Constructor -[`Array()`](array/array) +[`Array()`](array/array) Creates a new `Array` object. ## Static properties -[`get Array[@@species]`](array/@@species) +[`get Array[@@species]`](array/@@species) The constructor function is used to create derived objects. ## Static methods -[`Array.from()`](array/from) +[`Array.from()`](array/from) Creates a new `Array` instance from an array-like or iterable object. -[`Array.isArray()`](array/isarray) +[`Array.isArray()`](array/isarray) Returns `true` if the argument is an array, or `false` otherwise. -[`Array.of()`](array/of) +[`Array.of()`](array/of) Creates a new `Array` instance with a variable number of arguments, regardless of number or type of the arguments. ## Instance properties -[`Array.prototype.length`](array/length) +[`Array.prototype.length`](array/length) Reflects the number of elements in an array. -[`Array.prototype[@@unscopables]`](array/@@unscopables) +[`Array.prototype[@@unscopables]`](array/@@unscopables) A symbol containing property names to exclude from a [`with`](../statements/with) binding scope. ## Instance methods -[`Array.prototype.at()`](array/at) This is an experimental API that should not be used in production code. +[`Array.prototype.at()`](array/at) This is an experimental API that should not be used in production code. Returns the array item at the given index. Accepts negative integers, which count back from the last item. -[`Array.prototype.concat()`](array/concat) +[`Array.prototype.concat()`](array/concat) Returns a new array that is this array joined with other array(s) and/or value(s). -[`Array.prototype.copyWithin()`](array/copywithin) +[`Array.prototype.copyWithin()`](array/copywithin) Copies a sequence of array elements within the array. -[`Array.prototype.entries()`](array/entries) +[`Array.prototype.entries()`](array/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. -[`Array.prototype.every()`](array/every) +[`Array.prototype.every()`](array/every) Returns `true` if every element in this array satisfies the testing function. -[`Array.prototype.fill()`](array/fill) +[`Array.prototype.fill()`](array/fill) Fills all the elements of an array from a start index to an end index with a static value. -[`Array.prototype.filter()`](array/filter) +[`Array.prototype.filter()`](array/filter) Returns a new array containing all elements of the calling array for which the provided filtering function returns `true`. -[`Array.prototype.find()`](array/find) +[`Array.prototype.find()`](array/find) Returns the found `element` in the array, if some element in the array satisfies the testing function, or `undefined` if not found. -[`Array.prototype.findIndex()`](array/findindex) +[`Array.prototype.findIndex()`](array/findindex) Returns the found index in the array, if an element in the array satisfies the testing function, or `-1` if not found. -[`Array.prototype.forEach()`](array/foreach) +[`Array.prototype.forEach()`](array/foreach) Calls a function for each element in the array. -[`Array.prototype.includes()`](array/includes) +[`Array.prototype.includes()`](array/includes) Determines whether the array contains a value, returning `true` or `false` as appropriate. -[`Array.prototype.indexOf()`](array/indexof) +[`Array.prototype.indexOf()`](array/indexof) Returns the first (least) index of an element within the array equal to an element, or `-1` if none is found. -[`Array.prototype.join()`](array/join) +[`Array.prototype.join()`](array/join) Joins all elements of an array into a string. -[`Array.prototype.keys()`](array/keys) +[`Array.prototype.keys()`](array/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. -[`Array.prototype.lastIndexOf()`](array/lastindexof) +[`Array.prototype.lastIndexOf()`](array/lastindexof) Returns the last (greatest) index of an element within the array equal to an element, or `-1` if none is found. -[`Array.prototype.map()`](array/map) +[`Array.prototype.map()`](array/map) Returns a new array containing the results of calling a function on every element in this array. -[`Array.prototype.pop()`](array/pop) +[`Array.prototype.pop()`](array/pop) Removes the last element from an array and returns that element. -[`Array.prototype.push()`](array/push) +[`Array.prototype.push()`](array/push) Adds one or more elements to the end of an array, and returns the new `length` of the array. -[`Array.prototype.reduce()`](array/reduce) +[`Array.prototype.reduce()`](array/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. -[`Array.prototype.reduceRight()`](array/reduceright) +[`Array.prototype.reduceRight()`](array/reduceright) Apply a function against an accumulator> and each value of the array (from right-to-left) as to reduce it to a single value. -[`Array.prototype.reverse()`](array/reverse) +[`Array.prototype.reverse()`](array/reverse) Reverses the order of the elements of an array _in place_. (First becomes the last, last becomes first.) -[`Array.prototype.shift()`](array/shift) +[`Array.prototype.shift()`](array/shift) Removes the first element from an array and returns that element. -[`Array.prototype.slice()`](array/slice) +[`Array.prototype.slice()`](array/slice) Extracts a section of the calling array and returns a new array. -[`Array.prototype.some()`](array/some) +[`Array.prototype.some()`](array/some) Returns `true` if at least one element in this array satisfies the provided testing function. -[`Array.prototype.sort()`](array/sort) +[`Array.prototype.sort()`](array/sort) Sorts the elements of an array in place and returns the array. -[`Array.prototype.splice()`](array/splice) +[`Array.prototype.splice()`](array/splice) Adds and/or removes elements from an array. -[`Array.prototype.toLocaleString()`](array/tolocalestring) +[`Array.prototype.toLocaleString()`](array/tolocalestring) Returns a localized string representing the array and its elements. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`Array.prototype.toString()`](array/tostring) +[`Array.prototype.toString()`](array/tostring) Returns a string representing the array and its elements. Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Array.prototype.unshift()`](array/unshift) +[`Array.prototype.unshift()`](array/unshift) Adds one or more elements to the front of an array, and returns the new `length` of the array. -[`Array.prototype.values()`](array/values) +[`Array.prototype.values()`](array/values) Returns a new `Array Iterator` object that contains the values for each index in the array. -[`Array.prototype[@@iterator]()`](array/@@iterator) +[`Array.prototype[@@iterator]()`](array/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -2164,27 +2164,27 @@ The `ArrayBuffer()` constructor creates a new `ArrayBuffer` of the given length ## Constructor -[`ArrayBuffer()`](arraybuffer/arraybuffer) +[`ArrayBuffer()`](arraybuffer/arraybuffer) Creates a new `ArrayBuffer` object. ## Static properties -[`get ArrayBuffer[@@species]`](arraybuffer/@@species) +[`get ArrayBuffer[@@species]`](arraybuffer/@@species) The constructor function that is used to create derived objects. ## Static methods -[`ArrayBuffer.isView(arg)`](arraybuffer/isview) +[`ArrayBuffer.isView(arg)`](arraybuffer/isview) Returns `true` if `arg` is one of the ArrayBuffer views, such as [typed array objects](typedarray) or a [`DataView`](dataview). Returns `false` otherwise. ## Instance properties -[`ArrayBuffer.prototype.byteLength`](arraybuffer/bytelength) +[`ArrayBuffer.prototype.byteLength`](arraybuffer/bytelength) The read-only size, in bytes, of the `ArrayBuffer`. This is established when the array is constructed and cannot be changed. ## Instance methods -[`ArrayBuffer.prototype.slice()`](arraybuffer/slice) +[`ArrayBuffer.prototype.slice()`](arraybuffer/slice) Returns a new `ArrayBuffer` whose contents are a copy of this `ArrayBuffer`'s bytes from `begin` (inclusive) up to `end` (exclusive). If either `begin` or `end` is negative, it refers to an index from the end of the array, as opposed to from the beginning. ## Examples @@ -2198,7 +2198,7 @@ In this example, we create a 8-byte buffer with a [`Int32Array`](int32array) vie ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arraybuffer-objects
        @@ -2385,7 +2385,7 @@ An **arrow function expression** is a compact alternative to a traditional [func ### Comparing traditional functions to arrow functions -Let's decompose a "traditional function" down to the simplest "arrow function" step-by-step: +Let's decompose a "traditional function" down to the simplest "arrow function" step-by-step: NOTE: Each step along the way is a valid "arrow function" // Traditional Function @@ -2787,7 +2787,7 @@ Although the arrow in an arrow function is not an operator, arrow functions have ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arrow-function-definitions
        @@ -2866,7 +2866,7 @@ $$\\forall x \\in \\lbrack{- 1};1\\rbrack,\\;\\mathtt{\\operatorname{Math.asin}( ### Parameters -`x` +`x` A number. ### Return value @@ -2894,7 +2894,7 @@ For values less than -1 or greater than 1, `Math.asin()` returns [`NaN`](../nan) ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.asin
        @@ -2934,8 +2934,8 @@ For values less than -1 or greater than 1, `Math.asin()` returns [`NaN`](../nan) - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin # Math.asinh() @@ -2950,7 +2950,7 @@ The `Math.asinh()` function returns the hyperbolic arcsine of a number, that is ### Parameters -`x` +`x` A number. ### Return value @@ -2990,7 +2990,7 @@ Because `asinh()` is a static method of `Math`, you always use it as `Math.asinh ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.asinh
        @@ -3029,8 +3029,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh # BigInt.asIntN() @@ -3043,10 +3043,10 @@ The `BigInt.asIntN` static method clamps a BigInt value to a signed integer valu ### Parameters -`bits` +`bits` The amount of bits available for the integer size. -`bigint` +`bigint` The BigInt value to clamp to fit into the supplied bits. ### Returns @@ -3070,7 +3070,7 @@ The `BigInt.asIntN()` method can be useful to stay in the range of 64-bit arithm ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bigint.asintn
        @@ -3118,10 +3118,10 @@ The `Object.assign()` method copies all [enumerable](propertyisenumerable) [own ### Parameters -`target` +`target` The target object — what to apply the sources' properties to, which is returned after it is modified. -`sources` +`sources` The source object(s) — objects containing the properties you want to apply. ### Return value @@ -3333,7 +3333,7 @@ The properties are overwritten by other objects that have the same properties la ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.assign
        @@ -3370,8 +3370,8 @@ No - [Enumerability and ownership of properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) - [Spread in object literals](../../operators/spread_syntax#spread_in_object_literals) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign # BigInt.asUintN() @@ -3384,10 +3384,10 @@ The `BigInt.asUintN` static method clamps a BigInt value to an unsigned integer ### Parameters -`bits` +`bits` The amount of bits available for the integer size. -`bigint` +`bigint` The BigInt value to clamp to fit into the supplied bits. ### Returns @@ -3411,7 +3411,7 @@ The `BigInt.asUintN()` method can be useful to stay in the range of 64-bit arith ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bigint.asuintn
        @@ -3463,13 +3463,13 @@ Async functions may also be defined [as expressions](../operators/async_function ### Parameters -`name` +`name` The function's name. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. The `await` mechanism may be used. ### Return value @@ -3642,7 +3642,7 @@ For example, in the following code an unhandled promise rejection error will be In `sequentialStart`, execution suspends 2 seconds for the first `await`, and then another second for the second `await`. The second timer is not created until the first has already fired, so the code finishes after 3 seconds. -In `concurrentStart`, both timers are created and then `await`ed. The timers run concurrently, which means the code finishes in 2 rather than 3 seconds, i.e. the slowest timer. +In `concurrentStart`, both timers are created and then `await`ed. The timers run concurrently, which means the code finishes in 2 rather than 3 seconds, i.e. the slowest timer. However, the `await` calls still run in series, which means the second `await` will wait for the first one to finish. In this case, the result of the fastest timer is processed after the slowest. If you wish to safely perform two or more jobs in parallel, you must await a call to `Promise.all`, or `Promise.allSettled`. @@ -3705,7 +3705,7 @@ This highlights the subtle difference between `return foo;` and `return await fo ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-async-function-definitions
        @@ -3743,8 +3743,8 @@ No - [`await`](../operators/await) - ["Decorating Async Javascript Functions" on "innolitics.com"](https://innolitics.com/10x/javascript-decorators-for-promise-returning-functions/) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function # AsyncFunction @@ -3763,10 +3763,10 @@ Note that `AsyncFunction` is _not_ a global object. It can be obtained with the ### Parameters -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Names to be used by the function as formal argument names. Each must be a string that corresponds to a valid JavaScript identifier or a list of such strings separated with a comma; for example "`x`", "`theValue`", or "`a,b`". -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function definition. ## Description @@ -3807,7 +3807,7 @@ Invoking the `AsyncFunction` constructor as a function (without using the `new` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-async-function-objects
        @@ -3903,7 +3903,7 @@ There are currently no built-in JavaScript objects that have the `[Symbol.asyncI ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.asynciterator
        @@ -3939,8 +3939,8 @@ No - [Iteration protocols](../../iteration_protocols) - [for await... of](../../statements/for-await...of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator # Array.prototype.at() @@ -3955,7 +3955,7 @@ This is not to suggest there is anything wrong with using the square bracket not ### Parameters -`index` +`index` The index (position) of the array element to be returned. Supports relative indexing from the end of the array when passed a negative index; i.e. if a negative number is used, the element returned will be found by counting back from the end of the array. ### Return value @@ -4016,7 +4016,7 @@ $$\\mathtt{\\operatorname{Math.atan}(x)} = \\arctan(x) = \\text{the\\ unique}\\; ### Parameters -`x` +`x` A number. ### Return value @@ -4047,7 +4047,7 @@ Note that you may want to avoid using **±**`Infinity` for stylistic reasons. In ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.atan
        @@ -4087,8 +4087,8 @@ Note that you may want to avoid using **±**`Infinity` for stylistic reasons. In - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan # Math.atan2() @@ -4101,10 +4101,10 @@ The `Math.atan2()` function returns the angle in the plane (in radians) between ### Parameters -`y` +`y` The y coordinate of the point. -`x` +`x` The x coordinate of the point ### Return value @@ -4142,7 +4142,7 @@ Because `atan2()` is a static method of `Math`, you always use it as `Math.atan2 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.atan2
        @@ -4182,8 +4182,8 @@ Because `atan2()` is a static method of `Math`, you always use it as `Math.atan2 - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2 # Math.atanh() @@ -4198,7 +4198,7 @@ The `Math.atanh()` function returns the hyperbolic arctangent of a number, that ### Parameters -`x` +`x` A number. ### Return value @@ -4232,7 +4232,7 @@ For |_x_| < 1, we have $\\operatorname{artanh}(x) = \\frac{1}{2}\\ln\\lef ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.atanh
        @@ -4271,8 +4271,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh # Atomics @@ -4293,40 +4293,40 @@ The `wait()` and `notify()` methods are modeled on Linux futexes ("fast user-spa ## Static methods -[`Atomics.add()`](atomics/add) +[`Atomics.add()`](atomics/add) Adds the provided value to the existing value at the specified index of the array. Returns the old value at that index. -[`Atomics.and()`](atomics/and) +[`Atomics.and()`](atomics/and) Computes a bitwise AND on the value at the specified index of the array with the provided value. Returns the old value at that index. -[`Atomics.compareExchange()`](atomics/compareexchange) +[`Atomics.compareExchange()`](atomics/compareexchange) Stores a value at the specified index of the array, if it equals a value. Returns the old value. -[`Atomics.exchange()`](atomics/exchange) +[`Atomics.exchange()`](atomics/exchange) Stores a value at the specified index of the array. Returns the old value. -[`Atomics.isLockFree(size)`](atomics/islockfree) +[`Atomics.isLockFree(size)`](atomics/islockfree) An optimization primitive that can be used to determine whether to use locks or atomic operations. Returns `true` if an atomic operation on arrays of the given element size will be implemented using a hardware atomic operation (as opposed to a lock). Experts only. -[`Atomics.load()`](atomics/load) +[`Atomics.load()`](atomics/load) Returns the value at the specified index of the array. -[`Atomics.notify()`](atomics/notify) +[`Atomics.notify()`](atomics/notify) Notifies agents that are waiting on the specified index of the array. Returns the number of agents that were notified. -[`Atomics.or()`](atomics/or) +[`Atomics.or()`](atomics/or) Computes a bitwise OR on the value at the specified index of the array with the provided value. Returns the old value at that index. -[`Atomics.store()`](atomics/store) +[`Atomics.store()`](atomics/store) Stores a value at the specified index of the array. Returns the value. -[`Atomics.sub()`](atomics/sub) +[`Atomics.sub()`](atomics/sub) Subtracts a value at the specified index of the array. Returns the old value at that index. -[`Atomics.wait()`](atomics/wait) +[`Atomics.wait()`](atomics/wait) Verifies that the specified index of the array still contains a value and sleeps awaiting or times out. Returns either "`ok`", "`not-equal`", or "`timed-out`". If waiting is not allowed in the calling agent then it throws an [`Error`](error) exception. (Most browsers will not allow `wait()` on the browser's main thread.) -[`Atomics.xor()`](atomics/xor) +[`Atomics.xor()`](atomics/xor) Computes a bitwise XOR on the value at the specified index of the array with the provided value. Returns the old value at that index. ## Examples @@ -4387,7 +4387,7 @@ A writing thread stores a new value and notifies the waiting thread once it has ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics-object
        @@ -5159,10 +5159,10 @@ The `await` operator is used to wait for a [`Promise`](../global_objects/promise [rv] = await expression; -`expression` +`expression` A [`Promise`](../global_objects/promise) or any value to wait for. -`rv` +`rv` Returns the fulfilled value of the promise, or the value itself if it's not a `Promise`. ## Description @@ -5504,7 +5504,7 @@ An [`Intl.Locale`](../locale) object represents a parsed local and options for t ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.baseName
        @@ -5581,7 +5581,7 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.big
        @@ -5617,8 +5617,8 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem - [`String.prototype.fontsize()`](fontsize) - [`String.prototype.small()`](small) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big # BigInt @@ -5790,26 +5790,26 @@ A BigInt value behaves like a Number value in cases where: ## Constructor -[`BigInt()`](bigint/bigint) +[`BigInt()`](bigint/bigint) Creates a new BigInt value. ## Static methods -[`BigInt.asIntN()`](bigint/asintn) +[`BigInt.asIntN()`](bigint/asintn) Clamps a BigInt value to a signed integer value, and returns that value. -[`BigInt.asUintN()`](bigint/asuintn) +[`BigInt.asUintN()`](bigint/asuintn) Clamps a BigInt value to an unsigned integer value, and returns that value. ## Instance methods -[`BigInt.prototype.toLocaleString()`](bigint/tolocalestring) +[`BigInt.prototype.toLocaleString()`](bigint/tolocalestring) Returns a string with a language-sensitive representation of this BigInt value. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`BigInt.prototype.toString()`](bigint/tostring) +[`BigInt.prototype.toString()`](bigint/tostring) Returns a string representing this BigInt value in the specified radix (base). Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`BigInt.prototype.valueOf()`](bigint/valueof) +[`BigInt.prototype.valueOf()`](bigint/valueof) Returns this BigInt value. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Usage recommendations @@ -5869,7 +5869,7 @@ Instead of throwing, `JSON.stringify` now produces a string like this: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bigint-objects
        @@ -6069,117 +6069,117 @@ The `BigInt64Array` typed array represents an array of 64-bit signed integers in ## Constructor -[`BigInt64Array()`](bigint64array/bigint64array) +[`BigInt64Array()`](bigint64array/bigint64array) Creates a new `BigInt64Array` object. ## Static properties -[`BigInt64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`BigInt64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `8` in the case of a `BigInt64Array`. -[`BigInt64Array.name`](typedarray/name) +[`BigInt64Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `BigInt64Array` type, this is "BigInt64Array". ## Static methods -[`BigInt64Array.from()`](typedarray/from) +[`BigInt64Array.from()`](typedarray/from) Creates a new `BigInt64Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`BigInt64Array.of()`](typedarray/of) +[`BigInt64Array.of()`](typedarray/of) Creates a new `BigInt64Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`BigInt64Array.prototype.buffer`](typedarray/buffer) +[`BigInt64Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `BigInt64Array`. This is fixed at construction time and thus **read only**. -[`BigInt64Array.prototype.byteLength`](typedarray/bytelength) +[`BigInt64Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `BigInt64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigInt64Array.prototype.byteOffset`](typedarray/byteoffset) +[`BigInt64Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `BigInt64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigInt64Array.prototype.length`](typedarray/length) +[`BigInt64Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `BigInt64Array`. This is fixed at construction time and thus **read only.** ## Instance methods -[`BigInt64Array.prototype.copyWithin()`](typedarray/copywithin) +[`BigInt64Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`BigInt64Array.prototype.entries()`](typedarray/entries) +[`BigInt64Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`BigInt64Array.prototype.every()`](typedarray/every) +[`BigInt64Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`BigInt64Array.prototype.fill()`](typedarray/fill) +[`BigInt64Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`BigInt64Array.prototype.filter()`](typedarray/filter) +[`BigInt64Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`BigInt64Array.prototype.find()`](typedarray/find) +[`BigInt64Array.prototype.find()`](typedarray/find) Returns the found value in the array if an element in the array satisfies the provided testing function, or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`BigInt64Array.prototype.findIndex()`](typedarray/findindex) +[`BigInt64Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array if an element in the array satisfies the provided testing function, or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`BigInt64Array.prototype.forEach()`](typedarray/foreach) +[`BigInt64Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`BigInt64Array.prototype.includes()`](typedarray/includes) +[`BigInt64Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`BigInt64Array.prototype.indexOf()`](typedarray/indexof) +[`BigInt64Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`BigInt64Array.prototype.join()`](typedarray/join) +[`BigInt64Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`BigInt64Array.prototype.keys()`](typedarray/keys) +[`BigInt64Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`BigInt64Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`BigInt64Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`BigInt64Array.prototype.map()`](typedarray/map) +[`BigInt64Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`BigInt64Array.prototype.reduce()`](typedarray/reduce) +[`BigInt64Array.prototype.reduce()`](typedarray/reduce) Applies a function against an accumulator and each value of the array (from left-to-right) so as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`BigInt64Array.prototype.reduceRight()`](typedarray/reduceright) +[`BigInt64Array.prototype.reduceRight()`](typedarray/reduceright) Applies a function against an accumulator and each value of the array (from right-to-left) so as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`BigInt64Array.prototype.reverse()`](typedarray/reverse) +[`BigInt64Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`BigInt64Array.prototype.set()`](typedarray/set) +[`BigInt64Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`BigInt64Array.prototype.slice()`](typedarray/slice) +[`BigInt64Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`BigInt64Array.prototype.some()`](typedarray/some) +[`BigInt64Array.prototype.some()`](typedarray/some) Returns true if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`BigInt64Array.prototype.sort()`](typedarray/sort) +[`BigInt64Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`BigInt64Array.prototype.subarray()`](typedarray/subarray) +[`BigInt64Array.prototype.subarray()`](typedarray/subarray) Returns a new `BigUint64Array` from the given start and end element index. -[`BigInt64Array.prototype.values()`](typedarray/values) +[`BigInt64Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`BigInt64Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`BigInt64Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`BigInt64Array.prototype.toString()`](typedarray/tostring) +[`BigInt64Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`BigInt64Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`BigInt64Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -6213,7 +6213,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray-objects
        @@ -6284,117 +6284,117 @@ The `BigUint64Array` typed array represents an array of 64-bit unsigned integers ## Constructor -[`BigUint64Array()`](biguint64array/biguint64array) +[`BigUint64Array()`](biguint64array/biguint64array) Creates a new `BigUint64Array` object. ## Static properties -[`BigUint64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`BigUint64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `8` in the case of a `BigUint64Array`. -[`BigUint64Array.name`](typedarray/name) +[`BigUint64Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `BigUint64Array` type this is "BigUint64Array". ## Static methods -[`BigUint64Array.from()`](typedarray/from) +[`BigUint64Array.from()`](typedarray/from) Creates a new `BigUint64Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`BigUint64Array.of()`](typedarray/of) +[`BigUint64Array.of()`](typedarray/of) Creates a new `BigUint64Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`BigUint64Array.prototype.buffer`](typedarray/buffer) +[`BigUint64Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `BigUint64Array`. This is fixed at construction time and thus **read only**. -[`BigUint64Array.prototype.byteLength`](typedarray/bytelength) +[`BigUint64Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `BigUint64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigUint64Array.prototype.byteOffset`](typedarray/byteoffset) +[`BigUint64Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `BigUint64Array` from the start of its [`ArrayBuffer`](arraybuffer). This is fixed at construction time and thus **read only.** -[`BigUint64Array.prototype.length`](typedarray/length) +[`BigUint64Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `BigUint64Array`. This is fixed at construction time and thus **read only.** ## Instance methods -[`BigUint64Array.prototype.copyWithin()`](typedarray/copywithin) +[`BigUint64Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`BigUint64Array.prototype.entries()`](typedarray/entries) +[`BigUint64Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`BigUint64Array.prototype.every()`](typedarray/every) +[`BigUint64Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`BigUint64Array.prototype.fill()`](typedarray/fill) +[`BigUint64Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`BigUint64Array.prototype.filter()`](typedarray/filter) +[`BigUint64Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`BigUint64Array.prototype.find()`](typedarray/find) +[`BigUint64Array.prototype.find()`](typedarray/find) Returns the found value in the array if an element in the array satisfies the provided testing function, or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`BigUint64Array.prototype.findIndex()`](typedarray/findindex) +[`BigUint64Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array if an element in the array satisfies the provided testing function, or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`BigUint64Array.prototype.forEach()`](typedarray/foreach) +[`BigUint64Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`BigUint64Array.prototype.includes()`](typedarray/includes) +[`BigUint64Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`BigUint64Array.prototype.indexOf()`](typedarray/indexof) +[`BigUint64Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`BigUint64Array.prototype.join()`](typedarray/join) +[`BigUint64Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`BigUint64Array.prototype.keys()`](typedarray/keys) +[`BigUint64Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`BigUint64Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`BigUint64Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`BigUint64Array.prototype.map()`](typedarray/map) +[`BigUint64Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`BigUint64Array.prototype.reduce()`](typedarray/reduce) +[`BigUint64Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) so as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`BigUint64Array.prototype.reduceRight()`](typedarray/reduceright) +[`BigUint64Array.prototype.reduceRight()`](typedarray/reduceright) Applies a function against an accumulator and each value of the array (from right-to-left) so as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`BigUint64Array.prototype.reverse()`](typedarray/reverse) +[`BigUint64Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`BigUint64Array.prototype.set()`](typedarray/set) +[`BigUint64Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`BigUint64Array.prototype.slice()`](typedarray/slice) +[`BigUint64Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`BigUint64Array.prototype.some()`](typedarray/some) +[`BigUint64Array.prototype.some()`](typedarray/some) Returns `true` if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`BigUint64Array.prototype.sort()`](typedarray/sort) +[`BigUint64Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`BigUint64Array.prototype.subarray()`](typedarray/subarray) +[`BigUint64Array.prototype.subarray()`](typedarray/subarray) Returns a new `BigUint64Array` from the given start and end element index. -[`BigUint64Array.prototype.values()`](typedarray/values) +[`BigUint64Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`BigUint64Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`BigUint64Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`BigUint64Array.prototype.toString()`](typedarray/tostring) +[`BigUint64Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`BigUint64Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`BigUint64Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -6428,7 +6428,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray-objects
        @@ -6506,10 +6506,10 @@ The `bind()` method creates a new function that, when called, has its `this` key ### Parameters -`thisArg` +`thisArg` The value to be passed as the `this` parameter to the target function `func` when the bound function is called. The value is ignored if the bound function is constructed using the [`new`](../../operators/new) operator. When using `bind` to create a function (supplied as a callback) inside a `setTimeout`, any primitive value passed as `thisArg` is converted to object. If no arguments are provided to `bind `, or if the `thisArg` is `null` or `undefined`, the `this` of the executing scope is treated as the `thisArg` for the new function. -`arg1, arg2, ...argN` Optional +`arg1, arg2, ...argN` Optional Arguments to prepend to arguments provided to the bound function when invoking `func`. ### Return value @@ -6522,16 +6522,16 @@ The `bind()` function creates a new **bound function**, which is an _exotic func A bound function has the following internal properties: -`[[BoundTargetFunction]]` +`[[BoundTargetFunction]]` The wrapped function object -`[[BoundThis]]` +`[[BoundThis]]` The value that is always passed as `this` value when calling the wrapped function. -`[[BoundArguments]]` +`[[BoundArguments]]` A list of values whose elements are used as the first arguments to any call to the wrapped function. -`[[Call]]` +`[[Call]]` Executes code associated with this object. Invoked via a function call expression. The arguments to the internal method are a `this` value and a list containing the arguments passed to the function by a call expression. When a bound function is called, it calls internal method `[[Call]]` on `[[BoundTargetFunction]]`, with following arguments `Call(boundThis, ...args)`. Where `boundThis` is `[[BoundThis]]`, `args` is `[[BoundArguments]]`, followed by the arguments passed by the function call. @@ -6785,7 +6785,7 @@ If you choose to use this partial implementation, **you must not rely on those c ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function.prototype.bind
        @@ -6864,7 +6864,7 @@ Bitwise ANDing any number `x` with `0` yields `0`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-BitwiseANDExpression
        @@ -6900,8 +6900,8 @@ Bitwise ANDing any number `x` with `0` yields `0`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Bitwise AND assignment operator](bitwise_and_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_AND # Bitwise AND assignment (&=) @@ -6924,7 +6924,7 @@ The bitwise AND assignment operator (`&=`) uses the binary representation of bot ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -6960,8 +6960,8 @@ The bitwise AND assignment operator (`&=`) uses the binary representation of bot - [Assignment operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment) - [Bitwise AND operator](bitwise_and) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_AND_assignment # Bitwise NOT (~) @@ -7005,7 +7005,7 @@ Note that due to using 32-bit representation for numbers both `~-1` and `~429496 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-bitwise-not-operator
        @@ -7040,8 +7040,8 @@ Note that due to using 32-bit representation for numbers both `~-1` and `~429496 - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_NOT # Bitwise OR (|) @@ -7086,7 +7086,7 @@ Bitwise ORing any number `x` with `0` yields `x`. ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Bitwise OR expression' in that specification.
        @@ -7122,8 +7122,8 @@ Bitwise ORing any number `x` with `0` yields `x`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Bitwise OR assignment operator](bitwise_or_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_OR # Bitwise OR assignment (|=) @@ -7148,7 +7148,7 @@ The bitwise OR assignment operator (`|=`) uses the binary representation of both ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -7185,8 +7185,8 @@ The bitwise OR assignment operator (`|=`) uses the binary representation of both - [Bitwise OR operator](bitwise_or) - [Logical OR assignment (`||=`)](logical_or_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_OR_assignment # Bitwise XOR (^) @@ -7231,7 +7231,7 @@ Bitwise XORing any number `x` with `0` yields `x`. ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Bitwise XOR expression' in that specification.
        @@ -7267,8 +7267,8 @@ Bitwise XORing any number `x` with `0` yields `x`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Bitwise XOR assignment operator](bitwise_xor_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_XOR # Bitwise XOR assignment (^=) @@ -7298,7 +7298,7 @@ The bitwise XOR assignment operator (`^=`) uses the binary representation of bot ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -7334,8 +7334,8 @@ The bitwise XOR assignment operator (`^=`) uses the binary representation of bot - [Assignment operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment) - [Bitwise XOR operator](bitwise_xor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment # String.prototype.blink() @@ -7375,7 +7375,7 @@ The following example uses string methods to change the formatting of a string: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.blink
        @@ -7412,8 +7412,8 @@ The following example uses string methods to change the formatting of a string: - [`String.prototype.italics()`](italics) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink # block @@ -7434,10 +7434,10 @@ A **block statement** (or **compound statement** in other languages) is used to StatementList } -`StatementList` +`StatementList` Statements grouped within the block statement. -`LabelIdentifier` +`LabelIdentifier` An optional [label](label) for visual identification or as a target for [`break`](break). ## Description @@ -7488,7 +7488,7 @@ In [strict mode](../strict_mode), starting with ES2015, functions inside blocks ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-block
        @@ -7525,8 +7525,8 @@ In [strict mode](../strict_mode), starting with ES2015, functions inside blocks - [`if...else`](if...else) - [`let`](let) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block # String.prototype.bold() @@ -7564,7 +7564,7 @@ The following example uses string methods to change the formatting of a string: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.bold
        @@ -7601,8 +7601,8 @@ The following example uses string methods to change the formatting of a string: - [`String.prototype.italics()`](italics) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold # Boolean @@ -7648,15 +7648,15 @@ Do not use a `Boolean` object in place of a `Boolean` primitive. ## Constructor -[`Boolean()`](boolean/boolean) +[`Boolean()`](boolean/boolean) Creates a new `Boolean` object. ## Instance methods -[`Boolean.prototype.toString()`](boolean/tostring) +[`Boolean.prototype.toString()`](boolean/tostring) Returns a string of either `true` or `false` depending upon the value of the object. Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Boolean.prototype.valueOf()`](boolean/valueof) +[`Boolean.prototype.valueOf()`](boolean/valueof) Returns the primitive value of the [`Boolean`](boolean) object. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Examples @@ -7680,7 +7680,7 @@ Returns the primitive value of the [`Boolean`](boolean) object. Overrides the [` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-boolean-objects
        @@ -7833,7 +7833,7 @@ The `break` terminates the current loop, [`switch`](switch), or [label](label) s break [label]; -`label` Optional +`label` Optional Identifier associated with the label of the statement. If the statement is not a loop or [`switch`](switch), this is required. ## Description @@ -7935,7 +7935,7 @@ The following code also uses `break` statements with labeled blocks, but generat ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Break statement' in that specification.
        @@ -7972,8 +7972,8 @@ The following code also uses `break` statements with labeled blocks, but generat - [label](label) - [`switch`](switch) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break # WebAssembly.Memory.prototype.buffer @@ -7998,7 +7998,7 @@ The following example (see [memory.html](https://github.com/mdn/webassembly-exam ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-memory-buffer
        @@ -8039,8 +8039,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer # SharedArrayBuffer.prototype.byteLength @@ -8060,7 +8060,7 @@ The `byteLength` property is an accessor property whose set accessor function is ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-sharedarraybuffer.prototype.bytelength
        @@ -8129,8 +8129,8 @@ Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy - [`SharedArrayBuffer`](../sharedarraybuffer) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength # TypedArray.prototype.byteOffset @@ -8155,7 +8155,7 @@ The `byteOffset` property is an accessor property whose set accessor function is ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-%typedarray%.prototype.byteoffset
        @@ -8191,8 +8191,8 @@ The `byteOffset` property is an accessor property whose set accessor function is - [JavaScript typed arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) - [`TypedArray`](../typedarray) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset # TypedArray.BYTES_PER_ELEMENT @@ -8233,7 +8233,7 @@ no ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray.bytes_per_element
        @@ -8269,8 +8269,8 @@ no - [JavaScript typed arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) - [`TypedArray`](../typedarray) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT # Intl.Locale.prototype.calendar @@ -8303,7 +8303,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.calendar
        @@ -8355,14 +8355,14 @@ The `call()` method calls a function with a given `this` value and arguments pro ### Parameters -`thisArg` Optional +`thisArg` Optional The value to use as `this` when calling `func`. **Note:** In certain cases, `thisArg` may not be the actual value seen by the method. If the method is a function in [non-strict mode](../../strict_mode), [`null`](../null) and [`undefined`](../undefined) will be replaced with the global object, and primitive values will be converted to objects. -`arg1, arg2, ...argN` Optional +`arg1, arg2, ...argN` Optional Arguments for the function. ### Return value @@ -8469,7 +8469,7 @@ In the example below, we invoke the `display` function without passing the first ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Function.prototype.call' in that specification.
        @@ -8669,7 +8669,7 @@ However, in a case like the following, there are not alternatives to `arguments. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arguments-exotic-objects
        @@ -9132,7 +9132,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.caseFirst
        @@ -9184,10 +9184,10 @@ The `catch()` method returns a [`Promise`](../promise) and deals with rejected c ### Parameters -`onRejected` +`onRejected` A [`Function`](../function) called when the `Promise` is rejected. This function has one argument: -`reason` +`reason` The rejection reason. The Promise returned by `catch()` is rejected if `onRejected` throws an error or returns a Promise which is itself rejected; otherwise, it is resolved. @@ -9311,7 +9311,7 @@ The `catch` method is used for error handling in promise composition. Since it r ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.prototype.catch
        @@ -9347,8 +9347,8 @@ No - [`Promise`](../promise) - [`Promise.prototype.then()`](then) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch # Math.cbrt() @@ -9363,7 +9363,7 @@ $$\\mathtt{Math.cbrt(x)} = \\sqrt\[3\]{x} = \\text{the\\ unique}\\; y\\;\\text{s ### Parameters -x +x A number. ### Return value @@ -9403,7 +9403,7 @@ For all *x* ≥ 0, have $\\sqrt\[3\]{x} = x^{1/3}$ so this can be emulated b ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.cbrt
        @@ -9439,8 +9439,8 @@ No - [`Math.pow()`](pow) - [`Math.sqrt()`](sqrt) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cbrt # Math.ceil() @@ -9455,7 +9455,7 @@ The `Math.ceil()` function always rounds a number up to the next largest integer ### Parameters -`x` +`x` A number. ### Return value @@ -9552,7 +9552,7 @@ The following example shows example usage of `Math.ceil()`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.ceil
        @@ -9591,8 +9591,8 @@ The following example shows example usage of `Math.ceil()`. - [`Math.sign()`](sign) - [`Math.trunc()`](trunc) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil # String.prototype.charAt() @@ -9605,7 +9605,7 @@ The [`String`](../string) object's `charAt()` method returns a new string consis ### Parameters -`index` +`index` An integer between `0` and `str.length - 1`. If the `index` cannot be converted to the integer or no `index` is provided, the default is `0`, so the first character of `str` is returned. ### Return value @@ -9787,7 +9787,7 @@ While the previous example may be more useful for programs that must support non ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.prototype.charAt' in that specification.
        @@ -9828,8 +9828,8 @@ While the previous example may be more useful for programs that must support non - [`String.fromCodePoint()`](fromcodepoint) - [JavaScript has a Unicode problem – Mathias Bynens](https://mathiasbynens.be/notes/javascript-unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt # String.prototype.charCodeAt() @@ -9844,7 +9844,7 @@ The UTF-16 code unit matches the Unicode code point for code points which can be ### Parameters -`index` +`index` An integer greater than or equal to `0` and less than the `length` of the string. If `index` is not a number, it defaults to `0`. ### Return value @@ -9947,7 +9947,7 @@ This version might be used in for loops and the like when it is unknown whether ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.charcodeat
        @@ -9985,8 +9985,8 @@ This version might be used in for loops and the like when it is unknown whether - [`String.fromCodePoint()`](fromcodepoint) - [`String.prototype.codePointAt()`](codepointat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt # class expression @@ -10057,7 +10057,7 @@ If you want to refer to the current class inside the class body, you can create ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-class-definitions
        @@ -10094,8 +10094,8 @@ No - [class declaration](../statements/class) - [Classes](../classes) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/class # Classes @@ -10478,7 +10478,7 @@ If you're experimenting with code in a web browser, such as the Firefox Web Cons ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Class definitions' in that specification.
        @@ -10848,7 +10848,7 @@ The `clear()` method removes all elements from a `Set` object. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-set.prototype.clear
        @@ -10884,8 +10884,8 @@ The `clear()` method removes all elements from a `Set` object. - [`Set`](../set) - [`Set.prototype.delete()`](delete) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear # Math.clz32() @@ -10898,7 +10898,7 @@ The `Math.clz32()` function returns the number of leading zero bits in the 32-bi ### Parameters -`x` +`x` A number. ### Return value @@ -11024,7 +11024,7 @@ The following polyfill is the most efficient. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.clz32
        @@ -11060,8 +11060,8 @@ No - [`Math`](../math) - [`Math.imul`](imul) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 # String.prototype.codePointAt() @@ -11074,7 +11074,7 @@ The `codePointAt()` method returns a non-negative integer that is the UTF-16 cod ### Parameters -`pos` +`pos` Position of an element in `str` to return the code point value from. ### Return value @@ -11162,7 +11162,7 @@ The following extends Strings to include the `codePointAt()` function as specifi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.codepointat
        @@ -11200,8 +11200,8 @@ No - [`String.prototype.charCodeAt()`](charcodeat) - [`String.prototype.charAt()`](charat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt # Intl.Locale.prototype.collation @@ -11238,7 +11238,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.collation
        @@ -11287,32 +11287,32 @@ The `Intl.Collator()` constructor creates [`Intl.Collator`](../collator) objects ### Parameters -`locales` Optional +`locales` Optional Optional. A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the `locales` argument, see the [Intl page](../../intl#locale_identification_and_negotiation). The following Unicode extension keys are allowed: **Note:** These keys can usually also be set with `options` (as listed below). When both are set, the `options` property takes precedence. -`co` +`co` Variant collations for certain locales. Possible values include: "`big5han`", "`dict`", "`direct`", "`ducet`", "`gb2312`", "`phonebk`", "`phonetic`", "`pinyin`", "`reformed`", "`searchjl`", "`stroke`", "`trad`", "`unihan`". This option can be also be set through the `options` property "`collation`". -`kn` +`kn` Whether numeric collation should be used, such that "1" < "2" < "10". Possible values are "`true`" and "`false`". This option can be also be set through the `options` property "`numeric`". -`kf` +`kf` Whether upper case or lower case should sort first. Possible values are "`upper`", "`lower`", or "`false`" (use the locale's default). This option can be also be set through the `options` property "`caseFirst`". -`options` Optional +`options` Optional An object with some or all of the following properties: -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`usage` +`usage` Whether the comparison is for sorting or for searching for matching strings. Possible values are "`sort`" and "`search`"; the default is "`sort`". -`sensitivity` +`sensitivity` Which differences in the strings should lead to non-zero result values. Possible values are: - "`base`": Only strings that differ in base letters compare as unequal. Examples: a ≠ b, a = á, a = A. @@ -11322,20 +11322,20 @@ Which differences in the strings should lead to non-zero result values. Possible The default is "`variant`" for usage "`sort`"; it's locale dependent for usage "`search`". -`ignorePunctuation` +`ignorePunctuation` Whether punctuation should be ignored. Possible values are `true` and `false`; the default is `false`. -`numeric` +`numeric` Whether numeric collation should be used, such that "1" < "2" < "10". Possible values are `true` and `false`; the default is `false`. **Note:** This option can also be set through the `kn` Unicode extension key; if both are provided, this `options` property takes precedence. -`caseFirst` +`caseFirst` Whether upper case or lower case should sort first. Possible values are "`upper`", "`lower`", or "`false`" (use the locale's default). This option can be set through an `options` property or through a Unicode extension key; if both are provided, the `options` property takes precedence. **Note:** This option can also be set through the `kf` Unicode extension key; if both are provided, this `options` property takes precedence. -`collation` +`collation` Variant collations for certain locales. Possible values include: "`big5han`", "`dict`", "`direct`", "`ducet`", "`gb2312`", "`phonebk`" (only supported in German), "`phonetic`", "`pinyin`", "`reformed`", "`searchjl`", "`stroke`", "`trad`", "`unihan`". **Note:** This option can also be set through the `co` Unicode extension key; if both are provided, this `options` property takes precedence. @@ -11354,7 +11354,7 @@ Note that the results shown in the code above can vary between browsers and brow ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-the-intl-collator-constructor
        @@ -11508,7 +11508,7 @@ The **comma operator** (`,`) evaluates each of its operands (from left to right) ### Parameters -`expr1`, `expr2`, `expr3`... +`expr1`, `expr2`, `expr3`... One or more expressions, the last of which is returned as the value of the compound expression. ## Usage notes @@ -11550,7 +11550,7 @@ Another example that one could make with comma operator is processing before ret ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-comma-operator
        @@ -11585,8 +11585,8 @@ Another example that one could make with comma operator is processing before ret - [`for` loop](../statements/for) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator # Intl.Collator.prototype.compare() @@ -11599,8 +11599,8 @@ The `Intl.Collator.prototype.compare()` method compares two strings according to ### Parameters -`string1` -`string2` +`string1` +`string2` The strings to compare against each other. ## Description @@ -11632,7 +11632,7 @@ Use the `compare` getter function for finding matching strings in arrays: ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.collator.prototype.compare
        @@ -11680,16 +11680,16 @@ The static ` Atomics``.compareExchange() ` method exchanges a given replacement ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to exchange a `value`. -`expectedValue` +`expectedValue` The value to check for equality. -`replacementValue` +`replacementValue` The number to exchange. ### Return value @@ -11714,7 +11714,7 @@ The old value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.compareexchange
        @@ -11788,8 +11788,8 @@ The table below details the differences between the methods available on the `Ob
        Method NameObjectReflect
        defineProperty()Object.defineProperty() returns the object that was passed to the function. Returns a TypeError if the property was not successfully defined on the object.Reflect.defineProperty() returns true if the property was defined on the object and false if it was not.
        defineProperties()Object.defineProperties() returns the objects that were passed to the function. Returns a TypeError if any properties were not successfully defined on the object.N/A
        set()N/AReflect.set() returns true if the property was set successfully on the object and false if it was not. Throws a TypeError if the target was not an Object.
        get()N/AReflect.get() returns the value of the property. Throws a TypeError if the target was not an Object.
        deleteProperty()N/AReflect.deleteProperty() returns true if the property was deleted from the object and false if it was not.
        getOwnPropertyDescriptor()Object.getOwnPropertyDescriptor() returns a property descriptor of the given property if it exists on the object argument passed in, and returns undefined if it does not exist. However, if an object is not passed in as the first argument, it will be coerced into an object.Reflect.getOwnPropertyDescriptor() returns a property descriptor of the given property if it exists on the object. Returns undefined if it does not exist, and a TypeError if anything other than an object (a primitive) is passed in as the first argument.
        getOwnPropertyDescriptors()Object.getOwnPropertyDescriptors() returns an object containing a property descriptor of each passed-in object. Returns an empty object if the passed-in object has no owned property descriptors.N/A
        getPrototypeOf()Object.getPrototypeOf() returns the prototype of the given object. Returns null if there are no inherited properties. Throws a TypeError for non-objects in ES5, but coerces non-objects in ES2015.Reflect.getPrototypeOf() returns the prototype of the given object. Returns null if there are no inherited properties, and throws a TypeError for non-objects.
        setPrototypeOf()Object.setPrototypeOf() returns the object itself if its prototype was set successfully. Throws a TypeError if the prototype being set was anything other than an Object or null, or if the prototype for the object being modified is non-extensible.Reflect.setPrototypeOf() returns true if the prototype was successfully set on the object and false if it wasn't (including if the prototype is non-extensible). Throws a TypeError if the target passed in was not an Object, or if the prototype being set was anything other than an Object or null.
        isExtensible()Object.isExtensible() returns true if the object is extensible, and false if it is not. Throws a TypeError in ES5 if the first argument is not an object (a primitive). In ES2015, it will be coerced into a non-extensible, ordinary object and will return false.

        Reflect.isExtensible() returns true if the object is extensible, and false if it is not. Throws a TypeError if the first argument is not an object (a primitive).

        preventExtensions()

        Object.preventExtensions() returns the object that is being made non-extensible. Throws a TypeErrorin ES5 if the argument is not an object (a primitive). In ES2015, treats the argument as a non-extensible, ordinary object and returns the object itself.

        Reflect.preventExtensions() returns true if the object has been made non-extensible, and false if it has not. Throws a TypeError if the argument is not an object (a primitive).
        keys()Object.keys() returns an Array of strings that map to the target object's own (enumerable) property keys. Throws a TypeError in ES5 if the target is not an object, but coerces non-object targets into objects in ES2015.N/A
        ownKeys()N/AReflect.ownKeys() returns an Array of property names that map to the target object's own property keys. Throws a TypeError if the target is not an Object.
        -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods # WebAssembly.compile() @@ -11802,7 +11802,7 @@ The `WebAssembly.compile()` function compiles WebAssembly binary code into a [`W ### Parameters -_bufferSource_ +_bufferSource_ A [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) or [ArrayBuffer](../arraybuffer) containing the binary code of the .wasm module you want to compile. ### Return value @@ -11834,7 +11834,7 @@ The following example compiles the loaded simple.wasm byte code using the `compi ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-webassembly-compile
        @@ -11875,8 +11875,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/compile # WebAssembly.CompileError @@ -11885,35 +11885,35 @@ The `WebAssembly.CompileError` object indicates an error during WebAssembly deco ## Constructor -[`WebAssembly.CompileError()`](compileerror/compileerror) +[`WebAssembly.CompileError()`](compileerror/compileerror) Creates a new `WebAssembly.CompileError` object. ## Instance properties -[`WebAssembly.CompileError.prototype.message`](../error/message) +[`WebAssembly.CompileError.prototype.message`](../error/message) Error message. Although ECMA-262 specifies that [`URIError`](../urierror) should provide its own `message` property, in [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey), it inherits [`Error.prototype.message`](../error/message). -[`WebAssembly.CompileError.prototype.name`](../error/name) +[`WebAssembly.CompileError.prototype.name`](../error/name) Error name. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.fileName`](../error/filename) +[`WebAssembly.CompileError.prototype.fileName`](../error/filename) Path to file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.lineNumber`](../error/linenumber) +[`WebAssembly.CompileError.prototype.lineNumber`](../error/linenumber) Line number in file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.columnNumber`](../error/columnnumber) +[`WebAssembly.CompileError.prototype.columnNumber`](../error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.stack`](../error/stack) +[`WebAssembly.CompileError.prototype.stack`](../error/stack) Stack trace. Inherited from [`Error`](../error). ## Instance methods -[`WebAssembly.CompileError.prototype.toSource()`](../error/tosource) +[`WebAssembly.CompileError.prototype.toSource()`](../error/tosource) Returns code that could eval to the same error. Inherited from [`Error`](../error). -[`WebAssembly.CompileError.prototype.toString()`](../error/tostring) +[`WebAssembly.CompileError.prototype.toString()`](../error/tostring) Returns a string representing the specified `Error` object.. Inherited from [`Error`](../error). ## Examples @@ -11936,7 +11936,7 @@ The following snippet creates a new `CompileError` instance, and logs its detail ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #exceptiondef-compileerror
        ECMAScript Language Specification (ECMAScript) @@ -12010,8 +12010,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError # WebAssembly.compileStreaming() @@ -12024,7 +12024,7 @@ The `WebAssembly.compileStreaming()` function compiles a [`WebAssembly.Module`]( ### Parameters -_source_ +_source_ A [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object or a promise that will fulfill with one, representing the underlying source of a .wasm module you want to stream and compile. ### Return value @@ -12052,7 +12052,7 @@ The resulting module instance is then instantiated using [`WebAssembly.instantia ## Specifications -
        Specification
        WebAssembly Web API (WebAssembly Web API) +
        Specification
        WebAssembly Web API (WebAssembly Web API)
        #dom-webassembly-compilestreaming
        @@ -12089,8 +12089,8 @@ No - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming # Array.prototype.concat() @@ -12106,7 +12106,7 @@ The `concat()` method is used to merge two or more arrays. This method does not ### Parameters -`valueN` Optional +`valueN` Optional Arrays and/or values to concatenate into a new array. If all `valueN` parameters are omitted, `concat` returns a shallow copy of the existing array on which it is called. See the description below for more details. ### Return value @@ -12180,7 +12180,7 @@ The following code concatenates nested arrays and demonstrates retention of refe ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.concat
        @@ -12231,13 +12231,13 @@ The **conditional (ternary) operator** is the only JavaScript operator that take ### Parameters -`condition` +`condition` An expression whose value is used as a condition. -`exprIfTrue` +`exprIfTrue` An expression which is evaluated if the `condition` evaluates to a [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) value (one which equals or can be converted to `true`). -`exprIfFalse` +`exprIfFalse` An expression which is executed if the `condition` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) (that is, has a value which can be converted to `false`). ## Description @@ -12286,7 +12286,7 @@ The ternary operator is right-associative, which means it can be "chained" in th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-conditional-operator
        @@ -12325,8 +12325,8 @@ The ternary operator is right-associative, which means it can be "chained" in th - [Making decisions in your code — conditionals](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/conditionals) - [Expressions and operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator # const @@ -12337,10 +12337,10 @@ Constants are block-scoped, much like variables declared using the `let` keyword const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]]; -`nameN` +`nameN` The constant's name, which can be any legal [identifier](https://developer.mozilla.org/en-US/docs/Glossary/Identifier). -`valueN` +`valueN` The constant's value. This can be any legal [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#expressions), including a function expression. The [Destructuring Assignment](../operators/destructuring_assignment) syntax can also be used to declare variables. @@ -12435,7 +12435,7 @@ const also works on objects and arrays. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-let-and-const-declarations
        @@ -12476,8 +12476,8 @@ const also works on objects and arrays. - [`let`](let) - [Constants in the JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#constants) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const # Reflect.construct() @@ -12491,13 +12491,13 @@ The static `Reflect.construct()` method acts like the [`new`](../../operators/ne ### Parameters -`target` +`target` The target function to call. -`argumentsList` +`argumentsList` An array-like object specifying the arguments with which `target` should be called. -`newTarget` Optional +`newTarget` Optional The constructor whose prototype should be used. See also the [`new.target`](../../operators/new.target) operator. If `newTarget` is not present, its value defaults to `target`. ### Return value @@ -12595,7 +12595,7 @@ When invoking `Reflect.construct()`, on the other hand, the `new.target` operato ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-reflect.construct
        @@ -12632,8 +12632,8 @@ No - [`new`](../../operators/new) - `new.target` -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct # Object.prototype.constructor @@ -12814,7 +12814,7 @@ or assign parent constructor identifier to a separate property on the Child cons ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.prototype.constructor' in that specification.
        @@ -12851,8 +12851,8 @@ or assign parent constructor identifier to a separate property on the Child cons - [Class constructor](../../classes/constructor) - Glossary: [constructor](https://developer.mozilla.org/en-US/docs/Glossary/Constructor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor # continue @@ -12863,7 +12863,7 @@ The `continue` terminates execution of the statements in the current iteration o continue [label]; -`label` +`label` Identifier associated with the label of the statement. ## Description @@ -12954,7 +12954,7 @@ Output: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Continue statement' in that specification.
        @@ -12990,8 +12990,8 @@ Output: - [`break`](break) - [label](label) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/continue # Array.prototype.copyWithin() @@ -13006,17 +13006,17 @@ The `copyWithin()` method shallow copies part of an array to another location in ### Parameters -`target` +`target` Zero-based index at which to copy the sequence to. If negative, `target` will be counted from the end. If `target` is at or greater than `arr.length`, nothing will be copied. If `target` is positioned after `start`, the copied sequence will be trimmed to fit `arr.length`. -`start` Optional +`start` Optional Zero-based index at which to start copying elements from. If negative, `start` will be counted from the end. If `start` is omitted, `copyWithin` will copy from index `0`. -`end` Optional +`end` Optional Zero-based index at which to end copying elements from. `copyWithin` copies up to but not including `end`. If negative, `end` will be counted from the end. If `end` is omitted, `copyWithin` will copy until the last index (default to `arr.length`). @@ -13064,7 +13064,7 @@ The `copyWithin` method is a mutable method. It does not alter the length of `th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.copywithin
        @@ -13112,7 +13112,7 @@ The `Math.cos()` static function returns the [cosine](https://en.wikipedia.org/w ### Parameters -`x` +`x` The angle in radians for which to return the cosine. ### Return value @@ -13137,7 +13137,7 @@ Because `cos()` is a static method of `Math`, you always use it as `Math.cos()`, ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.cos
        @@ -13177,8 +13177,8 @@ Because `cos()` is a static method of `Math`, you always use it as `Math.cos()`, - [`Math.sin()`](sin) - [`Math.tan()`](tan) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos # Math.cosh() @@ -13193,7 +13193,7 @@ $$\\mathtt{\\operatorname{Math.cosh(x)}} = \\frac{e^{x} + e^{- x}}{2}$$ ### Parameters -`x` +`x` A number. ### Return value @@ -13229,7 +13229,7 @@ or using only one call to the [`Math.exp()`](exp) function: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.cosh
        @@ -13268,8 +13268,8 @@ No - [`Math.sinh()`](sinh) - [`Math.tanh()`](tanh) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh # Object.create() @@ -13283,10 +13283,10 @@ The `Object.create()` method creates a new object, using an existing object as t ### Parameters -`proto` +`proto` The object which should be the prototype of the newly-created object. -`propertiesObject` Optional +`propertiesObject` Optional If specified and not [`undefined`](../undefined), an object whose enumerable own properties (that is, those properties defined upon itself and _not_ enumerable properties along its prototype chain) specify property descriptors to be added to the newly-created object, with the corresponding property names. These properties correspond to the second argument of [`Object.defineProperties()`](defineproperties). ### Return value @@ -13605,7 +13605,7 @@ If you wish to inherit from multiple objects, then mixins are a possibility. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.create
        @@ -13644,8 +13644,8 @@ If you wish to inherit from multiple objects, then mixins are a possibility. - [`Reflect.construct()`](../reflect/construct) - John Resig's post on [getPrototypeOf()](http://ejohn.org/blog/objectgetprototypeof/) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create # WebAssembly.Module.customSections() @@ -13658,10 +13658,10 @@ The `WebAssembly.customSections()` function returns a copy of the contents of al ### Parameters -_module_ +_module_ The [`WebAssembly.Module`](../module) object whose custom sections are being considered. -_sectionName_ +_sectionName_ The string name of the desired custom section. ### Return value @@ -13701,7 +13701,7 @@ We then do a check using `WebAssembly.Module.customSections`, looking to see whe ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-module-customsections
        @@ -13742,8 +13742,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections # TypeError: cyclic object value @@ -13855,80 +13855,80 @@ Alternatively, if you need full 64-bit range, you can create a [`BigInt`](bigint ## Constructor -[`DataView()`](dataview/dataview) +[`DataView()`](dataview/dataview) Creates a new `DataView` object. ## Instance properties -[`DataView.prototype.buffer`](dataview/buffer) +[`DataView.prototype.buffer`](dataview/buffer) The [`ArrayBuffer`](arraybuffer) referenced by this view. Fixed at construction time and thus **read only.** -[`DataView.prototype.byteLength`](dataview/bytelength) +[`DataView.prototype.byteLength`](dataview/bytelength) The length (in bytes) of this view from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`DataView.prototype.byteOffset`](dataview/byteoffset) +[`DataView.prototype.byteOffset`](dataview/byteoffset) The offset (in bytes) of this view from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** ## Instance methods -[`DataView.prototype.getInt8()`](dataview/getint8) +[`DataView.prototype.getInt8()`](dataview/getint8) Gets a signed 8-bit integer (byte) at the specified byte offset from the start of the view. -[`DataView.prototype.getUint8()`](dataview/getuint8) +[`DataView.prototype.getUint8()`](dataview/getuint8) Gets an unsigned 8-bit integer (unsigned byte) at the specified byte offset from the start of the view. -[`DataView.prototype.getInt16()`](dataview/getint16) +[`DataView.prototype.getInt16()`](dataview/getint16) Gets a signed 16-bit integer (short) at the specified byte offset from the start of the view. -[`DataView.prototype.getUint16()`](dataview/getuint16) +[`DataView.prototype.getUint16()`](dataview/getuint16) Gets an unsigned 16-bit integer (unsigned short) at the specified byte offset from the start of the view. -[`DataView.prototype.getInt32()`](dataview/getint32) +[`DataView.prototype.getInt32()`](dataview/getint32) Gets a signed 32-bit integer (long) at the specified byte offset from the start of the view. -[`DataView.prototype.getUint32()`](dataview/getuint32) +[`DataView.prototype.getUint32()`](dataview/getuint32) Gets an unsigned 32-bit integer (unsigned long) at the specified byte offset from the start of the view. -[`DataView.prototype.getFloat32()`](dataview/getfloat32) +[`DataView.prototype.getFloat32()`](dataview/getfloat32) Gets a signed 32-bit float (float) at the specified byte offset from the start of the view. -[`DataView.prototype.getFloat64()`](dataview/getfloat64) +[`DataView.prototype.getFloat64()`](dataview/getfloat64) Gets a signed 64-bit float (double) at the specified byte offset from the start of the view. -[`DataView.prototype.getBigInt64()`](dataview/getbigint64) +[`DataView.prototype.getBigInt64()`](dataview/getbigint64) Gets a signed 64-bit integer (long long) at the specified byte offset from the start of the view. -[`DataView.prototype.getBigUint64()`](dataview/getbiguint64) +[`DataView.prototype.getBigUint64()`](dataview/getbiguint64) Gets an unsigned 64-bit integer (unsigned long long) at the specified byte offset from the start of the view. -[`DataView.prototype.setInt8()`](dataview/setint8) +[`DataView.prototype.setInt8()`](dataview/setint8) Stores a signed 8-bit integer (byte) value at the specified byte offset from the start of the view. -[`DataView.prototype.setUint8()`](dataview/setuint8) +[`DataView.prototype.setUint8()`](dataview/setuint8) Stores an unsigned 8-bit integer (unsigned byte) value at the specified byte offset from the start of the view. -[`DataView.prototype.setInt16()`](dataview/setint16) +[`DataView.prototype.setInt16()`](dataview/setint16) Stores a signed 16-bit integer (short) value at the specified byte offset from the start of the view. -[`DataView.prototype.setUint16()`](dataview/setuint16) +[`DataView.prototype.setUint16()`](dataview/setuint16) Stores an unsigned 16-bit integer (unsigned short) value at the specified byte offset from the start of the view. -[`DataView.prototype.setInt32()`](dataview/setint32) +[`DataView.prototype.setInt32()`](dataview/setint32) Stores a signed 32-bit integer (long) value at the specified byte offset from the start of the view. -[`DataView.prototype.setUint32()`](dataview/setuint32) +[`DataView.prototype.setUint32()`](dataview/setuint32) Stores an unsigned 32-bit integer (unsigned long) value at the specified byte offset from the start of the view. -[`DataView.prototype.setFloat32()`](dataview/setfloat32) +[`DataView.prototype.setFloat32()`](dataview/setfloat32) Stores a signed 32-bit float (float) value at the specified byte offset from the start of the view. -[`DataView.prototype.setFloat64()`](dataview/setfloat64) +[`DataView.prototype.setFloat64()`](dataview/setfloat64) Stores a signed 64-bit float (double) value at the specified byte offset from the start of the view. -[`DataView.prototype.setBigInt64()`](dataview/setbigint64) +[`DataView.prototype.setBigInt64()`](dataview/setbigint64) Stores a signed 64-bit integer (long long) value at the specified byte offset from the start of the view. -[`DataView.prototype.setBigUint64()`](dataview/setbiguint64) +[`DataView.prototype.setBigUint64()`](dataview/setbiguint64) Stores an unsigned 64-bit integer (unsigned long long) value at the specified byte offset from the start of the view. ## Examples @@ -13943,7 +13943,7 @@ Stores an unsigned 64-bit integer (unsigned long long) value at the specified by ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview-objects
        @@ -14630,166 +14630,166 @@ In addition to methods to read and alter individual components of the local date ## Constructor -[`Date()`](date/date) +[`Date()`](date/date) When called as a function, returns a string representation of the current date and time, exactly as `new Date().toString()` does. -[`new Date()`](date/date) +[`new Date()`](date/date) When called as a constructor, returns a new `Date` object. ## Static methods -[`Date.now()`](date/now) +[`Date.now()`](date/now) Returns the numeric value corresponding to the current time—the number of milliseconds elapsed since January 1, 1970 00:00:00 UTC, with leap seconds ignored. -[`Date.parse()`](date/parse) +[`Date.parse()`](date/parse) Parses a string representation of a date and returns the number of milliseconds since 1 January, 1970, 00:00:00 UTC, with leap seconds ignored. **Note:** Parsing of strings with `Date.parse` is strongly discouraged due to browser differences and inconsistencies. -[`Date.UTC()`](date/utc) +[`Date.UTC()`](date/utc) Accepts the same parameters as the longest form of the constructor (i.e. 2 to 7) and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC, with leap seconds ignored. ## Instance methods -[`Date.prototype.getDate()`](date/getdate) +[`Date.prototype.getDate()`](date/getdate) Returns the day of the month (`1`–`31`) for the specified date according to local time. -[`Date.prototype.getDay()`](date/getday) +[`Date.prototype.getDay()`](date/getday) Returns the day of the week (`0`–`6`) for the specified date according to local time. -[`Date.prototype.getFullYear()`](date/getfullyear) +[`Date.prototype.getFullYear()`](date/getfullyear) Returns the year (4 digits for 4-digit years) of the specified date according to local time. -[`Date.prototype.getHours()`](date/gethours) +[`Date.prototype.getHours()`](date/gethours) Returns the hour (`0`–`23`) in the specified date according to local time. -[`Date.prototype.getMilliseconds()`](date/getmilliseconds) +[`Date.prototype.getMilliseconds()`](date/getmilliseconds) Returns the milliseconds (`0`–`999`) in the specified date according to local time. -[`Date.prototype.getMinutes()`](date/getminutes) +[`Date.prototype.getMinutes()`](date/getminutes) Returns the minutes (`0`–`59`) in the specified date according to local time. -[`Date.prototype.getMonth()`](date/getmonth) +[`Date.prototype.getMonth()`](date/getmonth) Returns the month (`0`–`11`) in the specified date according to local time. -[`Date.prototype.getSeconds()`](date/getseconds) +[`Date.prototype.getSeconds()`](date/getseconds) Returns the seconds (`0`–`59`) in the specified date according to local time. -[`Date.prototype.getTime()`](date/gettime) +[`Date.prototype.getTime()`](date/gettime) Returns the numeric value of the specified date as the number of milliseconds since January 1, 1970, 00:00:00 UTC. (Negative values are returned for prior times.) -[`Date.prototype.getTimezoneOffset()`](date/gettimezoneoffset) +[`Date.prototype.getTimezoneOffset()`](date/gettimezoneoffset) Returns the time-zone offset in minutes for the current locale. -[`Date.prototype.getUTCDate()`](date/getutcdate) +[`Date.prototype.getUTCDate()`](date/getutcdate) Returns the day (date) of the month (`1`–`31`) in the specified date according to universal time. -[`Date.prototype.getUTCDay()`](date/getutcday) +[`Date.prototype.getUTCDay()`](date/getutcday) Returns the day of the week (`0`–`6`) in the specified date according to universal time. -[`Date.prototype.getUTCFullYear()`](date/getutcfullyear) +[`Date.prototype.getUTCFullYear()`](date/getutcfullyear) Returns the year (4 digits for 4-digit years) in the specified date according to universal time. -[`Date.prototype.getUTCHours()`](date/getutchours) +[`Date.prototype.getUTCHours()`](date/getutchours) Returns the hours (`0`–`23`) in the specified date according to universal time. -[`Date.prototype.getUTCMilliseconds()`](date/getutcmilliseconds) +[`Date.prototype.getUTCMilliseconds()`](date/getutcmilliseconds) Returns the milliseconds (`0`–`999`) in the specified date according to universal time. -[`Date.prototype.getUTCMinutes()`](date/getutcminutes) +[`Date.prototype.getUTCMinutes()`](date/getutcminutes) Returns the minutes (`0`–`59`) in the specified date according to universal time. -[`Date.prototype.getUTCMonth()`](date/getutcmonth) +[`Date.prototype.getUTCMonth()`](date/getutcmonth) Returns the month (`0`–`11`) in the specified date according to universal time. -[`Date.prototype.getUTCSeconds()`](date/getutcseconds) +[`Date.prototype.getUTCSeconds()`](date/getutcseconds) Returns the seconds (`0`–`59`) in the specified date according to universal time. -[`Date.prototype.getYear()`](date/getyear) +[`Date.prototype.getYear()`](date/getyear) Returns the year (usually 2–3 digits) in the specified date according to local time. Use [`getFullYear()`](date/getfullyear) instead. -[`Date.prototype.setDate()`](date/setdate) +[`Date.prototype.setDate()`](date/setdate) Sets the day of the month for a specified date according to local time. -[`Date.prototype.setFullYear()`](date/setfullyear) +[`Date.prototype.setFullYear()`](date/setfullyear) Sets the full year (e.g. 4 digits for 4-digit years) for a specified date according to local time. -[`Date.prototype.setHours()`](date/sethours) +[`Date.prototype.setHours()`](date/sethours) Sets the hours for a specified date according to local time. -[`Date.prototype.setMilliseconds()`](date/setmilliseconds) +[`Date.prototype.setMilliseconds()`](date/setmilliseconds) Sets the milliseconds for a specified date according to local time. -[`Date.prototype.setMinutes()`](date/setminutes) +[`Date.prototype.setMinutes()`](date/setminutes) Sets the minutes for a specified date according to local time. -[`Date.prototype.setMonth()`](date/setmonth) +[`Date.prototype.setMonth()`](date/setmonth) Sets the month for a specified date according to local time. -[`Date.prototype.setSeconds()`](date/setseconds) +[`Date.prototype.setSeconds()`](date/setseconds) Sets the seconds for a specified date according to local time. -[`Date.prototype.setTime()`](date/settime) +[`Date.prototype.setTime()`](date/settime) Sets the [`Date`](date) object to the time represented by a number of milliseconds since January 1, 1970, 00:00:00 UTC. Use negative numbers for times prior. -[`Date.prototype.setUTCDate()`](date/setutcdate) +[`Date.prototype.setUTCDate()`](date/setutcdate) Sets the day of the month for a specified date according to universal time. -[`Date.prototype.setUTCFullYear()`](date/setutcfullyear) +[`Date.prototype.setUTCFullYear()`](date/setutcfullyear) Sets the full year (e.g. 4 digits for 4-digit years) for a specified date according to universal time. -[`Date.prototype.setUTCHours()`](date/setutchours) +[`Date.prototype.setUTCHours()`](date/setutchours) Sets the hour for a specified date according to universal time. -[`Date.prototype.setUTCMilliseconds()`](date/setutcmilliseconds) +[`Date.prototype.setUTCMilliseconds()`](date/setutcmilliseconds) Sets the milliseconds for a specified date according to universal time. -[`Date.prototype.setUTCMinutes()`](date/setutcminutes) +[`Date.prototype.setUTCMinutes()`](date/setutcminutes) Sets the minutes for a specified date according to universal time. -[`Date.prototype.setUTCMonth()`](date/setutcmonth) +[`Date.prototype.setUTCMonth()`](date/setutcmonth) Sets the month for a specified date according to universal time. -[`Date.prototype.setUTCSeconds()`](date/setutcseconds) +[`Date.prototype.setUTCSeconds()`](date/setutcseconds) Sets the seconds for a specified date according to universal time. -[`Date.prototype.setYear()`](date/setyear) +[`Date.prototype.setYear()`](date/setyear) Sets the year (usually 2–3 digits) for a specified date according to local time. Use [`setFullYear()`](date/setfullyear) instead. -[`Date.prototype.toDateString()`](date/todatestring) +[`Date.prototype.toDateString()`](date/todatestring) Returns the "date" portion of the [`Date`](date) as a human-readable string like `'Thu Apr 12 2018'`. -[`Date.prototype.toISOString()`](date/toisostring) +[`Date.prototype.toISOString()`](date/toisostring) Converts a date to a string following the ISO 8601 Extended Format. -[`Date.prototype.toJSON()`](date/tojson) +[`Date.prototype.toJSON()`](date/tojson) Returns a string representing the [`Date`](date) using [`toISOString()`](date/toisostring). Intended for use by [`JSON.stringify()`](json/stringify). -[`Date.prototype.toGMTString()`](date/togmtstring) +[`Date.prototype.toGMTString()`](date/togmtstring) Returns a string representing the [`Date`](date) based on the GMT (UTC) time zone. Use [`toUTCString()`](date/toutcstring) instead. -[`Date.prototype.toLocaleDateString()`](date/tolocaledatestring) +[`Date.prototype.toLocaleDateString()`](date/tolocaledatestring) Returns a string with a locality sensitive representation of the date portion of this date based on system settings. -`Date.prototype.toLocaleFormat()` +`Date.prototype.toLocaleFormat()` Converts a date to a string, using a format string. -[`Date.prototype.toLocaleString()`](date/tolocalestring) +[`Date.prototype.toLocaleString()`](date/tolocalestring) Returns a string with a locality-sensitive representation of this date. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`Date.prototype.toLocaleTimeString()`](date/tolocaletimestring) +[`Date.prototype.toLocaleTimeString()`](date/tolocaletimestring) Returns a string with a locality-sensitive representation of the time portion of this date, based on system settings. -[`Date.prototype.toString()`](date/tostring) +[`Date.prototype.toString()`](date/tostring) Returns a string representing the specified [`Date`](date) object. Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Date.prototype.toTimeString()`](date/totimestring) +[`Date.prototype.toTimeString()`](date/totimestring) Returns the "time" portion of the [`Date`](date) as a human-readable string. -[`Date.prototype.toUTCString()`](date/toutcstring) +[`Date.prototype.toUTCString()`](date/toutcstring) Converts a date to a string using the UTC timezone. -[`Date.prototype.valueOf()`](date/valueof) +[`Date.prototype.valueOf()`](date/valueof) Returns the primitive value of a [`Date`](date) object. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Examples @@ -14869,7 +14869,7 @@ In this case, it's important to return only an integer—so a simple division wo ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date-objects
        @@ -16274,22 +16274,22 @@ The `Intl.DateTimeFormat()` constructor creates [`Intl.DateTimeFormat`](../datet ### Parameters -`locales` Optional +`locales` Optional A string with a BCP 47 language tag, or an array of such strings. To use the browser's default locale, pass an empty array. Unicode extension are supported (for example "`en-US-u-ca-buddhist`"). For the general form and interpretation of the `locales` argument, see the [Intl](../../intl#locale_identification_and_negotiation) page. The following Unicode extension keys are allowed: -`nu` +`nu` Numbering system. Possible values include: "`arab`", "`arabext`", "`bali`", "`beng`", "`deva`", "`fullwide`", "`gujr`", "`guru`", "`hanidec`", "`khmr`", "`knda`", "`laoo`", "`latn`", "`limb`", "`mlym`", "`mong`", "`mymr`", "`orya`", "`tamldec`", "`telu`", "`thai`", "`tibt`". -`ca` +`ca` Calendar. Possible values include: "`buddhist`", "`chinese`", "`coptic`", "`ethiopia`", "`ethiopic`", "`gregory`", "`hebrew`", "`indian`", "`islamic`", "`iso8601`", "`japanese`", "`persian`", "`roc`". -`hc` +`hc` Hour cycle. Possible values include: "`h11`", "`h12`", "`h23`", "`h24`". -`options` Optional +`options` Optional An object with some or all of the following properties: -`dateStyle` +`dateStyle` The date formatting style to use when calling `format()`. Possible values include: - "`full`" @@ -16299,7 +16299,7 @@ The date formatting style to use when calling `format()`. Possible values includ **Note:** `dateStyle` can be used with `timeStyle`, but not with other options (e.g. `weekday`, `hour`, `month`, etc.). -`timeStyle` +`timeStyle` The time formatting style to use when calling `format()`. Possible values include: - "`full`" @@ -16309,28 +16309,28 @@ The time formatting style to use when calling `format()`. Possible values includ **Note:** `timeStyle` can be used with `dateStyle`, but not with other options (e.g. `weekday`, `hour`, `month`, etc.). -`calendar` +`calendar` Calendar. Possible values include: "`buddhist`", "`chinese`", " `coptic`", "`ethiopia`", "`ethiopic`", "`gregory`", " `hebrew`", "`indian`", "`islamic`", "`iso8601`", " `japanese`", "`persian`", "`roc`". -`dayPeriod` +`dayPeriod` The way day periods should be expressed. Possible values include: "`narrow`", "`short`", " `long`". -`numberingSystem` +`numberingSystem` Numbering System. Possible values include: "`arab`", "`arabext`", " `bali`", "`beng`", "`deva`", "`fullwide`", " `gujr`", "`guru`", "`hanidec`", "`khmr`", " `knda`", "`laoo`", "`latn`", "`limb`", "`mlym`", " `mong`", "`mymr`", "`orya`", "`tamldec`", " `telu`", "`thai`", "`tibt`". -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`timeZone` +`timeZone` The time zone to use. The only value implementations must recognize is "`UTC`"; the default is the runtime's default time zone. Implementations may also recognize the time zone names of the [IANA time zone database](https://www.iana.org/time-zones), such as "`Asia/Shanghai`", "`Asia/Kolkata`", "`America/New_York`". -`hour12` +`hour12` Whether to use 12-hour time (as opposed to 24-hour time). Possible values are `true` and `false`; the default is locale dependent. This option overrides the `hc` language tag and/or the `hourCycle` option in case both are present. -`hourCycle` +`hourCycle` The hour cycle to use. Possible values are "`h11`", "`h12`", "`h23`", or "`h24`". This option overrides the `hc` language tag, if both are present, and the `hour12` option takes precedence in case both options have been specified. -`formatMatcher` +`formatMatcher` The format matching algorithm to use. Possible values are "`basic`" and "`best fit`"; the default is "`best fit`". See the following paragraphs for information about the use of this property. The following properties describe the date-time components to use in formatted output, and their desired representations. Implementations are required to support at least the following subsets: @@ -16345,27 +16345,27 @@ The following properties describe the date-time components to use in formatted o Implementations may support other subsets, and requests will be negotiated against all available subset-representation combinations to find the best match. Two algorithms are available for this negotiation and selected by the `formatMatcher` property: A [fully specified "`basic`" algorithm](https://www.ecma-international.org/ecma-402/1.0/#BasicFormatMatcher) and an implementation-dependent "`best fit`" algorithm. -`weekday` +`weekday` The representation of the weekday. Possible values are: - "`long`" (e.g., `Thursday`) - "`short`" (e.g., `Thu`) - "`narrow`" (e.g., `T`). Two weekdays may have the same narrow style for some locales (e.g. `Tuesday`'s narrow style is also `T`). -`era` +`era` The representation of the era. Possible values are: - "`long`" (e.g., `Anno Domini`) - "`short`" (e.g., `AD`) - "`narrow`" (e.g., `A`) -`year` +`year` The representation of the year. Possible values are: - "`numeric`" (e.g., `2012`) - "`2-digit`" (e.g., `12`) -`month` +`month` The representation of the month. Possible values are: - "`numeric`" (e.g., `2`) @@ -16374,22 +16374,22 @@ The representation of the month. Possible values are: - "`short`" (e.g., `Mar`) - "`narrow`" (e.g., `M`). Two months may have the same narrow style for some locales (e.g. `May`'s narrow style is also `M`). -`day` +`day` The representation of the day. Possible values are: - "`numeric`" (e.g., `1`) - "`2-digit`" (e.g., `01`) -`hour` +`hour` The representation of the hour. Possible values are "`numeric`", "`2-digit`". -`minute` +`minute` The representation of the minute. Possible values are "`numeric`", "`2-digit`". -`second` +`second` The representation of the second. Possible values are "`numeric`", "`2-digit`". -`fractionalSecondDigits` +`fractionalSecondDigits` The number of digits used to represent fractions of a second (any additional digits are truncated). Possible values are: - `0` (Fractional part dropped.) @@ -16397,7 +16397,7 @@ The number of digits used to represent fractions of a second (any additional dig - `2` (Fractional part represented as 2 digits. For example, 736 is formatted as `73`.) - `3` (Fractional part represented as 3 digits. For example, 736 is formatted as `736`.) -`timeZoneName` +`timeZoneName` The representation of the time zone name. Possible values are: - "`long`" (e.g., `British Summer Time`) @@ -16438,7 +16438,7 @@ In basic use without specifying a locale, `DateTimeFormat` uses the default loca ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl-datetimeformat-constructor
        @@ -16675,7 +16675,7 @@ When the debugger is invoked, execution is paused at the `debugger` statement. I ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-debugger-statement
        @@ -16711,8 +16711,8 @@ When the debugger is invoked, execution is paused at the `debugger` statement. I - [Debugging JavaScript](https://developer.mozilla.org/en-US/docs/Mozilla/Debugging/Debugging_JavaScript) - [The Debugger in the Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools/Debugger) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger # decodeURI() @@ -16725,7 +16725,7 @@ The `decodeURI()` function decodes a Uniform Resource Identifier (URI) previousl ### Parameters -`encodedURI` +`encodedURI` A complete, encoded Uniform Resource Identifier. ### Return value @@ -16759,7 +16759,7 @@ Replaces each escape sequence in the encoded URI with the character that it repr ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-decodeuri-encodeduri
        @@ -16808,7 +16808,7 @@ The `decodeURIComponent()` function decodes a Uniform Resource Identifier (URI) ### Parameters -`encodedURI` +`encodedURI` An encoded component of a Uniform Resource Identifier. ### Return value @@ -16853,7 +16853,7 @@ decodeURIComponent cannot be used directly to parse query parameters from a URL. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-decodeuricomponent-encodeduricomponent
        @@ -16926,7 +16926,7 @@ If used prefix, with operator before operand (for example, `--x`), the decrement ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-postfix-decrement-operator
        @@ -16969,8 +16969,8 @@ If used prefix, with operator before operand (for example, `--x`), the decrement - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Decrement # Default parameters @@ -17153,7 +17153,7 @@ You can use default value assignment with the [destructuring assignment](../oper ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-definitions
        @@ -17252,40 +17252,40 @@ The `Object.defineProperties()` method defines new or modifies existing properti ### Parameters -`obj` +`obj` The object on which to define or modify properties. -`props` +`props` An object whose keys represent the names of properties to be defined or modified and whose values are objects describing those properties. Each value in `props` must be either a data descriptor or an accessor descriptor; it cannot be both (see [`Object.defineProperty()`](defineproperty) for more details). Data descriptors and accessor descriptors may optionally contain the following keys: -`configurable` -`true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. +`configurable` +`true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. `false` -`enumerable` -`true` if and only if this property shows up during enumeration of the properties on the corresponding object. +`enumerable` +`true` if and only if this property shows up during enumeration of the properties on the corresponding object. `false` A data descriptor also has the following optional keys: -`value` -The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). +`value` +The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). **Defaults to [`undefined`](../undefined).** -`writable` -`true` if and only if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). +`writable` +`true` if and only if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). `false` An accessor descriptor also has the following optional keys: -`get` -A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. The function's return value will be used as the value of the property. +`get` +A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. The function's return value will be used as the value of the property. **Defaults to [`undefined`](../undefined).** -`set` -A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. The function will receive as its only argument the new value being assigned to the property. +`set` +A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. The function will receive as its only argument the new value being assigned to the property. **Defaults to [`undefined`](../undefined).** If a descriptor has neither of `value`, `writable`, `get` and `set` keys, it is treated as a data descriptor. If a descriptor has both `value` or `writable` and `get` or `set` keys, an exception is thrown. @@ -17378,7 +17378,7 @@ Assuming a pristine execution environment with all names and properties referrin ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.defineproperties
        @@ -17415,8 +17415,8 @@ Assuming a pristine execution environment with all names and properties referrin - [`Object.keys()`](keys) - [Enumerability and ownership of properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties # Object.defineProperty() @@ -17429,13 +17429,13 @@ The static method `Object.defineProperty()` defines a new property directly on a ### Parameters -`obj` +`obj` The object on which to define the property. -`prop` +`prop` The name or [`Symbol`](../symbol) of the property to be defined or modified. -`descriptor` +`descriptor` The descriptor for the property being defined or modified. ### Return value @@ -17450,32 +17450,32 @@ Property descriptors present in objects come in two main flavors: data descripto Both data and accessor descriptors are objects. They share the following optional keys (please note: the **defaults** mentioned here are in the case of defining properties using `Object.defineProperty()`): -`configurable` -`true` if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. +`configurable` +`true` if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. `false` -`enumerable` -`true` if and only if this property shows up during enumeration of the properties on the corresponding object. +`enumerable` +`true` if and only if this property shows up during enumeration of the properties on the corresponding object. `false` A **data descriptor** also has the following optional keys: -`value` -The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). +`value` +The value associated with the property. Can be any valid JavaScript value (number, object, function, etc). **Defaults to [`undefined`](../undefined).** -`writable` -`true` if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). +`writable` +`true` if the value associated with the property may be changed with an [assignment operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#assignment_operators). `false` An **accessor descriptor** also has the following optional keys: -`get` -A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. When the property is accessed, this function is called without arguments and with `this` set to the object through which the property is accessed (this may not be the object on which the property is defined due to inheritance). The return value will be used as the value of the property. +`get` +A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter. When the property is accessed, this function is called without arguments and with `this` set to the object through which the property is accessed (this may not be the object on which the property is defined due to inheritance). The return value will be used as the value of the property. **Defaults to [`undefined`](../undefined).** -`set` -A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. When the property is assigned, this function is called with one argument (the value being assigned to the property) and with `this` set to the object through which the property is assigned. +`set` +A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter. When the property is assigned, this function is called with one argument (the value being assigned to the property) and with `this` set to the object through which the property is assigned. **Defaults to [`undefined`](../undefined).** If a descriptor has neither of `value`, `writable`, `get` and `set` keys, it is treated as a data descriptor. If a descriptor has both \[`value` or `writable`\] and \[`get` or `set`\] keys, an exception is thrown. @@ -17824,7 +17824,7 @@ Unlike accessor properties, value properties are always set on the object itself ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.defineproperty
        @@ -17900,8 +17900,8 @@ Chrome 37 (and below) has a [bug](https://bugs.chromium.org/p/v8/issues/detail?i - [`Object.create()`](create) - [`Reflect.defineProperty()`](../reflect/defineproperty) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty # delete operator @@ -17919,10 +17919,10 @@ Where `expression` should evaluate to a [property](https://developer.mozilla.org ### Parameters -`object` +`object` The name of an object, or an expression evaluating to an object. -`property` +`property` The property to delete. ### Return value @@ -18123,7 +18123,7 @@ If instead, you want to remove an array element by changing the contents of the ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-delete-operator
        @@ -18160,8 +18160,8 @@ If instead, you want to remove an array element by changing the contents of the - [`Reflect.deleteProperty()`](../global_objects/reflect/deleteproperty) - [`Map.prototype.delete()`](../global_objects/map/delete) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete # SyntaxError: applying the 'delete' operator to an unqualified name is deprecated @@ -18240,10 +18240,10 @@ The `handler.deleteProperty()` method is a trap for the [`delete`](../../../oper The following parameters are passed to the `deleteProperty()` method. `this` is bound to the handler. -`target` +`target` The target object. -`property` +`property` The name or [`Symbol`](../../symbol) of the property to delete. ### Return value @@ -18301,7 +18301,7 @@ The following code traps the [`delete`](../../../operators/delete) operator. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-delete-p
        @@ -18339,8 +18339,8 @@ No - [`delete`](../../../operators/delete) operator - [`Reflect.deleteProperty()`](../../reflect/deleteproperty) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty # ReferenceError: deprecated caller or arguments usage @@ -18784,7 +18784,7 @@ The read-only `description` property is a string returning the optional descript ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.prototype.description
        @@ -18828,8 +18828,8 @@ No support for an undefined description. - [`Symbol.prototype.toString()`](tostring) - Polyfill: -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description # Destructuring assignment @@ -19213,7 +19213,7 @@ When deconstructing an object, if a property is not accessed in itself, it will ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-destructuring-assignment
        @@ -19333,8 +19333,8 @@ No - [Assignment operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#Assignment_operators) - ["ES6 in Depth: Destructuring" on hacks.mozilla.org](https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment # Function.displayName @@ -19443,20 +19443,20 @@ The `Intl.DisplayNames` object enables the consistent translation of language, r ## Constructor -[`Intl.DisplayNames()`](displaynames/displaynames) +[`Intl.DisplayNames()`](displaynames/displaynames) Creates a new `Intl.DisplayNames` object. ## Static methods -[`Intl.DisplayNames.supportedLocalesOf()`](displaynames/supportedlocalesof) +[`Intl.DisplayNames.supportedLocalesOf()`](displaynames/supportedlocalesof) Returns an array containing those of the provided locales that are supported without having to fall back to the runtime's default locale. ## Instance methods -[`Intl.DisplayNames.prototype.of()`](displaynames/of) +[`Intl.DisplayNames.prototype.of()`](displaynames/of) This method receives a `code` and returns a string based on the locale and options provided when instantiating `Intl.DisplayNames`. -[`Intl.DisplayNames.prototype.resolvedOptions()`](displaynames/resolvedoptions) +[`Intl.DisplayNames.prototype.resolvedOptions()`](displaynames/resolvedoptions) Returns a new object with properties reflecting the locale and formatting options computed during initialization of the object. ## Examples @@ -19538,7 +19538,7 @@ To create an `Intl.DisplayNames` for a locale and get the display name for curre ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #intl-displaynames-objects
        @@ -19707,7 +19707,7 @@ The division operator (`/`) produces the quotient of its operands where the left ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Division operator' in that specification.
        @@ -19750,8 +19750,8 @@ The division operator (`/`) produces the quotient of its operands where the left - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Division # do...while @@ -19764,10 +19764,10 @@ The `do...while` creates a loop that executes a specified statement until the te statement while (condition); -`statement` +`statement` A statement that is executed at least once and is re-executed each time the condition evaluates to true. To execute multiple statements within the loop, use a [block](block) statement (`{ ... }`) to group those statements. -`condition` +`condition` An expression evaluated after each pass through the loop. If `condition` evaluates to true, the `statement` is re-executed. When `condition` evaluates to false, control passes to the statement following the `do...while`. ## Examples @@ -19789,7 +19789,7 @@ In the following example, the `do...while` loop iterates at least once and reite ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-do-while-statement
        @@ -19825,8 +19825,8 @@ In the following example, the `do...while` loop iterates at least once and reite - [`while`](while) - [`for`](for) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/do...while # RegExp.prototype.dotAll @@ -19883,7 +19883,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.dotAll
        @@ -19925,8 +19925,8 @@ No - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/dotAll # Math.E @@ -19967,7 +19967,7 @@ The following function returns e: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.e
        @@ -20004,8 +20004,8 @@ The following function returns e: - [`Math.log()`](log) - [`Math.log1p()`](log1p) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E # empty @@ -20062,7 +20062,7 @@ If `three` is `true`, nothing will happen, `four` does not matter, and also the ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-empty-statement
        @@ -20097,8 +20097,8 @@ If `three` is `true`, nothing will happen, `four` does not matter, and also the - [`Block statement`](block) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/Empty # encodeURI() @@ -20111,7 +20111,7 @@ The `encodeURI()` function encodes a [URI](https://developer.mozilla.org/en-US/d ### Parameters -`URI` +`URI` A complete URI. ### Return value @@ -20175,7 +20175,7 @@ If one wishes to follow the more recent [RFC3986](https://datatracker.ietf.org/d ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-encodeuri-uri
        @@ -20224,7 +20224,7 @@ The `encodeURIComponent()` function encodes a [URI](https://developer.mozilla.or ### Parameters -`str` +`str` String. A component of a URI. ### Return value @@ -20319,7 +20319,7 @@ The following example provides the special encoding required within UTF-8 [`Cont ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'encodeURIComponent' in that specification.
        @@ -20369,10 +20369,10 @@ The `endsWith()` method determines whether a string ends with the characters of ### Parameters -`searchString` +`searchString` The characters to be searched for at the end of `str`. -`length` Optional +`length` Optional If provided, it is used as the length of `str`. Defaults to `str.length`. ### Return value @@ -20408,7 +20408,7 @@ This method has been added to the ECMAScript 6 specification and may not be avai ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.endswith
        @@ -20446,8 +20446,8 @@ No - [`String.prototype.indexOf()`](indexof) - [`String.prototype.lastIndexOf()`](lastindexof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith # Object.entries() @@ -20462,7 +20462,7 @@ The order of the array returned by `Object.entries()` does not depend on how an ### Parameters -`obj` +`obj` The object whose own enumerable string-keyed property `[key, value]` pairs are to be returned. ### Return value @@ -20549,7 +20549,7 @@ Using [Array Destructuring](../../operators/destructuring_assignment#array_destr ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.entries' in that specification.
        @@ -20593,8 +20593,8 @@ No - [`Map.prototype.keys()`](../map/keys) - [`Map.prototype.values()`](../map/values) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries # Number.EPSILON @@ -20638,7 +20638,7 @@ The `EPSILON` property has a value of approximately `2.2204460492503130808472633 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.epsilon
        @@ -20673,8 +20673,8 @@ No - The [`Number`](../number) object it belongs to -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON # SyntaxError: test for equality (==) mistyped as assignment (=)? @@ -20801,7 +20801,7 @@ Note that strings constructed using `new String()` are objects. If you compare o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-equality-operators
        @@ -20838,8 +20838,8 @@ Note that strings constructed using `new String()` are objects. If you compare o - [Strict equality operator](strict_equality) - [Strict inequality operator](strict_inequality) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality # Error @@ -20854,69 +20854,69 @@ Runtime errors result in new `Error` objects being created and thrown. Besides the generic `Error` constructor, there are other core error constructors in JavaScript. For client-side exceptions, see [Exception handling statements](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#exception_handling_statements). -[`EvalError`](evalerror) +[`EvalError`](evalerror) Creates an instance representing an error that occurs regarding the global function [`eval()`](eval). -[`RangeError`](rangeerror) +[`RangeError`](rangeerror) Creates an instance representing an error that occurs when a numeric variable or parameter is outside of its valid range. -[`ReferenceError`](referenceerror) +[`ReferenceError`](referenceerror) Creates an instance representing an error that occurs when de-referencing an invalid reference. -[`SyntaxError`](syntaxerror) +[`SyntaxError`](syntaxerror) Creates an instance representing a syntax error. -[`TypeError`](typeerror) +[`TypeError`](typeerror) Creates an instance representing an error that occurs when a variable or parameter is not of a valid type. -[`URIError`](urierror) +[`URIError`](urierror) Creates an instance representing an error that occurs when [`encodeURI()`](encodeuri) or [`decodeURI()`](decodeuri) are passed invalid parameters. -[`AggregateError`](aggregateerror) +[`AggregateError`](aggregateerror) Creates an instance representing several errors wrapped in a single error when multiple errors need to be reported by an operation, for example by [`Promise.any()`](promise/any). -[`InternalError`](internalerror) This API has not been standardized. +[`InternalError`](internalerror) This API has not been standardized. Creates an instance representing an error that occurs when an internal error in the JavaScript engine is thrown. E.g. "too much recursion". ## Constructor -[`Error()`](error/error) +[`Error()`](error/error) Creates a new `Error` object. ## Static methods -`Error.captureStackTrace()` +`Error.captureStackTrace()` A non-standard **V8** function that creates the [`stack`](error/stack) property on an Error instance. ## Instance properties -[`Error.prototype.message`](error/message) +[`Error.prototype.message`](error/message) Error message. -[`Error.prototype.name`](error/name) +[`Error.prototype.name`](error/name) Error name. -`Error.prototype.description` +`Error.prototype.description` A non-standard Microsoft property for the error description. Similar to [`message`](error/message). -`Error.prototype.number` +`Error.prototype.number` A non-standard Microsoft property for an error number. -[`Error.prototype.fileName`](error/filename) +[`Error.prototype.fileName`](error/filename) A non-standard Mozilla property for the path to the file that raised this error. -[`Error.prototype.lineNumber`](error/linenumber) +[`Error.prototype.lineNumber`](error/linenumber) A non-standard Mozilla property for the line number in the file that raised this error. -[`Error.prototype.columnNumber`](error/columnnumber) +[`Error.prototype.columnNumber`](error/columnnumber) A non-standard Mozilla property for the column number in the line that raised this error. -[`Error.prototype.stack`](error/stack) +[`Error.prototype.stack`](error/stack) A non-standard Mozilla property for a stack trace. ## Instance methods -[`Error.prototype.toString()`](error/tostring) +[`Error.prototype.toString()`](error/tostring) Returns a string representing the specified object. Overrides the [`Object.prototype.toString()`](object/tostring) method. ## Examples @@ -21024,7 +21024,7 @@ See ["What's a good way to extend Error in JavaScript?"](https://stackoverflow.c ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-error-objects
        @@ -21403,7 +21403,7 @@ The `eval()` function evaluates JavaScript code represented as a string. ### Parameters -`string` +`string` A string representing a JavaScript expression, statement, or sequence of statements. The expression can include variables and properties of existing objects. ### Return value @@ -21635,7 +21635,7 @@ If you define multiple values then the last value is returned. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-eval-x
        @@ -21680,27 +21680,27 @@ The `EvalError` object indicates an error regarding the global [`eval()`](eval) ## Constructor -[`EvalError()`](evalerror/evalerror) +[`EvalError()`](evalerror/evalerror) Creates a new `EvalError` object. ## Instance properties -[`EvalError.prototype.message`](error/message) +[`EvalError.prototype.message`](error/message) Error message. Although ECMA-262 specifies that [`EvalError`](evalerror) should provide its own `message` property, in [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey), it inherits [`Error.prototype.message`](error/message). -[`EvalError.prototype.name`](error/name) +[`EvalError.prototype.name`](error/name) Error name. Inherited from [`Error`](error). -[`EvalError.prototype.fileName`](error/filename) +[`EvalError.prototype.fileName`](error/filename) Path to file that raised this error. Inherited from [`Error`](error). -[`EvalError.prototype.lineNumber`](error/linenumber) +[`EvalError.prototype.lineNumber`](error/linenumber) Line number in file that raised this error. Inherited from [`Error`](error). -[`EvalError.prototype.columnNumber`](error/columnnumber) +[`EvalError.prototype.columnNumber`](error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](error). -[`EvalError.prototype.stack`](error/stack) +[`EvalError.prototype.stack`](error/stack) Stack trace. Inherited from [`Error`](error). ## Examples @@ -21723,7 +21723,7 @@ Stack trace. Inherited from [`Error`](error). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-native-error-types-used-in-this-standard-evalerror
        @@ -21810,19 +21810,19 @@ The `every()` method tests whether all elements in the array pass the test imple ### Parameters -`callbackFn` +`callbackFn` A function to test for each element, taking three arguments: -`element` +`element` The current element being processed in the array. -`index` Optional +`index` Optional The index of the current element being processed in the array. -`array` Optional +`array` Optional The array `every` was called upon. -`thisArg` Optional +`thisArg` Optional A value to use as `this` when executing `callbackFn`. ### Return value @@ -21993,7 +21993,7 @@ The following examples tests the behavior of the `every` method when the array i ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.every
        @@ -22043,13 +22043,13 @@ The static `Atomics.exchange()` method stores a given value at a given position ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to exchange a `value`. -`value` +`value` The number to exchange. ### Return value @@ -22073,7 +22073,7 @@ The old value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.exchange
        @@ -22157,7 +22157,7 @@ If you are executing a match to find its index position in the string, use [`Str ### Parameters -`str` +`str` The string against which to match the regular expression. ### Return value @@ -22178,7 +22178,7 @@ Consider the following example: The following table shows the state of `result` after running this script: -
        Property/IndexDescriptionExample
        [0]The full string of characters matched"Quick Brown Fox Jumps"
        [1], ...[n]

        The parenthesized substring matches, if any.

        The number of possible parenthesized substrings is unlimited.

        result[1] === "Brown"

        result[2] === "Jumps"

        indexThe 0-based index of the match in the string.4
        indicesAn array where each entry represents a substring match. Each substring match itself is an array where the first entry represents its start index and the second entry its end index. +
        Property/IndexDescriptionExample
        [0]The full string of characters matched"Quick Brown Fox Jumps"
        [1], ...[n]

        The parenthesized substring matches, if any.

        The number of possible parenthesized substrings is unlimited.

        result[1] === "Brown"

        result[2] === "Jumps"

        indexThe 0-based index of the match in the string.4
        indicesAn array where each entry represents a substring match. Each substring match itself is an array where the first entry represents its start index and the second entry its end index.
        The indices array additionally has a groups property which holds an object of all named capturing groups. The keys are the names of the capturing groups and each value is an array with the first item being the start entry and the second entry being the end index of the capturing group. If the regular expression doesn't contain any capturing groups, groups is undefined.

        indices[0] === Array [ 4, 25 ]

        indices[1] === Array [ 10, 15 ]

        indices[2] === Array [ 20, 25 ]

        indices.groups === undefined

        indices.length === 3

        inputThe original string that was matched against.The Quick Brown Fox Jumps Over The Lazy Dog
        @@ -22226,7 +22226,7 @@ This will log a message containing `'hello world!'`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-regexp.prototype.exec
        @@ -22262,8 +22262,8 @@ This will log a message containing `'hello world!'`. - [Regular Expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) chapter in the [JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) - [`RegExp`](../regexp) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec # Math.exp() @@ -22276,7 +22276,7 @@ The `Math.exp()` function returns `ex`, where `x` is the argument, and `e` is [E ### Parameters -`x` +`x` A number. ### Return value @@ -22297,7 +22297,7 @@ Because `exp()` is a static method of `Math`, you always use it as `Math.exp()`, ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.exp
        @@ -22338,8 +22338,8 @@ Because `exp()` is a static method of `Math`, you always use it as `Math.exp()`, - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp # Math.expm1() @@ -22352,7 +22352,7 @@ The `Math.expm1()` function returns `ex - 1`, where `x` is the argument, and [e] ### Parameters -`x` +`x` A number. ### Return value @@ -22373,7 +22373,7 @@ Because `expm1()` is a static method of `Math`, you always use it as `Math.expm1 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.expm1
        @@ -22414,8 +22414,8 @@ No - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/expm1 # Exponentiation (\*\*) @@ -22471,7 +22471,7 @@ To force the base of an exponentiation expression to be a negative number: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-exp-operator
        @@ -22514,8 +22514,8 @@ No - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Exponentiation # export @@ -22561,7 +22561,7 @@ There are two types of exports: export { import1 as name1, import2 as name2, …, nameN } from …; export { default, … } from …; -`nameN` +`nameN` Identifier to be exported (so that it can be imported via [`import`](import) in another script). ## Description @@ -22727,7 +22727,7 @@ This is what it would look like using code snippets: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-exports
        @@ -22830,8 +22830,8 @@ No - [ES modules: A cartoon deep-dive](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/), Hacks blog post by Lin Clark - [Axel Rauschmayer's book: "Exploring JS: Modules"](https://exploringjs.com/es6/ch_modules.html) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export # WebAssembly.Module.exports() @@ -22844,7 +22844,7 @@ The `WebAssembly.Module.exports()` function returns an array containing descript ### Parameters -_module_ +_module_ A [`WebAssembly.Module`](../module) object. ### Return value @@ -22896,7 +22896,7 @@ The `exports[0]` output looks like this: ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-module-exports
        @@ -22937,8 +22937,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports # extends @@ -22990,7 +22990,7 @@ This example extends the built-in [`Date`](../global_objects/date) object. This ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'extends' in that specification.
        @@ -23132,13 +23132,13 @@ The `fill()` method changes all elements in an array to a static value, from a s ### Parameters -`value` +`value` Value to fill the array with. (Note all elements in the array will be this exact value.) -`start` Optional +`start` Optional Start index, default `0`. -`end` Optional +`end` Optional End index, default `arr.length`. ### Return value @@ -23236,7 +23236,7 @@ This example shows how to create a matrix of all 1, like the _ones()_ function o ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.fill' in that specification.
        @@ -23297,21 +23297,21 @@ The `filter()` method **creates a new array** with all elements that pass the te ### Parameters -`callbackFn` +`callbackFn` Function is a predicate, to test each element of the array. Return a value that coerces to `true` to keep the element, or to `false` otherwise. It accepts three arguments: -`element` +`element` The current element being processed in the array. -`index`Optional +`index`Optional The index of the current element being processed in the array. -`array`Optional +`array`Optional The array `filter` was called upon. -`thisArg`Optional +`thisArg`Optional Value to use as `this` when executing `callbackFn`. ### Return value @@ -23516,7 +23516,7 @@ The following examples tests the behavior of the `filter` method when the array ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.filter
        @@ -23573,7 +23573,7 @@ This helps to avoid duplicating code in both the promise's [`then()`](then) and ### Parameters -`onFinally` +`onFinally` A [`Function`](../function) called when the `Promise` is settled. ### Return value @@ -23612,7 +23612,7 @@ The `finally()` method is very similar to calling `.then(onFinally, onFinally)` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-promise.prototype.finally
        @@ -23649,8 +23649,8 @@ No - [`Promise.prototype.then()`](then) - [`Promise.prototype.catch()`](catch) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/finally # Array.prototype.find() @@ -23681,19 +23681,19 @@ The `find()` method returns the value of the first element in the provided array ### Parameters -`callbackFn` +`callbackFn` Function to execute on each value in the array, taking 3 arguments: -`element` +`element` The current element in the array. -`index` Optional +`index` Optional The index (position) of the current element in the array. -`array` Optional +`array` Optional The array that `find` was called on. -`thisArg` Optional +`thisArg` Optional Object to use as [`this`](../../operators/this) inside `callbackFn`. ### Return value @@ -23792,7 +23792,7 @@ The following examples show that nonexistent and deleted elements _are_ visited, ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.find
        @@ -23858,19 +23858,19 @@ See also the [`find()`](find) method, which returns the **value** of a found ele ### Parameters -`callbackFn` +`callbackFn` Function to execute on each value in the typed array, taking three arguments: -`element` +`element` The current element being processed in the typed array. -`index` +`index` The index of the current element being processed in the typed array. -`array` +`array` The typed array `findIndex()` was called upon. -`thisArg` Optional +`thisArg` Optional Object to use as `this` when executing `callbackFn`. ### Return value @@ -23949,7 +23949,7 @@ The following example finds the index of an element in the typed array that is a ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-%typedarray%.prototype.findindex
        @@ -23985,8 +23985,8 @@ No - [`TypedArray.prototype.find()`](find) - [`TypedArray.prototype.indexOf()`](indexof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex # String.prototype.fixed() @@ -24020,7 +24020,7 @@ The following example uses the `fixed` method to change the formatting of a stri ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.fixed
        @@ -24057,8 +24057,8 @@ The following example uses the `fixed` method to change the formatting of a stri - [`String.prototype.italics()`](italics) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed # RegExp.prototype.flags @@ -24103,7 +24103,7 @@ Flags in the `flags` property are sorted alphabetically (from left to right, e.g ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.flags
        @@ -24138,8 +24138,8 @@ No - [`RegExp.prototype.source`](source) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags # Array.prototype.flat() @@ -24153,7 +24153,7 @@ The `flat()` method creates a new array with all sub-array elements concatenated ### Parameters -`depth` Optional +`depth` Optional The depth level specifying how deep a nested array structure should be flattened. Defaults to 1. ### Return value @@ -24263,7 +24263,7 @@ The flat method removes empty slots in arrays: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.flat' in that specification.
        @@ -24327,19 +24327,19 @@ The `flatMap()` method returns a new array formed by applying a given callback f ### Parameters -`callback` +`callback` Function that produces an element of the new Array, taking three arguments: -`currentValue` +`currentValue` The current element being processed in the array. -`index`Optional +`index`Optional The index of the current element being processed in the array. -`array`Optional +`array`Optional The array `map` was called upon. -`thisArg`Optional +`thisArg`Optional Value to use as `this` when executing `callback`. ### Return value @@ -24413,7 +24413,7 @@ Notice, the output list length can be different from the input list length. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.flatmap
        @@ -24460,117 +24460,117 @@ The `Float32Array` typed array represents an array of 32-bit floating point numb ## Constructor -[`Float32Array()`](float32array/float32array) +[`Float32Array()`](float32array/float32array) Creates a new `Float32Array` object. ## Static properties -[`Float32Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Float32Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `4` in the case of an `Float32Array`. -[`Float32Array.name`](typedarray/name) +[`Float32Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Float32Array` type: "Float32Array". ## Static methods -[`Float32Array.from()`](typedarray/from) +[`Float32Array.from()`](typedarray/from) Creates a new `Float32Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Float32Array.of()`](typedarray/of) +[`Float32Array.of()`](typedarray/of) Creates a new `Float32Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Float32Array.prototype.buffer`](typedarray/buffer) +[`Float32Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Float32Array` Fixed at construction time and thus **read only**. -[`Float32Array.prototype.byteLength`](typedarray/bytelength) +[`Float32Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Float32Array`. Fixed at construction time and thus **read only.** -[`Float32Array.prototype.byteOffset`](typedarray/byteoffset) +[`Float32Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Float32Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Float32Array.prototype.length`](typedarray/length) +[`Float32Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `Float32Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Float32Array.prototype.copyWithin()`](typedarray/copywithin) +[`Float32Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Float32Array.prototype.entries()`](typedarray/entries) +[`Float32Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Float32Array.prototype.every()`](typedarray/every) +[`Float32Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Float32Array.prototype.fill()`](typedarray/fill) +[`Float32Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Float32Array.prototype.filter()`](typedarray/filter) +[`Float32Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`Float32Array.prototype.find()`](typedarray/find) +[`Float32Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Float32Array.prototype.findIndex()`](typedarray/findindex) +[`Float32Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Float32Array.prototype.forEach()`](typedarray/foreach) +[`Float32Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Float32Array.prototype.includes()`](typedarray/includes) +[`Float32Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Float32Array.prototype.indexOf()`](typedarray/indexof) +[`Float32Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Float32Array.prototype.join()`](typedarray/join) +[`Float32Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Float32Array.prototype.keys()`](typedarray/keys) +[`Float32Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Float32Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Float32Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Float32Array.prototype.map()`](typedarray/map) +[`Float32Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Float32Array.prototype.reduce()`](typedarray/reduce) +[`Float32Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Float32Array.prototype.reduceRight()`](typedarray/reduceright) +[`Float32Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Float32Array.prototype.reverse()`](typedarray/reverse) +[`Float32Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Float32Array.prototype.set()`](typedarray/set) +[`Float32Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Float32Array.prototype.slice()`](typedarray/slice) +[`Float32Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Float32Array.prototype.some()`](typedarray/some) +[`Float32Array.prototype.some()`](typedarray/some) Returns true if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Float32Array.prototype.sort()`](typedarray/sort) +[`Float32Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Float32Array.prototype.subarray()`](typedarray/subarray) +[`Float32Array.prototype.subarray()`](typedarray/subarray) Returns a new `Float32Array` from the given start and end element index. -[`Float32Array.prototype.values()`](typedarray/values) +[`Float32Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`Float32Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`Float32Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`Float32Array.prototype.toString()`](typedarray/tostring) +[`Float32Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`Float32Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`Float32Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -24604,7 +24604,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #table-49
        @@ -24675,117 +24675,117 @@ The `Float64Array` typed array represents an array of 64-bit floating point numb ## Constructor -[`Float64Array()`](float64array/float64array) +[`Float64Array()`](float64array/float64array) Creates a new `Float64Array` object. ## Static properties -[`Float64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Float64Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `8` in the case of an `Float64Array`. -[`Float64Array.name`](typedarray/name) +[`Float64Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Float64Array` type: "Float64Array". ## Static methods -[`Float64Array.from()`](typedarray/from) +[`Float64Array.from()`](typedarray/from) Creates a new `Float64Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Float64Array.of()`](typedarray/of) +[`Float64Array.of()`](typedarray/of) Creates a new `Float64Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Float64Array.prototype.buffer`](typedarray/buffer) +[`Float64Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Float64Array` Fixed at construction time and thus **read only**. -[`Float64Array.prototype.byteLength`](typedarray/bytelength) +[`Float64Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Float64Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Float64Array.prototype.byteOffset`](typedarray/byteoffset) +[`Float64Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Float64Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Float64Array.prototype.length`](typedarray/length) +[`Float64Array.prototype.length`](typedarray/length) Returns the number of elements hold in the `Float64Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Float64Array.prototype.copyWithin()`](typedarray/copywithin) +[`Float64Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Float64Array.prototype.entries()`](typedarray/entries) +[`Float64Array.prototype.entries()`](typedarray/entries) Returns a new `Array Iterator` object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Float64Array.prototype.every()`](typedarray/every) +[`Float64Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Float64Array.prototype.fill()`](typedarray/fill) +[`Float64Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Float64Array.prototype.filter()`](typedarray/filter) +[`Float64Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also [`Array.prototype.filter()`](array/filter). -[`Float64Array.prototype.find()`](typedarray/find) +[`Float64Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Float64Array.prototype.findIndex()`](typedarray/findindex) +[`Float64Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Float64Array.prototype.forEach()`](typedarray/foreach) +[`Float64Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Float64Array.prototype.includes()`](typedarray/includes) +[`Float64Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Float64Array.prototype.indexOf()`](typedarray/indexof) +[`Float64Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Float64Array.prototype.join()`](typedarray/join) +[`Float64Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Float64Array.prototype.keys()`](typedarray/keys) +[`Float64Array.prototype.keys()`](typedarray/keys) Returns a new `Array Iterator` that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Float64Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Float64Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Float64Array.prototype.map()`](typedarray/map) +[`Float64Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Float64Array.prototype.reduce()`](typedarray/reduce) +[`Float64Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Float64Array.prototype.reduceRight()`](typedarray/reduceright) +[`Float64Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Float64Array.prototype.reverse()`](typedarray/reverse) +[`Float64Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Float64Array.prototype.set()`](typedarray/set) +[`Float64Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Float64Array.prototype.slice()`](typedarray/slice) +[`Float64Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Float64Array.prototype.some()`](typedarray/some) +[`Float64Array.prototype.some()`](typedarray/some) Returns true if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Float64Array.prototype.sort()`](typedarray/sort) +[`Float64Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Float64Array.prototype.subarray()`](typedarray/subarray) +[`Float64Array.prototype.subarray()`](typedarray/subarray) Returns a new `Float64Array` from the given start and end element index. -[`Float64Array.prototype.values()`](typedarray/values) +[`Float64Array.prototype.values()`](typedarray/values) Returns a new `Array Iterator` object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`Float64Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`Float64Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`Float64Array.prototype.toString()`](typedarray/tostring) +[`Float64Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`Float64Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`Float64Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new `Array Iterator` object that contains the values for each index in the array. ## Examples @@ -24819,7 +24819,7 @@ Returns a new `Array Iterator` object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #table-49
        @@ -24894,7 +24894,7 @@ The `Math.floor()` function returns the largest integer less than or equal to a ### Parameters -`x` +`x` A number. ### Return value @@ -24975,7 +24975,7 @@ Because `floor()` is a static method of `Math`, you always use it as `Math.floor ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.floor
        @@ -25014,8 +25014,8 @@ Because `floor()` is a static method of `Math`, you always use it as `Math.floor - [`Math.sign()`](sign) - [`Math.trunc()`](trunc) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor # String.prototype.fontcolor() @@ -25034,7 +25034,7 @@ The `fontcolor()` method creates a [``](https://developer.mozilla.org/en-U ### Parameters -`color` +`color` A string expressing the color as a hexadecimal RGB triplet or as a string literal. String literals for color names are listed in the [CSS color reference](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value). ### Return value @@ -25065,7 +25065,7 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.fontcolor
        @@ -25100,8 +25100,8 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem - [`String.prototype.fontsize()`](fontsize) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor # String.prototype.fontsize() @@ -25120,7 +25120,7 @@ The `fontsize()` method creates a [``](https://developer.mozilla.org/en-US ### Parameters -`size` +`size` An integer between 1 and 7, a string representing a signed integer between 1 and 7. ### Return value @@ -25149,7 +25149,7 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.fontsize
        @@ -25185,8 +25185,8 @@ With the [`element.style`](https://developer.mozilla.org/en-US/docs/Web/API/Elem - [`String.prototype.big()`](big) - [`String.prototype.small()`](small) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize # for await...of @@ -25201,10 +25201,10 @@ The `for await...of` creates a loop iterating over async iterable objects as wel statement } -`variable` +`variable` On each iteration a value of a different property is assigned to `variable`. `variable` may be declared with `const`, `let`, or `var`. -`iterable` +`iterable` Object whose iterable properties are to be iterated over. ## Examples @@ -25392,7 +25392,7 @@ To make `finally` blocks of a sync generator to be always called use appropriate ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-in-and-for-of-statements
        @@ -25428,8 +25428,8 @@ No - [`Symbol.asyncIterator`](../global_objects/symbol/asynciterator) - [`for...of`](for...of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of # Warning: JavaScript 1.6's for-each-in loops are deprecated @@ -25593,10 +25593,10 @@ The `for...in` iterates over all [enumerable properties](https://developer.mozil for (variable in object) statement -`variable` +`variable` A different property name is assigned to `variable` on each iteration. -`object` +`object` Object whose non-Symbol enumerable properties are iterated over. ## Description @@ -25671,7 +25671,7 @@ The following function illustrates the use of [`hasOwnProperty()`](../global_obj ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-in-and-for-of-statements
        @@ -25729,8 +25729,8 @@ Other engines such as v8 (Chrome), Chakra (IE/Edge), and JSC (WebKit/Safari) are - [`Object.prototype.hasOwnProperty()`](../global_objects/object/hasownproperty) - [`Array.prototype.forEach()`](../global_objects/array/foreach) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in # for...of @@ -25743,10 +25743,10 @@ The `for...of` creates a loop iterating over [iterable objects](../iteration_pro statement } -`variable` +`variable` On each iteration a value of a different property is assigned to `variable`. `variable` may be declared with `const`, `let`, or `var`. -`iterable` +`iterable` Object whose iterable properties are iterated. ## Examples @@ -25992,7 +25992,7 @@ This loop iterates and logs **values** that `iterable`, as an [iterable object]( ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-in-and-for-of-statements
        @@ -26085,8 +26085,8 @@ No - [`Map.prototype.forEach()`](../global_objects/map/foreach) - [`Object.entries()`](../global_objects/object/entries) – Useful when using `for...of` over an object. -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of # for @@ -26098,18 +26098,18 @@ The **for statement** creates a loop that consists of three optional expressions for ([initialization]; [condition]; [final-expression]) statement -`initialization` +`initialization` An expression (including assignment expressions) or variable declaration evaluated once before the loop begins. Typically used to initialize a counter variable. This expression may optionally declare new variables with `var` or `let` keywords. Variables declared with `var` are not local to the loop, i.e. they are in the same scope the `for` loop is in. Variables declared with `let` are local to the statement. The result of this expression is discarded. -`condition` +`condition` An expression to be evaluated before each loop iteration. If this expression evaluates to true, `statement` is executed. This conditional test is optional. If omitted, the condition always evaluates to true. If the expression evaluates to false, execution skips to the first expression following the `for` construct. -`final-expression` +`final-expression` An expression to be evaluated at the end of each loop iteration. This occurs before the next evaluation of `condition`. Generally used to update or increment the counter variable. -`statement` +`statement` A statement that is executed as long as the condition evaluates to true. To execute multiple statements within the loop, use a [block](block) statement (`{ ... }`) to group those statements. To execute no statement within the loop, use an [empty](empty) statement (`;`). ## Examples @@ -26188,7 +26188,7 @@ The following `for` cycle calculates the offset position of a node in the `final ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-for-statement
        @@ -26229,8 +26229,8 @@ The following `for` cycle calculates the offset position of a node in the `final - [`for...in`](for...in) - [`for...of`](for...of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for # Array.prototype.forEach() @@ -26256,19 +26256,19 @@ The `forEach()` method executes a provided function once for each array element. ### Parameters -`callbackFn` +`callbackFn` Function to execute on each element. It accepts between one and three arguments: -`element` +`element` The current element being processed in the array. -`index` Optional +`index` Optional The index of `element` in the array. -`array` Optional +`array` Optional The array `forEach()` was called upon. -`thisArg` Optional +`thisArg` Optional Value to use as `this` when executing `callbackFn`. ### Return value @@ -26535,7 +26535,7 @@ The following example is only here for learning purpose. If you want to flatten ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.foreach
        @@ -26589,7 +26589,7 @@ The `Intl.DateTimeFormat.prototype.format()` method formats a date according to ### Parameters -`date` +`date` The date to format. ## Description @@ -26642,7 +26642,7 @@ For this reason you cannot expect to be able to compare the results of `format() ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.datetimeformat.prototype.format
        @@ -26731,7 +26731,7 @@ This method receives two [`Date`](../../date)s and formats the date range in the ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.datetimeformat.prototype.formatRange
        @@ -26811,7 +26811,7 @@ This method receives two [`Date`](../../date)s and returns an [`Array`](../../ar ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.DateTimeFormat.prototype.formatRangeToParts
        @@ -26859,7 +26859,7 @@ The `Intl.DateTimeFormat.prototype.formatToParts()` method allows locale-aware f ### Parameters -`date` Optional +`date` Optional The date to format. ### Return value @@ -26877,46 +26877,46 @@ The `formatToParts()` method is useful for custom formatting of date strings. It Possible types are the following: -day +day The string used for the day, for example "`17`". -dayPeriod +dayPeriod The string used for the day period, for example, "`AM`", "`PM`", "`in the morning`", or "`noon`" -era +era The string used for the era, for example "`BC`" or "`AD`". -fractionalSecond +fractionalSecond The string used for the fractional seconds, for example "`0`" or "`00`" or "`000`". -hour +hour The string used for the hour, for example "`3`" or "`03`". -literal +literal The string used for separating date and time values, for example "`/`", "`,`", "`o'clock`", "`de`", etc. -minute +minute The string used for the minute, for example "`00`". -month +month The string used for the month, for example "`12`". -relatedYear +relatedYear The string used for the related 4-digit Gregorian year, in the event that the calendar's representation would be a yearName instead of a year, for example "`2019`". -second +second The string used for the second, for example "`07`" or "`42`". -timeZoneName +timeZoneName The string used for the name of the time zone, for example "`UTC`". -weekday +weekday The string used for the weekday, for example "`M`", "`Monday`", or "`Montag`". -year +year The string used for the year, for example "`2012`" or "`96`". -yearName +yearName The string used for the yearName in relevant contexts, for example "`geng-zi`" ## Polyfill @@ -27050,7 +27050,7 @@ And `formatToParts`: ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.DateTimeFormat.prototype.formatToParts
        @@ -27113,7 +27113,7 @@ The `Object.freeze()` method **freezes** an object. A frozen object can no longe ### Parameters -`obj` +`obj` The object to freeze. ### Return value @@ -27292,7 +27292,7 @@ To make an object immutable, recursively freeze each property which is of type o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.freeze
        @@ -27331,8 +27331,8 @@ To make an object immutable, recursively freeze each property which is of type o - [`Object.seal()`](seal) - [`Object.isSealed()`](issealed) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze # Array.from() @@ -27358,13 +27358,13 @@ The `Array.from()` static method creates a new, shallow-copied `Array` instance ### Parameters -`arrayLike` +`arrayLike` An array-like or iterable object to convert to an array. -`mapFn` Optional +`mapFn` Optional Map function to call on every element of the array. -`thisArg` Optional +`thisArg` Optional Value to use as `this` when executing `mapFn`. ### Return value @@ -27380,8 +27380,8 @@ A new [`Array`](../array) instance. `Array.from()` has an optional parameter `mapFn`, which allows you to execute a [`map()`](map) function on each element of the array being created. -More clearly, `Array.from(obj, mapFn, thisArg)` -has the same result as `Array.from(obj).map(mapFn, thisArg)`, +More clearly, `Array.from(obj, mapFn, thisArg)` +has the same result as `Array.from(obj).map(mapFn, thisArg)`, except that it does not create an intermediate array. **Note:** This is especially important for certain array subclasses, like [typed arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays), since the intermediate array would necessarily have values truncated to fit into the appropriate type. @@ -27465,7 +27465,7 @@ In ES2015, the class syntax allows sub-classing of both built-in and user-define ## Specifications -
        SpecificationInitial publication
        ECMAScript (ECMA-262) +
        SpecificationInitial publication
        ECMAScript (ECMA-262)
        The definition of 'Array.from' in that specification.
        ECMAScript 2015
        @@ -27662,7 +27662,7 @@ The static `String.fromCharCode()` method returns a string created from the spec ### Parameters -`num1, ..., numN` +`num1, ..., numN` A sequence of numbers that are UTF-16 code units. The range is between `0` and `65535` (`0xFFFF`). Numbers greater than `0xFFFF` are truncated. No validity checks are performed. ### Return value @@ -27703,7 +27703,7 @@ Supplementary characters, in UTF-16, require two code units (i.e. a surrogate pa ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.fromCharCode' in that specification.
        @@ -27741,8 +27741,8 @@ Supplementary characters, in UTF-16, require two code units (i.e. a surrogate pa - [`String.prototype.charCodeAt()`](charcodeat) - [`String.prototype.codePointAt()`](codepointat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode # String.fromCodePoint() @@ -27757,7 +27757,7 @@ The static `String.fromCodePoint()` method returns a string created by using the ### Parameters -`num1, ..., numN` +`num1, ..., numN` A sequence of code points. ### Return value @@ -27851,7 +27851,7 @@ Invalid input: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.fromcodepoint
        @@ -27889,8 +27889,8 @@ No - [`String.prototype.codePointAt()`](codepointat) - [`String.prototype.charCodeAt()`](charcodeat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint # Object.fromEntries() @@ -27903,7 +27903,7 @@ The `Object.fromEntries()` method transforms a list of key-value pairs into an o ### Parameters -`iterable` +`iterable` An iterable such as [`Array`](../array) or [`Map`](../map) or other objects implementing the [iterable protocol](../../iteration_protocols#the_iterable_protocol). ### Return value @@ -27950,7 +27950,7 @@ With `Object.fromEntries`, its reverse method [`Object.entries()`](entries), and ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.fromentries
        @@ -27990,8 +27990,8 @@ No - [`Map.prototype.keys()`](../map/keys) - [`Map.prototype.values()`](../map/values) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries # Math.fround() @@ -28004,7 +28004,7 @@ The `Math.fround()` function returns the nearest [32-bit single precision](https ### Parameters -`doubleFloat` +`doubleFloat` A [`Number`](../number). If the parameter is of a different type, it will get converted to a number or to [`NaN`](../nan) if it cannot be converted. ### Return value @@ -28074,7 +28074,7 @@ Supporting older browsers is slower, but also possible: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.fround
        @@ -28109,8 +28109,8 @@ No - [`Math.round()`](round) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround # function\* @@ -28125,13 +28125,13 @@ You can also define generator functions using the [`GeneratorFunction`](../globa statements } -`name` +`name` The function name. -`param` Optional +`param` Optional The name of a formal parameter for the function. -`statements` +`statements` The statements comprising the body of the function. ## Description @@ -28142,8 +28142,8 @@ Generators in JavaScript -- especially when combined with Promises -- are a very Calling a generator function does not execute its body immediately; an [iterator](../iteration_protocols#iterator) object for the function is returned instead. When the iterator's `next()` method is called, the generator function's body is executed until the first [`yield`](../operators/yield) expression, which specifies the value to be returned from the iterator or, with [`yield*`](../operators/yield*), delegates to another generator function. The `next()` method returns an object with a `value` property containing the yielded value and a `done` property which indicates whether the generator has yielded its last value, as a boolean. Calling the `next()` method with an argument will resume the generator function execution, replacing the `yield` expression where an execution was paused with the argument from `next()`. -A `return` statement in a generator, when executed, will make the generator finish (i.e. the `done` property of the object returned by it will be set to `true`). If a value is returned, it will be set as the `value` property of the object returned by the generator. -Much like a `return` statement, an error thrown inside the generator will make the generator finished -- unless caught within the generator's body. +A `return` statement in a generator, when executed, will make the generator finish (i.e. the `done` property of the object returned by it will be set to `true`). If a value is returned, it will be set as the `value` property of the object returned by the generator. +Much like a `return` statement, an error thrown inside the generator will make the generator finished -- unless caught within the generator's body. When a generator is finished, subsequent `next()` calls will not execute any of that generator's code, they will just return an object of this form: `{value: undefined, done: true}`. ## Examples @@ -28306,7 +28306,7 @@ When a generator is finished, subsequent `next()` calls will not execute any of ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generator-function-definitions
        @@ -28432,8 +28432,8 @@ No - [Task.js](https://github.com/mozilla/task.js) - [Iterating generators asynchronously](https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/async%20%26%20performance/ch4.md#iterating-generators-asynchronously) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function\* # Function expression @@ -28454,13 +28454,13 @@ As of ES2015, you can also use [arrow functions](../functions/arrow_functions). ### Parameters -`name` Optional +`name` Optional The function name. Can be omitted, in which case the function is _anonymous_. The name is only local to the function body. -`paramN` Optional +`paramN` Optional The name of an argument to be passed to the function. -`statements` Optional +`statements` Optional The statements which comprise the body of the function. ## Description @@ -28544,7 +28544,7 @@ An anonymous function is created and called: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-definitions
        @@ -28613,8 +28613,8 @@ No - [async function](../statements/async_function) - [async function expression](async_function) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function # Functions @@ -28675,13 +28675,13 @@ There is a special syntax for declaring functions (see [function statement](stat statements } -`name` +`name` The function name. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. ### The function expression (`function` expression) @@ -28692,13 +28692,13 @@ A function expression is similar to and has the same syntax as a function declar statements } -`name` +`name` The function name. Can be omitted, in which case the function becomes known as an anonymous function. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. Here is an example of an **anonymous** function expression (the `name` is not used): @@ -28733,13 +28733,13 @@ There is a special syntax for generator function declarations (see [`function* s statements } -`name` +`name` The function name. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. ### The generator function expression (`function*` expression) @@ -28750,13 +28750,13 @@ A generator function expression is similar to and has the same syntax as a gener statements } -`name` +`name` The function name. Can be omitted, in which case the function becomes known as an anonymous function. -`param` +`param` The name of an argument to be passed to the function. -`statements` +`statements` The statements comprising the body of the function. ### The arrow function expression (=>) @@ -28769,10 +28769,10 @@ An arrow function expression has a shorter syntax and lexically binds its `this` param => expression -`param` +`param` The name of an argument. Zero arguments need to be indicated with `()`. For only one argument, the parentheses are not required. (like `foo => 1`) -`statements` or `expression` +`statements` or `expression` Multiple statements need to be enclosed in brackets. A single expression requires no brackets. The expression is also the implicit return value of the function. ### The `Function` constructor @@ -28783,10 +28783,10 @@ As all other objects, [`Function`](global_objects/function) objects can be creat new Function (arg1, arg2, ... argN, functionBody) -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Zero or more names to be used by the function as formal parameters. Each must be a proper JavaScript identifier. -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function body. Invoking the `Function` constructor as a function (without using the `new` operator) has the same effect as invoking it as a constructor. @@ -28801,10 +28801,10 @@ As all other objects, [`GeneratorFunction`](global_objects/generatorfunction) ob new GeneratorFunction (arg1, arg2, ... argN, functionBody) -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Zero or more names to be used by the function as formal argument names. Each must be a string that conforms to the rules for a valid JavaScript identifier or a list of such strings separated with a comma; for example "`x`", "`theValue`", or "`a,b`". -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function definition. Invoking the `GeneratorFunction` constructor as a function (without using the `new` operator) has the same effect as invoking it as a constructor. @@ -28834,10 +28834,10 @@ You can refer to a function's arguments within the function by using the `argume You can define getters (accessor methods) and setters (mutator methods) on any standard built-in object or user-defined object that supports the addition of new properties. The syntax for defining getters and setters uses the object literal syntax. -[get](functions/get) +[get](functions/get) Binds an object property to a function that will be called when that property is looked up. -[set](functions/set) +[set](functions/set) Binds an object property to a function to be called when there is an attempt to set that property. ### Method definition syntax @@ -29080,7 +29080,7 @@ Note that in the `if` test, a reference to `noFunc` is used—there are no brack ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-definitions
        @@ -29364,13 +29364,13 @@ This object cannot be instantiated directly. Instead, a `Generator` instance can ## Instance methods -[`Generator.prototype.next()`](generator/next) +[`Generator.prototype.next()`](generator/next) Returns a value yielded by the [`yield`](../operators/yield) expression. -[`Generator.prototype.return()`](generator/return) +[`Generator.prototype.return()`](generator/return) Returns the given value and finishes the generator. -[`Generator.prototype.throw()`](generator/throw) +[`Generator.prototype.throw()`](generator/throw) Throws an error to a generator (also finishes the generator, unless caught from within that generator). ## Examples @@ -29396,7 +29396,7 @@ With a generator function, values are not evaluated until they are needed. There ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generator-objects
        @@ -29530,10 +29530,10 @@ Note that `GeneratorFunction` is not a global object. It could be obtained by ev ### Parameters -`arg1, arg2, ... argN` +`arg1, arg2, ... argN` Names to be used by the function as formal argument names. Each must be a string that corresponds to a valid JavaScript identifier or a list of such strings separated with a comma; for example "`x`", "`theValue`", or "`a,b`". -`functionBody` +`functionBody` A string containing the JavaScript statements comprising the function definition. ## Description @@ -29561,7 +29561,7 @@ Invoking the `GeneratorFunction` constructor as a function (without using the `n ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generatorfunction-objects
        @@ -29614,10 +29614,10 @@ The `get` syntax binds an object property to a function that will be called when ### Parameters -`prop` +`prop` The name of the property to bind to the given function. -`expression` +`expression` Starting with ECMAScript 2015, you can also use expressions for a computed property name to bind to the given function. ## Description @@ -29726,7 +29726,7 @@ When using `get` the property will be defined on the instance's prototype, while ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Method definitions' in that specification.
        @@ -29805,10 +29805,10 @@ The `getBigInt64()` method gets a signed 64-bit integer (long long) at the speci ### Parameters -byteOffset +byteOffset The offset, in bytes, from the start of the view to read the data from. -littleEndian +littleEndian Optional Indicates whether the 64-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -29817,7 +29817,7 @@ A [`BigInt`](../bigint). ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such that it would read beyond the end of the view. ## Description @@ -29834,7 +29834,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getbigint64
        @@ -29884,10 +29884,10 @@ The `getBigUint64()` method gets an unsigned 64-bit integer (unsigned long long) ### Parameters -byteOffset +byteOffset The offset, in bytes, from the start of the view to read the data from. -littleEndian +littleEndian Optional Indicates whether the 64-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -29896,7 +29896,7 @@ A [`BigInt`](../bigint). ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such that it would read beyond the end of the view. ## Description @@ -29913,7 +29913,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getbiguint64
        @@ -29962,7 +29962,7 @@ The `Intl.getCanonicalLocales()` method returns an array containing the canonica ### Parameters -`locales` +`locales` A list of [`String`](../string) values for which to get the canonical locale names. ### Return value @@ -29985,7 +29985,7 @@ An array containing the canonical locale names. ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl.getcanonicallocales
        @@ -30049,7 +30049,7 @@ The second statement below assigns the value 25 to the variable `day`, based on ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getdate
        @@ -30121,7 +30121,7 @@ The second statement below assigns the value 1 to `weekday`, based on the value ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Date.prototype.getDay' in that specification.
        @@ -30171,10 +30171,10 @@ The `getFloat32()` method gets a signed 32-bit float (float) at the specified by ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 32-bit float is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -30183,7 +30183,7 @@ A signed 32-bit float number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -30200,7 +30200,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getfloat32
        @@ -30249,10 +30249,10 @@ The `getFloat64()` method gets a signed 64-bit float (double) at the specified b ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 64-bit float is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -30261,7 +30261,7 @@ A signed 64-bit float number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -30278,7 +30278,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getfloat64
        @@ -30345,7 +30345,7 @@ The following example assigns the four-digit value of the current year to the va ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getfullyear
        @@ -30409,7 +30409,7 @@ The second statement below assigns the value 23 to the variable `hours`, based o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.gethours
        @@ -30458,10 +30458,10 @@ The `getInt16()` method gets a signed 16-bit integer (short) at the specified by ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 16-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -30470,7 +30470,7 @@ A signed 16-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -30487,7 +30487,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getint16
        @@ -30536,10 +30536,10 @@ The `getInt32()` method gets a signed 32-bit integer (long) at the specified byt ### Parameters -`byteOffset` +`byteOffset` The offset, in bytes, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 32-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -30548,7 +30548,7 @@ A signed 32-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -30565,7 +30565,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getint32
        @@ -30613,7 +30613,7 @@ The `getInt8()` method gets a signed 8-bit integer (byte) at the specified byte ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. ### Return value @@ -30622,7 +30622,7 @@ A signed 8-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -30639,7 +30639,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getint8
        @@ -30700,7 +30700,7 @@ The following example assigns the milliseconds portion of the current time to th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getmilliseconds
        @@ -30763,7 +30763,7 @@ The second statement below assigns the value 15 to the variable `minutes`, based ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getminutes
        @@ -30834,7 +30834,7 @@ The second statement below assigns the value 11 to the variable `month`, based o ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getmonth
        @@ -30882,10 +30882,10 @@ The `Object.getOwnPropertyDescriptor()` method returns an object describing the ### Parameters -`obj` +`obj` The object in which to look for the property. -`prop` +`prop` The name or [`Symbol`](../symbol) of the property whose description is to be retrieved. ### Return value @@ -30898,22 +30898,22 @@ This method permits examination of the precise description of a property. A prop A property descriptor is a record with some of the following attributes: -`value` +`value` The value associated with the property (data descriptors only). -`writable` +`writable` `true` if and only if the value associated with the property may be changed (data descriptors only). -`get` +`get` A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter (accessor descriptors only). -`set` +`set` A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter (accessor descriptors only). -`configurable` +`configurable` `true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. -`enumerable` +`enumerable` `true` if and only if this property shows up during enumeration of the properties on the corresponding object. ## Examples @@ -30980,7 +30980,7 @@ In ES5, if the first argument to this method is not an object (a primitive), the ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.getownpropertydescriptor
        @@ -31020,8 +31020,8 @@ In Internet Explorer 8, this was only supported on DOM objects and with some non - [`Object.defineProperty()`](defineproperty) - [`Reflect.getOwnPropertyDescriptor()`](../reflect/getownpropertydescriptor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor # Object.getOwnPropertyDescriptors() @@ -31034,7 +31034,7 @@ The `Object.getOwnPropertyDescriptors()` method returns all own property descrip ### Parameters -`obj` +`obj` The object for which to get all own property descriptors. ### Return value @@ -31047,22 +31047,22 @@ This method permits examination of the precise description of all own properties A property descriptor is a record with some of the following attributes: -`value` +`value` The value associated with the property (data descriptors only). -`writable` +`writable` `true` if and only if the value associated with the property may be changed (data descriptors only). -`get` +`get` A function which serves as a getter for the property, or [`undefined`](../undefined) if there is no getter (accessor descriptors only). -`set` +`set` A function which serves as a setter for the property, or [`undefined`](../undefined) if there is no setter (accessor descriptors only). -`configurable` +`configurable` `true` if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. -`enumerable` +`enumerable` `true` if and only if this property shows up during enumeration of the properties on the corresponding object. ## Examples @@ -31094,7 +31094,7 @@ A typical way of creating a subclass is to define the subclass, set its prototyp ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.getOwnPropertyDescriptors' in that specification.
        @@ -31131,8 +31131,8 @@ No - [`Object.defineProperty()`](defineproperty) - [Polyfill](https://github.com/tc39/proposal-object-getownpropertydescriptors) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors # Object.getOwnPropertyNames() @@ -31145,7 +31145,7 @@ The `Object.getOwnPropertyNames()` method returns an array of all properties (in ### Parameters -`obj` +`obj` The object whose enumerable and non-enumerable properties are to be returned. ### Return value @@ -31243,7 +31243,7 @@ This uses the [`Array.prototype.filter()`](../array/filter) function to remove t ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.getownpropertynames
        @@ -31283,8 +31283,8 @@ This uses the [`Array.prototype.filter()`](../array/filter) function to remove t - [`Object.keys()`](keys) - [`Array.forEach()`](../array/foreach) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames # Object.getOwnPropertySymbols() @@ -31297,7 +31297,7 @@ The `Object.getOwnPropertySymbols()` method returns an array of all symbol prope ### Parameters -`obj` +`obj` The object whose symbol properties are to be returned. ### Return value @@ -31329,7 +31329,7 @@ As all objects have no own symbol properties initially, `Object.getOwnPropertySy ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.getownpropertysymbols
        @@ -31365,8 +31365,8 @@ No - [`Object.getOwnPropertyNames()`](getownpropertynames) - [`Symbol`](../symbol) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols # handler.getPrototypeOf() @@ -31385,7 +31385,7 @@ The `handler.getPrototypeOf()` method is a trap for the `[[GetPrototypeOf]]` int The following parameter is passed to the `getPrototypeOf()` method. `this` is bound to the handler. -`target` +`target` The target object. ### Return value @@ -31464,7 +31464,7 @@ If the following invariants are violated, the proxy will throw a [`TypeError`](. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-getprototypeof
        @@ -31502,8 +31502,8 @@ No - [`Object.getPrototypeOf()`](../../object/getprototypeof) - [`Reflect.getPrototypeOf()`](../../reflect/getprototypeof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf # Date.prototype.getSeconds() @@ -31531,7 +31531,7 @@ The second statement below assigns the value 30 to the variable `seconds`, based ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getseconds
        @@ -31711,7 +31711,7 @@ Subtracting two subsequent `getTime()` calls on newly generated [`Date`](../date ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.gettime
        @@ -31797,7 +31797,7 @@ In a time zone that doesn't annually shift in and out of Daylight Saving Time (D ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.gettimezoneoffset
        @@ -31845,10 +31845,10 @@ The `getUint16()` method gets an unsigned 16-bit integer (unsigned short) at the ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 16-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -31857,7 +31857,7 @@ An unsigned 16-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -31874,7 +31874,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getuint16
        @@ -31923,10 +31923,10 @@ The `getUint32()` method gets an unsigned 32-bit integer (unsigned long) at the ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. -`littleEndian` +`littleEndian` Optional Indicates whether the 32-bit int is stored in [little- or big-endian](https://developer.mozilla.org/en-US/docs/Glossary/Endianness) format. If `false` or `undefined`, a big-endian value is read. ### Return value @@ -31935,7 +31935,7 @@ An unsigned 32-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -31952,7 +31952,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getuint32
        @@ -32000,7 +32000,7 @@ The `getUint8()` method gets an unsigned 8-bit integer (unsigned byte) at the sp ### Parameters -`byteOffset` +`byteOffset` The offset, in byte, from the start of the view where to read the data. ### Return value @@ -32009,7 +32009,7 @@ An unsigned 8-bit integer number. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) Thrown if the `byteOffset` is set such as it would read beyond the end of the view. ## Description @@ -32026,7 +32026,7 @@ There is no alignment constraint; multi-byte values may be fetched from any offs ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-dataview.prototype.getuint8
        @@ -32087,7 +32087,7 @@ The following example assigns the day of month of the current date to the variab ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcdate
        @@ -32149,7 +32149,7 @@ The following example assigns the weekday portion of the current date to the var ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcday
        @@ -32215,7 +32215,7 @@ The following example assigns the four-digit value of the current year to the va ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcfullyear
        @@ -32276,7 +32276,7 @@ The following example assigns the hours portion of the current time to the varia ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutchours
        @@ -32339,7 +32339,7 @@ The following example assigns the milliseconds portion of the current time to th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcmilliseconds
        @@ -32400,7 +32400,7 @@ The following example assigns the minutes portion of the current time to the var ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcminutes
        @@ -32461,7 +32461,7 @@ The following example assigns the month portion of the current date to the varia ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcmonth
        @@ -32522,7 +32522,7 @@ The following example assigns the seconds portion of the current time to the var ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getutcseconds
        @@ -32626,7 +32626,7 @@ The third statement assigns the value 95 to the variable `year`, representing th ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.prototype.getyear
        @@ -32675,13 +32675,13 @@ A `WebAssembly.Global()` constructor creates a new `Global` object representing ### Parameters -_descriptor_ +_descriptor_ A `GlobalDescriptor` dictionary object, which contains two properties: - `value`: A [`USVString`](https://developer.mozilla.org/en-US/docs/Web/API/USVString) representing the data type of the global. This can be one of `i32`, `i64`, `f32`, and `f64`. USVString corresponds to the set of all possible sequences of unicode scalar values. USVString maps to a String when returned in JavaScript; it's generally only used for APIs that perform text processing and need a string of unicode scalar values to operate on. USVString is equivalent to DOMString except for not allowing unpaired surrogate codepoints. Unpaired surrogate codepoints present in USVString are converted by the browser to Unicode 'replacement character' U+FFFD, (�). - `mutable`: A boolean value that determines whether the global is mutable or not. By default, this is `false`. -_value_ +_value_ The value the variable contains. This can be any value, as long as its type matches the variable's data type. If no value is specified, a typed 0 value is used, as specified by the [`DefaultValue` algorithm](https://webassembly.github.io/spec/js-api/#defaultvalue). ## Examples @@ -32719,7 +32719,7 @@ The value of the global is then changed, first to `42` using the `Global.value` ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-global-global
        @@ -32757,8 +32757,8 @@ No - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) - [Import/Export mutable globals proposal](https://github.com/WebAssembly/mutable-global/blob/master/proposals/mutable-global/Overview.md) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/Global # globalThis @@ -32781,7 +32781,7 @@ yes ## Description -Historically, accessing the global object has required different syntax in different JavaScript environments. On the web you can use [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window), [`self`](https://developer.mozilla.org/en-US/docs/Web/API/Window/self), or [`frames`](https://developer.mozilla.org/en-US/docs/Web/API/Window/frames) - but in [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Worker) only `self` will work. In Node.js none of these work, and you must instead use `global`. +Historically, accessing the global object has required different syntax in different JavaScript environments. On the web you can use [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window), [`self`](https://developer.mozilla.org/en-US/docs/Web/API/Window/self), or [`frames`](https://developer.mozilla.org/en-US/docs/Web/API/Window/frames) - but in [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Worker) only `self` will work. In Node.js none of these work, and you must instead use `global`. The `this` keyword could be used inside functions running in non–strict mode, but `this` will be `undefined` in Modules and inside functions running in strict mode. You can also use `Function('return this')()`, but environments that disable [`eval()`](eval), like [CSP](https://developer.mozilla.org/en-US/docs/Glossary/CSP) in browsers, prevent use of [`Function`](function) in this way. The `globalThis` property provides a standard way of accessing the global `this` value (and hence the global object itself) across environments. Unlike similar properties such as `window` and `self`, it's guaranteed to work in window and non-window contexts. In this way, you can access the global object in a consistent manner without having to know which environment the code is being run in. To help you remember the name, just remember that in global scope the `this` value is `globalThis`. @@ -32821,7 +32821,7 @@ With `globalThis` available, the additional search for the global across environ ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-globalthis
        @@ -32920,7 +32920,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -32957,8 +32957,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Less than operator](less_than) - [Less than or equal operator](less_than_or_equal) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Greater_than # Greater than or equal (>=) @@ -33022,7 +33022,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -33059,8 +33059,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Less than operator](less_than) - [Less than or equal operator](less_than_or_equal) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Greater_than_or_equal # Grouping operator ( ) @@ -33099,7 +33099,7 @@ Overriding multiplication and division first, then addition and subtraction to e ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-grouping-operator
        @@ -33136,8 +33136,8 @@ Overriding multiplication and division first, then addition and subtraction to e - [`delete`](delete) - [`typeof`](typeof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Grouping # WebAssembly.Memory.prototype.grow() @@ -33150,7 +33150,7 @@ The `grow()` protoype method of the `Memory` object increases the size of the me ### Parameters -_number_ +_number_ The number of WebAssembly pages you want to grow the memory by (each one is 64KiB in size). ### Return value @@ -33176,7 +33176,7 @@ Note the return value of `grow()` here is the previous number of WebAssembly pag ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-memory-grow
        @@ -33217,8 +33217,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow # handler.has() @@ -33236,10 +33236,10 @@ The `handler.has()` method is a trap for the [`in`](../../../operators/in) opera The following parameters are passed to `has()` method. `this` is bound to the handler. -`target` +`target` The target object. -`prop` +`prop` The name or [`Symbol`](../../symbol) of the property to check for existence. ### Return value @@ -33297,7 +33297,7 @@ The following code violates an invariant. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p
        @@ -33335,8 +33335,8 @@ No - [`in`](../../../operators/in) operator - [`Reflect.has()`](../../reflect/has) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has # SyntaxError: Unexpected '\#' used outside of class body @@ -33441,7 +33441,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.hasIndices
        @@ -33514,8 +33514,8 @@ No - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/hasIndices # Symbol.hasInstance @@ -33569,7 +33569,7 @@ Just in the same manner at which you can check if an object is an instance of a ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.hasinstance
        @@ -33604,8 +33604,8 @@ No - [`instanceof`](../../operators/instanceof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance # Object.prototype.hasOwnProperty() @@ -33618,7 +33618,7 @@ The `hasOwnProperty()` method returns a boolean indicating whether the object ha ### Parameters -prop +prop The [`String`](../string) name or [Symbol](https://developer.mozilla.org/en-US/docs/Glossary/Symbol) of the property to test. ### Return value @@ -33703,7 +33703,7 @@ Note that in the last case there are no newly created objects. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.prototype.hasownproperty
        @@ -33742,8 +33742,8 @@ Note that in the last case there are no newly created objects. - [`in`](../../operators/in) - [JavaScript Guide: Inheritance revisited](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty # Intl.Locale.prototype.hourCycle @@ -33778,7 +33778,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.hourCycle
        @@ -33831,7 +33831,7 @@ $$\\mathtt{\\operatorname{Math.hypot}(v\_{1},v\_{2},\\ldots,v\_{n})} = \\sqrt{\\ ### Parameters -`value1, value2, ...` +`value1, value2, ...` Numbers. ### Return value @@ -33901,7 +33901,7 @@ A polyfill that avoids underflows and overflows: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.hypot
        @@ -33938,8 +33938,8 @@ No - [`Math.pow()`](pow) - [`Math.sqrt()`](sqrt) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot # SyntaxError: identifier starts immediately after numeric literal @@ -34001,13 +34001,13 @@ The `if` statement executes a statement if a specified condition is [truthy](htt statement2 } -`condition` +`condition` An [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#expressions) that is considered to be either [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) or [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy). -`statement1` +`statement1` Statement that is executed if condition is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy). Can be any statement, including further nested `if` statements. To execute multiple statements, use a [block](block) statement (`{ ... }`) to group those statements. To execute no statements, use an [empty](empty) statement. -`statement2` +`statement2` Statement that is executed if `condition` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) and the `else` clause exists. Can be any statement, including block statements and further nested `if` statements. ## Description @@ -34087,7 +34087,7 @@ If you need to use an assignment in a conditional expression, a common practice ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-if-statement
        @@ -34124,8 +34124,8 @@ If you need to use an assignment in a conditional expression, a common practice - [`switch`](switch) - [Conditional operator](../operators/conditional_operator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else # RegExp.prototype.ignoreCase @@ -34162,7 +34162,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.ignorecase
        @@ -34230,8 +34230,8 @@ You cannot change this property directly. - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase # SyntaxError: illegal character @@ -34327,19 +34327,19 @@ Backward compatibility can be ensured using attribute `nomodule` on the [`
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-imports
        @@ -34608,8 +34608,8 @@ No - Axel Rauschmayer's book: ["Exploring JS: Modules"](https://exploringjs.com/es6/ch_modules.html) - The Modern JavaScript Tutorial(javascript.info): [Export and Import](https://javascript.info/import-export) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import # import.meta @@ -34667,7 +34667,7 @@ Such file-specific argument passing may be complementary to that used in the app ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-ImportMeta
        HTML Standard (HTML) @@ -34706,8 +34706,8 @@ No - [`import`](import) - [`export`](export) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import.meta # WebAssembly.Module.imports() @@ -34720,7 +34720,7 @@ The `WebAssembly.imports()` function returns an array containing descriptions of ### Parameters -_module_ +_module_ A [`WebAssembly.Module`](../module) object. ### Return value @@ -34749,7 +34749,7 @@ The output looks like this: ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-module-imports
        @@ -34790,8 +34790,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports # Math.imul() @@ -34804,10 +34804,10 @@ The `Math.imul()` function returns the result of the C-like 32-bit multiplicatio ### Parameters -`a` +`a` First number. -`b` +`b` Second number. ### Return value @@ -34864,7 +34864,7 @@ However, the following function is more performant because it is likely that bro ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.imul
        @@ -34899,8 +34899,8 @@ No - [Emscripten](https://en.wikipedia.org/wiki/Emscripten) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul # in operator @@ -34913,10 +34913,10 @@ The `in` returns `true` if the specified property is in the specified object or ### Parameters -`prop` +`prop` A string or symbol representing a property name or array index (non-symbols will be coerced to strings). -`object` +`object` Object to check if it (or its prototype chain) contains the property with specified name (`prop`). ## Examples @@ -34992,7 +34992,7 @@ The `in` operator returns `true` for properties in the prototype chain. (If you ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -35031,8 +35031,8 @@ The `in` operator returns `true` for properties in the prototype chain. (If you - [`Reflect.has()`](../global_objects/reflect/has) - [Enumerability and ownership of properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in # TypeError: cannot use 'in' operator to search for 'x' in 'y' @@ -35109,12 +35109,12 @@ The `includes()` method determines whether an array includes a certain value amo ### Parameters -`searchElement` +`searchElement` The value to search for. **Note:** When comparing strings and characters, `includes()` is _case-sensitive_. -`fromIndex` Optional +`fromIndex` Optional The position in this array at which to begin searching for `searchElement`. The first element to be searched is found at `fromIndex` for positive values of `fromIndex`, or at `arr.length + fromIndex` for negative values of `fromIndex` (using the [absolute value](#) of `fromIndex` as the number of elements from the end of the array at which to start the search). @@ -35174,7 +35174,7 @@ The example below illustrates `includes()` method called on the function's [argu ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.includes
        @@ -35249,7 +35249,7 @@ If used prefix, with operator before operand (for example, `++x`), the increment ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Increment operator' in that specification.
        @@ -35292,8 +35292,8 @@ If used prefix, with operator before operand (for example, `++x`), the increment - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment # JavaScript reference @@ -35607,10 +35607,10 @@ The `indexOf()` method returns the first index at which a given element can be f ### Parameters -`searchElement` +`searchElement` Element to locate in the array. -`fromIndex` Optional +`fromIndex` Optional The index to start the search at. If the index is greater than or equal to the array's length, -1 is returned, which means the array will not be searched. If the provided index value is a negative number, it is taken as the offset from the end of the array. Note: if the provided index is negative, the array is still searched from front to back. If the provided index is 0, then the whole array will be searched. Default: 0 (entire array is searched). ### Return value @@ -35760,7 +35760,7 @@ However, if you are more interested in all the little technical bits defined by ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.indexof
        @@ -35861,7 +35861,7 @@ To prevent this, and require that different types are considered to be different ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-equality-operators
        @@ -35898,8 +35898,8 @@ To prevent this, and require that different types are considered to be different - [Strict equality operator](strict_equality) - [Strict inequality operator](strict_inequality) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality # Infinity @@ -35943,7 +35943,7 @@ As defined by the ECMAScript 5 specification, `Infinity` is read-only (implement ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-value-properties-of-the-global-object-infinity
        @@ -35988,12 +35988,12 @@ A `WebAssembly.Instance` object is a stateful, executable instance of a [`WebAss ## Constructor -[`WebAssembly.Instance()`](instance/instance) +[`WebAssembly.Instance()`](instance/instance) Creates a new `Instance` object. ## Instance properties -[`Instance.prototype.exports`](instance/exports) +[`Instance.prototype.exports`](instance/exports) Returns an object containing as its members all the functions exported from the WebAssembly module instance, to allow them to be accessed and used by JavaScript. Read-only. ## Examples @@ -36035,7 +36035,7 @@ This also demonstrates how the `exports` property is used to access exported fun ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #instances
        @@ -36136,8 +36136,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance # instanceof @@ -36150,10 +36150,10 @@ The `instanceof` tests to see if the `prototype` property of a constructor appea ### Parameters -`object` +`object` The object to test. -`constructor` +`constructor` Function to test against ## Description @@ -36286,7 +36286,7 @@ This will always be `false`. (`!mycar` will be evaluated before `instanceof`, so ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Relational Operators' in that specification.
        @@ -36323,8 +36323,8 @@ This will always be `false`. (`!mycar` will be evaluated before `instanceof`, so - [`Symbol.hasInstance`](../global_objects/symbol/hasinstance) - [`Object.prototype.isPrototypeOf`](../global_objects/object/isprototypeof) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof # WebAssembly.instantiate() @@ -36344,10 +36344,10 @@ The `WebAssembly.instantiate()` function allows you to compile and instantiate W #### Parameters -_bufferSource_ +_bufferSource_ A [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) or [`ArrayBuffer`](../arraybuffer) containing the binary code of the .wasm module you want to compile. -_importObject_ Optional +_importObject_ Optional An object containing the values to be imported into the newly-created `Instance`, such as functions or [`WebAssembly.Memory`](memory) objects. There must be one matching property for each declared import of the compiled module or else a [`WebAssembly.LinkError`](linkerror) is thrown. #### Return value @@ -36368,10 +36368,10 @@ A `Promise` that resolves to a `ResultObject` which contains two fields: #### Parameters -_module_ +_module_ The [`WebAssembly.Module`](module) object to be instantiated. -_importObject_ Optional +_importObject_ Optional An object containing the values to be imported into the newly-created `Instance`, such as functions or [`WebAssembly.Memory`](memory) objects. There must be one matching property for each declared import of `module` or else a [`WebAssembly.LinkError`](linkerror) is thrown. #### Return value @@ -36441,7 +36441,7 @@ In the worker (see `wasm_worker.js`) we define an import object for the module t ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #dom-webassembly-instantiate
        @@ -36482,8 +36482,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate # WebAssembly.instantiateStreaming() @@ -36496,10 +36496,10 @@ The `WebAssembly.instantiateStreaming()` function compiles and instantiates a We ### Parameters -_source_ +_source_ A [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object or a promise that will fulfill with one, representing the underlying source of a .wasm module you want to stream, compile, and instantiate. -_importObject_ Optional +_importObject_ Optional An object containing the values to be imported into the newly-created `Instance`, such as functions or [`WebAssembly.Memory`](memory) objects. There must be one matching property for each declared import of the compiled module or else a `WebAssembly.LinkError` is thrown. ### Return value @@ -36531,7 +36531,7 @@ The `ResultObject`'s instance member is then accessed, and the contained exporte ## Specifications -
        Specification
        WebAssembly Web API (WebAssembly Web API) +
        Specification
        WebAssembly Web API (WebAssembly Web API)
        #dom-webassembly-instantiatestreaming
        @@ -36568,8 +36568,8 @@ No - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming # Int16Array @@ -36578,117 +36578,117 @@ The `Int16Array` typed array represents an array of twos-complement 16-bit signe ## Constructor -[`Int16Array()`](int16array/int16array) +[`Int16Array()`](int16array/int16array) Creates a new `Int16Array` object. ## Static properties -[`Int16Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Int16Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `2` in the case of an `Int16Array`. -[`Int16Array.name`](typedarray/name) +[`Int16Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Int16Array` type: "`Int16Array`". ## Static methods -[`Int16Array.from()`](typedarray/from) +[`Int16Array.from()`](typedarray/from) Creates a new `Int16Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Int16Array.of()`](typedarray/of) +[`Int16Array.of()`](typedarray/of) Creates a new `Int16Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Int16Array.prototype.buffer`](typedarray/buffer) +[`Int16Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Int16Array`. Fixed at construction time and thus **read only**. -[`Int16Array.prototype.byteLength`](typedarray/bytelength) +[`Int16Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Int16Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int16Array.prototype.byteOffset`](typedarray/byteoffset) +[`Int16Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Int16Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int16Array.prototype.length`](typedarray/length) +[`Int16Array.prototype.length`](typedarray/length) Returns the number of elements held in the `Int16Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Int16Array.prototype.copyWithin()`](typedarray/copywithin) +[`Int16Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Int16Array.prototype.entries()`](typedarray/entries) +[`Int16Array.prototype.entries()`](typedarray/entries) Returns a new _array iterator_ object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Int16Array.prototype.every()`](typedarray/every) +[`Int16Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Int16Array.prototype.fill()`](typedarray/fill) +[`Int16Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Int16Array.prototype.filter()`](typedarray/filter) +[`Int16Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns `true`. See also [`Array.prototype.filter()`](array/filter). -[`Int16Array.prototype.find()`](typedarray/find) +[`Int16Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Int16Array.prototype.findIndex()`](typedarray/findindex) +[`Int16Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or `-1` if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Int16Array.prototype.forEach()`](typedarray/foreach) +[`Int16Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Int16Array.prototype.includes()`](typedarray/includes) +[`Int16Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Int16Array.prototype.indexOf()`](typedarray/indexof) +[`Int16Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Int16Array.prototype.join()`](typedarray/join) +[`Int16Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Int16Array.prototype.keys()`](typedarray/keys) +[`Int16Array.prototype.keys()`](typedarray/keys) Returns a new _array iterator_ that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Int16Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Int16Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Int16Array.prototype.map()`](typedarray/map) +[`Int16Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Int16Array.prototype.reduce()`](typedarray/reduce) +[`Int16Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Int16Array.prototype.reduceRight()`](typedarray/reduceright) +[`Int16Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Int16Array.prototype.reverse()`](typedarray/reverse) +[`Int16Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Int16Array.prototype.set()`](typedarray/set) +[`Int16Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Int16Array.prototype.slice()`](typedarray/slice) +[`Int16Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Int16Array.prototype.some()`](typedarray/some) +[`Int16Array.prototype.some()`](typedarray/some) Returns `true` if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Int16Array.prototype.sort()`](typedarray/sort) +[`Int16Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Int16Array.prototype.subarray()`](typedarray/subarray) +[`Int16Array.prototype.subarray()`](typedarray/subarray) Returns a new `Int16Array` from the given start and end element index. -[`Int16Array.prototype.values()`](typedarray/values) +[`Int16Array.prototype.values()`](typedarray/values) Returns a new **array iterator object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values).** -**[`Int16Array.prototype.toLocaleString()`](typedarray/tolocalestring)** +**[`Int16Array.prototype.toLocaleString()`](typedarray/tolocalestring)** **Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring).** -**[`Int16Array.prototype.toString()`](typedarray/tostring)** +**[`Int16Array.prototype.toString()`](typedarray/tostring)** **Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring).** -**[`Int16Array.prototype[@@iterator]()`](typedarray/@@iterator)** +**[`Int16Array.prototype[@@iterator]()`](typedarray/@@iterator)** **Returns a new _array iterator_ object that contains the values for each index in the array.** ## Examples @@ -36722,7 +36722,7 @@ Returns a new **array iterator object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #table-49
        @@ -36804,16 +36804,16 @@ The `Int32Array()` typed array constructor creates an array of twos-complement 3 ### Parameters -`length` +`length` When called with a `length` argument, an internal array buffer is created in memory, of size `length` _multiplied by `BYTES_PER_ELEMENT`_ bytes, containing zeros. -`typedArray` +`typedArray` When called with a `typedArray` argument, which can be an object of any of the typed array types (such as `Int32Array`), the `typedArray` gets copied into a new typed array. Each value in `typedArray` is converted to the corresponding type of the constructor before being copied into the new array. The length of the new typed array will be same as the length of the `typedArray` argument. -`object` +`object` When called with an `object` argument, a new typed array is created as if by the `TypedArray.from()` method. -`buffer`, `byteOffset`, `length` +`buffer`, `byteOffset`, `length` When called with a `buffer`, and optionally a `byteOffset` and a `length` argument, a new typed array view is created that views the specified [`ArrayBuffer`](arraybuffer). The `byteOffset` and `length` parameters specify the memory range that will be exposed by the typed array view. If both are omitted, all of `buffer` is viewed; if only `length` is omitted, the remainder of `buffer` is viewed. ## Examples @@ -36847,7 +36847,7 @@ When called with a `buffer`, and optionally a `byteOffset` and a `length` argume ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-typedarray-constructors
        @@ -36980,117 +36980,117 @@ The `Int8Array` typed array represents an array of twos-complement 8-bit signed ## Constructor -[`Int8Array()`](int8array/int8array) +[`Int8Array()`](int8array/int8array) Creates a new `Int8Array` object. ## Static properties -[`Int8Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) +[`Int8Array.BYTES_PER_ELEMENT`](typedarray/bytes_per_element) Returns a number value of the element size. `1` in the case of an `Int8Array`. -[`Int8Array.name`](typedarray/name) +[`Int8Array.name`](typedarray/name) Returns the string value of the constructor name. In the case of the `Int8Array` type: "`Int8Array`". ## Static methods -[`Int8Array.from()`](typedarray/from) +[`Int8Array.from()`](typedarray/from) Creates a new `Int8Array` from an array-like or iterable object. See also [`Array.from()`](array/from). -[`Int8Array.of()`](typedarray/of) +[`Int8Array.of()`](typedarray/of) Creates a new `Int8Array` with a variable number of arguments. See also [`Array.of()`](array/of). ## Instance properties -[`Int8Array.prototype.buffer`](typedarray/buffer) +[`Int8Array.prototype.buffer`](typedarray/buffer) Returns the [`ArrayBuffer`](arraybuffer) referenced by the `Int8Array`. Fixed at construction time and thus **read only**. -[`Int8Array.prototype.byteLength`](typedarray/bytelength) +[`Int8Array.prototype.byteLength`](typedarray/bytelength) Returns the length (in bytes) of the `Int8Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int8Array.prototype.byteOffset`](typedarray/byteoffset) +[`Int8Array.prototype.byteOffset`](typedarray/byteoffset) Returns the offset (in bytes) of the `Int8Array` from the start of its [`ArrayBuffer`](arraybuffer). Fixed at construction time and thus **read only.** -[`Int8Array.prototype.length`](typedarray/length) +[`Int8Array.prototype.length`](typedarray/length) Returns the number of elements held in the `Int8Array`. Fixed at construction time and thus **read only.** ## Instance methods -[`Int8Array.prototype.copyWithin()`](typedarray/copywithin) +[`Int8Array.prototype.copyWithin()`](typedarray/copywithin) Copies a sequence of array elements within the array. See also [`Array.prototype.copyWithin()`](array/copywithin). -[`Int8Array.prototype.entries()`](typedarray/entries) +[`Int8Array.prototype.entries()`](typedarray/entries) Returns a new _array iterator_ object that contains the key/value pairs for each index in the array. See also [`Array.prototype.entries()`](array/entries). -[`Int8Array.prototype.every()`](typedarray/every) +[`Int8Array.prototype.every()`](typedarray/every) Tests whether all elements in the array pass the test provided by a function. See also [`Array.prototype.every()`](array/every). -[`Int8Array.prototype.fill()`](typedarray/fill) +[`Int8Array.prototype.fill()`](typedarray/fill) Fills all the elements of an array from a start index to an end index with a static value. See also [`Array.prototype.fill()`](array/fill). -[`Int8Array.prototype.filter()`](typedarray/filter) +[`Int8Array.prototype.filter()`](typedarray/filter) Creates a new array with all of the elements of this array for which the provided filtering function returns `true`. See also [`Array.prototype.filter()`](array/filter). -[`Int8Array.prototype.find()`](typedarray/find) +[`Int8Array.prototype.find()`](typedarray/find) Returns the found value in the array, if an element in the array satisfies the provided testing function or `undefined` if not found. See also [`Array.prototype.find()`](array/find). -[`Int8Array.prototype.findIndex()`](typedarray/findindex) +[`Int8Array.prototype.findIndex()`](typedarray/findindex) Returns the found index in the array, if an element in the array satisfies the provided testing function or `-1` if not found. See also [`Array.prototype.findIndex()`](array/findindex). -[`Int8Array.prototype.forEach()`](typedarray/foreach) +[`Int8Array.prototype.forEach()`](typedarray/foreach) Calls a function for each element in the array. See also [`Array.prototype.forEach()`](array/foreach). -[`Int8Array.prototype.includes()`](typedarray/includes) +[`Int8Array.prototype.includes()`](typedarray/includes) Determines whether a typed array includes a certain element, returning `true` or `false` as appropriate. See also [`Array.prototype.includes()`](array/includes). -[`Int8Array.prototype.indexOf()`](typedarray/indexof) +[`Int8Array.prototype.indexOf()`](typedarray/indexof) Returns the first (least) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.indexOf()`](array/indexof). -[`Int8Array.prototype.join()`](typedarray/join) +[`Int8Array.prototype.join()`](typedarray/join) Joins all elements of an array into a string. See also [`Array.prototype.join()`](array/join). -[`Int8Array.prototype.keys()`](typedarray/keys) +[`Int8Array.prototype.keys()`](typedarray/keys) Returns a new _array iterator_ that contains the keys for each index in the array. See also [`Array.prototype.keys()`](array/keys). -[`Int8Array.prototype.lastIndexOf()`](typedarray/lastindexof) +[`Int8Array.prototype.lastIndexOf()`](typedarray/lastindexof) Returns the last (greatest) index of an element within the array equal to the specified value, or `-1` if none is found. See also [`Array.prototype.lastIndexOf()`](array/lastindexof). -[`Int8Array.prototype.map()`](typedarray/map) +[`Int8Array.prototype.map()`](typedarray/map) Creates a new array with the results of calling a provided function on every element in this array. See also [`Array.prototype.map()`](array/map). -[`Int8Array.prototype.reduce()`](typedarray/reduce) +[`Int8Array.prototype.reduce()`](typedarray/reduce) Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also [`Array.prototype.reduce()`](array/reduce). -[`Int8Array.prototype.reduceRight()`](typedarray/reduceright) +[`Int8Array.prototype.reduceRight()`](typedarray/reduceright) Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also [`Array.prototype.reduceRight()`](array/reduceright). -[`Int8Array.prototype.reverse()`](typedarray/reverse) +[`Int8Array.prototype.reverse()`](typedarray/reverse) Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also [`Array.prototype.reverse()`](array/reverse). -[`Int8Array.prototype.set()`](typedarray/set) +[`Int8Array.prototype.set()`](typedarray/set) Stores multiple values in the typed array, reading input values from a specified array. -[`Int8Array.prototype.slice()`](typedarray/slice) +[`Int8Array.prototype.slice()`](typedarray/slice) Extracts a section of an array and returns a new array. See also [`Array.prototype.slice()`](array/slice). -[`Int8Array.prototype.some()`](typedarray/some) +[`Int8Array.prototype.some()`](typedarray/some) Returns `true` if at least one element in this array satisfies the provided testing function. See also [`Array.prototype.some()`](array/some). -[`Int8Array.prototype.sort()`](typedarray/sort) +[`Int8Array.prototype.sort()`](typedarray/sort) Sorts the elements of an array in place and returns the array. See also [`Array.prototype.sort()`](array/sort). -[`Int8Array.prototype.subarray()`](typedarray/subarray) +[`Int8Array.prototype.subarray()`](typedarray/subarray) Returns a new `Int8Array` from the given start and end element index. -[`Int8Array.prototype.values()`](typedarray/values) +[`Int8Array.prototype.values()`](typedarray/values) Returns a new _array iterator_ object that contains the values for each index in the array. See also [`Array.prototype.values()`](array/values). -[`Int8Array.prototype.toLocaleString()`](typedarray/tolocalestring) +[`Int8Array.prototype.toLocaleString()`](typedarray/tolocalestring) Returns a localized string representing the array and its elements. See also [`Array.prototype.toLocaleString()`](array/tolocalestring). -[`Int8Array.prototype.toString()`](typedarray/tostring) +[`Int8Array.prototype.toString()`](typedarray/tostring) Returns a string representing the array and its elements. See also [`Array.prototype.toString()`](array/tostring). -[`Int8Array.prototype[@@iterator]()`](typedarray/@@iterator) +[`Int8Array.prototype[@@iterator]()`](typedarray/@@iterator) Returns a new _array iterator_ object that contains the values for each index in the array. ## Examples @@ -37124,7 +37124,7 @@ Returns a new _array iterator_ object that contains the values for each index in ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'TypedArray constructors' in that specification.
        @@ -37206,27 +37206,27 @@ Example cases are mostly when something is too large, e.g.: ## Constructor -[`InternalError()`](internalerror/internalerror) +[`InternalError()`](internalerror/internalerror) Creates a new `InternalError` object. ## Instance properties -[`InternalError.prototype.message`](error/message) +[`InternalError.prototype.message`](error/message) Error message. Inherited from [`Error`](error). -[`InternalError.prototype.name`](error/name) +[`InternalError.prototype.name`](error/name) Error name. Inherited from [`Error`](error). -[`InternalError.prototype.fileName`](error/filename) +[`InternalError.prototype.fileName`](error/filename) Path to file that raised this error. Inherited from [`Error`](error). -[`InternalError.prototype.lineNumber`](error/linenumber) +[`InternalError.prototype.lineNumber`](error/linenumber) Line number in file that raised this error. Inherited from [`Error`](error). -[`InternalError.prototype.columnNumber`](error/columnnumber) +[`InternalError.prototype.columnNumber`](error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](error). -[`InternalError.prototype.stack`](error/stack) +[`InternalError.prototype.stack`](error/stack) Stack trace. Inherited from [`Error`](error). ## Examples @@ -37326,33 +37326,33 @@ The `Intl` object is the namespace for the ECMAScript Internationalization API, ## Constructor properties -[`Intl.Collator()`](intl/collator/collator) +[`Intl.Collator()`](intl/collator/collator) Constructor for collators, which are objects that enable language-sensitive string comparison. -[`Intl.DateTimeFormat()`](intl/datetimeformat/datetimeformat) +[`Intl.DateTimeFormat()`](intl/datetimeformat/datetimeformat) Constructor for objects that enable language-sensitive date and time formatting. -[`Intl.DisplayNames()`](intl/displaynames/displaynames) +[`Intl.DisplayNames()`](intl/displaynames/displaynames) Constructor for objects that enable the consistent translation of language, region and script display names. -[`Intl.ListFormat()`](intl/listformat/listformat) +[`Intl.ListFormat()`](intl/listformat/listformat) Constructor for objects that enable language-sensitive list formatting. -[`Intl.Locale()`](intl/locale/locale) +[`Intl.Locale()`](intl/locale/locale) Constructor for objects that represents a Unicode locale identifier. -[`Intl.NumberFormat()`](intl/numberformat/numberformat) +[`Intl.NumberFormat()`](intl/numberformat/numberformat) Constructor for objects that enable language-sensitive number formatting. -[`Intl.PluralRules()`](intl/pluralrules/pluralrules) +[`Intl.PluralRules()`](intl/pluralrules/pluralrules) Constructor for objects that enable plural-sensitive formatting and language-specific rules for plurals. -[`Intl.RelativeTimeFormat()`](intl/relativetimeformat/relativetimeformat) +[`Intl.RelativeTimeFormat()`](intl/relativetimeformat/relativetimeformat) Constructor for objects that enable language-sensitive relative time formatting. ## Static methods -[`Intl.getCanonicalLocales()`](intl/getcanonicallocales) +[`Intl.getCanonicalLocales()`](intl/getcanonicallocales) Returns canonical locale names. ## Locale identification and negotiation @@ -37433,7 +37433,7 @@ You can use `Intl` to format dates and numbers in a form that's conventional for ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #intl-object
        @@ -38171,10 +38171,10 @@ The `Object.is()` method determines whether two values are [the same value](http ### Parameters -`value1` +`value1` The first value to compare. -`value2` +`value2` The second value to compare. ### Return value @@ -38251,7 +38251,7 @@ This is also _not_ the same as being equal according to the [`===`](https://deve ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.is' in that specification.
        @@ -38286,8 +38286,8 @@ No - [Equality comparisons and sameness](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness) — a comparison of all three built-in sameness facilities -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is # TypeError: 'x' is not iterable @@ -38417,7 +38417,7 @@ The `Array.isArray()` method determines whether the passed value is an [`Array`] ### Parameters -`value` +`value` The value to be checked. ### Return value @@ -38471,7 +38471,7 @@ When checking for `Array` instance, `Array.isArray` is preferred over `instanceo ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.isarray
        @@ -38576,7 +38576,7 @@ For array-like objects, the default is to not spread. `Symbol.isConcatSpreadable ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.isconcatspreadable
        @@ -38611,8 +38611,8 @@ No - [`Array.prototype.concat()`](../array/concat) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable # Reflect.isExtensible() @@ -38625,7 +38625,7 @@ The static `Reflect.isExtensible()` method determines if an object is extensible ### Parameters -`target` +`target` The target object which to check if it is extensible. ### Return value @@ -38674,7 +38674,7 @@ If the `target` argument to this method is not an object (a primitive), then it ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-reflect.isextensible
        @@ -38710,8 +38710,8 @@ No - [`Reflect`](../reflect) - [`Object.isExtensible()`](../object/isextensible) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible # Number.isFinite() @@ -38724,7 +38724,7 @@ The `Number.isFinite()` method determines whether the passed value is a finite n ### Parameters -`value` +`value` The value to be tested for finiteness. ### Return value @@ -38759,7 +38759,7 @@ In comparison to the global [`isFinite()`](../isfinite) function, this method do ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.isfinite
        @@ -38795,8 +38795,8 @@ No - The [`Number`](../number) object it belongs to. - The global function [`isFinite`](../isfinite). -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite # Object.isFrozen() @@ -38809,7 +38809,7 @@ The `Object.isFrozen()` determines if an object is [frozen](freeze). ### Parameters -`obj` +`obj` The object which should be checked. ### Return value @@ -38918,7 +38918,7 @@ In ES5, if the argument to this method is not an object (a primitive), then it w ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.isFrozen' in that specification.
        @@ -38957,8 +38957,8 @@ In ES5, if the argument to this method is not an object (a primitive), then it w - [`Object.seal()`](seal) - [`Object.isSealed()`](issealed) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen # Number.isInteger() @@ -38971,7 +38971,7 @@ The `Number.isInteger()` method determines whether the passed value is an intege ### Parameters -`value` +`value` The value to be tested for being an integer. ### Return value @@ -39016,7 +39016,7 @@ If the target value is an integer, return `true`, otherwise return `false`. If t ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.isinteger
        @@ -39051,8 +39051,8 @@ No - The [`Number`](../number) object it belongs to. -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger # Atomics.isLockFree() @@ -39065,7 +39065,7 @@ The static ` Atomics``.isLockFree() ` method is used to determine whether to use ### Parameters -`size` +`size` The size in bytes to check. ### Return value @@ -39087,7 +39087,7 @@ A [`Boolean`](../boolean) indicating whether the operation is lock free. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.islockfree
        @@ -39162,7 +39162,7 @@ The `isNaN()` function determines whether a value is [`NaN`](nan) or not. Becaus ### Parameters -`value` +`value` The value to be tested. ### Return value @@ -39228,7 +39228,7 @@ You can use this, for example, to test whether an argument to a function is arit ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'isNaN' in that specification.
        @@ -39278,7 +39278,7 @@ The `isPrototypeOf()` method checks if an object exists in another object's prot ### Parameters -`object` +`object` The object whose prototype chain will be searched. ### Return value @@ -39287,7 +39287,7 @@ A [`Boolean`](../boolean) indicating whether the calling object lies in the prot ### Errors thrown -[`TypeError`](../typeerror) +[`TypeError`](../typeerror) A [`TypeError`](../typeerror) is thrown if `prototypeObj` is undefined or null. ## Description @@ -39334,7 +39334,7 @@ For example, to execute some code that's only safe to run if a `baz` object has ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.prototype.isprototypeof
        @@ -39372,8 +39372,8 @@ For example, to execute some code that's only safe to run if a `baz` object has - [`Object.setPrototypeOf()`](setprototypeof) - [`Object/proto`](proto) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf # Number.isSafeInteger() @@ -39397,7 +39397,7 @@ For larger integers, consider using the [`BigInt`](../bigint) type. ### Parameters -`testValue` +`testValue` The value to be tested for being a safe integer. ### Return value @@ -39425,7 +39425,7 @@ A [`Boolean`](../boolean) indicating whether or not the given value is a number ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.issafeinteger
        @@ -39463,8 +39463,8 @@ No - [`Number.MAX_SAFE_INTEGER`](max_safe_integer) - [`BigInt`](../bigint) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger # Object.isSealed() @@ -39477,7 +39477,7 @@ The `Object.isSealed()` method determines if an object is sealed. ### Parameters -`obj` +`obj` The object which should be checked. ### Return value @@ -39548,7 +39548,7 @@ In ES5, if the argument to this method is not an object (a primitive), then it w ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object.isSealed' in that specification.
        @@ -39587,8 +39587,8 @@ In ES5, if the argument to this method is not an object (a primitive), then it w - [`Object.freeze()`](freeze) - [`Object.isFrozen()`](isfrozen) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed # ArrayBuffer.isView() @@ -39601,7 +39601,7 @@ The `ArrayBuffer.isView()` method determines whether the passed value is one of ### Parameters -`value` +`value` The value to be checked. ### Return value @@ -39629,7 +39629,7 @@ The value to be checked. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-arraybuffer.isview
        @@ -39700,7 +39700,7 @@ The following example uses string methods to change the formatting of a string: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.italics
        @@ -39737,8 +39737,8 @@ The following example uses string methods to change the formatting of a string: - [`String.prototype.bold()`](bold) - [`String.prototype.strike()`](strike) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics # Iteration protocols @@ -40127,7 +40127,7 @@ If an iterable's `@@iterator` method does not return an iterator object, then it ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Symbol.iterator' in that specification.
        @@ -40167,8 +40167,8 @@ No - [`Map.prototype[@@iterator]()`](../map/@@iterator) - [`Set.prototype[@@iterator]()`](../set/@@iterator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator # Array.prototype.join() @@ -40182,7 +40182,7 @@ The `join()` method creates and returns a new string by concatenating all of the ### Parameters -`separator` Optional +`separator` Optional Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (","). If `separator` is an empty string, all elements are joined without any characters in between them. ### Return value @@ -40220,7 +40220,7 @@ The following example joins array-like object (`arguments`), by calling [`Functi ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.join' in that specification.
        @@ -40269,13 +40269,13 @@ The `JSON` object contains methods for parsing [JavaScript Object Notation](http JSON is a syntax for serializing objects, arrays, numbers, strings, booleans, and [`null`](null). It is based upon JavaScript syntax but is distinct from it: some JavaScript is _not_ JSON. -**Objects and Arrays** +**Objects and Arrays** Property names must be double-quoted strings; [trailing commas](../trailing_commas) are forbidden. -**Numbers** +**Numbers** Leading zeros are prohibited. A decimal point must be followed by at least one digit. `NaN` and `Infinity` are unsupported. -**Any JSON text is a valid JavaScript expression...** +**Any JSON text is a valid JavaScript expression...** ...But only in JavaScript engines that have implemented the [proposal to make all JSON text valid ECMA-262](https://github.com/tc39/proposal-json-superset). In engines that haven't implemented the proposal, U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR are allowed in string literals and property keys in JSON; but their use in these features in JavaScript string literals is a [`SyntaxError`](syntaxerror). Consider this example where [`JSON.parse()`](json/parse) parses the string as JSON and [`Global_Objects/eval`](eval) executes the string as JavaScript: @@ -40342,10 +40342,10 @@ Insignificant [whitespace](https://developer.mozilla.org/en-US/docs/Glossary/Whi ## Static methods -[`JSON.parse(text[, reviver])`](json/parse) +[`JSON.parse(text[, reviver])`](json/parse) Parse the string `text` as JSON, optionally transform the produced value and its properties, and return the value. Any violations of the JSON syntax, including those pertaining to the differences between JavaScript and JSON, cause a [`SyntaxError`](syntaxerror) to be thrown. The `reviver` option allows for interpreting what the `replacer` has used to stand in for other datatypes. -[`JSON.stringify(value[, replacer[, space]])`](json/stringify) +[`JSON.stringify(value[, replacer[, space]])`](json/stringify) Return a JSON string corresponding to the specified value, optionally including only certain properties or replacing property values in a user-defined manner. By default, all instances of [`undefined`](undefined) are replaced with [`null`](null), and other unsupported native data types are censored. The `replacer` option allows for specifying other behavior. ## Examples @@ -40371,7 +40371,7 @@ Return a JSON string corresponding to the specified value, optionally including ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-json-object
        @@ -40600,7 +40600,7 @@ The `Symbol.keyFor(sym)` method retrieves a shared symbol key from the global sy ### Parameters -`sym` +`sym` Symbol, required. The symbol to find a key for. ### Return value @@ -40623,7 +40623,7 @@ A string representing the key for the given symbol if one is found on the global ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-symbol.keyfor
        @@ -40658,8 +40658,8 @@ No - [`Symbol.for()`](for) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor # Object.keys() @@ -40672,7 +40672,7 @@ The `Object.keys()` method returns an array of a given object's own enumerable p ### Parameters -`obj` +`obj` The object of which the enumerable's own properties are to be returned. ### Return value @@ -40774,7 +40774,7 @@ For a simple Browser Polyfill, see [Javascript - Object.keys Browser Compatibili ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.keys
        @@ -40814,8 +40814,8 @@ For a simple Browser Polyfill, see [Javascript - Object.keys Browser Compatibili - [`Object.values()`](values) - [`Object.entries()`](entries) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys # label @@ -40827,10 +40827,10 @@ The **labeled statement** can be used with [`break`](break) or [`continue`](cont label : statement -`label` +`label` Any JavaScript identifier that is not a reserved word. -`statement` +`statement` A JavaScript statement. `break` can be used with any labeled statement, and `continue` can be used with looping labeled statements. ## Description @@ -40960,7 +40960,7 @@ In [strict mode](../strict_mode) code, however, this will throw a [`SyntaxError` ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Labelled statement' in that specification.
        @@ -40996,8 +40996,8 @@ In [strict mode](../strict_mode) code, however, this will throw a [`SyntaxError` - [`break`](break) - [`continue`](continue) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label # Intl.Locale.prototype.language @@ -41028,7 +41028,7 @@ While the language subtag must be specified, the [`Locale`](../locale) construct ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.language
        @@ -41117,7 +41117,7 @@ Returns `["", undefined]`, an empty array whose zeroth element is the match stri ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-properties-of-regexp-instances
        @@ -41159,8 +41159,8 @@ Returns `["", undefined]`, an empty array whose zeroth element is the match stri - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex # Array.prototype.lastIndexOf() @@ -41174,10 +41174,10 @@ The `lastIndexOf()` method returns the last index at which a given element can b ### Parameters -`searchElement` +`searchElement` Element to locate in the array. -`fromIndex` Optional +`fromIndex` Optional The index at which to start searching backwards. Defaults to the array's length minus one (`arr.length - 1`), i.e. the whole array will be searched. If the index is greater than or equal to the length of the array, the whole array will be searched. If negative, it is taken as the offset from the end of the array. Note that even when the index is negative, the array is still searched from back to front. If the calculated index is less than 0, -1 is returned, i.e. the array will not be searched. ### Return value @@ -41265,7 +41265,7 @@ Again, note that this implementation aims for absolute compatibility with `lastI ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-array.prototype.lastindexof
        @@ -41321,7 +41321,7 @@ For example, `9 << 2` yields 36: -------------------------------- 9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10) -Bitwise shifting any number `x` to the left by `y` bits yields `x * 2 ** y`. +Bitwise shifting any number `x` to the left by `y` bits yields `x * 2 ** y`. So e.g.: `9 << 3` translates to: `9 * (2 ** 3) = 9 * (8) = 72`. ## Examples @@ -41334,7 +41334,7 @@ So e.g.: `9 << 3` translates to: `9 * (2 ** 3) = 9 * (8) = 72`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-left-shift-operator
        @@ -41370,8 +41370,8 @@ So e.g.: `9 << 3` translates to: `9 * (2 ** 3) = 9 * (8) = 72`. - [Bitwise operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise) - [Left shift assignment operator](left_shift_assignment) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Left_shift # Left shift assignment (<<=) @@ -41395,7 +41395,7 @@ The left shift assignment operator (`<<=`) moves the specified amount of bits to ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -41431,8 +41431,8 @@ The left shift assignment operator (`<<=`) moves the specified amount of bits to - [Assignment operators in the JS guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment) - [Left shift operator](left_shift) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Left_shift_assignment # Array.prototype.length @@ -41523,7 +41523,7 @@ The following example shortens the array `numbers` to a length of 3 if the curre ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-properties-of-array-instances-length
        @@ -41633,7 +41633,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-relational-operators
        @@ -41670,8 +41670,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Greater than or equal operator](greater_than_or_equal) - [Less than or equal operator](less_than_or_equal) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Less_than # Less than or equal (<=) @@ -41735,7 +41735,7 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Relational operators' in that specification.
        @@ -41772,8 +41772,8 @@ The operands are compared using the [Abstract Relational Comparison](https://tc3 - [Greater than or equal operator](greater_than_or_equal) - [Less than operator](less_than) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Less_than_or_equal # let @@ -41786,10 +41786,10 @@ The `let` statement declares a block-scoped local variable, optionally initializ ### Parameters -`nameN` +`nameN` The names of the variable or variables to declare. Each must be a legal JavaScript identifier. -` value``N ` Optional +` value``N ` Optional For each variable declared, you may optionally specify its initial value to any legal JavaScript expression. Alternatively, the [Destructuring Assignment](../operators/destructuring_assignment) syntax can also be used to declare variables. @@ -42015,7 +42015,7 @@ However, this combination of `var` and `let` declaration below is a [`SyntaxErro ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-let-and-const-declarations
        @@ -42090,8 +42090,8 @@ Support outside of [strict mode](https://developer.mozilla.org/docs/Web/JavaScri - [StackOverflow: What is the Temporal Dead Zone](https://stackoverflow.com/a/33198850/1125029)? - [StackOverflow: What is the difference between using `let` and `var`?](https://stackoverflow.com/questions/762011/whats-the-difference-between-using-let-and-var-to-declare-a-variable) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let # Lexical grammar @@ -42549,7 +42549,7 @@ Here `++` is not treated as a [postfix operator](https://developer.mozilla.org/e ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Lexical Grammar' in that specification.
        @@ -43085,7 +43085,7 @@ The `link()` method creates a string representing the code for an [`
        `](https: ### Parameters -`url` +`url` Any string that specifies the `href` attribute of the `` element; it should be a valid URL (relative or absolute), with any `&` characters escaped as `&`, and any `"` characters escaped as `"`. ### Return value @@ -43112,7 +43112,7 @@ The following example displays the word "MDN" as a hypertext link that returns t ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.prototype.link' in that specification.
        @@ -43147,8 +43147,8 @@ The following example displays the word "MDN" as a hypertext link that returns t - [`String.prototype.anchor()`](anchor) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link # WebAssembly.LinkError @@ -43157,35 +43157,35 @@ The `WebAssembly.LinkError` object indicates an error during module instantiatio ## Constructor -[`WebAssembly.LinkError()`](linkerror/linkerror) +[`WebAssembly.LinkError()`](linkerror/linkerror) Creates a new `WebAssembly.LinkError` object. ## Instance properties -[`WebAssembly.LinkError.prototype.message`](../error/message) +[`WebAssembly.LinkError.prototype.message`](../error/message) Error message. Although ECMA-262 specifies that [`URIError`](../urierror) should provide its own `message` property, in [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey), it inherits [`Error.prototype.message`](../error/message). -[`WebAssembly.LinkError.prototype.name`](../error/name) +[`WebAssembly.LinkError.prototype.name`](../error/name) Error name. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.fileName`](../error/filename) +[`WebAssembly.LinkError.prototype.fileName`](../error/filename) Path to file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.lineNumber`](../error/linenumber) +[`WebAssembly.LinkError.prototype.lineNumber`](../error/linenumber) Line number in file that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.columnNumber`](../error/columnnumber) +[`WebAssembly.LinkError.prototype.columnNumber`](../error/columnnumber) Column number in line that raised this error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.stack`](../error/stack) +[`WebAssembly.LinkError.prototype.stack`](../error/stack) Stack trace. Inherited from [`Error`](../error). ## Instance methods -[`WebAssembly.LinkError.prototype.toSource()`](../error/tosource) +[`WebAssembly.LinkError.prototype.toSource()`](../error/tosource) Returns code that could eval to the same error. Inherited from [`Error`](../error). -[`WebAssembly.LinkError.prototype.toString()`](../error/tostring) +[`WebAssembly.LinkError.prototype.toString()`](../error/tostring) Returns a string representing the specified `Error` object.. Inherited from [`Error`](../error). ## Examples @@ -43208,7 +43208,7 @@ The following snippet creates a new `LinkError` instance, and logs its details t ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #exceptiondef-linkerror
        ECMAScript Language Specification (ECMAScript) @@ -43282,8 +43282,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError # Intl.ListFormat @@ -43292,20 +43292,20 @@ The `Intl.ListFormat` object enables language-sensitive list formatting. ## Constructor -[`Intl.ListFormat()`](listformat/listformat) +[`Intl.ListFormat()`](listformat/listformat) Creates a new `Intl.ListFormat` object. ## Static methods -[`Intl.ListFormat.supportedLocalesOf()`](listformat/supportedlocalesof) +[`Intl.ListFormat.supportedLocalesOf()`](listformat/supportedlocalesof) Returns an array containing those of the provided locales that are supported without having to fall back to the runtime's default locale. ## Instance methods -[`Intl.ListFormat.prototype.format()`](listformat/format) +[`Intl.ListFormat.prototype.format()`](listformat/format) Returns a language-specific formatted string representing the elements of the list. -[`Intl.ListFormat.prototype.formatToParts()`](listformat/formattoparts) +[`Intl.ListFormat.prototype.formatToParts()`](listformat/formattoparts) Returns an array of objects representing the different components that can be used to format a list of values in a locale-aware fashion. ## Examples @@ -43344,7 +43344,7 @@ The following example shows how to create a List formatter returning formatted p ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #listformat-objects
        @@ -43549,7 +43549,7 @@ The following function returns the natural log of 10: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.ln10
        @@ -43586,8 +43586,8 @@ The following function returns the natural log of 10: - [`Math.log()`](log) - [`Math.log10()`](log10) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10 # Math.LN2 @@ -43628,7 +43628,7 @@ The following function returns the natural log of 2: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.ln2
        @@ -43665,8 +43665,8 @@ The following function returns the natural log of 2: - [`Math.log()`](log) - [`Math.log2()`](log2) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2 # Atomics.load() @@ -43679,10 +43679,10 @@ The static ` Atomics``.load() ` method returns a value at a given position in th ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to load from. ### Return value @@ -43706,7 +43706,7 @@ The value at the given position (`typedArray[index]`). ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.load
        @@ -43784,50 +43784,50 @@ Traditionally, the Intl API used strings to represent locales, just as Unicode d ## Constructor -[`Intl.Locale()`](locale/locale) +[`Intl.Locale()`](locale/locale) Creates a new `Locale` object. ## Instance properties -[`Intl.Locale.prototype.baseName`](locale/basename) +[`Intl.Locale.prototype.baseName`](locale/basename) Returns basic, core information about the `Locale` in the form of a substring of the complete data string. -[`Intl.Locale.prototype.calendar`](locale/calendar) +[`Intl.Locale.prototype.calendar`](locale/calendar) Returns the part of the `Locale` that indicates the Locale's calendar era. -[`Intl.Locale.prototype.caseFirst`](locale/casefirst) +[`Intl.Locale.prototype.caseFirst`](locale/casefirst) Returns whether case is taken into account for the locale's collation rules. -[`Intl.Locale.prototype.collation`](locale/collation) +[`Intl.Locale.prototype.collation`](locale/collation) Returns the collation type for the `Locale`, which is used to order strings according to the locale's rules. -[`Intl.Locale.prototype.hourCycle`](locale/hourcycle) +[`Intl.Locale.prototype.hourCycle`](locale/hourcycle) Returns the time keeping format convention used by the locale. -[`Intl.Locale.prototype.language`](locale/language) +[`Intl.Locale.prototype.language`](locale/language) Returns the language associated with the locale. -[`Intl.Locale.prototype.numberingSystem`](locale/numberingsystem) +[`Intl.Locale.prototype.numberingSystem`](locale/numberingsystem) Returns the numeral system used by the locale. -[`Intl.Locale.prototype.numeric`](locale/numeric) +[`Intl.Locale.prototype.numeric`](locale/numeric) Returns whether the locale has special collation handling for numeric characters. -[`Intl.Locale.prototype.region`](locale/region) +[`Intl.Locale.prototype.region`](locale/region) Returns the region of the world (usually a country) associated with the locale. -[`Intl.Locale.prototype.script`](locale/script) +[`Intl.Locale.prototype.script`](locale/script) Returns the script used for writing the particular language used in the locale. ## Instance methods -[`Intl.Locale.prototype.maximize()`](locale/maximize) +[`Intl.Locale.prototype.maximize()`](locale/maximize) Gets the most likely values for the language, script, and region of the locale based on existing values. -[`Intl.Locale.prototype.minimize()`](locale/minimize) +[`Intl.Locale.prototype.minimize()`](locale/minimize) Gets the most likely values for the language, script, and region of the locale based on existing values. -[`Intl.Locale.prototype.toString()`](locale/tostring) +[`Intl.Locale.prototype.toString()`](locale/tostring) Returns the Locale's full locale identifier string. ## Examples @@ -43847,7 +43847,7 @@ The constructor also takes an optional configuration object argument, which can ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #locale-objects
        @@ -44264,10 +44264,10 @@ The new `locales` and `options` arguments let applications specify the language ### Parameters -`compareString` +`compareString` The string against which the `referenceStr` is compared. -`locales` and `options` +`locales` and `options` These arguments customize the behavior of the function and let applications specify the language whose formatting conventions should be used. In implementations which ignore the `locales` and `options` arguments, the locale used and the form of the string returned are entirely implementation-dependent. See the [`Intl.Collator()` constructor](../intl/collator/collator) for details on these parameters and how to use them. @@ -44358,7 +44358,7 @@ The results provided by `localeCompare()` can be customized using the `options` ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.localecompare
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) @@ -44448,8 +44448,8 @@ No - [`Intl.Collator`](../intl/collator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare # Math.log() @@ -44466,7 +44466,7 @@ The JavaScript `Math.log()` function is equivalent to _ln(x)_ in mathematics. ### Parameters -`x` +`x` A number. ### Return value @@ -44504,7 +44504,7 @@ If you run `getBaseLog(10, 1000)` it returns `2.9999999999999996` due to floatin ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log
        @@ -44543,8 +44543,8 @@ If you run `getBaseLog(10, 1000)` it returns `2.9999999999999996` due to floatin - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log # Math.log10() @@ -44559,7 +44559,7 @@ The `Math.log10()` function returns the base 10 logarithm of a number, that is ### Parameters -`x` +`x` A number. ### Return value @@ -44594,7 +44594,7 @@ This can be emulated with the following function: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log10
        @@ -44633,8 +44633,8 @@ No - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10 # Math.LOG10E @@ -44675,7 +44675,7 @@ The following function returns the base 10 logarithm of e: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log10e
        @@ -44712,8 +44712,8 @@ The following function returns the base 10 logarithm of e: - [`Math.log()`](log) - [`Math.log10()`](log10) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E # Math.log1p() @@ -44728,7 +44728,7 @@ The `Math.log1p()` function returns the natural logarithm (base [`e`](e)) of 1 + ### Parameters -`x` +`x` A number. ### Return value @@ -44756,7 +44756,7 @@ Because `log1p()` is a static method of `Math`, you always use it as `Math.log1p ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log1p
        @@ -44796,8 +44796,8 @@ No - [`Math.log2()`](log2) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log1p # Math.log2() @@ -44812,7 +44812,7 @@ The `Math.log2()` function returns the base 2 logarithm of a number, that is ### Parameters -`x` +`x` A number. ### Return value @@ -44848,7 +44848,7 @@ This Polyfill emulates the `Math.log2` function. Note that it returns imprecise ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log2
        @@ -44887,8 +44887,8 @@ No - [`Math.log1p()`](log1p) - [`Math.pow()`](pow) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2 # Math.LOG2E @@ -44929,7 +44929,7 @@ The following function returns the base 2 logarithm of e: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.log2e
        @@ -44966,8 +44966,8 @@ The following function returns the base 2 logarithm of e: - [`Math.log()`](log) - [`Math.log2()`](log2) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E # Logical AND (&&) @@ -45068,7 +45068,7 @@ is always equal to: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-LogicalANDExpression
        @@ -45105,8 +45105,8 @@ is always equal to: - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND # Logical NOT (!) @@ -45169,7 +45169,7 @@ is always equal to: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Logical NOT expression' in that specification.
        @@ -45206,8 +45206,8 @@ is always equal to: - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT # Logical OR (||) @@ -45311,7 +45311,7 @@ is always equal to: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Logical OR expression' in that specification.
        @@ -45349,8 +45349,8 @@ is always equal to: - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR # Logical OR assignment (||=) @@ -45397,7 +45397,7 @@ Note: Pay attention to the value returned by the API you're checking against. If ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-assignment-operators
        @@ -45437,8 +45437,8 @@ No - [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) - [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment # SyntaxError: Malformed formal parameter @@ -45605,51 +45605,51 @@ The correct usage for storing data in the Map is through the `set(key, value)` m ## Constructor -[`Map()`](map/map) +[`Map()`](map/map) Creates a new `Map` object. ## Static properties -[`get Map[@@species]`](map/@@species) +[`get Map[@@species]`](map/@@species) The constructor function that is used to create derived objects. ## Instance properties -[`Map.prototype.size`](map/size) +[`Map.prototype.size`](map/size) Returns the number of key/value pairs in the `Map` object. ## Instance methods -[`Map.prototype.clear()`](map/clear) +[`Map.prototype.clear()`](map/clear) Removes all key-value pairs from the `Map` object. -[`Map.prototype.delete(key)`](map/delete) +[`Map.prototype.delete(key)`](map/delete) Returns `true` if an element in the `Map` object existed and has been removed, or `false` if the element does not exist. `Map.prototype.has(key)` will return `false` afterwards. -[`Map.prototype.get(key)`](map/get) +[`Map.prototype.get(key)`](map/get) Returns the value associated to the `key`, or `undefined` if there is none. -[`Map.prototype.has(key)`](map/has) +[`Map.prototype.has(key)`](map/has) Returns a boolean asserting whether a value has been associated to the `key` in the `Map` object or not. -[`Map.prototype.set(key, value)`](map/set) +[`Map.prototype.set(key, value)`](map/set) Sets the `value` for the `key` in the `Map` object. Returns the `Map` object. ### Iteration methods -[`Map.prototype[@@iterator]()`](map/@@iterator) +[`Map.prototype[@@iterator]()`](map/@@iterator) Returns a new Iterator object that contains `[key, value]` for each element in the `Map` object in insertion order. -[`Map.prototype.keys()`](map/keys) +[`Map.prototype.keys()`](map/keys) Returns a new Iterator object that contains the **keys** for each element in the `Map` object in insertion order. -[`Map.prototype.values()`](map/values) +[`Map.prototype.values()`](map/values) Returns a new Iterator object that contains the **values** for each element in the `Map` object in insertion order. -[`Map.prototype.entries()`](map/entries) +[`Map.prototype.entries()`](map/entries) Returns a new Iterator object that contains `[key, value]` for each element in the `Map` object in insertion order. -[`Map.prototype.forEach(callbackFn[, thisArg])`](map/foreach) +[`Map.prototype.forEach(callbackFn[, thisArg])`](map/foreach) Calls `callbackFn` once for each key-value pair present in the `Map` object, in insertion order. If a `thisArg` parameter is provided to `forEach`, it will be used as the `this` value for each callback. ## Examples @@ -45811,7 +45811,7 @@ Maps can be merged with Arrays, too: ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Map' in that specification.
        @@ -46272,7 +46272,7 @@ The `match()` method retrieves the result of matching a _string_ against a [regu ### Parameters -`regexp` +`regexp` A regular expression object. If `regexp` is a non-`RegExp` object, it is implicitly converted to a [`RegExp`](../regexp) by using `new RegExp(regexp)`. @@ -46290,13 +46290,13 @@ An [`Array`](../array) whose contents depend on the presence or absence of the g As explained above, some results contain additional properties as described below. -`groups` +`groups` An object of named capturing groups whose keys are the names and values are the capturing groups or [`undefined`](../undefined) if no named capturing groups were defined. See [Groups and Ranges](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges) for more information. -`index` +`index` The index of the search at which the result was found. -`input` +`input` A copy of the search string. ## Description @@ -46384,7 +46384,7 @@ If it is a positive number with a positive sign, `RegExp()` will ignore the posi ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'String.prototype.match' in that specification.
        @@ -46422,8 +46422,8 @@ If it is a positive number with a positive sign, `RegExp()` will ignore the posi - [`RegExp.prototype.exec()`](../regexp/exec) - [`RegExp.prototype.test()`](../regexp/test) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match # String.prototype.matchAll() @@ -46436,7 +46436,7 @@ The `matchAll()` method returns an iterator of all results matching a string aga ### Parameters -`regexp` +`regexp` A regular expression object. If a non-`RegExp` object `obj` is passed, it is implicitly converted to a [`RegExp`](../regexp) by using `new RegExp(obj)`. @@ -46522,7 +46522,7 @@ Using `matchAll`, you can access capture groups easily: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.matchall
        @@ -46562,8 +46562,8 @@ No - [`RegExp.prototype.exec()`](../regexp/exec) - [`RegExp.prototype.test()`](../regexp/test) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll # Math @@ -46582,135 +46582,135 @@ This means that different browsers can give a different result. Even the same Ja ## Static properties -[`Math.E`](math/e) +[`Math.E`](math/e) Euler's constant and the base of natural logarithms; approximately `2.718`. -[`Math.LN2`](math/ln2) +[`Math.LN2`](math/ln2) Natural logarithm of `2`; approximately `0.693`. -[`Math.LN10`](math/ln10) +[`Math.LN10`](math/ln10) Natural logarithm of `10`; approximately `2.303`. -[`Math.LOG2E`](math/log2e) +[`Math.LOG2E`](math/log2e) Base-2 logarithm of `E`; approximately `1.443`. -[`Math.LOG10E`](math/log10e) +[`Math.LOG10E`](math/log10e) Base-10 logarithm of `E`; approximately `0.434`. -[`Math.PI`](math/pi) +[`Math.PI`](math/pi) Ratio of the a circle's circumference to its diameter; approximately `3.14159`. -[`Math.SQRT1_2`](math/sqrt1_2) +[`Math.SQRT1_2`](math/sqrt1_2) Square root of ½ (or equivalently, 1/√2); approximately `0.707`. -[`Math.SQRT2`](math/sqrt2) +[`Math.SQRT2`](math/sqrt2) Square root of `2`; approximately `1.414`. ## Static methods -[`Math.abs(x)`](math/abs) +[`Math.abs(x)`](math/abs) Returns the absolute value of `x`. -[`Math.acos(x)`](math/acos) +[`Math.acos(x)`](math/acos) Returns the arccosine of `x`. -[`Math.acosh(x)`](math/acosh) +[`Math.acosh(x)`](math/acosh) Returns the hyperbolic arccosine of `x`. -[`Math.asin(x)`](math/asin) +[`Math.asin(x)`](math/asin) Returns the arcsine of `x`. -[`Math.asinh(x)`](math/asinh) +[`Math.asinh(x)`](math/asinh) Returns the hyperbolic arcsine of a number. -[`Math.atan(x)`](math/atan) +[`Math.atan(x)`](math/atan) Returns the arctangent of `x`. -[`Math.atanh(x)`](math/atanh) +[`Math.atanh(x)`](math/atanh) Returns the hyperbolic arctangent of `x`. -[`Math.atan2(y, x)`](math/atan2) +[`Math.atan2(y, x)`](math/atan2) Returns the arctangent of the quotient of its arguments. -[`Math.cbrt(x)`](math/cbrt) +[`Math.cbrt(x)`](math/cbrt) Returns the cube root of `x`. -[`Math.ceil(x)`](math/ceil) +[`Math.ceil(x)`](math/ceil) Returns the smallest integer greater than or equal to `x`. -[`Math.clz32(x)`](math/clz32) +[`Math.clz32(x)`](math/clz32) Returns the number of leading zero bits of the 32-bit integer `x`. -[`Math.cos(x)`](math/cos) +[`Math.cos(x)`](math/cos) Returns the cosine of `x`. -[`Math.cosh(x)`](math/cosh) +[`Math.cosh(x)`](math/cosh) Returns the hyperbolic cosine of `x`. -[`Math.exp(x)`](math/exp) +[`Math.exp(x)`](math/exp) Returns `Ex`, where `x` is the argument, and `E` is Euler's constant (`2.718`…, the base of the natural logarithm). -[`Math.expm1(x)`](math/expm1) +[`Math.expm1(x)`](math/expm1) Returns subtracting `1` from `exp(x)`. -[`Math.floor(x)`](math/floor) +[`Math.floor(x)`](math/floor) Returns the largest integer less than or equal to `x`. -[`Math.fround(x)`](math/fround) +[`Math.fround(x)`](math/fround) Returns the nearest [single precision](https://en.wikipedia.org/wiki/Single-precision_floating-point_format) float representation of `x`. -[`Math.hypot([x[, y[, …]]])`](math/hypot) +[`Math.hypot([x[, y[, …]]])`](math/hypot) Returns the square root of the sum of squares of its arguments. -[`Math.imul(x, y)`](math/imul) +[`Math.imul(x, y)`](math/imul) Returns the result of the 32-bit integer multiplication of `x` and `y`. -[`Math.log(x)`](math/log) +[`Math.log(x)`](math/log) Returns the natural logarithm (㏒e; also, ㏑) of `x`. -[`Math.log1p(x)`](math/log1p) +[`Math.log1p(x)`](math/log1p) Returns the natural logarithm (㏒e; also ㏑) of `1 + x` for the number `x`. -[`Math.log10(x)`](math/log10) +[`Math.log10(x)`](math/log10) Returns the base-10 logarithm of `x`. -[`Math.log2(x)`](math/log2) +[`Math.log2(x)`](math/log2) Returns the base-2 logarithm of `x`. -[`Math.max([x[, y[, …]]])`](math/max) +[`Math.max([x[, y[, …]]])`](math/max) Returns the largest of zero or more numbers. -[`Math.min([x[, y[, …]]])`](math/min) +[`Math.min([x[, y[, …]]])`](math/min) Returns the smallest of zero or more numbers. -[`Math.pow(x, y)`](math/pow) +[`Math.pow(x, y)`](math/pow) Returns base `x` to the exponent power `y` (that is, `xy`). -[`Math.random()`](math/random) +[`Math.random()`](math/random) Returns a pseudo-random number between `0` and `1`. -[`Math.round(x)`](math/round) +[`Math.round(x)`](math/round) Returns the value of the number `x` rounded to the nearest integer. -[`Math.sign(x)`](math/sign) +[`Math.sign(x)`](math/sign) Returns the sign of the `x`, indicating whether `x` is positive, negative, or zero. -[`Math.sin(x)`](math/sin) +[`Math.sin(x)`](math/sin) Returns the sine of `x`. -[`Math.sinh(x)`](math/sinh) +[`Math.sinh(x)`](math/sinh) Returns the hyperbolic sine of `x`. -[`Math.sqrt(x)`](math/sqrt) +[`Math.sqrt(x)`](math/sqrt) Returns the positive square root of `x`. -[`Math.tan(x)`](math/tan) +[`Math.tan(x)`](math/tan) Returns the tangent of `x`. -[`Math.tanh(x)`](math/tanh) +[`Math.tanh(x)`](math/tanh) Returns the hyperbolic tangent of `x`. -[`Math.trunc(x)`](math/trunc) +[`Math.trunc(x)`](math/trunc) Returns the integer portion of `x`, removing any fractional digits. ## Examples @@ -46754,7 +46754,7 @@ This can be achieved with a combination of [`Math.random()`](math/random) and [` ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Math' in that specification.
        @@ -47896,7 +47896,7 @@ The `Math.max()` function returns the largest of the zero or more numbers given ### Parameters -`value1, value2, ...` +`value1, value2, ...` Zero or more numbers among which the largest value will be selected and returned. ### Return value @@ -47943,7 +47943,7 @@ However, both spread (`...`) and `apply` will either fail or return the wrong re ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.max
        @@ -47978,8 +47978,8 @@ However, both spread (`...`) and `apply` will either fail or return the wrong re - [`Math.min()`](min) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max # Number.MAX_SAFE_INTEGER @@ -48032,7 +48032,7 @@ This returns 2 because in floating points, the value is actually the decimal tra ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.max_safe_integer
        @@ -48069,8 +48069,8 @@ No - [`Number.isSafeInteger()`](issafeinteger) - [`BigInt`](../bigint) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER # Number.MAX_VALUE @@ -48111,7 +48111,7 @@ The following code multiplies two numeric values. If the result is less than or ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.max_value
        @@ -48147,8 +48147,8 @@ The following code multiplies two numeric values. If the result is less than or - [`Number.MIN_VALUE`](min_value) - The [`Number`](../number) object it belongs to -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE # Intl.Locale.prototype.maximize() @@ -48186,7 +48186,7 @@ Sometimes, it is convenient to be able to identify the most likely locale langua ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.maximize
        @@ -48233,17 +48233,17 @@ A memory created by JavaScript or in WebAssembly code will be accessible and mut ## Constructor -[`WebAssembly.Memory()`](memory/memory) +[`WebAssembly.Memory()`](memory/memory) Creates a new `Memory` object. ## Instance properties -[`Memory.prototype.buffer`](memory/buffer) +[`Memory.prototype.buffer`](memory/buffer) An accessor property that returns the buffer contained in the memory. ## Instance methods -[`Memory.prototype.grow()`](memory/grow) +[`Memory.prototype.grow()`](memory/grow) Increases the size of the memory instance by a specified number of WebAssembly pages (each one is 64KB in size). ## Examples @@ -48284,7 +48284,7 @@ This memory's `buffer` property will return a `SharedArrayBuffer`. ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #memories
        @@ -48415,8 +48415,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory # Error.prototype.message @@ -48439,7 +48439,7 @@ By default, the `message` property is an empty string, but this behavior can be ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-error.prototype.message
        @@ -48648,7 +48648,7 @@ The shorthand syntax also supports computed property names. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-method-definitions
        @@ -48778,7 +48778,7 @@ The static function `Math.min()` returns the lowest-valued number passed into it ### Parameters -`value1, value2, ...` +`value1, value2, ...` Zero or more numbers among which the lowest value will be selected and returned. ### Return value @@ -48820,7 +48820,7 @@ may be written as this ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.min
        @@ -48855,8 +48855,8 @@ may be written as this - [`Math.max()`](max) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min # Number.MIN_SAFE_INTEGER @@ -48894,7 +48894,7 @@ Because `MIN_SAFE_INTEGER` is a static property of [`Number`](../number), you al ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.min_safe_integer
        @@ -48931,8 +48931,8 @@ No - [`Number.isSafeInteger()`](issafeinteger) - [`BigInt`](../bigint) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER # Number.MIN_VALUE @@ -48973,7 +48973,7 @@ The following code divides two numeric values. If the result is greater than or ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.min_value
        @@ -49008,8 +49008,8 @@ The following code divides two numeric values. If the result is greater than or - [`Number.MAX_VALUE`](max_value) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE # Intl.Locale.prototype.minimize() @@ -49048,7 +49048,7 @@ This method carries out the reverse of [`maximize()`](maximize), removing any la ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.minimize
        @@ -49664,18 +49664,18 @@ A `WebAssembly.Module` object contains stateless WebAssembly code that has alrea ## Constructor -[`WebAssembly.Module()`](module/module) +[`WebAssembly.Module()`](module/module) Creates a new `Module` object. ## Static properties -[`WebAssembly.Module.customSections()`](module/customsections) +[`WebAssembly.Module.customSections()`](module/customsections) Given a `Module` and string, returns a copy of the contents of all custom sections in the module with the given string name. -[`WebAssembly.Module.exports()`](module/exports) +[`WebAssembly.Module.exports()`](module/exports) Given a `Module`, returns an array containing descriptions of all the declared exports. -[`WebAssembly.Module.imports()`](module/imports) +[`WebAssembly.Module.imports()`](module/imports) Given a `Module`, returns an array containing descriptions of all the declared imports. ## Examples @@ -49712,7 +49712,7 @@ In the worker (see `wasm_worker.js`) we define an import object for the module t ## Specifications -
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface) +
        Specification
        WebAssembly JavaScript Interface (WebAssembly JavaScript Interface)
        #modules
        @@ -49873,8 +49873,8 @@ Disabled in the Firefox 52 Extended Support Release (ESR). - [WebAssembly concepts](https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts) - [Using the WebAssembly JavaScript API](https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module # TypeError: More arguments needed @@ -49954,7 +49954,7 @@ You cannot change this property directly. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-get-regexp.prototype.multiline
        @@ -50022,8 +50022,8 @@ You cannot change this property directly. - [`RegExp.prototype.sticky`](sticky) - [`RegExp.prototype.unicode`](unicode) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline # Multiplication (\*) @@ -50052,7 +50052,7 @@ The multiplication operator (`*`) produces the product of the operands. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-multiplicative-operators
        @@ -50095,8 +50095,8 @@ The multiplication operator (`*`) produces the product of the operands. - [Unary negation operator](unary_negation) - [Unary plus operator](unary_plus) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Multiplication # Function.name @@ -50281,7 +50281,7 @@ If a [`Symbol`](../symbol) is used a function name and the symbol has a descript ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-function-instances-name
        @@ -50435,7 +50435,7 @@ Additionally, some array methods cannot find `NaN`, while others can. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-value-properties-of-the-global-object-nan
        @@ -50526,7 +50526,7 @@ In the following example, the variable `smallNumber` is assigned a value that is ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.negative_infinity
        @@ -50564,8 +50564,8 @@ In the following example, the variable `smallNumber` is assigned a value that is - [`Infinity`](../infinity) - [`isFinite()`](../isfinite) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY # RangeError: repeat count must be non-negative @@ -50615,10 +50615,10 @@ The `new` lets developers create an instance of a user-defined object type or of ### Parameters -`constructor` +`constructor` A class or function that specifies the type of the object instance. -`arguments` +`arguments` A list of values that the `constructor` will be called with. ## Description @@ -50735,7 +50735,7 @@ Instead of passing a literal string or integer value when creating the new objec ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-new-operator
        @@ -50772,8 +50772,8 @@ Instead of passing a literal string or integer value when creating the new objec - [`Reflect.construct()`](../global_objects/reflect/construct) - [`Object`](../global_objects/object) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new # new.target @@ -50835,7 +50835,7 @@ Thus from the above example of class `C` and `D`, it seems that `new.target` poi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-built-in-function-objects
        @@ -50873,8 +50873,8 @@ No - `new` - `this` -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target # Generator.prototype.next() @@ -50887,7 +50887,7 @@ The `next()` method returns an object with two properties `done` and `value`. Yo ### Parameters -`value` +`value` The value to send to the generator. The value will be assigned as a result of a `yield` expression. For example, in `variable = yield expression`, the value passed to the `.next()` function will be assigned to `variable`. @@ -50896,12 +50896,12 @@ The value will be assigned as a result of a `yield` expression. For example, in An [`Object`](../object) with two properties: -`done` (boolean) +`done` (boolean) Has the value `true` if the iterator is past the end of the iterated sequence. In this case `value` optionally specifies the _return value_ of the iterator. Has the value `false` if the iterator was able to produce the next value in the sequence. This is equivalent of not specifying the `done` property altogether. -`value` +`value` Any JavaScript value returned by the iterator. Can be omitted when `done` is `true`. ## Examples @@ -50971,7 +50971,7 @@ Note that the first call does not log anything, because the generator was not yi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-generator.prototype.next
        @@ -51287,21 +51287,21 @@ The `normalize()` method returns the Unicode Normalization Form of the string. ### Parameters -`form` Optional +`form` Optional One of `"NFC"`, `"NFD"`, `"NFKC"`, or `"NFKD"`, specifying the Unicode Normalization Form. If omitted or [`undefined`](../undefined), `"NFC"` is used. These values have the following meanings: -`"NFC"` +`"NFC"` Canonical Decomposition, followed by Canonical Composition. -`"NFD"` +`"NFD"` Canonical Decomposition. -`"NFKC"` +`"NFKC"` Compatibility Decomposition, followed by Canonical Composition. -`"NFKD"` +`"NFKD"` Compatibility Decomposition. ### Return value @@ -51310,7 +51310,7 @@ A string containing the Unicode Normalization Form of the given string. ### Errors thrown -[`RangeError`](../rangeerror) +[`RangeError`](../rangeerror) A [`RangeError`](../rangeerror) is thrown if `form` isn't one of the values specified above. ## Description @@ -51447,7 +51447,7 @@ As with canonical normalization, you can ask for decomposed or composed compatib ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.normalize
        @@ -51513,8 +51513,8 @@ No - [Unicode Standard Annex \#15, Unicode Normalization Forms](https://www.unicode.org/reports/tr15/) - [Unicode equivalence](https://en.wikipedia.org/wiki/Unicode_equivalence) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize # RangeError: argument is not a valid code point @@ -51855,7 +51855,7 @@ However, a function can access all variables and functions defined inside the sc The static ` Atomics``.notify() ` method notifies up some agents that are sleeping in the wait queue. -**Note:** This operation works with a shared [`Int32Array`](../int32array) only. +**Note:** This operation works with a shared [`Int32Array`](../int32array) only. It will return `0` on non-shared `ArrayBuffer` objects. ## Syntax @@ -51864,13 +51864,13 @@ It will return `0` on non-shared `ArrayBuffer` objects. ### Parameters -`typedArray` +`typedArray` A shared [`Int32Array`](../int32array). -`index` +`index` The position in the `typedArray` to wake up on. -`count` Optional +`count` Optional The number of sleeping agents to notify. Defaults to [`+Infinity`](../infinity). ### Return value @@ -51905,7 +51905,7 @@ A writing thread stores a new value and notifies the waiting thread once it has ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.notify
        @@ -52039,7 +52039,7 @@ This method was standardized in ECMA-262 5th edition. Engines which h ### Reduced time precision -To offer protection against timing attacks and fingerprinting, the precision of `Date.now()` might get rounded depending on browser settings. +To offer protection against timing attacks and fingerprinting, the precision of `Date.now()` might get rounded depending on browser settings. In Firefox, the `privacy.reduceTimerPrecision` preference is enabled by default and defaults to 20µs in Firefox 59; in 60 it will be 2ms. // reduced time precision (2ms) in Firefox 60 @@ -52060,7 +52060,7 @@ In Firefox, you can also enable `privacy.resistFingerprinting`, the precision wi ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.now
        @@ -52165,7 +52165,7 @@ When checking for `null` or `undefined`, beware of the [differences between equa ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-null-value
        @@ -52332,7 +52332,7 @@ The nullish coalescing operator treats `undefined` and `null` as specific values ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-CoalesceExpression
        @@ -52399,8 +52399,8 @@ No - [The logical OR (`||`) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#logical_or_2) - [Default parameters in functions](../functions/default_parameters) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator # Number @@ -52435,76 +52435,76 @@ When used as a function, `Number(value)` converts a string or other value to the ## Constructor -[`Number()`](number/number) +[`Number()`](number/number) Creates a new `Number` value. ## Static properties -[`Number.EPSILON`](number/epsilon) +[`Number.EPSILON`](number/epsilon) The smallest interval between two representable numbers. -[`Number.MAX_SAFE_INTEGER`](number/max_safe_integer) +[`Number.MAX_SAFE_INTEGER`](number/max_safe_integer) The maximum safe integer in JavaScript (`253 - 1`). -[`Number.MAX_VALUE`](number/max_value) +[`Number.MAX_VALUE`](number/max_value) The largest positive representable number. -[`Number.MIN_SAFE_INTEGER`](number/min_safe_integer) +[`Number.MIN_SAFE_INTEGER`](number/min_safe_integer) The minimum safe integer in JavaScript (`-(253 - 1)`). -[`Number.MIN_VALUE`](number/min_value) +[`Number.MIN_VALUE`](number/min_value) The smallest positive representable number—that is, the positive number closest to zero (without actually being zero). -[`Number.NaN`](number/nan) +[`Number.NaN`](number/nan) Special "**N**ot **a** **N**umber" value. -[`Number.NEGATIVE_INFINITY`](number/negative_infinity) +[`Number.NEGATIVE_INFINITY`](number/negative_infinity) Special value representing negative infinity. Returned on overflow. -[`Number.POSITIVE_INFINITY`](number/positive_infinity) +[`Number.POSITIVE_INFINITY`](number/positive_infinity) Special value representing infinity. Returned on overflow. -[`Number.prototype`](number) +[`Number.prototype`](number) Allows the addition of properties to the `Number` object. ## Static methods -[`Number.isNaN()`](number/isnan) +[`Number.isNaN()`](number/isnan) Determine whether the passed value is `NaN`. -[`Number.isFinite()`](number/isfinite) +[`Number.isFinite()`](number/isfinite) Determine whether the passed value is a finite number. -[`Number.isInteger()`](number/isinteger) +[`Number.isInteger()`](number/isinteger) Determine whether the passed value is an integer. -[`Number.isSafeInteger()`](number/issafeinteger) +[`Number.isSafeInteger()`](number/issafeinteger) Determine whether the passed value is a safe integer (number between `-(253 - 1)` and `253 - 1`). -[`Number.parseFloat(string)`](number/parsefloat) +[`Number.parseFloat(string)`](number/parsefloat) This is the same as the global [`parseFloat()`](parsefloat) function. -[`Number.parseInt(string, [radix])`](number/parseint) +[`Number.parseInt(string, [radix])`](number/parseint) This is the same as the global [`parseInt()`](parseint) function. ## Instance methods -[`Number.prototype.toExponential(fractionDigits)`](number/toexponential) +[`Number.prototype.toExponential(fractionDigits)`](number/toexponential) Returns a string representing the number in exponential notation. -[`Number.prototype.toFixed(digits)`](number/tofixed) +[`Number.prototype.toFixed(digits)`](number/tofixed) Returns a string representing the number in fixed-point notation. -[`Number.prototype.toLocaleString([locales [, options]])`](number/tolocalestring) +[`Number.prototype.toLocaleString([locales [, options]])`](number/tolocalestring) Returns a string with a language sensitive representation of this number. Overrides the [`Object.prototype.toLocaleString()`](object/tolocalestring) method. -[`Number.prototype.toPrecision(precision)`](number/toprecision) +[`Number.prototype.toPrecision(precision)`](number/toprecision) Returns a string representing the number to a specified precision in fixed-point or exponential notation. -[`Number.prototype.toString([radix])`](number/tostring) +[`Number.prototype.toString([radix])`](number/tostring) Returns a string representing the specified object in the specified radix ("base"). Overrides the [`Object.prototype.toString()`](object/tostring) method. -[`Number.prototype.valueOf()`](number/valueof) +[`Number.prototype.valueOf()`](number/valueof) Returns the primitive value of the specified object. Overrides the [`Object.prototype.valueOf()`](object/valueof) method. ## Examples @@ -52559,7 +52559,7 @@ This logs `819199440000`. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number-objects
        @@ -53219,22 +53219,22 @@ The `Intl.NumberFormat()` constructor creates [`Intl.NumberFormat`](../numberfor ### Parameters -`locales` Optional +`locales` Optional A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the `locales` argument, see the [Intl](../../intl#locale_identification_and_negotiation) page. The following Unicode extension key is allowed: -`nu` +`nu` The numbering system to be used. Possible values include: "`adlm`", "`ahom`", "`arab`", "`arabext`", "`bali`", "`beng`", "`bhks`", "`brah`", "`cakm`", "`cham`", "`deva`", "`diak`", "`fullwide`", "`gong`", "`gonm`", "`gujr`", "`guru`", "`hanidec`", "`hmng`", "`hmnp`", "`java`", "`kali`", "`khmr`", "`knda`", "`lana`", "`lanatham`", "`laoo`", "`latn`", "`lepc`", "`limb`", "`mathbold`", "`mathdbl`", "`mathmono`", "`mathsanb`", "`mathsans`", "`mlym`", "`modi`", "`mong`", "`mroo`", "`mtei`", "`mymr`", "`mymrshan`", "`mymrtlng`", "`newa`", "`nkoo`", "`olck`", "`orya`", "`osma`", "`rohg`", "`saur`", "`segment`", "`shrd`", "`sind`", "`sinh`", "`sora`", "`sund`", "`takr`", "`talu`", "`tamldec`", "`telu`", "`thai`", "`tibt`", "`tirh`", "`vaii`", "`wara`", "`wcho`". — see the [standard Unicode numeral systems list](../locale/numberingsystem). -`options` Optional +`options` Optional An object with some or all of the following properties: -`compactDisplay` +`compactDisplay` Only used when `notation` is "`compact`". Takes either "`short`" (default) or "`long`". -`currency` +`currency` The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as "`USD`" for the US dollar, "`EUR`" for the euro, or "`CNY`" for the Chinese RMB — see the [Current currency & funds code list](https://www.currency-iso.org/en/home/tables/table-a1.html). There is no default value; if the `style` is "`currency`", the `currency` property must be provided. -`currencyDisplay` +`currencyDisplay` How to display the currency in currency formatting. Possible values are: - "`symbol`" to use a localized currency symbol such as €, this is the default value, @@ -53242,13 +53242,13 @@ How to display the currency in currency formatting. Possible values are: - "`code`" to use the ISO currency code, - "`name`" to use a localized currency name such as "`dollar`", -`currencySign` +`currencySign` In many locales, accounting format means to wrap the number with parentheses instead of appending a minus sign. You can enable this formatting by setting the `currencySign` option to "`accounting`". The default value is "`standard`". -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`notation` +`notation` The formatting that should be displayed for the number, the defaults is "`standard`" - "`standard`" plain number formatting @@ -53256,10 +53256,10 @@ The formatting that should be displayed for the number, the defaults is "`standa - "`engineering`" return the exponent of ten when divisible by three - "`compact`" string representing exponent, defaults is using the "short" form. -`numberingSystem` +`numberingSystem` Numbering System. Possible values include: "`arab`", "`arabext`", " `bali`", "`beng`", "`deva`", "`fullwide`", " `gujr`", "`guru`", "`hanidec`", "`khmr`", " `knda`", "`laoo`", "`latn`", "`limb`", "`mlym`", " `mong`", "`mymr`", "`orya`", "`tamldec`", " `telu`", "`thai`", "`tibt`". -`signDisplay` +`signDisplay` When to display the sign for the number; defaults to "`auto`" - "`auto`" sign display for negative numbers only @@ -53267,7 +53267,7 @@ When to display the sign for the number; defaults to "`auto`" - "`always`" always display sign - "`exceptZero`" sign display for positive and negative numbers, but not zero -`style` +`style` The formatting style to use , the default is "`decimal`". - "`decimal`" for plain number formatting. @@ -53275,34 +53275,34 @@ The formatting style to use , the default is "`decimal`". - "`percent`" for percent formatting - "`unit`" for unit formatting -`unit` +`unit` The unit to use in `unit` formatting, Possible values are core unit identifiers, defined in [UTS \#35, Part 2, Section 6](https://unicode.org/reports/tr35/tr35-general.html#Unit_Elements). A [subset](https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier) of units from the [full list](https://github.com/unicode-org/cldr/blob/master/common/validity/unit.xml) was selected for use in ECMAScript. Pairs of simple units can be concatenated with "`-per-`" to make a compound unit. There is no default value; if the `style` is "`unit`", the `unit` property must be provided. -`unitDisplay` +`unitDisplay` The unit formatting style to use in `unit` formatting, the defaults is "`short`". - "`long`" (e.g., `16 litres`) - "`short`" (e.g., `16 l`) - "`narrow`" (e.g., `16l`) -`useGrouping` +`useGrouping` Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. Possible values are true and false; the default is true. The following properties fall into two groups: `minimumIntegerDigits`, `minimumFractionDigits`, and `maximumFractionDigits` in one group, `minimumSignificantDigits` and `maximumSignificantDigits` in the other. If at least one property from the second group is defined, then the first group is ignored. -`minimumIntegerDigits` +`minimumIntegerDigits` The minimum number of integer digits to use. Possible values are from 1 to 21; the default is 1. -`minimumFractionDigits` +`minimumFractionDigits` The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information). -`maximumFractionDigits` +`maximumFractionDigits` The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of `minimumFractionDigits` and 3; the default for currency formatting is the larger of `minimumFractionDigits` and the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information); the default for percent formatting is the larger of `minimumFractionDigits` and 0. -`minimumSignificantDigits` +`minimumSignificantDigits` The minimum number of significant digits to use. Possible values are from 1 to 21; the default is 1. -`maximumSignificantDigits` +`maximumSignificantDigits` The maximum number of significant digits to use. Possible values are from 1 to 21; the default is 21. ## Examples @@ -53413,7 +53413,7 @@ Note that when the currency sign is "accounting", parentheses might be used inst ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl-numberformat-constructor
        @@ -53699,7 +53699,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.numberingSystem
        @@ -53793,7 +53793,7 @@ The [`Intl.Locale`](locale) constructor has an optional configuration object arg ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-Intl.Locale.prototype.numeric
        @@ -53886,112 +53886,112 @@ There isn't any method in an Object itself to delete its own properties (such as ## Constructor -[`Object()`](object/object) +[`Object()`](object/object) Creates a new `Object` object. It is a wrapper for the given value. ## Static methods -[`Object.assign()`](object/assign) +[`Object.assign()`](object/assign) Copies the values of all enumerable own properties from one or more source objects to a target object. -[`Object.create()`](object/create) +[`Object.create()`](object/create) Creates a new object with the specified prototype object and properties. -[`Object.defineProperty()`](object/defineproperty) +[`Object.defineProperty()`](object/defineproperty) Adds the named property described by a given descriptor to an object. -[`Object.defineProperties()`](object/defineproperties) +[`Object.defineProperties()`](object/defineproperties) Adds the named properties described by the given descriptors to an object. -[`Object.entries()`](object/entries) +[`Object.entries()`](object/entries) Returns an array containing all of the `[key, value]` pairs of a given object's **own** enumerable string properties. -[`Object.freeze()`](object/freeze) +[`Object.freeze()`](object/freeze) Freezes an object. Other code cannot delete or change its properties. -[`Object.fromEntries()`](object/fromentries) +[`Object.fromEntries()`](object/fromentries) Returns a new object from an iterable of `[key, value]` pairs. (This is the reverse of [`Object.entries`](object/entries)). -[`Object.getOwnPropertyDescriptor()`](object/getownpropertydescriptor) +[`Object.getOwnPropertyDescriptor()`](object/getownpropertydescriptor) Returns a property descriptor for a named property on an object. -[`Object.getOwnPropertyDescriptors()`](object/getownpropertydescriptors) +[`Object.getOwnPropertyDescriptors()`](object/getownpropertydescriptors) Returns an object containing all own property descriptors for an object. -[`Object.getOwnPropertyNames()`](object/getownpropertynames) +[`Object.getOwnPropertyNames()`](object/getownpropertynames) Returns an array containing the names of all of the given object's **own** enumerable and non-enumerable properties. -[`Object.getOwnPropertySymbols()`](object/getownpropertysymbols) +[`Object.getOwnPropertySymbols()`](object/getownpropertysymbols) Returns an array of all symbol properties found directly upon a given object. -[`Object.getPrototypeOf()`](object/getprototypeof) +[`Object.getPrototypeOf()`](object/getprototypeof) Returns the prototype (internal `[[Prototype]]` property) of the specified object. -[`Object.is()`](object/is) +[`Object.is()`](object/is) Compares if two values are the same value. Equates all `NaN` values (which differs from both Abstract Equality Comparison and Strict Equality Comparison). -[`Object.isExtensible()`](object/isextensible) +[`Object.isExtensible()`](object/isextensible) Determines if extending of an object is allowed. -[`Object.isFrozen()`](object/isfrozen) +[`Object.isFrozen()`](object/isfrozen) Determines if an object was frozen. -[`Object.isSealed()`](object/issealed) +[`Object.isSealed()`](object/issealed) Determines if an object is sealed. -[`Object.keys()`](object/keys) +[`Object.keys()`](object/keys) Returns an array containing the names of all of the given object's **own** enumerable string properties. -[`Object.preventExtensions()`](object/preventextensions) +[`Object.preventExtensions()`](object/preventextensions) Prevents any extensions of an object. -[`Object.seal()`](object/seal) +[`Object.seal()`](object/seal) Prevents other code from deleting properties of an object. -[`Object.setPrototypeOf()`](object/setprototypeof) +[`Object.setPrototypeOf()`](object/setprototypeof) Sets the object's prototype (its internal `[[Prototype]]` property). -[`Object.values()`](object/values) +[`Object.values()`](object/values) Returns an array containing the values that correspond to all of a given object's **own** enumerable string properties. ## Instance properties -[`Object.prototype.constructor`](object/constructor) +[`Object.prototype.constructor`](object/constructor) Specifies the function that creates an object's prototype. -[`Object/proto`](object/proto) +[`Object/proto`](object/proto) Points to the object which was used as prototype when the object was instantiated. ## Instance methods -[`Object.prototype.__defineGetter__()`](object/__definegetter__) +[`Object.prototype.__defineGetter__()`](object/__definegetter__) Associates a function with a property that, when accessed, executes that function and returns its return value. -[`Object.prototype.__defineSetter__()`](object/__definesetter__) +[`Object.prototype.__defineSetter__()`](object/__definesetter__) Associates a function with a property that, when set, executes that function which modifies the property. -[`Object.prototype.__lookupGetter__()`](object/__lookupgetter__) +[`Object.prototype.__lookupGetter__()`](object/__lookupgetter__) Returns the function associated with the specified property by the [`__defineGetter__()`](object/__definegetter__) method. -[`Object.prototype.__lookupSetter__()`](object/__lookupsetter__) +[`Object.prototype.__lookupSetter__()`](object/__lookupsetter__) Returns the function associated with the specified property by the [`__defineSetter__()`](object/__definesetter__) method. -[`Object.prototype.hasOwnProperty()`](object/hasownproperty) +[`Object.prototype.hasOwnProperty()`](object/hasownproperty) Returns a boolean indicating whether an object contains the specified property as a direct property of that object and not inherited through the prototype chain. -[`Object.prototype.isPrototypeOf()`](object/isprototypeof) +[`Object.prototype.isPrototypeOf()`](object/isprototypeof) Returns a boolean indicating whether the object this method is called upon is in the prototype chain of the specified object. -[`Object.prototype.propertyIsEnumerable()`](object/propertyisenumerable) +[`Object.prototype.propertyIsEnumerable()`](object/propertyisenumerable) Returns a boolean indicating if the internal [ECMAScript \[\[Enumerable\]\] attribute](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#properties) is set. -[`Object.prototype.toLocaleString()`](object/tolocalestring) +[`Object.prototype.toLocaleString()`](object/tolocalestring) Calls [`toString()`](object/tostring). -[`Object.prototype.toString()`](object/tostring) +[`Object.prototype.toString()`](object/tostring) Returns a string representation of the object. -[`Object.prototype.valueOf()`](object/valueof) +[`Object.prototype.valueOf()`](object/valueof) Returns the primitive value of the specified object. ## Examples @@ -54110,7 +54110,7 @@ Since JavaScript doesn't exactly have sub-class objects, prototype is a useful w ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object' in that specification.
        @@ -55354,7 +55354,7 @@ Property definitions that do not use "colon" notation are not prototype mutation ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Object Initializer' in that specification.
        @@ -55526,8 +55526,8 @@ No - [Method definitions](../functions/method_definitions) - [Lexical grammar](../lexical_grammar) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer # TypedArray.of() @@ -55554,7 +55554,7 @@ Where `TypedArray` is one of: ### Parameters -`elementN` +`elementN` Elements of which to create the typed array. ### Return value @@ -55579,7 +55579,7 @@ Some subtle distinctions between [`Array.of()`](../array/of) and `TypedArray.of( ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of '%TypedArray%.of' in that specification.
        @@ -55645,8 +55645,8 @@ No - [`TypedArray.from()`](from) - [`Array.of()`](../array/of) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of # Operator precedence @@ -56074,8 +56074,8 @@ left-to-right `… , …` -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence # Optional chaining (?.) @@ -56219,7 +56219,7 @@ The [nullish coalescing operator](nullish_coalescing_operator) may be used after ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #prod-OptionalExpression
        @@ -56292,8 +56292,8 @@ No - The [Nullish Coalescing Operator](nullish_coalescing_operator) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining # Atomics.or() @@ -56306,13 +56306,13 @@ The static ` Atomics``.or() ` method computes a bitwise OR with a given value at ### Parameters -`typedArray` +`typedArray` An integer typed array. One of [`Int8Array`](../int8array), [`Uint8Array`](../uint8array), [`Int16Array`](../int16array), [`Uint16Array`](../uint16array), [`Int32Array`](../int32array), [`Uint32Array`](../uint32array), [`BigInt64Array`](../bigint64array), or [`BigUint64Array`](../biguint64array). -`index` +`index` The position in the `typedArray` to compute the bitwise OR. -`value` +`value` The number to compute the bitwise OR with. ### Return value @@ -56350,7 +56350,7 @@ For example, a bitwise OR of `5 | 1` results in `0101` which is 5 in decimal. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-atomics.or
        @@ -56462,7 +56462,7 @@ The `handler.ownKeys()` method is a trap for [`Reflect.ownKeys()`](../../reflect The following parameter is passed to the `ownKeys()` method. `this` is bound to the handler. -`target` +`target` The target object. ### Return value @@ -56529,7 +56529,7 @@ The following code violates an invariant. ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys
        @@ -56601,8 +56601,8 @@ In Firefox 42, the implementation got updated to reflect the final ES2015 specif - [`Object.getOwnPropertyNames()`](../../object/getownpropertynames) - [`Reflect.ownKeys()`](../../reflect/ownkeys) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys # String.prototype.padEnd() @@ -56616,10 +56616,10 @@ The `padEnd()` method pads the current string with a given string (repeated, if ### Parameters -`targetLength` +`targetLength` The length of the resulting string once the current `str` has been padded. If the value is lower than `str.length`, the current string will be returned as-is. -`padString` Optional +`padString` Optional The string to pad the current `str` with. If `padString` is too long to stay within `targetLength`, it will be truncated: for left-to-right languages the left-most part and for right-to-left languages the right-most will be applied. The default value for this parameter is "" (`U+0020`). ### Return value @@ -56637,7 +56637,7 @@ A [`String`](../string) of the specified `targetLength` with the `padString` app ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.padend
        @@ -56703,8 +56703,8 @@ No - [`String.prototype.padStart()`](padstart) - [A polyfill](https://github.com/behnammodi/polyfill/blob/master/string.polyfill.js) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd # String.prototype.padStart() @@ -56718,10 +56718,10 @@ The `padStart()` method pads the current string with another string (multiple ti ### Parameters -`targetLength` +`targetLength` The length of the resulting string once the current `str` has been padded. If the value is less than `str.length`, then `str` is returned as-is. -`padString` Optional +`padString` Optional The string to pad the current `str` with. If `padString` is too long to stay within the `targetLength`, it will be truncated from the end. The default value is "" (`U+0020 'SPACE'`). ### Return value @@ -56752,7 +56752,7 @@ A [`String`](../string) of the specified `targetLength` with `padString` applied ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-string.prototype.padstart
        @@ -56818,8 +56818,8 @@ No - [`String.prototype.padEnd()`](padend) - [A polyfill](https://github.com/behnammodi/polyfill/blob/master/string.polyfill.js) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart # Date.parse() @@ -56840,7 +56840,7 @@ Implicit call: ### Parameters -`dateString` +`dateString` A string representing [a simplification of the ISO 8601 calendar date extended format](#date_time_string_format). (Other formats may be used, but results are implementation-dependent.) ### Return value @@ -56952,7 +56952,7 @@ Returns `14400000` no matter the local time zone as a time zone GMT (UTC) is pro ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-date.parse
        @@ -57060,7 +57060,7 @@ The `parseFloat()` function parses an argument (converting it to a string first ### Parameters -`string` +`string` The value to parse. If this argument is not a string, then it is converted to one using the `ToString` abstract operation. Leading [whitespace](https://developer.mozilla.org/en-US/docs/Glossary/Whitespace) in this argument is ignored. ### Return value @@ -57113,7 +57113,7 @@ The following examples both return `900719925474099300`, losing precision as the ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'parseFloat' in that specification.
        @@ -57195,10 +57195,10 @@ The `parseInt()` function parses a string argument and returns an integer of the ### Parameters -`string` +`string` The value to parse. If this argument is not a string, then it is converted to one using the `ToString` abstract operation. Leading [whitespace](https://developer.mozilla.org/en-US/docs/Glossary/Whitespace) in this argument is ignored. -`radix` Optional +`radix` Optional An integer between `2` and `36` that represents the _radix_ (the base in mathematical numeral systems) of the `string`. Be careful—this does **_not_** default to `10`! If the radix value is not of the `Number` type it will be coerced to a `Number`. **Warning:** The [description below](#description) explains in more detail what happens when `radix` is not provided. @@ -57359,7 +57359,7 @@ The radix is coerced to a `Number`: ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-parseint-string-radix
        @@ -57495,7 +57495,7 @@ The following function uses `Math.PI` to calculate the circumference of a circle ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.pi
        @@ -57560,8 +57560,8 @@ Samsung Internet - [`Math`](../math) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI # Planned changes to shared memory @@ -57610,8 +57610,8 @@ The WebAssembly Threads proposal also defines a new set of [atomic](https://gith - `Cross-Origin-Resource-Policy`: [standardized in Fetch](https://fetch.spec.whatwg.org/#cross-origin-resource-policy-header), new `cross-origin` value is part of the `Cross-Origin-Embedder-Policy` effort. - `postMessage()` changes and [`self.crossOriginIsolated`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/crossOriginIsolated): [whatwg/html issue \#4732](https://github.com/whatwg/html/issues/4732), [whatwg/html issue \#4872](https://github.com/whatwg/html/issues/4872), [draft specification](https://github.com/whatwg/html/pull/4734). -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/Planned_changes # Intl.PluralRules() constructor @@ -57626,16 +57626,16 @@ The `Intl.PluralRules()` constructor creates [`Intl.PluralRules`](../pluralrules ### Parameters -`locales` Optional +`locales` Optional A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the `locales` argument, see the [Intl](../../intl#locale_identification_and_negotiation) page. -`options` Optional +`options` Optional An object with some or all of the following properties: -`localeMatcher` +`localeMatcher` The locale matching algorithm to use. Possible values are "`lookup`" and "`best fit`"; the default is "`best fit`". For information about this option, see the [Intl](../../intl#locale_negotiation) page. -`type` +`type` The type to use. Possible values are: - "`cardinal`" for cardinal numbers (refering to the quantity of things). This is the default value. @@ -57643,19 +57643,19 @@ The type to use. Possible values are: The following properties fall into two groups: `minimumIntegerDigits`, `minimumFractionDigits`, and `maximumFractionDigits` in one group, `minimumSignificantDigits` and `maximumSignificantDigits` in the other. If at least one property from the second group is defined, then the first group is ignored. -`minimumIntegerDigits` +`minimumIntegerDigits` The minimum number of integer digits to use. Possible values are from 1 to 21; the default is 1. -`minimumFractionDigits` +`minimumFractionDigits` The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information). -`maximumFractionDigits` +`maximumFractionDigits` The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of `minimumFractionDigits` and 3; the default for currency formatting is the larger of `minimumFractionDigits` and the number of minor unit digits provided by the [ISO 4217 currency code list](https://www.currency-iso.org/en/home/tables/table-a1.html) (2 if the list doesn't provide that information); the default for percent formatting is the larger of `minimumFractionDigits` and 0. -`minimumSignificantDigits` +`minimumSignificantDigits` The minimum number of significant digits to use. Possible values are from 1 to 21; the default is 1. -`maximumSignificantDigits` +`maximumSignificantDigits` The maximum number of significant digits to use. Possible values are from 1 to 21; the default is 21. ## Examples @@ -57696,7 +57696,7 @@ The results can be customized using the `options` argument, which has one proper ## Specifications -
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API) +
        Specification
        ECMAScript Internationalization API Specification (ECMAScript Internationalization API)
        #sec-intl-pluralrules-constructor
        @@ -57814,7 +57814,7 @@ The following code creates the `myFish` array-like object containing four elemen ## Specifications -
        Specification
        ECMAScript (ECMA-262) +
        Specification
        ECMAScript (ECMA-262)
        The definition of 'Array.prototype.pop' in that specification.
        @@ -57937,7 +57937,7 @@ In the following example, the variable `bigNumber` is assigned a value that is l ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-number.positive_infinity
        @@ -58005,8 +58005,8 @@ Samsung Internet - [`Infinity`](../infinity) - [`isFinite()`](../isfinite) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY # Math.pow() @@ -58019,10 +58019,10 @@ The `Math.pow()` function returns the `base` to the `exponent` power, as in `bas ### Parameters -`base` +`base` The base number. -`exponent` +`exponent` The exponent used to raise the `base`. ### Return value @@ -58062,7 +58062,7 @@ Because `pow()` is a static method of `Math`, use it as `Math.pow()`, rather tha ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-math.pow
        @@ -58131,8 +58131,8 @@ Samsung Internet - [`Math.sqrt()`](sqrt) - [Exponentiation operator](../../operators/exponentiation) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow # RangeError: precision is out of range @@ -58207,7 +58207,7 @@ The `Object.preventExtensions()` method prevents new properties from ever being ### Parameters -`obj` +`obj` The object which should be made non-extensible. ### Return value @@ -58277,7 +58277,7 @@ In ES5, if the argument to this method is not an object (a primitive), then it w ## Specifications -
        Specification
        ECMAScript Language Specification (ECMAScript) +
        Specification
        ECMAScript Language Specification (ECMAScript)
        #sec-object.preventextensions
        @@ -58373,8 +58373,8 @@ Samsung Internet - [`Object.isFrozen()`](isfrozen) - [`Reflect.preventExtensions()`](../reflect/preventextensions) -© 2005–2021 MDN contributors. -Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later. +© 2005–2021 MDN contributors. +Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions # Private class fields @@ -58544,7 +58544,7 @@ Private instance methods may be generator, async, or async generator functions. ## Specifications -
        Specification
        Public and private instance fields proposal (Public and private instance fields proposal) +
        Specification
        Public and private instance fields proposal (Public and private instance fields proposal)
        #prod-PrivateIdentifier
        @@ -58750,7 +58750,7 @@ If we change this so that the ` + - + ## ALL CODE: diff --git a/notes/experiments/gatsby-plugin-disqus.wiki/Configure.md b/notes/experiments/gatsby-plugin-disqus.wiki/Configure.md new file mode 100644 index 0000000000..f692573bea --- /dev/null +++ b/notes/experiments/gatsby-plugin-disqus.wiki/Configure.md @@ -0,0 +1,28 @@ +# Configure + +Add the plugin to your `gatsby-config.js` file with your [Disqus shortname](https://help.disqus.com/installation/whats-a-shortname) + +```js +// gatsby-config.js +module.exports = { + plugins: [ + { + resolve: `gatsby-plugin-disqus`, + options: { + shortname: `your-disqus-shortname` + } + } + ] +}; +``` + +## Parameters + +All of the following parameters are optional, though providing a `url`, `identifier`, and `title` are recommended as it will prevent threads from being lost in the case that the domain changes or the post is renamed. + +| Parameter | Usage | +| ---------- | ----------------------------------------------------------------------------------- | +| url | Tells the Disqus service the URL of the current page | +| identifier | Tells the Disqus service how to identify the current page | +| title | Tells the Disqus service the title of the current page | +| language | Tells the Disqus service to override the default site language for the current page | diff --git a/notes/experiments/gatsby-plugin-disqus.wiki/Contributing.md b/notes/experiments/gatsby-plugin-disqus.wiki/Contributing.md new file mode 100644 index 0000000000..92e8fd09fb --- /dev/null +++ b/notes/experiments/gatsby-plugin-disqus.wiki/Contributing.md @@ -0,0 +1,17 @@ +# Contributing + +1. Make sure you have `yarn` installed. +2. Create a new folder for your yarn workspace. `mkdir gatsby-disqus-workspace` +3. Inside your workspace folder, clone this repo. +4. `cd` into `gatsby-disqus-workspace/gatsby-plugin-disqus/` and run `yarn && yarn watch`. _Leave this terminal window open._ +5. Add a gatsby site that uses `gatsby-plugin-disqus` into your workspace folder for testing purposes. +6. In your workspace folder create a `package.json` and add the following: + +```json +{ + "private": true, + "workspaces": ["your-example-test-site", "gatsby-plugin-disqus/lib"] +} +``` + +7. In a new terminal window, navigate to your workspace folder and run `yarn && yarn workspace run develop`. diff --git a/notes/experiments/gatsby-plugin-disqus.wiki/Home.md b/notes/experiments/gatsby-plugin-disqus.wiki/Home.md new file mode 100644 index 0000000000..467879182b --- /dev/null +++ b/notes/experiments/gatsby-plugin-disqus.wiki/Home.md @@ -0,0 +1,21 @@ +# Gatsby Plugin Disqus + +A plugin that simplifies adding [Disqus](https://disqus.com/) comments to [Gatsby](https://www.gatsbyjs.org/) + +## Description + +The goal of this plugin is to allow users to bring their content to life and cultivate engaged communities by integrating Disqus comments into their blazing-fast Gatsby websites. After struggling to integrate different Disqus components into my Gatsby site, creating an easily-configured plugin for the Gatsby ecosystem felt like a no-brainer. + +## Install + +```sh +$ yarn add gatsby-plugin-disqus +``` + +or + +```sh +$ npm install -S gatsby-plugin-disqus +``` + +If you have unanswered questions or would like help with enhancing or debugging the plugin, feel free create an [issue](https://github.com/tterb/gatsby-plugin-disqus/issues/new) or submit a [pull request](https://github.com/tterb/gatsby-plugin-disqus/pulls). diff --git a/notes/experiments/gatsby-plugin-disqus.wiki/Usage.md b/notes/experiments/gatsby-plugin-disqus.wiki/Usage.md new file mode 100644 index 0000000000..4f63d7bae6 --- /dev/null +++ b/notes/experiments/gatsby-plugin-disqus.wiki/Usage.md @@ -0,0 +1,27 @@ +# Usage + +You can use the plugin as shown in this brief example: + +```jsx +import { Disqus, CommentCount } from 'gatsby-plugin-disqus'; + +const PostTemplate = () => { + let disqusConfig = { + url: `${config.siteUrl + location.pathname}`, + identifier: post.id, + title: post.title + }; + return ( + <> +

        {post.title}

        + + /* Post Contents */ + + + ); +}; + +export default PostTemplate; +``` + +While providing a `url`, `identifier`, and `title` are optional, these attributes are recommended as it will prevent threads from being lost in the case that the domain changes or the post is renamed. diff --git a/notes/scrap/scrap.css b/notes/scrap/scrap.css new file mode 100644 index 0000000000..9273d606d6 --- /dev/null +++ b/notes/scrap/scrap.css @@ -0,0 +1,46 @@ + + #sb-search-example p { + font-family: sans-serif; + font-size: 18px; + line-height: 12px; + margin: 0; + } + + #sb-search-example { + position: static; + top: 0; + width: auto; + place-content: center; + display: inline-block; + box-shadow: 0px 2px 4px rgba(190, 190, 190, 0.5); + border: solid 5px white; + border-radius: 100px; + flex-shrink: initial; + flex-grow: initial; + } + + + #sb-search-example .sb-icon { + font: normal normal 400 26px font-sb; + align-items: center; + padding: 10px; + speak: none; + display: inline-block; + text-decoration: inherit; + text-align: center; + text-transform: none; + cursor: pointer; + margin: 0; + } + + #sb-search-example .sb-search-icon { + box-sizing: border-box; + border: 0px; + align-items: center; + background: #007cff; + color: #fff; + cursor: pointer; + display: flex; + border-radius: 26px; + padding: 0 20px 0 4px; + } From 4b0f7da5199ac20aa1010cd31f7c4ff9ac1e4ec2 Mon Sep 17 00:00:00 2001 From: Bryan Guner Date: Wed, 2 Mar 2022 03:59:55 -0500 Subject: [PATCH 4/6] hi --- .github/workflows/latest-npm.yml | 84 +- .github/workflows/lint.yml | 66 +- .github/workflows/manual.yml | 20 +- .github/workflows/release.yml | 38 +- .../BGOONZ_BLOG_2.0.wiki/STABLE_POINTS.md.md | 22 +- .../THINGS-TO-EMBED.md.md | 38 +- .../Technologies-Used.md.md | 2 +- notes/BGOONZ_BLOG_2.0.wiki/_Footer.md | 30 +- notes/BGOONZ_BLOG_2.0.wiki/_Sidebar.md | 79 +- .../articles/Data-Structures.md.md | 372 ++++----- notes/BGOONZ_BLOG_2.0.wiki/articles/SEO.md.md | 737 +++++++++--------- .../articles/anatomy-of-search-engine.md.md | 39 +- .../articles/netlify-tips.md.md | 61 +- .../articles/wordpress-vs-headless-cms.md.md | 26 +- .../bugs-fixes/broken-links.md.md | 10 +- .../documentation/config-info.md.md | 4 +- .../documentation/dependency-graph.md.md | 54 +- .../documentation/inject-4.md.md | 70 +- .../documentation/inject3.md.md | 32 +- .../documentation/inject4.md.md | 58 +- .../injected-content-part2.md.md | 28 +- .../documentation/injected-js-part4.md.md | 54 +- .../documentation/injected-part3.md.md | 42 +- .../documentation/links-to-remember.md | 2 +- .../documentation/old-version-of-index.md.md | 14 +- .../documentation/privacy-policy.md.md | 56 +- .../documentation/sourcecode.md.md | 562 ++++++------- .../documentation/tech-used.md.md | 62 +- .../documentation/validation-report.md.md | 10 +- .../embeds/links-2-embed.md.md | 6 +- .../features/Add-site-search-w-algolia.md.md | 46 +- .../Adding-search-2-gatsby-site.md.md | 48 +- .../features/add-copy-to-code-blocks.md.md | 64 +- .../features/adding-mailing-list.md.md | 26 +- .../features/configure-custom-domain.md.md | 43 +- .../features/custom-search-bar.md.md | 54 +- .../general/google-custom-search.md.md | 116 +-- .../general/google-search-algo.md.md | 14 +- .../BGOONZ_BLOG_2.0.wiki/general/random.md.md | 2 +- .../general/search-engine-simulation.md.md | 4 +- .../general/stack-overflow-site-search.md.md | 6 +- .../general/web-archive.md.md | 21 +- .../stack-overflow-site-search.md.md | 17 +- .../BGOONZ_BLOG_2.0.wiki/tech-used-2021.md.md | 36 +- notes/BGOONZ_BLOG_2.0.wiki/tech-used.md.md | 195 ++--- .../validation-report.md.md | 562 +++++++------ .../ways-to-improve-site.md.md | 3 +- notes/BGOONZ_BLOG_2.0.wiki/web-archive.md.md | 28 +- notes/BGOONZ_BLOG_2.0.wiki/webhooks.md.md | 61 +- .../wordpress-vs-headless-cms.md.md | 81 +- notes/JS-DOC/displayname.md | 4 +- notes/JS-DOC/displaynames.md | 6 +- notes/JS-DOC/for...of.md | 14 +- notes/JS-DOC/promise.md | 2 +- notes/JS-DOC/property_access_denied.md | 2 +- notes/docs/site-docs/hreflang_all.csv | 2 +- notes/docs/site-docs/internal_all2.csv | 10 +- notes/docs/site-docs/javascript_all.csv | 10 +- notes/docs/site-docs/meta_description_all.csv | 10 +- notes/docs/site-docs/page_titles_all.csv | 2 +- .../gatsby-plugin-algolia/example/yarn.lock | 39 +- 61 files changed, 1972 insertions(+), 2234 deletions(-) diff --git a/.github/workflows/latest-npm.yml b/.github/workflows/latest-npm.yml index adb7937a2b..54b260aba2 100644 --- a/.github/workflows/latest-npm.yml +++ b/.github/workflows/latest-npm.yml @@ -3,48 +3,48 @@ name: 'Tests: `nvm install-latest-npm`' on: [pull_request, push] jobs: - nodes: - name: 'nvm install-latest-npm' - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: - - '11' - - '10' - - '9' - - '9.2' - - '9.1' - - '9.0' - - '8' - - '7' - - '6' - - '6.1' - - '5' - - '5.9' - - '4' - - '4.6' - - '4.5' - - '4.4' - - '3' - - '2' - - '1' - - '0.12' - - '0.10' + nodes: + name: 'nvm install-latest-npm' + runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'nvm install-latest-npm' - with: - node-version: ${{ matrix.node-version }} - skip-ls-check: true - skip-install: true - shell-command: 'npm --version' + strategy: + matrix: + node-version: + - "11" + - "10" + - "9" + - "9.2" + - "9.1" + - "9.0" + - "8" + - "7" + - "6" + - "6.1" + - "5" + - "5.9" + - "4" + - "4.6" + - "4.5" + - "4.4" + - "3" + - "2" + - "1" + - "0.12" + - "0.10" - node: + steps: + - uses: actions/checkout@v2 + - uses: ljharb/actions/node/run@main name: 'nvm install-latest-npm' - needs: [nodes] - runs-on: ubuntu-latest - steps: - - run: 'echo tests completed' + with: + node-version: ${{ matrix.node-version }} + skip-ls-check: true + skip-install: true + shell-command: 'npm --version' + + node: + name: 'nvm install-latest-npm' + needs: [nodes] + runs-on: ubuntu-latest + steps: + - run: 'echo tests completed' diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 498a9ba24f..67d32ee112 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -3,39 +3,39 @@ name: 'Tests: linting' on: [pull_request, push] jobs: - eclint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run eclint' - with: - node-version: 'lts/*' - command: 'eclint' + eclint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: ljharb/actions/node/run@main + name: 'npm install && npm run eclint' + with: + node-version: 'lts/*' + command: 'eclint' - dockerfile_lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run dockerfile_lint' - with: - node-version: 'lts/*' - command: 'dockerfile_lint' + dockerfile_lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: ljharb/actions/node/run@main + name: 'npm install && npm run dockerfile_lint' + with: + node-version: 'lts/*' + command: 'dockerfile_lint' - doctoc: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run doctoc' - with: - node-version: 'lts/*' - command: 'doctoc:check' + doctoc: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: ljharb/actions/node/run@main + name: 'npm install && npm run doctoc' + with: + node-version: 'lts/*' + command: "doctoc:check" - test_naming: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: check tests filenames - run: ./rename_test.sh --check + test_naming: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: check tests filenames + run: ./rename_test.sh --check diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 83e477ee33..f6db3e26ba 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -2,15 +2,15 @@ name: Gatsby Publish on: - push: - branches: - - master + push: + branches: + - master jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: enriikke/gatsby-gh-pages-action@v2 - with: - access-token: ${{ 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 }} + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: enriikke/gatsby-gh-pages-action@v2 + with: + access-token: ${{ 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 }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c85089b4fc..596a040db3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,22 +3,22 @@ name: 'Tests: release process' on: [pull_request, push] jobs: - release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - - run: npm install - - name: Configure git - run: | - git config user.name github-actions - git config user.email github-actions@github.com - git fetch --unshallow --tags -f || git fetch --tags -f - - name: Attempt `make release` process - run: echo proceed | make TAG=99.99.99 release - env: - GIT_EDITOR: "sed -i '1 s/^/99.99.99 make release test/'" - - name: Ensure tag is created - run: git tag | grep v99.99.99 + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "14" + - run: npm install + - name: Configure git + run: | + git config user.name github-actions + git config user.email github-actions@github.com + git fetch --unshallow --tags -f || git fetch --tags -f + - name: Attempt `make release` process + run: echo proceed | make TAG=99.99.99 release + env: + GIT_EDITOR: "sed -i '1 s/^/99.99.99 make release test/'" + - name: Ensure tag is created + run: git tag | grep v99.99.99 diff --git a/notes/BGOONZ_BLOG_2.0.wiki/STABLE_POINTS.md.md b/notes/BGOONZ_BLOG_2.0.wiki/STABLE_POINTS.md.md index 91d55b1982..3b82c2f426 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/STABLE_POINTS.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/STABLE_POINTS.md.md @@ -1,21 +1,13 @@ -- [stable 8-13-2021](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/0c09a707f4bfddd974a31d97a4f8d716f1858ef8) or [or maybe](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/68fba78e36fffcf21288ea0e90e1075bf31b2a82) +- [stable 8-13-2021](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/0c09a707f4bfddd974a31d97a4f8d716f1858ef8) or [or maybe](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/68fba78e36fffcf21288ea0e90e1075bf31b2a82) +- [Stable September 11](https://github.com/side-projects-42/BGOONZ_BLOG_2.0) -- [Stable September 11](https://github.com/side-projects-42/BGOONZ_BLOG_2.0) +- [October Stable](https://github.com/Web-Dev-Collaborative/october-stable) +- [November 2021 stable](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/9ae5da5813cc9b48d2a57c84cd32cf4309078524) -- [October Stable](https://github.com/Web-Dev-Collaborative/october-stable) +- [Late November Stable](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/40ecc95f000a848710c39e166961b8da7fca306b) +- [December](https://github.com/bgoonz/BGOONZ_BLOG_2.0/tree/fc4a6ba1d61a3ef0b893cc5a44e41672547a3cc6) -- [November 2021 stable](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/9ae5da5813cc9b48d2a57c84cd32cf4309078524) - -- [Late November Stable](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/40ecc95f000a848710c39e166961b8da7fca306b) - -- [December](https://github.com/bgoonz/BGOONZ_BLOG_2.0/tree/fc4a6ba1d61a3ef0b893cc5a44e41672547a3cc6) - -- [Late December](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/848a8505eece492bfd9856eb63bd4acbee8bced6) - -- [Late January](https://github.com/bgoonz/BGOONZ_BLOG_2.0/pull/1447) - - -- [Good stable point](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/90f70928a145c8a784899baf62efc2a0d5697bf4) \ No newline at end of file +- [Late December](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/848a8505eece492bfd9856eb63bd4acbee8bced6) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/THINGS-TO-EMBED.md.md b/notes/BGOONZ_BLOG_2.0.wiki/THINGS-TO-EMBED.md.md index 96c5b34c37..7743304187 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/THINGS-TO-EMBED.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/THINGS-TO-EMBED.md.md @@ -1,28 +1,28 @@ -- [Dev Journal](https://dev-journal42.netlify.app/) +- [Dev Journal](https://dev-journal42.netlify.app/) -- [**Graduation Certificate**](https://www.credly.com/badges/bd145ba3-0f09-42fc-8d1f-a3bc4e0a46b4/public_url) +- [**Graduation Certificate**](https://www.credly.com/badges/bd145ba3-0f09-42fc-8d1f-a3bc4e0a46b4/public_url) - https://determined-dijkstra-ee7390.netlify.app/ -https://links4242.netlify.app/ -https://markdown-templates-42.netlify.app/ -https://sidebar-blog.netlify.app/ +https://determined-dijkstra-ee7390.netlify.app/ +https://links4242.netlify.app/ +https://markdown-templates-42.netlify.app/ +https://sidebar-blog.netlify.app/ https://friendly-amaranth-51833.netlify.app/ -https://bgoonzbookmarks.netlify.app/ -https://sanity-gatsby-hey-sugar-5.netlify.app/ -https://sanity-gatsby-hey-sugar-5.netlify.app/ -https://dev-journal42.netlify.app/ -https://kguner-fractions-website.netlify.app/ -https://sanity-gatsby-blog-web-skwx3b17.netlify.app/ -https://ds-algo-official.netlify.app/ -https://random-list-of-embedable-content.vercel.app/ -https://mihirbegmusiclab.netlify.app/ -https://lambda-resources.netlify.app/ -https://ds-unit-5-lambda.netlify.app/ -https://www.youtube.com/embed/xGZSWvFess8 +https://bgoonzbookmarks.netlify.app/ +https://sanity-gatsby-hey-sugar-5.netlify.app/ +https://sanity-gatsby-hey-sugar-5.netlify.app/ +https://dev-journal42.netlify.app/ +https://kguner-fractions-website.netlify.app/ +https://sanity-gatsby-blog-web-skwx3b17.netlify.app/ +https://ds-algo-official.netlify.app/ +https://random-list-of-embedable-content.vercel.app/ +https://mihirbegmusiclab.netlify.app/ +https://lambda-resources.netlify.app/ +https://ds-unit-5-lambda.netlify.app/ +https://www.youtube.com/embed/xGZSWvFess8 https://bgoonz.blogspot.com/ [BobbyG](https://futuristic-rosemary-d4acc.netlify.app/) https://iframeshowcase.netlify.app/ https://react-calculator2.vercel.app/ -https://replit.com/@bgoonz/bgoonzblog-things-2-remember#index.html \ No newline at end of file +https://replit.com/@bgoonz/bgoonzblog-things-2-remember#index.html diff --git a/notes/BGOONZ_BLOG_2.0.wiki/Technologies-Used.md.md b/notes/BGOONZ_BLOG_2.0.wiki/Technologies-Used.md.md index acab532b85..5c21390e80 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/Technologies-Used.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/Technologies-Used.md.md @@ -1 +1 @@ -![techused](https://i.imgur.com/XVNWUvU.png) \ No newline at end of file +![techused](https://i.imgur.com/XVNWUvU.png) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/_Footer.md b/notes/BGOONZ_BLOG_2.0.wiki/_Footer.md index 682f9112bb..4b1bdc575b 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/_Footer.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/_Footer.md @@ -1,14 +1,14 @@ -- [sitemap](https://www.xml-sitemaps.com/download/bgoonz-blog.netlify.app-ee43723d7/sitemap.xml?view=1) -- [initial commit](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/e8f12effd461b560b366ee0bde5231f2c1ce0a4c) -- [commit pages](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commits/master?after=496dfce7e627bc81c80f7c0b5c41ecf420500b4a+34&branch=master) -- [alt blog contact page](https://bgoonz-blog-v3-0.netlify.app/contact/) -- [Resource Archive](https://resourcerepo2.netlify.app/) -- [starter](https://codesandbox.io/s/ecstatic-wozniak-gj31v?autoresize=1&expanddevtools=1&fontsize=12&hidenavigation=1&theme=dark) -- [Instant Search Demo](https://codesandbox.io/s/magical-davinci-l4hq6) -- [midway-commit](https://github.com/bgoonz/BGOONZ_BLOG_2.0/tree/92d88002bebcde66b47d8109222ac62c64fa9909) -- [blog2.0 backups](https://gist.github.com/bgoonz/68203bca236305d93d75e87533c7e8b8) -- [backup repo](https://github.com/bgoonz/blog-2.o-versions) -- [autogen sitemap](https://bgoonz-blog.netlify.app/sitemap.xml) +- [sitemap](https://www.xml-sitemaps.com/download/bgoonz-blog.netlify.app-ee43723d7/sitemap.xml?view=1) +- [initial commit](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commit/e8f12effd461b560b366ee0bde5231f2c1ce0a4c) +- [commit pages](https://github.com/bgoonz/BGOONZ_BLOG_2.0/commits/master?after=496dfce7e627bc81c80f7c0b5c41ecf420500b4a+34&branch=master) +- [alt blog contact page](https://bgoonz-blog-v3-0.netlify.app/contact/) +- [Resource Archive](https://resourcerepo2.netlify.app/) +- [starter](https://codesandbox.io/s/ecstatic-wozniak-gj31v?autoresize=1&expanddevtools=1&fontsize=12&hidenavigation=1&theme=dark) +- [Instant Search Demo](https://codesandbox.io/s/magical-davinci-l4hq6) +- [midway-commit](https://github.com/bgoonz/BGOONZ_BLOG_2.0/tree/92d88002bebcde66b47d8109222ac62c64fa9909) +- [blog2.0 backups](https://gist.github.com/bgoonz/68203bca236305d93d75e87533c7e8b8) +- [backup repo](https://github.com/bgoonz/blog-2.o-versions) +- [autogen sitemap](https://bgoonz-blog.netlify.app/sitemap.xml) - [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) - [contentauthoring.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/contentauthoring.md) - [inject3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject3.md) @@ -20,14 +20,10 @@ - [stable points.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/stable-points.md) - [validation report.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/validation-report.md) -- [Google Analytics Report](https://datastudio.google.com/reporting/d0496ad8-b6be-469d-9708-3ec88b05e2b4) - - +- [Google Analytics Report](https://datastudio.google.com/reporting/d0496ad8-b6be-469d-9708-3ec88b05e2b4) ## Wiki Nav: - - - [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) - [add copy to code blocks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/add-copy-to-code-blocks.md) @@ -136,4 +132,4 @@ - [webhooks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/webhooks.md) -- [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) \ No newline at end of file +- [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/_Sidebar.md b/notes/BGOONZ_BLOG_2.0.wiki/_Sidebar.md index cc67267d3b..475c698310 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/_Sidebar.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/_Sidebar.md @@ -1,41 +1,43 @@ # Sitemap: --- + # Wiki Navigation -- [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) -- [add copy to code blocks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/add-copy-to-code-blocks.md) -- [Add site search w algolia.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Add-site-search-w-algolia.md) -- [adding mailing list.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/adding-mailing-list.md) -- [Adding search 2 gatsby site.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Adding-search-2-gatsby-site.md) -- [awesome.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/awesome.md) -- [broken links.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/broken-links.md) -- [configure custom domain.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/configure-custom-domain.md) -- [contentauthoring.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/contentauthoring.md) -- [full text search w lunar.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/full-text-search-w-lunar.md) -- [inject 4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject-4.md) -- [inject3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject3.md) -- [inject4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject4.md) -- [injected content part2.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-content-part2.md) -- [injected js part4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-js-part4.md) -- [injected part3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-part3.md) -- [links 2 embed.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-2-embed.md) -- [links to remember](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-to-remember) -- [Netlify Injected Content](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Netlify-Injected-Content) -- [old version of index.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/old-version-of-index.md) -- [optimize vscode.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/optimize-vscode.md) -- [possibly useful snippets.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/possibly-useful-snippets.md) -- [privacy policy.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/privacy-policy.md) -- [random stuff.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random-stuff.md) -- [random.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random.md) -- [ref type](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/ref-type) -- [SEO.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/SEO.md) -- [stable points.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/stable-points.md) -- [tech used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/tech-used.md) -- [Technologies Used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Technologies-Used.md) -- [THINGS TO EMBED.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/THINGS-TO-EMBED.md) -- [validation report.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/validation-report.md) -- [web archive.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/web-archive.md) -- [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) + +- [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) +- [add copy to code blocks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/add-copy-to-code-blocks.md) +- [Add site search w algolia.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Add-site-search-w-algolia.md) +- [adding mailing list.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/adding-mailing-list.md) +- [Adding search 2 gatsby site.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Adding-search-2-gatsby-site.md) +- [awesome.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/awesome.md) +- [broken links.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/broken-links.md) +- [configure custom domain.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/configure-custom-domain.md) +- [contentauthoring.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/contentauthoring.md) +- [full text search w lunar.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/full-text-search-w-lunar.md) +- [inject 4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject-4.md) +- [inject3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject3.md) +- [inject4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/inject4.md) +- [injected content part2.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-content-part2.md) +- [injected js part4.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-js-part4.md) +- [injected part3.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/injected-part3.md) +- [links 2 embed.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-2-embed.md) +- [links to remember](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/links-to-remember) +- [Netlify Injected Content](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Netlify-Injected-Content) +- [old version of index.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/old-version-of-index.md) +- [optimize vscode.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/optimize-vscode.md) +- [possibly useful snippets.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/possibly-useful-snippets.md) +- [privacy policy.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/privacy-policy.md) +- [random stuff.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random-stuff.md) +- [random.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/random.md) +- [ref type](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/ref-type) +- [SEO.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/SEO.md) +- [stable points.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/stable-points.md) +- [tech used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/tech-used.md) +- [Technologies Used.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/Technologies-Used.md) +- [THINGS TO EMBED.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/THINGS-TO-EMBED.md) +- [validation report.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/validation-report.md) +- [web archive.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/web-archive.md) +- [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) - [Home](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki) - [add copy to code blocks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/add-copy-to-code-blocks.md) @@ -93,12 +95,7 @@ - [webhooks.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/webhooks.md) - [wordpress vs headless cms.md](https://github.com/bgoonz/BGOONZ_BLOG_2.0/wiki/wordpress-vs-headless-cms.md) - - -Sitemap: -======== - - +# Sitemap: --- @@ -232,4 +229,4 @@ Sitemap: --- -### - [✅] [notes-template](https://bgoonz-blog.netlify.app/notes-template/) \ No newline at end of file +### - [✅] [notes-template](https://bgoonz-blog.netlify.app/notes-template/) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/articles/Data-Structures.md.md b/notes/BGOONZ_BLOG_2.0.wiki/articles/Data-Structures.md.md index d5e1d0cfe3..d7924fb8f7 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/articles/Data-Structures.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/articles/Data-Structures.md.md @@ -2,7 +2,7 @@ Data structures, at a high level, are techniques for storing and organizing data that make it easier to modify, navigate, and access. Data structures determine how data is collected, the functions we can use to access it, and the relationships between data. -Data structures are used in almost all areas of computer science and programming, from operating systems to basic vanilla code to artificial intelligence. +Data structures are used in almost all areas of computer science and programming, from operating systems to basic vanilla code to artificial intelligence. Data structures enable us to: @@ -16,9 +16,9 @@ Data structures are vital for efficient, real-world problem solving. After all, > Anyone looking to crack the coding interview will need to master data structures. -JavaScript has primitive and non-primitive data structures. Primitive data structures and data types are native to the programming language. These include boolean, null, number, string, etc. +JavaScript has primitive and non-primitive data structures. Primitive data structures and data types are native to the programming language. These include boolean, null, number, string, etc. -Non-primitive data structures are not defined by the programming language but rather by the programmer. These include linear data structures, static data structures, and dynamic data structures, like queue and linked lists. +Non-primitive data structures are not defined by the programming language but rather by the programmer. These include linear data structures, static data structures, and dynamic data structures, like queue and linked lists. ## 1\. Array @@ -116,7 +116,7 @@ Advantages - Dynamic size - Quick at insert and delete operations - In a binary search tree, inserted nodes are sequenced immediately. -- Binary search trees are efficient at searches; length is only O(height)O(height). +- Binary search trees are efficient at searches; length is only O(height)O(height). Disadvantages @@ -130,7 +130,7 @@ Disadvantages - Storing hierarchical data such as a file location. - Binary search trees are excellent for tasks needing searching or ordering of data. -> _Enjoying the article? Scroll down to [sign up](https://www.educative.io/blog/blog-newsletter-annoucement) for our free, bi-monthly newsletter._ +> _Enjoying the article? Scroll down to [sign up](https://www.educative.io/blog/blog-newsletter-annoucement) for our free, bi-monthly newsletter._ ## 5\. Graphs @@ -165,7 +165,7 @@ Disadvantages Hash tables are a complex data structure capable of storing large amounts of information and retrieving specific elements efficiently. This data structure relies on the concept of key/value pairs, where the "key" is a searched string and the "value" is the data paired with that key. -![](https://www.educative.io/api/page/6094484883374080/image/download/6745911163092992) Each searched key is converted from its string form into a numerical value, called a hash, using a predefined hash function. This hash then points to a storage bucket -- a smaller subgroup within the table. It then searches the bucket for the originally entered key and returns the value associated with that key. +![](https://www.educative.io/api/page/6094484883374080/image/download/6745911163092992) Each searched key is converted from its string form into a numerical value, called a hash, using a predefined hash function. This hash then points to a storage bucket -- a smaller subgroup within the table. It then searches the bucket for the originally entered key and returns the value associated with that key. Advantages @@ -188,21 +188,21 @@ Each hash table can be very different, from the types of the keys and values, to ## Data structure interview questions -For many developers and programmers, data structures are most important for [cracking Javascript coding interviews](https://www.educative.io/blog/acing-the-javascript-interview-top-questions-explained). Questions and problems on data structures are fundamental to modern-day coding interviews. In fact, they have a lot to say over your hireability and entry-level rate as a candidate. +For many developers and programmers, data structures are most important for [cracking Javascript coding interviews](https://www.educative.io/blog/acing-the-javascript-interview-top-questions-explained). Questions and problems on data structures are fundamental to modern-day coding interviews. In fact, they have a lot to say over your hireability and entry-level rate as a candidate. -Today, we will be going over seven common coding interview questions for JavaScript data structures, one for each of the data structures we discussed above. Each will also discuss its time complexity based on the [BigO notation](https://www.educative.io/blog/a-big-o-primer-for-beginning-devs) theory. +Today, we will be going over seven common coding interview questions for JavaScript data structures, one for each of the data structures we discussed above. Each will also discuss its time complexity based on the [BigO notation](https://www.educative.io/blog/a-big-o-primer-for-beginning-devs) theory. ### Array: Remove all even integers from an array -Problem statement: Implement a function `removeEven(arr)`, which takes an array arr in its input and removes all the even elements from a given array. +Problem statement: Implement a function `removeEven(arr)`, which takes an array arr in its input and removes all the even elements from a given array. -Input: An array of random integers +Input: An array of random integers ``` [1,2,4,5,10,6,3] ``` -Output: an array containing only odd integers +Output: an array containing only odd integers ``` [1,5,3] @@ -230,33 +230,28 @@ There are two ways you could solve this coding problem in an interview. Let's di 9 -function removeEven(arr) { +function removeEven(arr) { -var odds = [] +var odds = [] -for (let number of arr) { +for (let number of arr) { -if (number % 2 != 0) // Check if the item in the list is NOT even ('%' is the modulus symbol!) +if (number % 2 != 0) // Check if the item in the list is NOT even ('%' is the modulus symbol!) -odds.push(number) //If it isn't even append it to the empty list +odds.push(number) //If it isn't even append it to the empty list } -return odds // Return the new list +return odds // Return the new list } -console.log(removeEven([3, 2, 41, 3, 34])) +console.log(removeEven([3, 2, 41, 3, 34])) Run -<<<<<<< HEAD -This approach starts with the first element of the array. If that current element is not even, it pushes this element into a new array. If it is even, it will move to the next element, repeating until it reaches the end of the array. In regards to time complexity, since the entire array has to be iterated over, this solution is in *O(n)O(n).* -======= This approach starts with the first element of the array. If that current element is not even, it pushes this element into a new array. If it is even, it will move to the next element, repeating until it reaches the end of the array. In regards to time complexity, since the entire array has to be iterated over, this solution is in _O(n)O(n)._ -> > > > > > > af65185bd (-update) - #### Solution #2: Using filter() and lambda function 1 @@ -267,9 +262,9 @@ This approach starts with the first element of the array. If that current elemen 4 -function removeEven(arr) { +function removeEven(arr) { -return arr.filter((v => (v % 2) != 0)) +return arr.filter((v => (v % 2) != 0)) } @@ -281,15 +276,15 @@ The filter function uses lambda or arrow functions, which use shorter, simpler s ### Stack: Check for balanced parentheses using a stack -Problem statement: Implement the `isBalanced()` function to take a string containing only curly `{}`, square `[]`, and round `()` parentheses. The function should tell us if all the parentheses in the string are balanced. This means that every opening parenthesis will have a closing one. For example, `{[]}` is balanced, but `{[}]` is not. +Problem statement: Implement the `isBalanced()` function to take a string containing only curly `{}`, square `[]`, and round `()` parentheses. The function should tell us if all the parentheses in the string are balanced. This means that every opening parenthesis will have a closing one. For example, `{[]}` is balanced, but `{[}]` is not. -Input: A string consisting solely of `(`, `)`, `{`, `}`, `[` and `]` +Input: A string consisting solely of `(`, `)`, `{`, `}`, `[` and `]` ``` -exp = "{[({})]}" +exp = "{[({})]}" ``` -Output: Returns `False` if the expression doesn't have balanced parentheses. If it does, the function returns `True`. +Output: Returns `False` if the expression doesn't have balanced parentheses. If it does, the function returns `True`. ``` True @@ -363,57 +358,57 @@ Stack.js 31 -"use strict"; +"use strict"; -module.exports = class Stack { +module.exports = class Stack { -constructor() { +constructor() { -this.items = []; +this.items = []; -this.top = null; +this.top = null; } -getTop() { +getTop() { -if (this.items.length == 0) +if (this.items.length == 0) -return null; +return null; -return this.top; +return this.top; } -isEmpty() { +isEmpty() { -return this.items.length == 0; +return this.items.length == 0; } -size() { +size() { -return this.items.length; +return this.items.length; } -push(element) { +push(element) { this.items.push(element); -this.top = element; +this.top = element; } -pop() { +pop() { -if (this.items.length != 0) { +if (this.items.length != 0) { -if (this.items.length == 1) { +if (this.items.length == 1) { -this.top = null; +this.top = null; -return this.items.pop(); +return this.items.pop(); Run @@ -422,27 +417,22 @@ This process will iterate over the string one character at a time. We can determ 1. The stack is empty. 2. The top element in the stack is not the right type. -<<<<<<< HEAD -If either of these conditions is true, we return `False`. If the parenthesis is an opening parenthesis, it is pushed into the stack. If by the end all are balanced, the stack will be empty. If it is not empty, we return `False`. Since we traverse the string exp only once, the time complexity is *O(n)*. -======= If either of these conditions is true, we return `False`. If the parenthesis is an opening parenthesis, it is pushed into the stack. If by the end all are balanced, the stack will be empty. If it is not empty, we return `False`. Since we traverse the string exp only once, the time complexity is _O(n)_. -> > > > > > > af65185bd (-update) - ### Queue: Generate Binary Numbers from 1 to n -Problem statement: Implement a function `findBin(n)`, which will generate binary numbers from `1` to `n` in the form of a string using a queue. +Problem statement: Implement a function `findBin(n)`, which will generate binary numbers from `1` to `n` in the form of a string using a queue. -Input: A positive integer n +Input: A positive integer n ``` -n = 3 +n = 3 ``` -Output: Returns binary numbers in the form of strings from `1` up to `n` +Output: Returns binary numbers in the form of strings from `1` up to `n` ``` -result = ["1","10","11"] +result = ["1","10","11"] ``` The easiest way to solve this problem is using a queue to generate new numbers from previous numbers. Let's break that down. @@ -513,45 +503,45 @@ Queue.js 31 -"use strict"; +"use strict"; -module.exports = class Queue { +module.exports = class Queue { -constructor() { +constructor() { -this.items = []; +this.items = []; -this.front = null; +this.front = null; -this.back = null; +this.back = null; } -isEmpty() { +isEmpty() { -return this.items.length == 0; +return this.items.length == 0; } -getFront() { +getFront() { -if (this.items.length != 0) { +if (this.items.length != 0) { -return this.items[0]; +return this.items[0]; -} else +} else -return null; +return null; } -size() { +size() { -return this.items.length; +return this.items.length; } -enqueue(element) { +enqueue(element) { this.items.push(element); @@ -566,38 +556,28 @@ The key is to generate consecutive binary numbers by appending 0 and 1 to previo Once we generate a binary number, it is then enqueued to a queue so that new binary numbers can be generated if we append 0 and 1 when that number will be enqueued. -<<<<<<< HEAD -Since a queue follows the *First-In First-Out* property, the enqueued binary numbers are dequeued so that the resulting array is mathematically correct. -======= Since a queue follows the _First-In First-Out_ property, the enqueued binary numbers are dequeued so that the resulting array is mathematically correct. -> > > > > > > af65185bd (-update) - -Look at the code above. On line 7, `1` is enqueued. To generate the sequence of binary numbers, a number is dequeued and stored in the array `result`. On lines 11-12, we append `0` and `1` to produce the next numbers. +Look at the code above. On line 7, `1` is enqueued. To generate the sequence of binary numbers, a number is dequeued and stored in the array `result`. On lines 11-12, we append `0` and `1` to produce the next numbers. Those new numbers are also enqueued at lines 14-15. The queue will take integer values, so it converts the string to an integer as it is enqueued. -<<<<<<< HEAD -The time complexity of this solution is in *O(n)O(n)* since constant-time operations are executed for n times. -======= The time complexity of this solution is in _O(n)O(n)_ since constant-time operations are executed for n times. -> > > > > > > af65185bd (-update) - ### Linked List: Reverse a linked list -Problem statement: Write the `reverse` function to take a singly linked list and reverse it in place. +Problem statement: Write the `reverse` function to take a singly linked list and reverse it in place. -Input: a singly linked list +Input: a singly linked list ``` -LinkedList = 0->1->2->3-4 +LinkedList = 0->1->2->3-4 ``` -Output: a reverse linked list +Output: a reverse linked list ``` -LinkedList = 4->3->2->1->0 +LinkedList = 4->3->2->1->0 ``` The easiest way to solve this problem is by using iterative pointer manipulation. Let's take a look. @@ -670,88 +650,83 @@ Node.js 31 -"use strict"; +"use strict"; -const Node = require('./Node.js'); +const Node = require('./Node.js'); -module.exports = class LinkedList { +module.exports = class LinkedList { -constructor() { +constructor() { -this.head = null; +this.head = null; } -//Insertion At Head +//Insertion At Head -insertAtHead(newData) { +insertAtHead(newData) { -let tempNode = new Node(newData); +let tempNode = new Node(newData); -tempNode.nextElement = this.head; +tempNode.nextElement = this.head; -this.head = tempNode; +this.head = tempNode; -return this; //returning the updated list +return this; //returning the updated list } -isEmpty() { +isEmpty() { -return (this.head == null); +return (this.head == null); } -//function to print the linked list +//function to print the linked list -printList() { +printList() { -if (this.isEmpty()) { +if (this.isEmpty()) { -console.log("Empty List"); +console.log("Empty List"); -return false; +return false; -} else { +} else { -let temp = this.head; +let temp = this.head; -while (temp != null) { +while (temp != null) { process.stdout.write(String(temp.data)); -process.stdout.write(" -> "); +process.stdout.write(" -> "); -temp = temp.nextElement; +temp = temp.nextElement; Run -We use a loop to iterate through the input list. For a `current` node, its link with the `previous` node is reversed. then, `next` stores the next node in the list. Let's break that down by line. +We use a loop to iterate through the input list. For a `current` node, its link with the `previous` node is reversed. then, `next` stores the next node in the list. Let's break that down by line. -- Line 22- Store the `current` node's `nextElement` in `next` -- Line 23 - Set `current` node's `nextElement` to `previous` -- Line 24 - Make the `current` node the new `previous` for the next iteration -- Line 25 - Use `next` to go to the next node -- Line 29 - We reset the `head` pointer to point at the last node +- Line 22- Store the `current` node's `nextElement` in `next` +- Line 23 - Set `current` node's `nextElement` to `previous` +- Line 24 - Make the `current` node the new `previous` for the next iteration +- Line 25 - Use `next` to go to the next node +- Line 29 - We reset the `head` pointer to point at the last node -<<<<<<< HEAD -Since the list is traversed only once, the algorithm runs in *O(n)*. -======= Since the list is traversed only once, the algorithm runs in _O(n)_. -> > > > > > > af65185bd (-update) - ### Tree: Find the Minimum Value in a Binary Search Tree -Problem statement: Use the `findMin(root)` function to find the minimum value in a Binary Search Tree. +Problem statement: Use the `findMin(root)` function to find the minimum value in a Binary Search Tree. -Input: a root node for a binary search tree +Input: a root node for a binary search tree ``` -bst = {    6 -> 4,9    4 -> 2,5    9 -> 8,12    12 -> 10,14}where parent -> leftChild,rightChild +bst = { 6 -> 4,9 4 -> 2,5 9 -> 8,12 12 -> 10,14}where parent -> leftChild,rightChild ``` -Output: the smallest integer value from that binary search tree +Output: the smallest integer value from that binary search tree ``` 2 @@ -759,9 +734,9 @@ Output: the smallest integer value from that binary search tree Let's look at an easy solution for this problem. -#### Solution: Iterative `findMin( )` +#### Solution: Iterative `findMin( )` -This solution begins by checking if the root is `null`. It returns `null` if so. It then moves to the left subtree and continues with each node's left child until the left-most child is reached. +This solution begins by checking if the root is `null`. It returns `null` if so. It then moves to the left subtree and continues with each node's left child until the left-most child is reached. index.js @@ -831,55 +806,55 @@ Node.js 31 -"use strict"; +"use strict"; -const Node = require('./Node.js'); +const Node = require('./Node.js'); -module.exports = class BinarySearchTree { +module.exports = class BinarySearchTree { -constructor(rootValue) { +constructor(rootValue) { -this.root = new Node(rootValue); +this.root = new Node(rootValue); } -insert(currentNode, newValue) { +insert(currentNode, newValue) { -if (currentNode === null) { +if (currentNode === null) { -currentNode = new Node(newValue); +currentNode = new Node(newValue); -} else if (newValue < currentNode.val) { +} else if (newValue < currentNode.val) { -currentNode.leftChild = this.insert(currentNode.leftChild, newValue); +currentNode.leftChild = this.insert(currentNode.leftChild, newValue); -} else { +} else { -currentNode.rightChild = this.insert(currentNode.rightChild, newValue); +currentNode.rightChild = this.insert(currentNode.rightChild, newValue); } -return currentNode; +return currentNode; } -insertBST(newValue) { +insertBST(newValue) { if(this.root==null){ -this.root=new Node(newValue); +this.root=new Node(newValue); return; } -this.insert(this.root, newValue); +this.insert(this.root, newValue); } -preOrderPrint(currentNode) { +preOrderPrint(currentNode) { -if (currentNode !== null) { +if (currentNode !== null) { console.log(currentNode.val); @@ -889,9 +864,9 @@ Run ### Graph: Remove Edge -Problem statement: Implement the removeEdge function to take a source and a destination as arguments. It should detect if an edge exists between them. +Problem statement: Implement the removeEdge function to take a source and a destination as arguments. It should detect if an edge exists between them. -Input: A graph, a source, and a destination +Input: A graph, a source, and a destination ![](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjA4MCIgaGVpZ2h0PSIyOTEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg==) @@ -899,10 +874,10 @@ Input: A graph, a source, and a destination ![widget](https://www.educative.io/cdn-cgi/image/f=auto,fit=contain,w=300,q=10/api/page/6094484883374080/image/download/6576135669284864) -Output: A graph with the edge between the source and the destination removed. +Output: A graph with the edge between the source and the destination removed. ``` -removeEdge(graph, 2, 3) +removeEdge(graph, 2, 3) ``` ![](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjA5MCIgaGVpZ2h0PSIyOTIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg==) @@ -983,25 +958,25 @@ Node.js 31 -"use strict"; +"use strict"; -const LinkedList = require('./LinkedList.js'); +const LinkedList = require('./LinkedList.js'); -const Node = require('./Node.js'); +const Node = require('./Node.js'); -module.exports = class Graph { +module.exports = class Graph { -constructor(vertices) { +constructor(vertices) { -this.vertices = vertices; +this.vertices = vertices; -this.list = []; +this.list = []; -var it; +var it; -for (it = 0; it < vertices; it++) { +for (it = 0; it < vertices; it++) { -let temp = new LinkedList(); +let temp = new LinkedList(); this.list.push(temp); @@ -1009,44 +984,44 @@ this.list.push(temp); } -addEdge(source, destination) { +addEdge(source, destination) { -if (source < this.vertices && destination < this.vertices) +if (source < this.vertices && destination < this.vertices) this.list[source].insertAtHead(destination); -return this; +return this; } -printGraph() { +printGraph() { -console.log(">>Adjacency List of Directed Graph<<"); +console.log(">>Adjacency List of Directed Graph<<"); -var i; +var i; -for (i = 0; i < this.list.length; i++) { +for (i = 0; i < this.list.length; i++) { -process.stdout.write("|" + String(i) + "| => "); +process.stdout.write("|" + String(i) + "| => "); Run -Since our vertices are stored in an array, we can access the `source` linked list. We then call the `delete` function for linked lists. The time complexity for this solution is O(E) since we may have to traverse E edges. +Since our vertices are stored in an array, we can access the `source` linked list. We then call the `delete` function for linked lists. The time complexity for this solution is O(E) since we may have to traverse E edges. ### Hash Table: Convert Max-Heap to Min-Heap -Problem statement: Implement the function `convertMax(maxHeap)` to convert a binary max-heap into a binary min-heap. `maxHeap` should be an array in the `maxHeap` format, i.e the parent is greater than its children. +Problem statement: Implement the function `convertMax(maxHeap)` to convert a binary max-heap into a binary min-heap. `maxHeap` should be an array in the `maxHeap` format, i.e the parent is greater than its children. -Input: a Max-Heap +Input: a Max-Heap ``` -maxHeap = [9,4,7,1,-2,6,5] +maxHeap = [9,4,7,1,-2,6,5] ``` -Output: returns the converted array +Output: returns the converted array ``` -result = [-2,1,5,9,4,6,7] +result = [-2,1,5,9,4,6,7] ``` To solve this problem, we must min heapify all parent nodes. Take a look. @@ -1105,59 +1080,54 @@ To solve this problem, we must min heapify all parent nodes. Take a look. 27 -function minHeapify(heap, index) { +function minHeapify(heap, index) { -var left = index \* 2; +var left = index \* 2; -var right = (index \* 2) + 1; +var right = (index \* 2) + 1; -var smallest = index; +var smallest = index; -if ((heap.length > left) && (heap[smallest] > heap[left])) { +if ((heap.length > left) && (heap[smallest] > heap[left])) { -smallest = left +smallest = left } -if ((heap.length > right) && (heap[smallest] > heap[right])) +if ((heap.length > right) && (heap[smallest] > heap[right])) -smallest = right +smallest = right -if (smallest != index) { +if (smallest != index) { -var tmp = heap[smallest] +var tmp = heap[smallest] -heap[smallest] = heap[index] +heap[smallest] = heap[index] -heap[index] = tmp +heap[index] = tmp -minHeapify(heap, smallest) +minHeapify(heap, smallest) } -return heap; +return heap; } -function convertMax(maxHeap) { +function convertMax(maxHeap) { -for (var i = Math.floor((maxHeap.length) / 2); i > -1; i--) +for (var i = Math.floor((maxHeap.length) / 2); i > -1; i--) -maxHeap = minHeapify(maxHeap, i) +maxHeap = minHeapify(maxHeap, i) -return maxHeap +return maxHeap } -var maxHeap = [9,4,7,1,-2,6,5] +var maxHeap = [9,4,7,1,-2,6,5] console.log(convertMax(maxHeap)) Run -<<<<<<< HEAD -We consider `maxHeap` to be a regular array and reorder it to accurately represent a min-heap. You can see this done in the code above. The `convertMax()` function then restores the heap property on all nodes from the lowest parent node by calling the `minHeapify()` function. In regards to time complexity, this solution takes *O(nlog(n))O(nlog(n))* time. -======= We consider `maxHeap` to be a regular array and reorder it to accurately represent a min-heap. You can see this done in the code above. The `convertMax()` function then restores the heap property on all nodes from the lowest parent node by calling the `minHeapify()` function. In regards to time complexity, this solution takes _O(nlog(n))O(nlog(n))_ time. - -> > > > > > > af65185bd (-update) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/articles/SEO.md.md b/notes/BGOONZ_BLOG_2.0.wiki/articles/SEO.md.md index ba5ab4e9b5..75e588d870 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/articles/SEO.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/articles/SEO.md.md @@ -4,21 +4,21 @@ ##### Seo Resources: -[![](https://www.google.com/s2/favicons?domain=https://search.google.com/test/mobile-friendly)](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Is your page is **Mobile Friendly ?**](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) +[![](https://www.google.com/s2/favicons?domain=https://search.google.com/test/mobile-friendly)](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Is your page is **Mobile Friendly ?**](https://search.google.com/test/mobile-friendly?referer=seo-extension.com&url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) -[![](https://www.google.com/s2/favicons?domain=http://gtmetrix.com/)](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/)[Analyze **Performance** with **GTmetrix**](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/) +[![](https://www.google.com/s2/favicons?domain=http://gtmetrix.com/)](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/)[Analyze **Performance** with **GTmetrix**](http://gtmetrix.com/?url=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=http://developers.google.com)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Analyze **Performance** with **PageSpeed** (Google tool)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) +[![](https://www.google.com/s2/favicons?domain=http://developers.google.com)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Analyze **Performance** with **PageSpeed** (Google tool)](http://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) -[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/w3c-ico.png)](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/)[Validate **HTML, XHTML,...**](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/) +[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/w3c-ico.png)](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/)[Validate **HTML, XHTML,...**](http://validator.w3.org/check?uri=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=http://jigsaw.w3.org)](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/)[Validate **CSS**](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/) +[![](https://www.google.com/s2/favicons?domain=http://jigsaw.w3.org)](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/)[Validate **CSS**](http://jigsaw.w3.org/css-validator/validator?uri=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=https://www.facebook.com/)](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Check **Open Graph** properties with **Facebook** Sharing Debugger](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) +[![](https://www.google.com/s2/favicons?domain=https://www.facebook.com/)](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F)[Check **Open Graph** properties with **Facebook** Sharing Debugger](https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) -[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/seo-wmtips.png)](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/)[Analyze **Keyword density** with WMtips](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/) +[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/seo-wmtips.png)](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/)[Analyze **Keyword density** with WMtips](http://www.wmtips.com/tools/keyword-density-analyzer/?&url=https://bgoonz-blog.netlify.app/) -[![](https://www.google.com/s2/favicons?domain=https://www.google.be/)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Check **Microdata, Microformats** and **RDFa**](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) +[![](https://www.google.com/s2/favicons?domain=https://www.google.be/)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Check **Microdata, Microformats** and **RDFa**](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) --- @@ -80,227 +80,188 @@ Other (whois,...) --- -Title ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +Title ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 11 characters Web-Dev-Hub -Description ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +Description ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 155 characters bigO, Python, Javascript, Audio, Processing, Learning, Blog, React, PostgreSQL, Scope, Closure, Web Development, Embed, API, Website, Design, Music, Search -Keywords ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +Keywords ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 3 values HTML, Meta Tags, Metadata -URL ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +URL ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) https://bgoonz-blog.netlify.app/ -Canonical ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Canonical ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Canonical URL is not defined. -Robots Tag ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Robots Tag ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Robots meta tag is not defined. -Author ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Author ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Bryan Guner -Publisher ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Publisher ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Publisher is missing. -Lang ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Lang ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) Lang attribut of HTML element is missing. -| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Images ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Links ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | +| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Images ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | Links ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | | --- | --- | --- | --- | --- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | | 3 | 10 | 29 | 1 | 0 | 1 | 26 | 137 | -![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/ga-icon-na.png) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/ga-icon-na.png) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) -[Robots.txt](https://bgoonz-blog.netlify.app/robots.txt) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | [Sitemap.xml](https://bgoonz-blog.netlify.app/sitemap.xml) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +[Robots.txt](https://bgoonz-blog.netlify.app/robots.txt) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | [Sitemap.xml](https://bgoonz-blog.netlify.app/sitemap.xml) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) --- ALL LINKS\ -APPLE-TOUCH-ICON : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png 'apple-touch-icon')\ -APPLE-TOUCH-ICON : [logo-canvas.png](https://instructure-uploads-pdx.s3.us-west-2.amazonaws.com/account_168550000000000001/attachments/537/logo-canvas.png 'apple-touch-icon')\ -ICON : [webdevhublogo2.PNG](https://bgoonz-blog.netlify.app/images/webdevhublogo2.PNG 'icon')\ -PRECONNECT : https://fonts.gstatic.com\ -PREFETCH : component---src-templates-advanced-js-c66268766ef5c957450f.js\ -PREFETCH : component---src-templates-blog-js-36eb4fae1add87ca6010.js\ -PREFETCH : component---src-templates-docs-js-bf431cbe6f6b991ffc34.js\ -PREFETCH : component---src-templates-post-js-d6ee8a7502d16baf00c6.js\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PREFETCH : page-data.json\ -PRELOAD : 29107295-519d329e2c1acb586ba7.js\ -PRELOAD : app-a18a86fe88835f322f3c.js\ -PRELOAD : app-data.json\ -PRELOAD : commons-d40de8dfcbb72ad3503c.js\ -PRELOAD : component---src-templates-advanced-js-c66268766ef5c957450f.js\ -PRELOAD : framework-ee588a66ec21b993116b.js\ -PRELOAD : integrator.js\ -PRELOAD : page-data.json\ -PRELOAD : styles-7d4153d260c0197f0043.js\ -PRELOAD : webpack-runtime-7059fe0afa2407e27b1a.js\ -SHORTCUT ICON : [favicon.ico](https://bgoonz-blog.netlify.app/favicon.ico 'shortcut icon')\ -STYLESHEET : [default.min.css](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/styles/default.min.css)\ -STYLESHEET : [algoliasearchNetlify.css](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.css)\ -STYLESHEET : [bootstrap.min.css](https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css)\ -STYLESHEET : \ -STYLESHEET : [css](https://fonts.googleapis.com/css?family=Raleway:200,100,400) +APPLE-TOUCH-ICON : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png 'apple-touch-icon')\ +APPLE-TOUCH-ICON : [logo-canvas.png](https://instructure-uploads-pdx.s3.us-west-2.amazonaws.com/account_168550000000000001/attachments/537/logo-canvas.png 'apple-touch-icon')\ +ICON : [webdevhublogo2.PNG](https://bgoonz-blog.netlify.app/images/webdevhublogo2.PNG 'icon')\ +PRECONNECT : https://fonts.gstatic.com\ +PREFETCH : component---src-templates-advanced-js-c66268766ef5c957450f.js\ +PREFETCH : component---src-templates-blog-js-36eb4fae1add87ca6010.js\ +PREFETCH : component---src-templates-docs-js-bf431cbe6f6b991ffc34.js\ +PREFETCH : component---src-templates-post-js-d6ee8a7502d16baf00c6.js\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PREFETCH : page-data.json\ +PRELOAD : 29107295-519d329e2c1acb586ba7.js\ +PRELOAD : app-a18a86fe88835f322f3c.js\ +PRELOAD : app-data.json\ +PRELOAD : commons-d40de8dfcbb72ad3503c.js\ +PRELOAD : component---src-templates-advanced-js-c66268766ef5c957450f.js\ +PRELOAD : framework-ee588a66ec21b993116b.js\ +PRELOAD : integrator.js\ +PRELOAD : page-data.json\ +PRELOAD : styles-7d4153d260c0197f0043.js\ +PRELOAD : webpack-runtime-7059fe0afa2407e27b1a.js\ +SHORTCUT ICON : [favicon.ico](https://bgoonz-blog.netlify.app/favicon.ico 'shortcut icon')\ +STYLESHEET : [default.min.css](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/styles/default.min.css)\ +STYLESHEET : [algoliasearchNetlify.css](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.css)\ +STYLESHEET : [bootstrap.min.css](https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css)\ +STYLESHEET : \ +STYLESHEET : [css](https://fonts.googleapis.com/css?family=Raleway:200,100,400) --- ALL METAS\ -AUTHOR : Bryan Guner\ -CHARSET : UTF-8\ -CHARSET : UTF-8\ -CHARSET : utf-8\ -GENERATOR : Gatsby 2.32.8\ -GOOGLE-SITE-VERIFICATION : W6SJ3S45yhnjzV6ISUMCTXl_QVX5woQZ7jO3bsahONQ\ -GOOGLE-SITE-VERIFICATION : q5W83EYchlVTyA-iYRE4ElQGcbD_vukQF0NKW12N3qU\ -HTTP-EQUIV (CONTENT-TYPE) : HTML\ -HTTP-EQUIV (CONTENT-TYPE) : text/html; charset=us-ascii\ -HTTP-EQUIV (X-UA-COMPATIBLE) : IE=edge\ -HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ -HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ -HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ -HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ -HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ -OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ -OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ -OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ -OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ -OG:IMAGE : [DROicc16](https://mugshotbot.com/m/DROicc16 'DROicc16')\ -OG:TITLE : Web-Dev-Hub\ -OG:TITLE : Web-Dev-Hub\ -OG:TYPE : website\ -OG:TYPE : website\ -OG:URL : \ -TWITTER:CARD : summary\ -TWITTER:CARD : summary_large_image\ -TWITTER:CARD : summary_large_image\ -TWITTER:CARD : summary_large_image\ -TWITTER:CREATOR : @bgoonz\ -TWITTER:DESCRIPTION : The new home of my blog resource sharing website.\ -TWITTER:DESCRIPTION : Web-Dev-Hub\ -TWITTER:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ -TWITTER:DOMAIN : bgoonz-blog.netlify.app\ -TWITTER:IMAGE : [4.jpg](https://bgoonz-blog.netlify.app/images/4.jpg '4.jpg')\ -TWITTER:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ -TWITTER:IMAGE:SRC : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png 'logo-circle.png')\ -TWITTER:SITE : @bgoonz\ -TWITTER:TITLE : Web Development Resource Hub Bryan Guner\ -TWITTER:TITLE : Web-Dev-Hub\ -TWITTER:TITLE : Web-Dev-Hub\ -TWITTER:URL : \ -VIEWPORT : width=device-width, initial-scale=1.0, shrink-to-fit=no\ -VIEWPORT : width=device-width, initial-scale=1.0\ -VIEWPORT : width=device-width, initial-scale=1\ -VIEWPORT : width=device-width, initialScale=1.0 +AUTHOR : Bryan Guner\ +CHARSET : UTF-8\ +CHARSET : UTF-8\ +CHARSET : utf-8\ +GENERATOR : Gatsby 2.32.8\ +GOOGLE-SITE-VERIFICATION : W6SJ3S45yhnjzV6ISUMCTXl_QVX5woQZ7jO3bsahONQ\ +GOOGLE-SITE-VERIFICATION : q5W83EYchlVTyA-iYRE4ElQGcbD_vukQF0NKW12N3qU\ +HTTP-EQUIV (CONTENT-TYPE) : HTML\ +HTTP-EQUIV (CONTENT-TYPE) : text/html; charset=us-ascii\ +HTTP-EQUIV (X-UA-COMPATIBLE) : IE=edge\ +HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A/OOU4XAFfeAV4kM4+W9WBwNAHqq/bvtrRcJ1wpnNyO/i076BSUy1d14l2kBEgVmEuvxojSpD23172C6hBg2AQYAAACWeyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A16nvcdeoOAqrJcmjLRpl1I6f3McDD8EfofAYTt/P/H4/AWwB99nxiPp6kA0fXoiZav908Z8etuL16laFPUdfQsAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ +HTTP-EQUIV (ORIGIN-TRIAL) : A88BWHFjcawUfKU3lIejLoryXoyjooBXLgWmGh+hNcqMK44cugvsI5YZbNarYvi3roc1fYbHA1AVbhAtuHZflgEAAAB2eyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IlRydXN0VG9rZW5zIiwiZXhwaXJ5IjoxNjUyNzc0NDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlfQ==\ +HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AwrB+XVH/KV6HfZNVtSEqlUJi3yUbtCp0/TJRj+38NDIw19/9P1h7ECTtdLdhIzG0Bsl4n/0rVmttJtGUCcewgAAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : Ax15QOERqai2A5XWrDY38Eg07xh2T0pkhpDPJuDlxr7D2Ka8wHvklgK7tTPZOnT+8H31lwHto5JpvYV8jRn1WgIAAACceyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXRhZ3NlcnZpY2VzLmNvbTo0NDMiLCJmZWF0dXJlIjoiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwiZXhwaXJ5IjoxNjM0MDgzMTk5LCJpc1N1YmRvbWFpbiI6dHJ1ZSwiaXNUaGlyZFBhcnR5Ijp0cnVlLCJ1c2FnZSI6InN1YnNldCJ9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxBHdr0J44vFBQtZUqX9sjiqf5yWZ/OcHRcRMN3H9TH+t90V/j3ENW6C8+igBZFXMJ7G3Pr8Dd13632aLng42wgAAACBeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZXN5bmRpY2F0aW9uLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ +HTTP-EQUIV (ORIGIN-TRIAL) : AxujKG9INjsZ8/gUq8+dTruNvk7RjZQ1oFhhgQbcTJKDnZfbzSTE81wvC2Hzaf3TW4avA76LTZEMdiedF1vIbA4AAABueyJvcmlnaW4iOiJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbTo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0=\ +HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +HTTP-EQUIV (ORIGIN-TRIAL) : Azuce85ORtSnWe1MZDTv68qpaW3iHyfL9YbLRy0cwcCZwVnePnOmkUJlG8HGikmOwhZU22dElCcfrfX2HhrBPAkAAAB7eyJvcmlnaW4iOiJodHRwczovL2RvdWJsZWNsaWNrLm5ldDo0NDMiLCJmZWF0dXJlIjoiVHJ1c3RUb2tlbnMiLCJleHBpcnkiOjE2NTI3NzQ0MDAsImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9\ +OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ +OG:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ +OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ +OG:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ +OG:IMAGE : [DROicc16](https://mugshotbot.com/m/DROicc16 'DROicc16')\ +OG:TITLE : Web-Dev-Hub\ +OG:TITLE : Web-Dev-Hub\ +OG:TYPE : website\ +OG:TYPE : website\ +OG:URL : \ +TWITTER:CARD : summary\ +TWITTER:CARD : summary_large_image\ +TWITTER:CARD : summary_large_image\ +TWITTER:CARD : summary_large_image\ +TWITTER:CREATOR : @bgoonz\ +TWITTER:DESCRIPTION : The new home of my blog resource sharing website.\ +TWITTER:DESCRIPTION : Web-Dev-Hub\ +TWITTER:DESCRIPTION : my resource sharing and blog site ... centered mostly on web development and just a bit of audio production / generally nerdy things I find interesting.\ +TWITTER:DOMAIN : bgoonz-blog.netlify.app\ +TWITTER:IMAGE : [4.jpg](https://bgoonz-blog.netlify.app/images/4.jpg '4.jpg')\ +TWITTER:IMAGE : [code.png](https://bgoonz-blog.netlify.app/images/code.png 'code.png')\ +TWITTER:IMAGE:SRC : [logo-circle.png](https://bgoonz-blog.netlify.app/logo-circle.png 'logo-circle.png')\ +TWITTER:SITE : @bgoonz\ +TWITTER:TITLE : Web Development Resource Hub Bryan Guner\ +TWITTER:TITLE : Web-Dev-Hub\ +TWITTER:TITLE : Web-Dev-Hub\ +TWITTER:URL : \ +VIEWPORT : width=device-width, initial-scale=1.0, shrink-to-fit=no\ +VIEWPORT : width=device-width, initial-scale=1.0\ +VIEWPORT : width=device-width, initial-scale=1\ +VIEWPORT : width=device-width, initialScale=1.0 --- ALL SCRIPTS\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js) jquery.min.js](https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js) firebase-analytics.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js) firebase-app.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/init.js) init.js](https://bgoonz-blog.netlify.app/__/firebase/init.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js) highlight.min.js](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715) sdk.js](https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js) show_ads_impl_fy2019.js](https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116) cookie.js](https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1) js](https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ -SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app) integrator.js](https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js) algoliasearchNetlify.js](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.livechatinc.com/tracking.js) tracking.js](https://cdn.livechatinc.com/tracking.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/main-20210906133224.js) main-20210906133224.js](https://rec.smartlook.com/main-20210906133224.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/recorder.js) recorder.js](https://rec.smartlook.com/recorder.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.google-analytics.com/analytics.js) analytics.js](https://www.google-analytics.com/analytics.js)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c)\ -TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.smartsuppchat.com/loader.js?) loader.js](https://www.smartsuppchat.com/loader.js?) +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js) jquery.min.js](https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js) firebase-analytics.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-analytics.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js) firebase-app.js](https://bgoonz-blog.netlify.app/__/firebase/8.8.1/firebase-app.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://bgoonz-blog.netlify.app/__/firebase/init.js) init.js](https://bgoonz-blog.netlify.app/__/firebase/init.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js) highlight.min.js](https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715) sdk.js](https://connect.facebook.net/en_US/sdk.js?hash=6a602f346aa883611e40755bcd565715)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js) adsbygoogle.js](https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js) show_ads_impl_fy2019.js](https://pagead2.googlesyndication.com/pagead/managed/js/adsense/m202110070201/show_ads_impl_fy2019.js)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116) cookie.js](https://partner.googleadservices.com/gampad/cookie.js?domain=bgoonz-blog.netlify.app&callback=_gfp_s_&client=ca-pub-7131725540181116)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1) js](https://www.googletagmanager.com/gtag/js?id=G-M9B63M34E1)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ +SCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR) gtm.js](https://www.googletagmanager.com/gtm.js?id=GTM-5S5XXNR)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app) integrator.js](https://adservice.google.com/adsid/integrator.js?domain=bgoonz-blog.netlify.app)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js) algoliasearchNetlify.js](https://cdn.jsdelivr.net/npm/@algolia/algoliasearch-netlify-frontend@1/dist/algoliasearchNetlify.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://cdn.livechatinc.com/tracking.js) tracking.js](https://cdn.livechatinc.com/tracking.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/main-20210906133224.js) main-20210906133224.js](https://rec.smartlook.com/main-20210906133224.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://rec.smartlook.com/recorder.js) recorder.js](https://rec.smartlook.com/recorder.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.google-analytics.com/analytics.js) analytics.js](https://www.google-analytics.com/analytics.js)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-4W5MG3DG4T&l=dataLayer&cx=c)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c) js](https://www.googletagmanager.com/gtag/js?id=G-F56YP2Y17L&l=dataLayer&cx=c)\ +TEXT/JAVASCRIPT : [![](https://www.google.com/s2/favicons?domain=https://www.smartsuppchat.com/loader.js?) loader.js](https://www.smartsuppchat.com/loader.js?) --- -<<<<<<< HEAD -XFN / Rel attr. (Xhtml Friends Network)  ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ -NOFOLLOW: [byfreefind](https://www.freefind.com/)\ -NOFOLLOW: [search engine](https://www.freefind.com/)\ -NOOPENER : [dev.to](https://dev.to/bgoonz)\ -NOOPENER : [Instagram](https://www.instagram.com/bgoonz/?hl=en)\ -NOOPENER : [Youtube](https://www.youtube.com/channel/UC9-rYyUMsnEBK8G8fCyrXXA)\ -NOOPENER : [GitHub](https://github.com/bgoonz)\ -NOOPENER : [LinkedIn](https://www.linkedin.com/in/bryan-guner-046199128/)\ -NOOPENER : [Twitter](https://twitter.com/bgooonz)\ -NOOPENER : [BLM](https://optimistic-lewin-8586ae.netlify.app/blm.zip)\ -NOOPENER : [Medium](https://bryanguner.medium.com/)\ -NOOPENER : [Go To Web Audio Daw](https://mihirbegmusiclab.netlify.app/)\ -NOOPENER : [Contact](https://sidebar-blog.netlify.app/contact/)\ -NOOPENER : [Github-Advanced-Search](https://github.com/search/advanced)\ -NOOPENER : [PotluckPlanner](https://potluck-landing.netlify.app/)\ -NOOPENER : [Setup Checker](https://github.com/bgoonz/web-dev-setup-checker)\ -NOOPENER : [Job Search Resources](https://determined-dijkstra-ee7390.netlify.app/)\ -NOOPENER : [Ternary 2 If Else](https://ternary42.netlify.app/)\ -NOOPENER : [Text Tools](https://devtools42.netlify.app/)\ -NOOPENER : [Github HTML Previewer](https://githtmlpreview.netlify.app/)\ -NOOPENER : [Wordpress Blog](https://web-dev-hub.com/)\ -NOOPENER : [Blog Backup](https://bgoonz-blog-v3-0.netlify.app/)\ -NOOPENER : [Condensed -Portfolio](https://bg-portfolio.netlify.app/)\ -NOOPENER : [SearchAwesome](https://bgoonz.github.io/searchAwesome/)\ -NOOPENER : [WebAudioLab](https://panoramic-eggplant-452e4.netlify.app/)\ -NOOPENER : [Meditation App](https://meditate42app.netlify.app/)\ -NOOPENER : [Potluck Planner](https://potluck-landing.netlify.app/)\ -NOOPENER : [Projects](https://project-portfolio42.netlify.app/)\ -NOOPENER : [OG-Blog](https://web-dev-resource-hub.netlify.app/)\ -NOOPENER : [Resource-Archive-Server](https://github.com/bgoonz/Learning-Assets)\ -NOOPENER : [Archive](https://github.com/bgoonz/UsefulResourceRepo2.0)\ -NOOPENER : [nodejs](https://bgoonz-blog.netlify.app/docs/articles/nodejs/)\ -NOOPENER : [platform docs](https://bgoonz-blog.netlify.app/blog/platform-docs/)\ -NOOPENER : [ds-algo](https://bgoonz-blog.netlify.app/docs/articles/ds-algo-overview/)\ -NOOPENER : [Blog-Post-Archive](https://bgoonz.blogspot.com/)\ -NOOPENER : [Blog](https://bgoonz-blog.netlify.app/blog/)\ -NOOPENER : [Python](https://bgoonz-blog.netlify.app/docs/python/python-ds) -======= XFN / Rel attr. (Xhtml Friends Network) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ NOFOLLOW: [byfreefind](https://www.freefind.com/)\ NOFOLLOW: [search engine](https://www.freefind.com/)\ @@ -339,107 +300,105 @@ NOOPENER : [Blog-Post-Archive](https://bgoonz.blogspot.com/)\ NOOPENER : [Blog](https://bgoonz-blog.netlify.app/blog/)\ NOOPENER : [Python](https://bgoonz-blog.netlify.app/docs/python/python-ds) -> > > > > > > af65185bd (-update) - HTML. --- -**

        ** I am a musician, electrical engineer & web developer +**

        ** I am a musician, electrical engineer & web developer -**

        ** A passionate student of web development from New Jersey U.S.A +**
        ** A passionate student of web development from New Jersey U.S.A -**

        ** A Quick Guide To Big O +**

        ** A Quick Guide To Big O -**

        ** Python Guide +**

        ** Python Guide -**

        ** Guitar Effects Triggering w DTW +**

        ** Guitar Effects Triggering w DTW -**

        ** Beginner Guide React +**

        ** Beginner Guide React -**

        ** Scope & Closure +**

        ** Scope & Closure -**

        ** My Medium Blog +**

        ** My Medium Blog -**

        ** Current Interests +**

        ** Current Interests -**

        ** Angolia +**

        ** Angolia -**

        ** Full Text Search +**

        ** Full Text Search **

        ** -**

        ** Convolutional Neural Networks +**

        ** Convolutional Neural Networks -**

        ** Jamstack +**

        ** Jamstack -**

        ** Why Jamstack +**

        ** Why Jamstack -**

        ** Asynchronous JavaScript +**

        ** Asynchronous JavaScript -**

        ** NJ Devils +**

        ** NJ Devils -**

        ** New Jersey Devils Hockey Team +**

        ** New Jersey Devils Hockey Team -**

        ** (Hockey in general) +**

        ** (Hockey in general) -**

        ** Team identity +**

        ** Team identity -**

        ** ITER Fusion Reactor Experiment (Southern France) +**

        ** ITER Fusion Reactor Experiment (Southern France) -**

        ** Break Even Nuclear Fusion Candidate +**

        ** Break Even Nuclear Fusion Candidate -**

        ** Resume & Portfolio +**

        ** Resume & Portfolio -**

        ** Resume +**

        ** Resume -**

        ** Showcase +**

        ** Showcase -**

        ** Blog-Archive-And-Mini-Projects +**

        ** Blog-Archive-And-Mini-Projects -**

        ** Web Audio DAW +**

        ** Web Audio DAW -**

        ** Quick Links +**

        ** Quick Links -**

        ** About +**

        ** About -**

        ** Articles +**

        ** Articles -**

        ** Audio +**

        ** Audio -**

        ** Community +**

        ** Community -**

        ** Content +**

        ** Content -**

        ** Documentation +**

        ** Documentation -**

        ** FAQ +**

        ** FAQ -**

        ** Javascript +**

        ** Javascript -**

        ** Interactive Examples +**

        ** Interactive Examples -**

        ** Medium +**

        ** Medium -**

        ** Quick Reference +**

        ** Quick Reference -**

        ** React +**

        ** React -**

        ** Tools +**

        ** Tools -**

        ** My Python Docs +**

        ** My Python Docs -**

        ** Contact +**

        ** Contact -**

        ** Current local time inNew York City, United States +**

        ** Current local time inNew York City, United States --- -| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | +| H1 | H2 | H3 | H4 | H5 | H6 ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | | --- | --- | --- | --- | --- | ------------------------------------------------------------------------------- | | 3 | 10 | 29 | 1 | 0 | 1 | -IMAGES ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +IMAGES ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 26 without ALT\ @@ -457,110 +416,110 @@ Analyze and optimize your images with Images to complete | [logo-circle.png](https://d33wubrfki0l68.cloudfront.net/71199c39f8515c2ec6a7db98b837a0f39887ecc3/5558d/images/logo-circle.png)\ -ALT: webdevhub logo\ -Title: /\ +ALT: webdevhub logo\ +Title: /\ | | [gmail.png](https://img.icons8.com/color/96/000000/gmail.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [youtube.png](https://img.icons8.com/color/96/000000/youtube.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [instagram-new.png](https://img.icons8.com/color/96/000000/instagram-new.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [medium-logo.png](https://img.icons8.com/color/96/000000/medium-logo.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [deploy-status](https://api.netlify.com/api/v1/badges/a1b7ee1a-11a7-4bd2-a341-2260656e216f/deploy-status)\ -ALT: Netlify Status\ -Title: /\ +ALT: Netlify Status\ +Title: /\ | | [graph](https://activity-graph.herokuapp.com/graph?username=bgoonz&custom_title=This%20is%20Bryans%20Activity&hide_border=true&theme=chartreuse-dark)\ -ALT: Bryans github activity graph\ -Title: /\ +ALT: Bryans github activity graph\ +Title: /\ | | [my-back.png](https://d33wubrfki0l68.cloudfront.net/5526a12bf60878b9f11c4907281345111ecb1b23/e8d70/images/my-back.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [smiling-maple.png](https://d33wubrfki0l68.cloudfront.net/b7d9a8db0d3618dc455abcd5a1eba992281ab78a/2f5a7/images/smiling-maple.png)\ -ALT: python\ -Title: /\ +ALT: python\ +Title: /\ | | [panoramic-owl.png](https://d33wubrfki0l68.cloudfront.net/0632d060c928c60c91038c13991f85f0928bd723/edbf6/images/panoramic-owl.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [successful-panda.gif](https://d33wubrfki0l68.cloudfront.net/a37b8bc089cdd775711785baf935f9b1c4e732b0/0b88f/images/successful-panda.gif)\ -ALT: img of dtw\ -Title: /\ +ALT: img of dtw\ +Title: /\ | | [pleasant-birch.png](https://d33wubrfki0l68.cloudfront.net/f318a0bdc5403fb9b59683b46e3c9ec2d75d2ed2/7de75/images/pleasant-birch.png)\ -ALT: img of react\ -Title: /\ +ALT: img of react\ +Title: /\ | | [curious-mustard.png](https://d33wubrfki0l68.cloudfront.net/b24a47b5d40d76579313869a8108fceea115f892/df3e5/images/curious-mustard.png)\ -ALT: Every idea needs a medium\ -Title: /\ +ALT: Every idea needs a medium\ +Title: /\ | | [spectacular-turmeric.png](https://d33wubrfki0l68.cloudfront.net/beba3d8052852cedc7fd41d9d05b4dffd4ea1136/d32f7/images/spectacular-turmeric.png)\ -ALT: angolia\ -Title: /\ +ALT: angolia\ +Title: /\ | | [neural.png](https://d33wubrfki0l68.cloudfront.net/589475503098710e5f2f3c1a381015f69e6b4760/0be4d/images/neural.png)\ -ALT: neural networks\ -Title: /\ +ALT: neural networks\ +Title: /\ | | [neural.PNG](https://bgoonz-blog.netlify.app/_static/app-assets/neural.PNG)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [jamstack.png](https://d33wubrfki0l68.cloudfront.net/f776b2f35588e0ab71789925ce9564924154c4cf/df9d3/images/jamstack.png)\ -ALT: jamstack\ -Title: /\ +ALT: jamstack\ +Title: /\ | | [eventloop.gif](https://d33wubrfki0l68.cloudfront.net/fb22b10eaa16e4ac0690115bf6c6987350d38d4b/13c10/images/eventloop.gif)\ -ALT: lorem-ipsum\ -Title: /\ +ALT: lorem-ipsum\ +Title: /\ | | [njdevils.jpg](https://d33wubrfki0l68.cloudfront.net/4e0beaeece78f366615c0db8561a1987efcded63/0652b/images/njdevils.jpg)\ -ALT: nj-devils\ -Title: /\ +ALT: nj-devils\ +Title: /\ | | [300px-OldDevils.png](https://upload.wikimedia.org/wikipedia/en/thumb/d/da/OldDevils.png/300px-OldDevils.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [iter-zoomed.png](https://d33wubrfki0l68.cloudfront.net/ab7369240011a9d7c48d46bbac2252abb70a0367/07847/images/iter-zoomed.png)\ -ALT: lorem-ipsum\ -Title: /\ +ALT: lorem-ipsum\ +Title: /\ | | [resume.jpg](https://d33wubrfki0l68.cloudfront.net/068b96ce83d71afa281886bfdb23aebb7bc35115/5f828/images/resume.jpg)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [My Post.png](https://bgoonz-blog.netlify.app/images/My%20Post.png)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [lambda-demo1.gif](https://bgoonz-blog.netlify.app/_static/app-assets/lambda-demo1.gif)\ -ALT: /\ -Title: /\ +ALT: /\ +Title: /\ | | [goals.jpg](https://d33wubrfki0l68.cloudfront.net/e5828552ff6b5743ed241d9c926e60eb925dde97/8dbbf/images/goals.jpg)\ -ALT: medium\ -Title: /\ +ALT: medium\ +Title: /\ | | [blm-blue-round.png](https://tinify-bucket.s3-us-west-1.amazonaws.com/blm-blue-round.png)\ -ALT: Black Lives Matter Badge\ -Title: / | +ALT: Black Lives Matter Badge\ +Title: / | -LINKS ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ +LINKS ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png)\ 137 unique\ @@ -577,346 +536,346 @@ without TITLE\ LINKS | Undefined (href link is empty)\ -Title: /\ +Title: /\ | | # (anchor)\ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | [/](https://bgoonz-blog.netlify.app/)\ -Title: /\ +Title: /\ | | [//pdfcrowd.com/url_to_pdf/?](https://pdfcrowd.com/url_to_pdf/?)\ -Title: /\ +Title: /\ | | [/angolia](https://bgoonz-blog.netlify.app/angolia)\ -Title: /\ +Title: /\ | | [/blog/](https://bgoonz-blog.netlify.app/blog/)\ -Title: /\ +Title: /\ | | [/blog/platform-docs/](https://bgoonz-blog.netlify.app/blog/platform-docs/)\ -Title: /\ +Title: /\ | | [/blogWcomments/](https://bgoonz-blog.netlify.app/blogWcomments/)\ -Title: /\ +Title: /\ | | [/docs](https://bgoonz-blog.netlify.app/docs)\ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | [/docs/about/](https://bgoonz-blog.netlify.app/docs/about/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/articles/](https://bgoonz-blog.netlify.app/docs/articles/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/articles/ds-algo-overview/](https://bgoonz-blog.netlify.app/docs/articles/ds-algo-overview/)\ -Title: /\ +Title: /\ | | [/docs/articles/nodejs/](https://bgoonz-blog.netlify.app/docs/articles/nodejs/)\ -Title: /\ +Title: /\ | | [/docs/audio/](https://bgoonz-blog.netlify.app/docs/audio/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/audio/audio](https://bgoonz-blog.netlify.app/docs/audio/audio)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/audio/dfft](https://bgoonz-blog.netlify.app/docs/audio/dfft)\ -Title: /\ +Title: /\ | | [/docs/community/](https://bgoonz-blog.netlify.app/docs/community/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/content/](https://bgoonz-blog.netlify.app/docs/content/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/docs/](https://bgoonz-blog.netlify.app/docs/docs/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/faq/](https://bgoonz-blog.netlify.app/docs/faq/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/faq/contact](https://bgoonz-blog.netlify.app/docs/faq/contact)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/gallery](https://bgoonz-blog.netlify.app/docs/gallery)\ -Title: /\ +Title: /\ | | [/docs/interact/](https://bgoonz-blog.netlify.app/docs/interact/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/javascript/](https://bgoonz-blog.netlify.app/docs/javascript/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/medium/](https://bgoonz-blog.netlify.app/docs/medium/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/python/](https://bgoonz-blog.netlify.app/docs/python/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/python/python-ds](https://bgoonz-blog.netlify.app/docs/python/python-ds)\ -Title: /\ +Title: /\ | | [/docs/quick-reference/](https://bgoonz-blog.netlify.app/docs/quick-reference/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/react/](https://bgoonz-blog.netlify.app/docs/react/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/sitemap](https://bgoonz-blog.netlify.app/docs/sitemap)\ -Title: /\ +Title: /\ | | [/docs/tools](https://bgoonz-blog.netlify.app/docs/tools)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/docs/tools/](https://bgoonz-blog.netlify.app/docs/tools/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/jamstack](https://bgoonz-blog.netlify.app/jamstack)\ -Title: /\ +Title: /\ | | [/lorem-ipsum](https://bgoonz-blog.netlify.app/lorem-ipsum)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [/mailto:bryan.guner@gmail.com](https://bgoonz-blog.netlify.app/mailto:bryan.guner@gmail.com)\ -Title: /\ +Title: /\ | | [/neural networks](https://bgoonz-blog.netlify.app/neural%20networks)\ -Title: /\ +Title: /\ | | [/showcase](https://bgoonz-blog.netlify.app/showcase)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | [http://blmbadge.unicornplatform.com](http://blmbadge.unicornplatform.com/)\ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | We found 3 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | [https://www.freefind.com](https://www.freefind.com/)\ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | We found 2 more occurence(s) of this link. | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | \ -Title: /\ +Title: /\ | | mailto:bryan.guner@gmail.com (email)\ -Title: / | +Title: / | -OPEN GRAPH (Facebook) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +OPEN GRAPH (Facebook) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | og:type\ website | @@ -945,7 +904,7 @@ my resource sharing and blog site ... centered mostly on web development and jus [DROicc16](https://mugshotbot.com/m/DROicc16)\ | -TWITTER ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +TWITTER ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | twitter:card\ summary_large_image | @@ -988,12 +947,12 @@ my resource sharing and blog site ... centered mostly on web development and jus | twitter:card\ summary_large_image | -Image Source ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Image Source ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | No IMAGE_SRC has been found | -Schema.org (itemtype only) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) +Schema.org (itemtype only) ![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/help-icon-i.png) | No DATA has been found for Schema.org (itemtype only) | -[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/no-logo.png)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Click here to check **Schema.org structure** of this page (Google validator)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) +[![](chrome-extension://bjogjfinolnhfhkbipphpdlldadpnmhc/img/tools/no-logo.png)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1)[Click here to check **Schema.org structure** of this page (Google validator)](https://search.google.com/test/rich-results?url=https%3A%2F%2Fbgoonz-blog.netlify.app%2F&user_agent=1) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/articles/anatomy-of-search-engine.md.md b/notes/BGOONZ_BLOG_2.0.wiki/articles/anatomy-of-search-engine.md.md index 1f882ef2f5..86538eaa63 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/articles/anatomy-of-search-engine.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/articles/anatomy-of-search-engine.md.md @@ -26,15 +26,9 @@ Computer Science Department, Stanford University, Stanford, CA 94305 ### Abstract > In this paper, we present Google, a prototype of a large-scale search engine which makes heavy use of the structure present in hypertext. Google is designed to crawl and index the Web efficiently and produce much more satisfying search results than existing systems. The prototype with a full text and hyperlink database of at least 24 million pages is available at [http://google.stanford.edu/](http://google.stanford.edu/) -> <<<<<<< HEAD ->        To engineer a search engine is a challenging task. Search engines index tens to hundreds of millions of web pages involving a comparable number of distinct terms. They answer tens of millions of queries every day. Despite the importance of large-scale search engines on the web, very little academic research has been done on them. Furthermore, due to rapid advance in technology and web proliferation, creating a web search engine today is very different from three years ago. This paper provides an in-depth description of our large-scale web search engine -- the first such detailed public description we know of to date. ->        Apart from the problems of scaling traditional search techniques to data of this magnitude, there are new technical challenges involved with using the additional information present in hypertext to produce better search results. This paper addresses this question of how to build a practical large-scale system which can exploit the additional information present in hypertext. Also we look at the problem of how to effectively deal with uncontrolled hypertext collections where anyone can publish anything they want. -> ======= -> To engineer a search engine is a challenging task. Search engines index tens to hundreds of millions of web pages involving a comparable number of distinct terms. They answer tens of millions of queries every day. Despite the importance of large-scale search engines on the web, very little academic research has been done on them. Furthermore, due to rapid advance in technology and web proliferation, creating a web search engine today is very different from three years ago. This paper provides an in-depth description of our large-scale web search engine -- the first such detailed public description we know of to date. +> To engineer a search engine is a challenging task. Search engines index tens to hundreds of millions of web pages involving a comparable number of distinct terms. They answer tens of millions of queries every day. Despite the importance of large-scale search engines on the web, very little academic research has been done on them. Furthermore, due to rapid advance in technology and web proliferation, creating a web search engine today is very different from three years ago. This paper provides an in-depth description of our large-scale web search engine -- the first such detailed public description we know of to date. > Apart from the problems of scaling traditional search techniques to data of this magnitude, there are new technical challenges involved with using the additional information present in hypertext to produce better search results. This paper addresses this question of how to build a practical large-scale system which can exploit the additional information present in hypertext. Also we look at the problem of how to effectively deal with uncontrolled hypertext collections where anyone can publish anything they want. > -> > > > > > > af65185bd (-update) -> > **Keywords**: World Wide Web, Search Engines, Information Retrieval, PageRank, Google ## 1\. Introduction @@ -56,13 +50,8 @@ These tasks are becoming increasingly difficult as the Web grows. However, hardw #### 1.3.1 Improved Search Quality -<<<<<<< HEAD -Our main goal is to improve the quality of web search engines. In 1994, some people believed that a complete search index would make it possible to find anything easily. According to [Best of the Web 1994 -- Navigators,](http://botw.org/1994/awards/navigators.html)  "The best navigation service should make it easy to find almost anything on the Web (once all the data is entered)."  However, the Web of 1997 is quite different. Anyone who has used a search engine recently, can readily testify that the completeness of the index is not the only factor in the quality of search results. "Junk results" often wash out any results that a user is interested in. In fact, as of November 1997, only one of the top four commercial search engines finds itself (returns its own search page in response to its name in the top ten results). One of the main causes of this problem is that the number of documents in the indices has been increasing by many orders of magnitude, but the user's ability to look at documents has not. People are still only willing to look at the first few tens of results. Because of this, as the collection size grows, we need tools that have very high precision (number of relevant documents returned, say in the top tens of results). Indeed, we want our notion of "relevant" to only include the very best documents since there may be tens of thousands of slightly relevant documents. This very high precision is important even at the expense of recall (the total number of relevant documents the system is able to return). There is quite a bit of recent optimism that the use of more hypertextual information can help improve search and other applications \[[Marchiori 97](http://infolab.stanford.edu/~backrub/google.html#ref)\] \[[Spertus 97](http://infolab.stanford.edu/~backrub/google.html#ref)\] \[[Weiss 96](http://infolab.stanford.edu/~backrub/google.html#ref)\] \[[Kleinberg 98](http://infolab.stanford.edu/~backrub/google.html#ref)\]. In particular, link structure \[[Page 98](http://infolab.stanford.edu/~backrub/google.html#ref)\] and link text provide a lot of information for making relevance judgments and quality filtering. Google makes use of both link structure and anchor text (see Sections [2.1](http://infolab.stanford.edu/~backrub/google.html#pr) and [2.2](http://infolab.stanford.edu/~backrub/google.html#anchor)). -======= Our main goal is to improve the quality of web search engines. In 1994, some people believed that a complete search index would make it possible to find anything easily. According to [Best of the Web 1994 -- Navigators,](http://botw.org/1994/awards/navigators.html) "The best navigation service should make it easy to find almost anything on the Web (once all the data is entered)." However, the Web of 1997 is quite different. Anyone who has used a search engine recently, can readily testify that the completeness of the index is not the only factor in the quality of search results. "Junk results" often wash out any results that a user is interested in. In fact, as of November 1997, only one of the top four commercial search engines finds itself (returns its own search page in response to its name in the top ten results). One of the main causes of this problem is that the number of documents in the indices has been increasing by many orders of magnitude, but the user's ability to look at documents has not. People are still only willing to look at the first few tens of results. Because of this, as the collection size grows, we need tools that have very high precision (number of relevant documents returned, say in the top tens of results). Indeed, we want our notion of "relevant" to only include the very best documents since there may be tens of thousands of slightly relevant documents. This very high precision is important even at the expense of recall (the total number of relevant documents the system is able to return). There is quite a bit of recent optimism that the use of more hypertextual information can help improve search and other applications \[[Marchiori 97](http://infolab.stanford.edu/~backrub/google.html#ref)\] \[[Spertus 97](http://infolab.stanford.edu/~backrub/google.html#ref)\] \[[Weiss 96](http://infolab.stanford.edu/~backrub/google.html#ref)\] \[[Kleinberg 98](http://infolab.stanford.edu/~backrub/google.html#ref)\]. In particular, link structure \[[Page 98](http://infolab.stanford.edu/~backrub/google.html#ref)\] and link text provide a lot of information for making relevance judgments and quality filtering. Google makes use of both link structure and anchor text (see Sections [2.1](http://infolab.stanford.edu/~backrub/google.html#pr) and [2.2](http://infolab.stanford.edu/~backrub/google.html#anchor)). -> > > > > > > af65185bd (-update) - #### 1.3.2 Academic Search Engine Research Aside from tremendous growth, the Web has also become increasingly commercial over time. In 1993, 1.5% of web servers were on .com domains. This number grew to over 60% in 1997. At the same time, search engines have migrated from the academic domain to the commercial. Up until now most search engine development has gone on at companies with little publication of technical details. This causes search engine technology to remain largely a black art and to be advertising oriented (see [Appendix A](http://infolab.stanford.edu/~backrub/google.html#a)). With Google, we have a strong goal to push more development and understanding into the academic realm. @@ -261,23 +250,13 @@ Lexicon 293 MB -<<<<<<< HEAD -Temporary Anchor Data  -======= -Temporary Anchor Data - -> > > > > > > af65185bd (-update) -> > > > > > > (not in total) +Temporary Anchor Data +(not in total) 6.6 GB -<<<<<<< HEAD -Document Index Incl.  -======= -Document Index Incl. - -> > > > > > > af65185bd (-update) -> > > > > > > Variable Width Data +Document Index Incl. +Variable Width Data 9.7 GB @@ -313,16 +292,8 @@ Number of 404's Table 1. Statistics -<<<<<<< HEAD - -###  5.2 System Performance - -======= - ### 5.2 System Performance -> > > > > > > af65185bd (-update) - It is important for a search engine to crawl and index efficiently. This way information can be kept up to date and major changes to the system can be tested relatively quickly. For Google, the major operations are Crawling, Indexing, and Sorting. It is difficult to measure how long crawling took overall because disks filled up, name servers crashed, or any number of other problems which stopped the system. In total it took roughly 9 days to download the 26 million pages (including errors). However, once the system was running smoothly, it ran much faster, downloading the last 11 million pages in just 63 hours, averaging just over 4 million pages per day or 48.5 pages per second. We ran the indexer and the crawler simultaneously. The indexer ran just faster than the crawlers. This is largely because we spent just enough time optimizing the indexer so that it would not be a bottleneck. These optimizations included bulk updates to the document index and placement of critical data structures on the local disk. The indexer runs at roughly 54 pages per second. The sorters can be run completely in parallel; using four machines, the whole process of sorting takes about 24 hours. ### 5.3 Search Performance diff --git a/notes/BGOONZ_BLOG_2.0.wiki/articles/netlify-tips.md.md b/notes/BGOONZ_BLOG_2.0.wiki/articles/netlify-tips.md.md index 33ee2b0b39..816256b118 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/articles/netlify-tips.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/articles/netlify-tips.md.md @@ -2,41 +2,41 @@ This article provides troubleshooting tips for failing builds in Netlify's build service. -In case your build fails on Netlify, first make sure it builds locally in your own development environment. This is a prerequisite to all of the below suggestions. +In case your build fails on Netlify, first make sure it builds locally in your own development environment. This is a prerequisite to all of the below suggestions. -If your build works locally, the next debugging step is to ensure the package versions we use to build match yours. You can find the settings for these in the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc. That's the leading cause of build failure. +If your build works locally, the next debugging step is to ensure the package versions we use to build match yours. You can find the settings for these in the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc. That's the leading cause of build failure. Once you've considered the most frequently encountered issues listed below, there is some additional reading linked at the bottom of this article which may help you debug in more depth or find answers to less commonly asked questions. ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#command-not-found)Command not found -If your build fails with `jekyll: command not found` or `gulp: command not found` or anything in that pattern, it means that the software required for that command hasn't been installed in your build. You can tell the buildbot to install the software you need by including the proper configuration file, like a `Gemfile` for Ruby programs like `jekyll`, or `package.json` for Node programs like `gulp`. +If your build fails with `jekyll: command not found` or `gulp: command not found` or anything in that pattern, it means that the software required for that command hasn't been installed in your build. You can tell the buildbot to install the software you need by including the proper configuration file, like a `Gemfile` for Ruby programs like `jekyll`, or `package.json` for Node programs like `gulp`. -Check out the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc for more details on how to tell us to install your toolchain. Once we find your configuration file, we'll automatically use it before trying to run your build command. +Check out the [dependency management](https://docs.netlify.com/configure-builds/manage-dependencies/) doc for more details on how to tell us to install your toolchain. Once we find your configuration file, we'll automatically use it before trying to run your build command. -Note that by default the buildbot looks for the configuration file in the root of your repository. If your configuration file is located in a subdirectory, you will need to change your folder structure or [set the site's base directory](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings) to tell us which subdirectory to use. +Note that by default the buildbot looks for the configuration file in the root of your repository. If your configuration file is located in a subdirectory, you will need to change your folder structure or [set the site's base directory](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings) to tell us which subdirectory to use. -## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-command-named-build)Build command named `build` +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-command-named-build)Build command named `build` -Don't name your build command `build` or try to use the [debug build steps to run a build locally](https://github.com/netlify/build-image#running-locally) in our production build environment. This will fail and give you a strange build log. +Don't name your build command `build` or try to use the [debug build steps to run a build locally](https://github.com/netlify/build-image#running-locally) in our production build environment. This will fail and give you a strange build log. -## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-fails-with-exit-status-128)Build fails with `exit status 128` +## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-fails-with-exit-status-128)Build fails with `exit status 128` Typically this means that we don't have permission to clone the repository you are trying to deploy. The usual cause for this is that someone made some changes to settings for the parent organization, or repository, some time after linking the repository to your site. -We only have permission to create a copy of your code when you link the repository. If you are seeing your build fail with `exit status 128` in the deploy log, relinking your repo using our UI is a good first attempt to fix things (go to Site settings > Build & deploy > Continuous deployment > Build settings, select Edit settings, then Link to a different repository). If you do this, please check your webhook settings at your Git provider to be sure you don't have any duplicate Netlify webhooks. +We only have permission to create a copy of your code when you link the repository. If you are seeing your build fail with `exit status 128` in the deploy log, relinking your repo using our UI is a good first attempt to fix things (go to Site settings > Build & deploy > Continuous deployment > Build settings, select Edit settings, then Link to a different repository). If you do this, please check your webhook settings at your Git provider to be sure you don't have any duplicate Netlify webhooks. Permission levels -Your GitHub, Bitbucket, or GitLab user account may not have the privilege level required to link the repo to Netlify, even if you can log in and access it from the Git host's website. You generally need administrative privileges on the repository, owning organization, or both. Related: [documentation about repository permissions and linking](https://docs.netlify.com/configure-builds/repo-permissions-linking/). +Your GitHub, Bitbucket, or GitLab user account may not have the privilege level required to link the repo to Netlify, even if you can log in and access it from the Git host's website. You generally need administrative privileges on the repository, owning organization, or both. Related: [documentation about repository permissions and linking](https://docs.netlify.com/configure-builds/repo-permissions-linking/). ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-fails-on-warning-message)Build fails on warning message In some cases, a build may fail due to a warning message that would not cause a build failure when run locally. This is because some libraries and build tools handle warnings differently when they detect that they are being run in a Continuous Integration (CI) environment. -Like many other CI tools and platforms, Netlify sets a build environment variable, `CI=true`, as a convention to indicate that your build is running in an automated environment. Many libraries use the presence of the `CI` variable to trigger changes in their behavior, such as removing progress spinner animations or user prompts. In some cases, a library may also choose to treat warning messages as errors, failing the build. +Like many other CI tools and platforms, Netlify sets a build environment variable, `CI=true`, as a convention to indicate that your build is running in an automated environment. Many libraries use the presence of the `CI` variable to trigger changes in their behavior, such as removing progress spinner animations or user prompts. In some cases, a library may also choose to treat warning messages as errors, failing the build. -Generally, libraries that choose to fail on warnings presume their users will want to fix the issues causing the warnings. If this isn't practical for your use case, you can override the `CI` variable by adding `CI=''` to the beginning of your site [build command](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings). For example: +Generally, libraries that choose to fail on warnings presume their users will want to fix the issues causing the warnings. If this isn't practical for your use case, you can override the `CI` variable by adding `CI=''` to the beginning of your site [build command](https://docs.netlify.com/configure-builds/get-started/#basic-build-settings). For example: ``` CI='' npm run build @@ -45,63 +45,50 @@ CI='' npm run build "False" isn't always false -<<<<<<< HEAD -Though it seems like the logical opposite of `CI=true`, setting `CI=false` may not work as expected. This is because environment variable values are processed as strings, and many libraries interpret *any* non-empty string value for `CI` as `true`. -======= Though it seems like the logical opposite of `CI=true`, setting `CI=false` may not work as expected. This is because environment variable values are processed as strings, and many libraries interpret _any_ non-empty string value for `CI` as `true`. -> > > > > > > af65185bd (-update) - ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#case-sensitivity)Case sensitivity -If you develop on Windows or OSX, and your code includes something like `jQuery/jquery.js` --- the Netlify build may fail as the file system used in Netlify builds is case sensitive while your build environment is not. The error messages that result may not clearly indicate this! +If you develop on Windows or OSX, and your code includes something like `jQuery/jquery.js` --- the Netlify build may fail as the file system used in Netlify builds is case sensitive while your build environment is not. The error messages that result may not clearly indicate this! -To effectively change case of a file stored in Git from your case insensitive local environment, it may be necessary to `git mv` or `git rm` and then add the file again, as renaming and committing will not have the desired effect. +To effectively change case of a file stored in Git from your case insensitive local environment, it may be necessary to `git mv` or `git rm` and then add the file again, as renaming and committing will not have the desired effect. ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#large-files-or-sites)Large files or sites -Files over 10 MB in size are not well-supported by our CDN and may fail to upload to our system, causing your entire deploy to fail. You should host large content elsewhere, such as YouTube embedded videos. +Files over 10 MB in size are not well-supported by our CDN and may fail to upload to our system, causing your entire deploy to fail. You should host large content elsewhere, such as YouTube embedded videos. Sites with tens of thousands of html files can lead to long processing times. This shouldn't cause the deploy to fail, but even a "quick" manual deploy can take quite awhile (many minutes) to finish if you have tens of thousands of files. ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#post-processing)Post processing -There are some situations during build that may lead to a failure in post processing --- many things that fail will lead to a retry; if after 4 retries it still hasn't worked, we fail the deploy. You'll probably need to [contact support](https://www.netlify.com/support/) in this case to get more details about the error, unless you want to follow the next bullet point's advice. +There are some situations during build that may lead to a failure in post processing --- many things that fail will lead to a retry; if after 4 retries it still hasn't worked, we fail the deploy. You'll probably need to [contact support](https://www.netlify.com/support/) in this case to get more details about the error, unless you want to follow the next bullet point's advice. -You may try disabling asset optimization (in Site settings > Build & deploy > Post processing > Asset optimization) if your site fails deploy during post processing or some of your assets end up with nonsense paths on the portion of our CDN hosted on Amazon CloudFront. For instance, if you find an incorrect CloudFront URL with a `{$rootfolder}` component in it, you'll need to disable CSS bundling and minification to work around this, or review your CSS as there is likely an incorrect reference causing the behavior. +You may try disabling asset optimization (in Site settings > Build & deploy > Post processing > Asset optimization) if your site fails deploy during post processing or some of your assets end up with nonsense paths on the portion of our CDN hosted on Amazon CloudFront. For instance, if you find an incorrect CloudFront URL with a `{$rootfolder}` component in it, you'll need to disable CSS bundling and minification to work around this, or review your CSS as there is likely an incorrect reference causing the behavior. -Redirects or Custom header rules that we can't process at all are mentioned near the end of the build log and in the Deploy Summary for a deploy, but will not cause the build or deploy to fail. +Redirects or Custom header rules that we can't process at all are mentioned near the end of the build log and in the Deploy Summary for a deploy, but will not cause the build or deploy to fail. ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#build-cache)Build cache -In order to make builds run faster, we cache certain directories created when we [install your dependencies](https://docs.netlify.com/configure-builds/manage-dependencies/#dependency-cache). +In order to make builds run faster, we cache certain directories created when we [install your dependencies](https://docs.netlify.com/configure-builds/manage-dependencies/#dependency-cache). -If a build fails, it's worth retrying with a cleared build cache to check if this works better. You can do this by selecting the Retry deploy button in the header of a failed deploy log page, and then selecting Clear cache and deploy site. +If a build fails, it's worth retrying with a cleared build cache to check if this works better. You can do this by selecting the Retry deploy button in the header of a failed deploy log page, and then selecting Clear cache and deploy site. ![](https://d33wubrfki0l68.cloudfront.net/6b862d5d0fe47bb42d9c0582f25dec8d7f47e4b5/00d94/images/configure-builds-retry-deploy-dropdown.png) ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#enqueued-builds)Enqueued builds -<<<<<<< HEAD -Builds may be enqueued for any of the three reasons described below. Visit our Forums for a verified Support Guide on reducing build queueing by [optimizing *what* you build](https://answers.netlify.com/t/common-issue-how-can-i-optimize-my-netlify-build-time/3907). - -- System queue: Builds enter a system queue when the number of builds across all customers exceeds the current capacity on the build network. This triggers an increase in system capacity, so enqueued builds may start building as capacity increases as well as when other builds complete. To learn how to reduce your team's exposure to system build queues, [contact sales](https://www.netlify.com/enterprise/contact/). -- Team queue: Builds enter your team queue when the number of concurrent builds across all sites on your team exceeds your team's [build capacity](https://docs.netlify.com/accounts-and-billing/billing/#builds-usage). Such builds appear in your team's [Builds page](https://docs.netlify.com/monitor-sites/monitor-builds/) with the label: Enqueued: Awaiting Capacity. You can select the Manage build capacity button on that page to increase team build capacity. If you have a build that you'd like to build right away, you can [prioritize](https://docs.netlify.com/monitor-sites/monitor-builds/#prioritize-a-build) it. *(This feature may not be available on all [plans](https://www.netlify.com/pricing/).)* You can also [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) unneeded team builds to move other builds up in the queue. -- # Context queue: When multiple builds are triggered on the same site, in an *identical* [deploy context](https://docs.netlify.com/site-deploys/overview/#deploy-contexts) (such as the same Deploy Preview number, or the same branch deploy) these builds enter a context queue to ensure they complete sequentially. When the current build completes, the newest enqueued build of identical context begins, skipping any others in the same context queue. To start the newest enqueued build in a given context, you can [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) the current active build of identical context. - - Builds may be enqueued for any of the three reasons described below. Visit our Forums for a verified Support Guide on reducing build queueing by [optimizing _what_ you build](https://answers.netlify.com/t/common-issue-how-can-i-optimize-my-netlify-build-time/3907). +Builds may be enqueued for any of the three reasons described below. Visit our Forums for a verified Support Guide on reducing build queueing by [optimizing _what_ you build](https://answers.netlify.com/t/common-issue-how-can-i-optimize-my-netlify-build-time/3907). - System queue: Builds enter a system queue when the number of builds across all customers exceeds the current capacity on the build network. This triggers an increase in system capacity, so enqueued builds may start building as capacity increases as well as when other builds complete. To learn how to reduce your team's exposure to system build queues, [contact sales](https://www.netlify.com/enterprise/contact/). - Team queue: Builds enter your team queue when the number of concurrent builds across all sites on your team exceeds your team's [build capacity](https://docs.netlify.com/accounts-and-billing/billing/#builds-usage). Such builds appear in your team's [Builds page](https://docs.netlify.com/monitor-sites/monitor-builds/) with the label: Enqueued: Awaiting Capacity. You can select the Manage build capacity button on that page to increase team build capacity. If you have a build that you'd like to build right away, you can [prioritize](https://docs.netlify.com/monitor-sites/monitor-builds/#prioritize-a-build) it. _(This feature may not be available on all [plans](https://www.netlify.com/pricing/).)_ You can also [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) unneeded team builds to move other builds up in the queue. - Context queue: When multiple builds are triggered on the same site, in an _identical_ [deploy context](https://docs.netlify.com/site-deploys/overview/#deploy-contexts) (such as the same Deploy Preview number, or the same branch deploy) these builds enter a context queue to ensure they complete sequentially. When the current build completes, the newest enqueued build of identical context begins, skipping any others in the same context queue. To start the newest enqueued build in a given context, you can [cancel](https://docs.netlify.com/site-deploys/manage-deploys/#cancel-a-deploy) the current active build of identical context. - > > > > > > > af65185bd (-update) ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#deploy-previews-and-bitbucket)Deploy Previews and Bitbucket -Due to limitations with Bitbucket's API, we cannot build Deploy Previews for pull requests on Bitbucket repositories. This is specifically due to the fact that they do not send complete refs in their webhooks for pull requests. Bitbucket has an [open issue](https://bitbucket.org/site/master/issues/5814/refify-pull-requests-by-making-them-a-ref) about this. +Due to limitations with Bitbucket's API, we cannot build Deploy Previews for pull requests on Bitbucket repositories. This is specifically due to the fact that they do not send complete refs in their webhooks for pull requests. Bitbucket has an [open issue](https://bitbucket.org/site/master/issues/5814/refify-pull-requests-by-making-them-a-ref) about this. ## [#](https://docs.netlify.com/configure-builds/troubleshooting-tips/?_ga=2.84803921.938315912.1639898242-345723907.1639767886#more-resources)More resources -Though our build environment works for most build pipelines, there are a few special cases that may cause you some difficulty. To get more context on how our builds work, check out [this blog post on how our build bots build your site](https://www.netlify.com/blog/2016/10/18/how-our-build-bots-build-sites/). You can also test your build locally using our open source [build image](https://github.com/netlify/build-image). +Though our build environment works for most build pipelines, there are a few special cases that may cause you some difficulty. To get more context on how our builds work, check out [this blog post on how our build bots build your site](https://www.netlify.com/blog/2016/10/18/how-our-build-bots-build-sites/). You can also test your build locally using our open source [build image](https://github.com/netlify/build-image). -If your issue doesn't seem to be addressed above, you can visit our [Support Forums](https://answers.netlify.com/categories) to browse posts about common issues or start a new discussion. Many questions about specific build scenarios have also been [asked and answered on StackOverflow](https://stackoverflow.com/questions/tagged/netlify). +If your issue doesn't seem to be addressed above, you can visit our [Support Forums](https://answers.netlify.com/categories) to browse posts about common issues or start a new discussion. Many questions about specific build scenarios have also been [asked and answered on StackOverflow](https://stackoverflow.com/questions/tagged/netlify). diff --git a/notes/BGOONZ_BLOG_2.0.wiki/articles/wordpress-vs-headless-cms.md.md b/notes/BGOONZ_BLOG_2.0.wiki/articles/wordpress-vs-headless-cms.md.md index eeabfa9db1..12987c9952 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/articles/wordpress-vs-headless-cms.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/articles/wordpress-vs-headless-cms.md.md @@ -1,10 +1,10 @@ ## Introduction: -- _What is a Content Management System (CMS)?_ +- _What is a Content Management System (CMS)?_ -A content management system, or CMS, is a software program that allows users to create and maintain websites without having to write them from the ground up or even knowing how to code. +A content management system, or CMS, is a software program that allows users to create and maintain websites without having to write them from the ground up or even knowing how to code. -A content management system (CMS) allows you to generate, manage, change, and publish material using a user-friendly interface. Rather than coding, you may change the look and functionality of your site by downloading or purchasing templates and plugins. You can have several users collaborating in the same tool's backend, among other things. +A content management system (CMS) allows you to generate, manage, change, and publish material using a user-friendly interface. Rather than coding, you may change the look and functionality of your site by downloading or purchasing templates and plugins. You can have several users collaborating in the same tool's backend, among other things. - _Evolution of CMS: The new scaffolding_ @@ -16,7 +16,7 @@ Now fast forward to 2010s, the DXP platform emerged, where we could create and d We have come along with CMSs indeed. -## WordPress CMS: The choice of an all-inclusive frontend and backend +## WordPress CMS: The choice of an all-inclusive frontend and backend WordPress is an open-source platform for building websites. WordPress is a content management system (CMS) developed in PHP that uses a MySQL database. @@ -24,7 +24,7 @@ Any website that uses WordPress as its content management system is referred to Bear in mind that some WP REST API and AngularJS expertise will be required to build a WordPress-powered frontend application. On the other hand, with WordPress as the backend, you will be able to create any application. With a combination of either of these, you can deviate from the common WordPress theme and admin model. (Keep in mind you will need the help of wireframes forbuilding a WordPress-powered frontend application) -There are a few things you should know if you're just getting started with WordPress. To begin, you must first understand the distinction between WordPress.com and WordPress.org. +There are a few things you should know if you're just getting started with WordPress. To begin, you must first understand the distinction between WordPress.com and WordPress.org. If you're unfamiliar with WordPress, the distinction between WordPress.com and WordPress.org might be perplexing. @@ -104,7 +104,7 @@ Since the content in your headless CMS isn't tied to any particular front-end di Headless CMS isn't just about textual content anymore. It now integrates other forms of media like audio and video. -### The Challenges of Using a Headless CMS +### The Challenges of Using a Headless CMS - Rigid presentation @@ -122,7 +122,7 @@ To adapt to managing various systems, a headless CMS team would need to extend i Because this architecture does not include notions such as sitemaps and pages, content editors may need to adapt to the unique content structure on the website or other channels. -### Use Cases for A Headless CMS +### Use Cases for A Headless CMS Headless CMS can be ideal for the following use cases: @@ -304,7 +304,7 @@ This is especially true in a disconnected setup. You may wind up with two system Users must be credentialed differently in a headless CMS than in a linked CMS. This might be a time-consuming process, but it does result in a more secure workplace. -### Use Cases for a WordPress Headless CMS +### Use Cases for a WordPress Headless CMS A WP Headless CMS is best used for @@ -350,13 +350,13 @@ A team that requires the headless version will appreciate the flexibility this g At the same time, you're still entrusting transaction processing to your headless eCommerce solution, allowing you to make use of their backend system. -You can find some examples of headless e-commerce websites [here](https://www.solutelabs.com/blog/top-10-headless-ecommerce-websites-built-on-jamstack)​ +You can find some examples of headless e-commerce websites [here](https://www.solutelabs.com/blog/top-10-headless-ecommerce-websites-built-on-jamstack)​ -## Popular Headless CMS's: +## Popular Headless CMS's: There are many popular headless CMS's in the market right now, like Magnolia, Agility, or even Contentful. But Sanity takes the cake in terms of fame. It is arguably one of the most popular Headless CMS's. Hence, it only fits that we talk about it. -### Sanity: A Headless CMS +### Sanity: A Headless CMS Sanity Studio is a headless real-time CMS built with JavaScript and React that you may modify. @@ -370,7 +370,7 @@ Sanity Studio is a headless real-time CMS built with JavaScript and React that y - JavaScript could be used to provide field validations, arrange documents, and establish starting values in an advanced block editor for structured content. -#### Reasons to opt for Sanity. +#### Reasons to opt for Sanity. - _Easy to get started with_ @@ -402,7 +402,7 @@ Although fundamental JavaScript expertise is required to get started with Sanity Because Sanity is a cloud-hosted CMS with a real-time content studio, all data is instantaneously synchronized. PostgreSQL, ElasticSearch, and JavaScript, and lightning-fast React form the foundation of the system. It saves logical object structures rather than HTML, XML, or rich text in the database. For example, you don't have to read HTML if you want Alexa to read from your text fields. Sanity comes with well-maintained JavaScript, HTML, and PHP clients, allowing you to get up and running quickly with your preferred front-end architecture. -#### Some Cool Projects Powered by Sanity +#### Some Cool Projects Powered by Sanity - _Agnes_ diff --git a/notes/BGOONZ_BLOG_2.0.wiki/bugs-fixes/broken-links.md.md b/notes/BGOONZ_BLOG_2.0.wiki/bugs-fixes/broken-links.md.md index 18e619508c..fbcb4c764a 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/bugs-fixes/broken-links.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/bugs-fixes/broken-links.md.md @@ -18,11 +18,11 @@ We crawl your web site and check all internal broken links in real time. Our spi | Url | Page | Status | Impact | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------- | ------------- | -| image [https://bgoonz-blog...es/console-dir.png](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2Finterview-questions-js%2Fimages%2Fconsole-dir.png) | [https://bgoonz-blog...view-questions-js/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2Finterview-questions-js%2F) | 404 | Medium impact | -| image [https://bgoonz-blog...mages/njdevils.jpg](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fimages%2Fnjdevils.jpg) | [https://bgoonz-blog.netlify.app/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) | 404 | Medium impact | -| link [https://panoramic-eggplant-452e4.netlify.app/](https://error404.atomseo.com/away?to=https%3A%2F%2Fpanoramic-eggplant-452e4.netlify.app%2F) | [https://bgoonz-blog.netlify.app/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) | 404 | Medium impact | -| link [https://goofy-eucli...re-site/index.html](https://error404.atomseo.com/away?to=https%3A%2F%2Fgoofy-euclid-1cd736.netlify.app%2Fcore-site%2Findex.html) | [https://bgoonz-blog.netlify.app/docs/about/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fabout%2F) | 404 | Medium impact | -| image [https://s3-us-west-...7fe37/Untitled.png](https://error404.atomseo.com/away?to=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fbe5715e2-c834-458f-8c5b-ea185717fe37%2FUntitled.png) | [https://bgoonz-blog.../python/python-ds/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fpython%2Fpython-ds%2F) | 403 | Medium impact | +| image [https://bgoonz-blog...es/console-dir.png](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2Finterview-questions-js%2Fimages%2Fconsole-dir.png) | [https://bgoonz-blog...view-questions-js/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2Finterview-questions-js%2F) | 404 | Medium impact | +| image [https://bgoonz-blog...mages/njdevils.jpg](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fimages%2Fnjdevils.jpg) | [https://bgoonz-blog.netlify.app/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) | 404 | Medium impact | +| link [https://panoramic-eggplant-452e4.netlify.app/](https://error404.atomseo.com/away?to=https%3A%2F%2Fpanoramic-eggplant-452e4.netlify.app%2F) | [https://bgoonz-blog.netlify.app/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2F) | 404 | Medium impact | +| link [https://goofy-eucli...re-site/index.html](https://error404.atomseo.com/away?to=https%3A%2F%2Fgoofy-euclid-1cd736.netlify.app%2Fcore-site%2Findex.html) | [https://bgoonz-blog.netlify.app/docs/about/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fabout%2F) | 404 | Medium impact | +| image [https://s3-us-west-...7fe37/Untitled.png](https://error404.atomseo.com/away?to=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fbe5715e2-c834-458f-8c5b-ea185717fe37%2FUntitled.png) | [https://bgoonz-blog.../python/python-ds/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fpython%2Fpython-ds%2F) | 403 | Medium impact | | link[https://bryanguner....------------------](https://error404.atomseo.com/away?to=https%3A%2F%2Fbryanguner.medium.com%2Fhow-to-implement-native-es6-data-structures-using-arrays-objects-ce953b9f6a07%3Fsource%3Dyour_stories_page-------------------------------------) | [https://bgoonz-blog.netlify.app/docs/medium/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fmedium%2F) | 410 | Medium impact | | link[https://bryanguner....-them-b87a2f04d9a6](https://error404.atomseo.com/away?to=https%3A%2F%2Fbryanguner.medium.com%2Frunning-list-of-interesting-articles-tools-and-ideas-as-i-explore-them-b87a2f04d9a6) | [https://bgoonz-blog...pp/blog/my-medium/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fblog%2Fmy-medium%2F) | 410 | Medium impact | | link[https://ecstatic-ja...netlify.app/readme](https://error404.atomseo.com/away?to=https%3A%2F%2Fecstatic-jang-593fd1.netlify.app%2Freadme) | [https://bgoonz-blog.netlify.app/docs/about/](https://error404.atomseo.com/away?to=https%3A%2F%2Fbgoonz-blog.netlify.app%2Fdocs%2Fabout%2F) | 404 | Medium impact | diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/config-info.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/config-info.md.md index 650f7deacf..d8988eec7e 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/config-info.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/config-info.md.md @@ -1,6 +1,6 @@ -Build config validation --- 1 info +Build config validation --- 1 info -[ ](https://docs.travis-ci.com/user/build-config-validation/) +[ ](https://docs.travis-ci.com/user/build-config-validation/) bgoonz/BGOONZ_BLOG_2.0:.travis.yml@0de6597 diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/dependency-graph.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/dependency-graph.md.md index 42b3139f37..7b94877d28 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/dependency-graph.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/dependency-graph.md.md @@ -2,106 +2,106 @@ [Dependencies](https://github.com/bgoonz/BGOONZ_BLOG_2.0/network/dependencies)[Dependents](https://github.com/bgoonz/BGOONZ_BLOG_2.0/network/dependents)[Dependabot](https://github.com/bgoonz/BGOONZ_BLOG_2.0/network/updates) -These dependencies are defined in BGOONZ_BLOG_2.0's manifest files, such as [package.json](https://github.com/bgoonz/BGOONZ_BLOG_2.0/network/dependencies#package.json 'package.json'). +These dependencies are defined in BGOONZ_BLOG_2.0's manifest files, such as [package.json](https://github.com/bgoonz/BGOONZ_BLOG_2.0/network/dependencies#package.json 'package.json'). -Dependencies defined in [package.json](https://github.com/bgoonz/BGOONZ_BLOG_2.0/blob/master/package.json 'package.json') 25 +Dependencies defined in [package.json](https://github.com/bgoonz/BGOONZ_BLOG_2.0/blob/master/package.json 'package.json') 25 -[![@stackbit](https://avatars.githubusercontent.com/u/38996451?s=40&v=4)](https://github.com/stackbit)[stackbit / gatsby-plugin-menus ](https://github.com/stackbit/gatsby-plugin-menus)@stackbit/gatsby-plugin-menus +[![@stackbit](https://avatars.githubusercontent.com/u/38996451?s=40&v=4)](https://github.com/stackbit)[stackbit / gatsby-plugin-menus ](https://github.com/stackbit/gatsby-plugin-menus)@stackbit/gatsby-plugin-menus `0.0.4` -[![@ecomfe](https://avatars.githubusercontent.com/u/2268460?s=40&v=4)](https://github.com/ecomfe)[ecomfe / babel-runtime](https://github.com/ecomfe/babel-runtime) +[![@ecomfe](https://avatars.githubusercontent.com/u/2268460?s=40&v=4)](https://github.com/ecomfe)[ecomfe / babel-runtime](https://github.com/ecomfe/babel-runtime) `6.26.0` -[![@paulmillr](https://avatars.githubusercontent.com/u/574696?s=40&u=7f4396380d73af134b898c8eaf7bb171f448f40f&v=4)](https://github.com/paulmillr)[paulmillr / chokidar](https://github.com/paulmillr/chokidar) +[![@paulmillr](https://avatars.githubusercontent.com/u/574696?s=40&u=7f4396380d73af134b898c8eaf7bb171f448f40f&v=4)](https://github.com/paulmillr)[paulmillr / chokidar](https://github.com/paulmillr/chokidar) `3.4.0` -[![@JedWatson](https://avatars.githubusercontent.com/u/872310?s=40&u=9548676d01f104232ee42e5ac0d985db77e6a5a4&v=4)](https://github.com/JedWatson)[JedWatson / classnames](https://github.com/JedWatson/classnames) +[![@JedWatson](https://avatars.githubusercontent.com/u/872310?s=40&u=9548676d01f104232ee42e5ac0d985db77e6a5a4&v=4)](https://github.com/JedWatson)[JedWatson / classnames](https://github.com/JedWatson/classnames) `2.2.6` -[![@jprichardson](https://avatars.githubusercontent.com/u/150063?s=40&u=8943b7266b8b0b03d4ceb66e275c78b4e0fbff38&v=4)](https://github.com/jprichardson)[jprichardson / node-fs-extra ](https://github.com/jprichardson/node-fs-extra)fs-extra +[![@jprichardson](https://avatars.githubusercontent.com/u/150063?s=40&u=8943b7266b8b0b03d4ceb66e275c78b4e0fbff38&v=4)](https://github.com/jprichardson)[jprichardson / node-fs-extra ](https://github.com/jprichardson/node-fs-extra)fs-extra `7.0.1` -[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby](https://github.com/gatsbyjs/gatsby) +[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby](https://github.com/gatsbyjs/gatsby) `2.25.4` -[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-plugin-react-helmet +[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-plugin-react-helmet `3.3.3` -[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-plugin-sass +[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-plugin-sass `2.8.0` -[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-plugin-typescript +[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-plugin-typescript `2.4.4` -[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-source-filesystem +[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-source-filesystem `2.3.10` -[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-transformer-remark +[![@gatsbyjs](https://avatars.githubusercontent.com/u/12551863?s=40&v=4)](https://github.com/gatsbyjs)[gatsbyjs / gatsby ](https://github.com/gatsbyjs/gatsby)gatsby-transformer-remark `2.8.14` -[![@nodeca](https://avatars.githubusercontent.com/u/723678?s=40&v=4)](https://github.com/nodeca)[nodeca / js-yaml](https://github.com/nodeca/js-yaml) +[![@nodeca](https://avatars.githubusercontent.com/u/723678?s=40&v=4)](https://github.com/nodeca)[nodeca / js-yaml](https://github.com/nodeca/js-yaml) `3.12.2` -[![@lodash](https://avatars.githubusercontent.com/u/2565403?s=40&v=4)](https://github.com/lodash)[lodash / lodash](https://github.com/lodash/lodash) +[![@lodash](https://avatars.githubusercontent.com/u/2565403?s=40&v=4)](https://github.com/lodash)[lodash / lodash](https://github.com/lodash/lodash) `4.17.11` -[![@markedjs](https://avatars.githubusercontent.com/u/19886934?s=40&v=4)](https://github.com/markedjs)[markedjs / marked](https://github.com/markedjs/marked) +[![@markedjs](https://avatars.githubusercontent.com/u/19886934?s=40&v=4)](https://github.com/markedjs)[markedjs / marked](https://github.com/markedjs/marked) `0.6.1` -[![@moment](https://avatars.githubusercontent.com/u/4129662?s=40&v=4)](https://github.com/moment)[moment / moment](https://github.com/moment/moment) +[![@moment](https://avatars.githubusercontent.com/u/4129662?s=40&v=4)](https://github.com/moment)[moment / moment](https://github.com/moment/moment) `2.23.0` -[![@benjaminoakes](https://avatars.githubusercontent.com/u/5323?s=40&v=4)](https://github.com/benjaminoakes)[benjaminoakes / moment-strftime](https://github.com/benjaminoakes/moment-strftime) +[![@benjaminoakes](https://avatars.githubusercontent.com/u/5323?s=40&v=4)](https://github.com/benjaminoakes)[benjaminoakes / moment-strftime](https://github.com/benjaminoakes/moment-strftime) `0.5.0` -[![@sass](https://avatars.githubusercontent.com/u/317889?s=40&v=4)](https://github.com/sass)[sass / node-sass](https://github.com/sass/node-sass) +[![@sass](https://avatars.githubusercontent.com/u/317889?s=40&v=4)](https://github.com/sass)[sass / node-sass](https://github.com/sass/node-sass) `4.14.0` -[![@sass-eyeglass](https://avatars.githubusercontent.com/u/10853331?s=40&v=4)](https://github.com/sass-eyeglass)[sass-eyeglass / node-sass-utils](https://github.com/sass-eyeglass/node-sass-utils) +[![@sass-eyeglass](https://avatars.githubusercontent.com/u/10853331?s=40&v=4)](https://github.com/sass-eyeglass)[sass-eyeglass / node-sass-utils](https://github.com/sass-eyeglass/node-sass-utils) `1.1.2` -[![@facebook](https://avatars.githubusercontent.com/u/69631?s=40&v=4)](https://github.com/facebook)[facebook / react](https://github.com/facebook/react) +[![@facebook](https://avatars.githubusercontent.com/u/69631?s=40&v=4)](https://github.com/facebook)[facebook / react](https://github.com/facebook/react) `16.5.1` -[![@facebook](https://avatars.githubusercontent.com/u/69631?s=40&v=4)](https://github.com/facebook)[facebook / react ](https://github.com/facebook/react)react-dom +[![@facebook](https://avatars.githubusercontent.com/u/69631?s=40&v=4)](https://github.com/facebook)[facebook / react ](https://github.com/facebook/react)react-dom `16.13.1` -[![@nfl](https://avatars.githubusercontent.com/u/1261928?s=40&v=4)](https://github.com/nfl)[nfl / react-helmet](https://github.com/nfl/react-helmet) +[![@nfl](https://avatars.githubusercontent.com/u/1261928?s=40&v=4)](https://github.com/nfl)[nfl / react-helmet](https://github.com/nfl/react-helmet) `5.2.1` -[![@peternewnham](https://avatars.githubusercontent.com/u/3098560?s=40&v=4)](https://github.com/peternewnham)[peternewnham / react-html-parser](https://github.com/peternewnham/react-html-parser) +[![@peternewnham](https://avatars.githubusercontent.com/u/3098560?s=40&v=4)](https://github.com/peternewnham)[peternewnham / react-html-parser](https://github.com/peternewnham/react-html-parser) `2.0.2` -[![@adam-26](https://avatars.githubusercontent.com/u/2652619?s=40&u=176b8e705aba11281f85253680bc876b6f5f4f5a&v=4)](https://github.com/adam-26)[adam-26 / react-script-tag](https://github.com/adam-26/react-script-tag) +[![@adam-26](https://avatars.githubusercontent.com/u/2652619?s=40&u=176b8e705aba11281f85253680bc876b6f5f4f5a&v=4)](https://github.com/adam-26)[adam-26 / react-script-tag](https://github.com/adam-26/react-script-tag) `1.1.2` -[![@rehypejs](https://avatars.githubusercontent.com/u/25711728?s=40&v=4)](https://github.com/rehypejs)[rehypejs / rehype-react](https://github.com/rehypejs/rehype-react) +[![@rehypejs](https://avatars.githubusercontent.com/u/25711728?s=40&v=4)](https://github.com/rehypejs)[rehypejs / rehype-react](https://github.com/rehypejs/rehype-react) `3.0.2` -[![@alexei](https://avatars.githubusercontent.com/u/96283?s=40&u=a27f55ffc42d8db7dacb4aff8c177ba8de1e4e8c&v=4)](https://github.com/alexei)[alexei / sprintf.js ](https://github.com/alexei/sprintf.js)sprintf-js +[![@alexei](https://avatars.githubusercontent.com/u/96283?s=40&u=a27f55ffc42d8db7dacb4aff8c177ba8de1e4e8c&v=4)](https://github.com/alexei)[alexei / sprintf.js ](https://github.com/alexei/sprintf.js)sprintf-js `1.1.2` diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject-4.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject-4.md.md index d79b70e29e..68011fdee6 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject-4.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject-4.md.md @@ -20,7 +20,7 @@ Remove -- before `` +- before `` addthis @@ -33,7 +33,7 @@ Remove -- before `` +- before `` gtag-n-firebase @@ -71,20 +71,20 @@ Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -130,7 +130,7 @@ Remove -- before `` +- before `` original-analytics @@ -144,7 +144,7 @@ })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -164,7 +164,7 @@ Remove -- before `` +- before `` goback @@ -177,7 +177,7 @@ Remove -- before `` +- before `` mdn-style @@ -404,7 +404,7 @@ Remove -- before `` +- before `` meta @@ -435,7 +435,7 @@ Remove -- before `` +- before `` meta @@ -445,7 +445,7 @@ Remove -- before `` +- before `` back to top css @@ -540,7 +540,7 @@ Remove -- before `` +- before `` print2pdf @@ -553,7 +553,7 @@ Remove -- before `` +- before `` scroll2topsvg @@ -686,7 +686,7 @@ Remove -- before `` +- before `` tawk-chat @@ -708,7 +708,7 @@ Remove -- before `` +- before `` firebase-cdn @@ -740,7 +740,7 @@ Remove -- before `` +- before `` add-this-suggested-pages @@ -751,7 +751,7 @@ Remove -- before `` +- before `` auth-firestore-cloud @@ -769,7 +769,7 @@ Remove -- before `` +- before `` analytics @@ -787,7 +787,7 @@ Remove -- before `` +- before `` search-script @@ -807,7 +807,7 @@ Remove -- before `` +- before `` more-meta-tags-open-graph @@ -834,7 +834,7 @@ Remove -- before `` +- before `` simpleanalytics @@ -845,7 +845,7 @@ Remove -- before `` +- before `` metaaaa @@ -856,7 +856,7 @@ Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet @@ -898,45 +898,45 @@ Edit settings ## [Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) +Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) ### [Outgoing notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#outgoing-notifications) Add notification -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails Options -- Add rich details to commits when Deploy Preview starts +- Add rich details to commits when Deploy Preview starts Options -- Add rich details to commits when Deploy Preview succeeds +- Add rich details to commits when Deploy Preview succeeds Options -- Add rich details to commits when Deploy Preview fails +- Add rich details to commits when Deploy Preview fails Options -- Email bryan.guner@gmail.com when deploy request is pending +- Email bryan.guner@gmail.com when deploy request is pending Options -- Email bryan.guner@gmail.com when deploy request is accepted +- Email bryan.guner@gmail.com when deploy request is accepted Options -- Email bryan.guner@gmail.com when deploy request is rejected +- Email bryan.guner@gmail.com when deploy request is rejected Options @@ -946,4 +946,4 @@ Add notification - [News](https://www.netlify.com/news/) - [Terms](https://www.netlify.com/tos/) -© 2021 Netlify +© 2021 Netlify diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject3.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject3.md.md index 2a1b240c4d..fc61548f27 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject3.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject3.md.md @@ -2,7 +2,7 @@ Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` blm @@ -28,7 +28,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -41,7 +41,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-n-firebase @@ -79,20 +79,20 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -138,7 +138,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` original-analytics @@ -152,7 +152,7 @@ Inject analytics or other scripts into the HTML of your site. })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -172,7 +172,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` goback @@ -185,7 +185,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prism @@ -395,7 +395,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prismjs @@ -414,7 +414,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` mdn-style @@ -641,7 +641,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -672,7 +672,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prism2body @@ -691,7 +691,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia @@ -711,7 +711,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject4.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject4.md.md index 02fc48bca7..5426c3e454 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject4.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/inject4.md.md @@ -6,7 +6,7 @@ Control the post processing and optimizations Netlify can do for you Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` blm @@ -32,7 +32,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -45,7 +45,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-n-firebase @@ -83,20 +83,20 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -142,7 +142,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` original-analytics @@ -156,7 +156,7 @@ Inject analytics or other scripts into the HTML of your site. })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -176,7 +176,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` goback @@ -189,7 +189,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` mdn-style @@ -416,7 +416,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -447,7 +447,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` prism2body @@ -466,7 +466,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -476,7 +476,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` tawk-widget @@ -498,7 +498,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` hubspot @@ -518,7 +518,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` hubspot-analytics @@ -530,7 +530,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` typeform @@ -540,7 +540,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet @@ -582,45 +582,45 @@ Edit settings ## [Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) +Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) ### [Outgoing notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#outgoing-notifications) Add notification -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails Options -- Add rich details to commits when Deploy Preview starts +- Add rich details to commits when Deploy Preview starts Options -- Add rich details to commits when Deploy Preview succeeds +- Add rich details to commits when Deploy Preview succeeds Options -- Add rich details to commits when Deploy Preview fails +- Add rich details to commits when Deploy Preview fails Options -- Email bryan.guner@gmail.com when deploy request is pending +- Email bryan.guner@gmail.com when deploy request is pending Options -- Email bryan.guner@gmail.com when deploy request is accepted +- Email bryan.guner@gmail.com when deploy request is accepted Options -- Email bryan.guner@gmail.com when deploy request is rejected +- Email bryan.guner@gmail.com when deploy request is rejected Options @@ -630,4 +630,4 @@ Add notification - [News](https://www.netlify.com/news/) - [Terms](https://www.netlify.com/tos/) -© 2021 Netlify +© 2021 Netlify diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-content-part2.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-content-part2.md.md index 13d2f4b932..b4d1f4189f 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-content-part2.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-content-part2.md.md @@ -2,7 +2,7 @@ Inject analytics or other scripts into the HTML of your site.--- -- before `` +- before `` scroll2top @@ -37,7 +37,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` spotify @@ -55,7 +55,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` scroll2-vanilla @@ -77,7 +77,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` blm @@ -103,7 +103,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` iframe-style @@ -125,7 +125,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` addThis @@ -138,7 +138,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` analytics-n-addsense @@ -160,7 +160,7 @@ Inject analytics or other scripts into the HTML of your site.--- @@ -182,7 +182,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` netlify-oauth @@ -212,7 +212,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` github-netlify-oauth @@ -224,7 +224,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` content-authoring @@ -234,7 +234,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` Algolia-Search @@ -254,7 +254,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` searcg @@ -280,7 +280,7 @@ Inject analytics or other scripts into the HTML of your site.--- --- -- before `` +- before `` algolia-search-cdn diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-js-part4.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-js-part4.md.md index 0595c92d20..2cb15acc72 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-js-part4.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-js-part4.md.md @@ -6,7 +6,7 @@ Control the post processing and optimizations Netlify can do for you Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` gtag-n-firebase @@ -44,20 +44,20 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` gtag-in-body ``` - ``` Remove -- before `` +- before `` scroll-2-top @@ -103,7 +103,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` original-analytics @@ -117,7 +117,7 @@ Inject analytics or other scripts into the HTML of your site. })(window,document,'script','dataLayer','GTM-5S5XXNR'); - @@ -137,7 +137,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` goback @@ -150,7 +150,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` mdn-style @@ -377,7 +377,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -408,7 +408,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -418,7 +418,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` back to top css @@ -513,7 +513,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` scroll2topsvg @@ -646,7 +646,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` firebase-cdn @@ -678,7 +678,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` analytics @@ -696,7 +696,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` more-meta-tags-open-graph @@ -723,7 +723,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` simpleanalytics @@ -734,7 +734,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` metaaaa @@ -745,7 +745,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia-head @@ -768,7 +768,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` fb @@ -800,7 +800,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` stackbit-widget @@ -810,7 +810,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` blm @@ -836,7 +836,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -847,7 +847,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` add-this @@ -858,7 +858,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` meta @@ -892,11 +892,11 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` test -- before `` +- before `` search @@ -919,7 +919,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` links-highlight diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-part3.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-part3.md.md index eff12d76a2..daf0f7a591 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-part3.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/injected-part3.md.md @@ -6,7 +6,7 @@ Control the post processing and optimizations Netlify can do for you Inject analytics or other scripts into the HTML of your site. -- before `` +- before `` blm @@ -32,7 +32,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` addthis @@ -45,7 +45,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` apple @@ -55,7 +55,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` hit counter @@ -65,7 +65,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` go-back @@ -79,7 +79,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` clock @@ -90,7 +90,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia @@ -111,7 +111,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia-cdn @@ -122,7 +122,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -- before `` +- before `` algolia2 @@ -143,7 +143,7 @@ Inject analytics or other scripts into the HTML of your site. Remove -[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) +[Learn more about snippet injection in the docs](https://www.netlify.com/docs/inject-analytics-snippets) Add snippet @@ -171,45 +171,45 @@ Edit settings ## [Deploy notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#deploy-notifications) -Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) +Set up outgoing webhooks to notify other services about deploys for your site. [Learn more](https://www.netlify.com/docs/webhooks/#outgoing-webhooks-and-notifications) ### [Outgoing notifications](https://app.netlify.com/sites/bgoonz-blog/settings/deploys#outgoing-notifications) Add notification -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy starts Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy succeeds Options -- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails +- Post to https://api.stackbit.com/project/609b2d7c71a5dd0016f36326/webhook/netlify when deploy fails Options -- Add rich details to commits when Deploy Preview starts +- Add rich details to commits when Deploy Preview starts Options -- Add rich details to commits when Deploy Preview succeeds +- Add rich details to commits when Deploy Preview succeeds Options -- Add rich details to commits when Deploy Preview fails +- Add rich details to commits when Deploy Preview fails Options -- Email bryan.guner@gmail.com when deploy request is pending +- Email bryan.guner@gmail.com when deploy request is pending Options -- Email bryan.guner@gmail.com when deploy request is accepted +- Email bryan.guner@gmail.com when deploy request is accepted Options -- Email bryan.guner@gmail.com when deploy request is rejected +- Email bryan.guner@gmail.com when deploy request is rejected Options @@ -219,4 +219,4 @@ Add notification - [News](https://www.netlify.com/news/) - [Terms](https://www.netlify.com/tos/) -© 2021 Netlify +© 2021 Netlify diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/links-to-remember.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/links-to-remember.md index 7398c74e78..16457ad4bb 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/links-to-remember.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/links-to-remember.md @@ -22,7 +22,7 @@ - [web archive feed](https://archive.org/services/collection-rss.php?collection=books&query=%28%28openlibrary_edition%3A%2A%20OR%20sponsor%3AGoogle%20OR%20collection%3Adigitallibraryindia%29%20AND%20mediatype%3Atexts%20AND%20-repub_state%3A%28%27-2%27%20OR%20%27-1%27%20OR%200%20OR%2010%20OR%2011%20OR%2012%20OR%2013%20OR%2018%29%29%20AND%20-mediatype%3Acollection) - [Blog starter](https://github.com/Portfolio-Projects42/BLOG2.oStarter) - + Search feature diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/old-version-of-index.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/old-version-of-index.md.md index 78c2797a72..c5b8ed794e 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/old-version-of-index.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/old-version-of-index.md.md @@ -103,7 +103,7 @@ sections: image_alt: bryan-guner image_position: left content: >- - @@ -120,7 +120,7 @@ sections: image_alt: listen to my playlist image_position: left content: > - @@ -176,7 +176,7 @@ sections: image_alt: lorem-ipsum image_position: left content: |- - @@ -215,7 +215,7 @@ sections: image_alt: lorem-ipsum image_position: left content: | - @@ -233,7 +233,7 @@ sections: image_alt: lorem-ipsum image_position: left content: |- - @@ -244,7 +244,7 @@ sections: image_alt: lorem-ipsum image_position: left content: |- - @@ -255,7 +255,7 @@ sections: image_alt: blog image_position: left content: |- - diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/privacy-policy.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/privacy-policy.md.md index 9d8614a23b..ea776b0498 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/privacy-policy.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/privacy-policy.md.md @@ -4,7 +4,7 @@ Last updated: October 20, 2021 This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You. -We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the [Privacy Policy Generator](https://www.termsfeed.com/privacy-policy-generator/). +We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the [Privacy Policy Generator](https://www.termsfeed.com/privacy-policy-generator/). # Interpretation and Definitions @@ -16,27 +16,27 @@ The words of which the initial letter is capitalized have meanings defined under For the purposes of this Privacy Policy: -- **Account** means a unique account created for You to access our Service or parts of our Service. +- **Account** means a unique account created for You to access our Service or parts of our Service. -- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to WebDevHub. +- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to WebDevHub. -- **Cookies** are small files that are placed on Your computer, mobile device or any other device by a website, containing the details of Your browsing history on that website among its many uses. +- **Cookies** are small files that are placed on Your computer, mobile device or any other device by a website, containing the details of Your browsing history on that website among its many uses. -- **Country** refers to: New Jersey, United States +- **Country** refers to: New Jersey, United States -- **Device** means any device that can access the Service such as a computer, a cellphone or a digital tablet. +- **Device** means any device that can access the Service such as a computer, a cellphone or a digital tablet. -- **Personal Data** is any information that relates to an identified or identifiable individual. +- **Personal Data** is any information that relates to an identified or identifiable individual. -- **Service** refers to the Website. +- **Service** refers to the Website. -- **Service Provider** means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used. +- **Service Provider** means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used. -- **Usage Data** refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit). +- **Usage Data** refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit). -- **Website** refers to WebDevHub, accessible from  +- **Website** refers to WebDevHub, accessible from -- **You** means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. +- **You** means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. # Collecting and Using Your Personal Data @@ -66,11 +66,11 @@ We may also collect information that Your browser sends whenever You visit our S We use Cookies and similar tracking technologies to track the activity on Our Service and store certain information. Tracking technologies used are beacons, tags, and scripts to collect and track information and to improve and analyze Our Service. The technologies We use may include: -- **Cookies or Browser Cookies.** A cookie is a small file placed on Your Device. You can instruct Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do not accept Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your browser setting so that it will refuse Cookies, our Service may use Cookies. -- **Flash Cookies.** Certain features of our Service may use local stored objects (or Flash Cookies) to collect and store information about Your preferences or Your activity on our Service. Flash Cookies are not managed by the same browser settings as those used for Browser Cookies. For more information on how You can delete Flash Cookies, please read "Where can I change the settings for disabling, or deleting local shared objects?" available at  -- **Web Beacons.** Certain sections of our Service and our emails may contain small electronic files known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit the Company, for example, to count users who have visited those pages or opened an email and for other related website statistics (for example, recording the popularity of a certain section and verifying system and server integrity). +- **Cookies or Browser Cookies.** A cookie is a small file placed on Your Device. You can instruct Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do not accept Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your browser setting so that it will refuse Cookies, our Service may use Cookies. +- **Flash Cookies.** Certain features of our Service may use local stored objects (or Flash Cookies) to collect and store information about Your preferences or Your activity on our Service. Flash Cookies are not managed by the same browser settings as those used for Browser Cookies. For more information on how You can delete Flash Cookies, please read "Where can I change the settings for disabling, or deleting local shared objects?" available at +- **Web Beacons.** Certain sections of our Service and our emails may contain small electronic files known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit the Company, for example, to count users who have visited those pages or opened an email and for other related website statistics (for example, recording the popularity of a certain section and verifying system and server integrity). -Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web browser. You can learn more about cookies here: [Cookies by TermsFeed Generator](https://www.termsfeed.com/privacy-policy-generator/#faq-8). +Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web browser. You can learn more about cookies here: [Cookies by TermsFeed Generator](https://www.termsfeed.com/privacy-policy-generator/#faq-8). We use both Session and Persistent Cookies for the purposes set out below: @@ -106,27 +106,27 @@ The Company may use Personal Data for the following purposes: - **To provide and maintain our Service**, including to monitor the usage of our Service. -- **To manage Your Account:** to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user. +- **To manage Your Account:** to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user. -- **For the performance of a contract:** the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service. +- **For the performance of a contract:** the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service. -- **To contact You:** To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation. +- **To contact You:** To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation. -- **To provide You** with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information. +- **To provide You** with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information. -- **To manage Your requests:** To attend and manage Your requests to Us. +- **To manage Your requests:** To attend and manage Your requests to Us. -- **For business transfers:** We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred. +- **For business transfers:** We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred. - **For other purposes**: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience. We may share Your personal information in the following situations: -- **With Service Providers:** We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You. -- **For business transfers:** We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company. -- **With Affiliates:** We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us. -- **With business partners:** We may share Your information with Our business partners to offer You certain products, services or promotions. -- **With other users:** when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside. +- **With Service Providers:** We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You. +- **For business transfers:** We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company. +- **With Affiliates:** We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us. +- **With business partners:** We may share Your information with Our business partners to offer You certain products, services or promotions. +- **With other users:** when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside. - **With Your consent**: We may disclose Your personal information for any other purpose with Your consent. ## Retention of Your Personal Data @@ -191,4 +191,4 @@ You are advised to review this Privacy Policy periodically for any changes. Chan If you have any questions about this Privacy Policy, You can contact us: -- By email: bryan.guner.dev@gmail.com +- By email: bryan.guner.dev@gmail.com diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/sourcecode.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/sourcecode.md.md index 22a4045d00..123a8a30e1 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/sourcecode.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/sourcecode.md.md @@ -7,291 +7,291 @@ . ├── Combined_____-_____Doc.md ├── components -│   ├── ActionLink.js -│   ├── CtaButtons.js -│   ├── DarkToggle -│   │   ├── index.js -│   │   └── styles.js -│   ├── DocsMenu.js -│   ├── DocsSubmenu.js -│   ├── Footer.js -│   ├── Header.js -│   ├── Icon.js -│   ├── Layout.js -│   ├── SectionContent.js -│   ├── SectionCta.js -│   ├── SectionDocs.js -│   ├── SectionGrid.js -│   ├── SectionHero.js -│   ├── Submenu.js -│   ├── global.css -│   └── index.js +│ ├── ActionLink.js +│ ├── CtaButtons.js +│ ├── DarkToggle +│ │ ├── index.js +│ │ └── styles.js +│ ├── DocsMenu.js +│ ├── DocsSubmenu.js +│ ├── Footer.js +│ ├── Header.js +│ ├── Icon.js +│ ├── Layout.js +│ ├── SectionContent.js +│ ├── SectionCta.js +│ ├── SectionDocs.js +│ ├── SectionGrid.js +│ ├── SectionHero.js +│ ├── Submenu.js +│ ├── global.css +│ └── index.js ├── data -│   └── doc_sections.yml +│ └── doc_sections.yml ├── hooks -│   ├── addScript.js -│   ├── index.js -│   ├── useDarkMode.js -│   ├── useEventListener.js -│   ├── useMediaQuery.js -│   ├── useOnClickOutside.js -│   ├── useQueryParam.js -│   ├── useSize.js -│   └── useStorage.js +│ ├── addScript.js +│ ├── index.js +│ ├── useDarkMode.js +│ ├── useEventListener.js +│ ├── useMediaQuery.js +│ ├── useOnClickOutside.js +│ ├── useQueryParam.js +│ ├── useSize.js +│ └── useStorage.js ├── html.js ├── pages -│   ├── blog -│   │   ├── 300-react-questions.md -│   │   ├── awesome-graphql.md -│   │   ├── big-o-complexity.md -│   │   ├── blog-archive.md -│   │   ├── blogwcomments.md -│   │   ├── data-structures.md -│   │   ├── flow-control-in-python.md -│   │   ├── functions-in-python.md -│   │   ├── git-gateway.md -│   │   ├── index.md -│   │   ├── interview-questions-js.md -│   │   ├── netlify-cms.md -│   │   ├── platform-docs.md -│   │   ├── python-for-js-dev.md -│   │   ├── python-resources.md -│   │   ├── web-dev-trends.md -│   │   └── web-scraping.md -│   ├── docs -│   │   ├── about -│   │   │   ├── eng-portfolio.md -│   │   │   ├── ideas-for-this-website.md -│   │   │   ├── index.md -│   │   │   ├── intrests.md -│   │   │   ├── job-search.md -│   │   │   └── resume.md -│   │   ├── articles -│   │   │   ├── basic-web-dev.md -│   │   │   ├── buffers.md -│   │   │   ├── dev-dep.md -│   │   │   ├── event-loop.md -│   │   │   ├── fs-module.md -│   │   │   ├── how-the-web-works.md -│   │   │   ├── http.md -│   │   │   ├── index.md -│   │   │   ├── install.md -│   │   │   ├── intro.md -│   │   │   ├── modules.md -│   │   │   ├── nextjs.md -│   │   │   ├── node-api-express.md -│   │   │   ├── node-cli-args.md -│   │   │   ├── node-common-modules.md -│   │   │   ├── node-env-variables.md -│   │   │   ├── node-js-language.md -│   │   │   ├── node-package-manager.md -│   │   │   ├── node-repl.md -│   │   │   ├── node-run-cli.md -│   │   │   ├── nodejs.md -│   │   │   ├── nodevsbrowser.md -│   │   │   ├── npm.md -│   │   │   ├── npx.md -│   │   │   ├── os-module.md -│   │   │   ├── reading-files.md -│   │   │   ├── semantic-html.md -│   │   │   ├── semantic.md -│   │   │   ├── the-uniform-resource-locator-(url).md -│   │   │   ├── understanding-firebase.md -│   │   │   ├── v8.md -│   │   │   ├── web-standards-checklist.md -│   │   │   ├── webdev-tools.md -│   │   │   └── writing-files.md -│   │   ├── audio -│   │   │   ├── audio-feature-extraction.md -│   │   │   ├── audio.md -│   │   │   ├── dfft.md -│   │   │   ├── discrete-fft.md -│   │   │   ├── dtw-python-explained.md -│   │   │   ├── dynamic-time-warping.md -│   │   │   ├── index.md -│   │   │   └── web-audio-api.md -│   │   ├── career -│   │   │   ├── dev-interview.md -│   │   │   ├── index.md -│   │   │   ├── interview-dos-n-donts.md -│   │   │   └── job-boards.md -│   │   ├── community -│   │   │   ├── an-open-letter-2-future-developers.md -│   │   │   ├── index.md -│   │   │   └── video-chat.md -│   │   ├── content -│   │   │   ├── algo.md -│   │   │   ├── archive.md -│   │   │   ├── gatsby-Queries-Mutations.md -│   │   │   ├── history-api.md -│   │   │   ├── index.md -│   │   │   ├── main-projects.md -│   │   │   └── trouble-shooting.md -│   │   ├── data-structures -│   │   │   └── index.md -│   │   ├── docs -│   │   │   ├── appendix.md -│   │   │   ├── art-of-command-line.md -│   │   │   ├── bash.md -│   │   │   ├── content.md -│   │   │   ├── css.md -│   │   │   ├── data-structures-docs.md -│   │   │   ├── es-6-features.md -│   │   │   ├── git-reference.md -│   │   │   ├── git-repos.md -│   │   │   ├── html-spec.md -│   │   │   ├── index.md -│   │   │   ├── markdown.md -│   │   │   ├── no-whiteboarding.md -│   │   │   ├── node-docs-complete.md -│   │   │   ├── node-docs-full.md -│   │   │   ├── regex-in-js.md -│   │   │   └── sitemap.md -│   │   ├── faq -│   │   │   ├── contact.md -│   │   │   ├── index.md -│   │   │   └── plug-ins.md -│   │   ├── gists.md -│   │   ├── index.md -│   │   ├── interact -│   │   │   ├── callstack-visual.md -│   │   │   ├── clock.md -│   │   │   ├── index.md -│   │   │   ├── jupyter-notebooks.md -│   │   │   ├── other-sites.md -│   │   │   └── video-chat.md -│   │   ├── interview -│   │   │   ├── index.md -│   │   │   ├── job-search-nav.md -│   │   │   └── review-concepts.md -│   │   ├── javascript -│   │   │   ├── arrow-functions.md -│   │   │   ├── asyncjs.md -│   │   │   ├── await-keyword.md -│   │   │   ├── bigo.md -│   │   │   ├── clean-code.md -│   │   │   ├── constructor-functions.md -│   │   │   ├── index.md -│   │   │   ├── promises.md -│   │   │   ├── review.md -│   │   │   └── this-is-about-this.md -│   │   ├── leetcode -│   │   │   └── index.md -│   │   ├── privacy-policy.md -│   │   ├── projects -│   │   │   ├── embeded-websites.md -│   │   │   ├── index.md -│   │   │   ├── list-of-projects.md -│   │   │   ├── mini-projects.md -│   │   │   └── my-websites.md -│   │   ├── python -│   │   │   ├── at-length.md -│   │   │   ├── cheat-sheet.md -│   │   │   ├── comprehensive-guide.md -│   │   │   ├── examples.md -│   │   │   ├── flow-control.md -│   │   │   ├── functions.md -│   │   │   ├── google-sheets-api.md -│   │   │   ├── index.md -│   │   │   ├── intro-for-js-devs.md -│   │   │   ├── python-ds.md -│   │   │   └── snippets.md -│   │   ├── quick-reference -│   │   │   ├── Emmet.md -│   │   │   ├── all-emojis.md -│   │   │   ├── create-react-app.md -│   │   │   ├── git-bash.md -│   │   │   ├── git-tricks.md -│   │   │   ├── google-firebase.md -│   │   │   ├── heroku-error-codes.md -│   │   │   ├── index.md -│   │   │   ├── installation.md -│   │   │   ├── markdown-dropdowns.md -│   │   │   ├── minifiction.md -│   │   │   ├── new-repo-instructions.md -│   │   │   ├── psql-setup.md -│   │   │   ├── pull-request-rubric.md -│   │   │   ├── quick-links.md -│   │   │   ├── topRepos.md -│   │   │   ├── understanding-path.md -│   │   │   └── vscode-themes.md -│   │   ├── react -│   │   │   ├── ajax-n-apis.md -│   │   │   ├── cheatsheet.md -│   │   │   ├── createReactApp.md -│   │   │   ├── demo.md -│   │   │   ├── dont-use-index-as-keys.md -│   │   │   ├── index.md -│   │   │   ├── jsx.md -│   │   │   ├── react-docs.md -│   │   │   ├── react-in-depth.md -│   │   │   ├── react2.md -│   │   │   └── render-elements.md -│   │   ├── reference -│   │   │   ├── awesome-lists.md -│   │   │   ├── awesome-static.md -│   │   │   ├── bash-commands.md -│   │   │   ├── bookmarks.md -│   │   │   ├── embed-the-web.md -│   │   │   ├── github-search.md -│   │   │   ├── google-cloud.md -│   │   │   ├── how-2-reinstall-npm.md -│   │   │   ├── how-to-kill-a-process.md -│   │   │   ├── index.md -│   │   │   ├── installing-node.md -│   │   │   ├── intro-to-nodejs.md -│   │   │   ├── notes-template.md -│   │   │   ├── psql.md -│   │   │   ├── resources.md -│   │   │   ├── vscode.md -│   │   │   └── web-api's.md -│   │   ├── search.md -│   │   ├── sitemap.md -│   │   ├── tips -│   │   │   ├── array-methods.md -│   │   │   ├── index.md -│   │   │   └── insert-into-array.md -│   │   ├── tools -│   │   │   ├── Archive.md -│   │   │   ├── data-structures.md -│   │   │   ├── dev-utilities.md -│   │   │   ├── index.md -│   │   │   └── markdown-html.md -│   │   └── tutorials -│   │   ├── enviorment-setup.md -│   │   └── index.md -│   ├── index.md -│   ├── privacy-policy.md -│   ├── readme.md -│   └── showcase.md +│ ├── blog +│ │ ├── 300-react-questions.md +│ │ ├── awesome-graphql.md +│ │ ├── big-o-complexity.md +│ │ ├── blog-archive.md +│ │ ├── blogwcomments.md +│ │ ├── data-structures.md +│ │ ├── flow-control-in-python.md +│ │ ├── functions-in-python.md +│ │ ├── git-gateway.md +│ │ ├── index.md +│ │ ├── interview-questions-js.md +│ │ ├── netlify-cms.md +│ │ ├── platform-docs.md +│ │ ├── python-for-js-dev.md +│ │ ├── python-resources.md +│ │ ├── web-dev-trends.md +│ │ └── web-scraping.md +│ ├── docs +│ │ ├── about +│ │ │ ├── eng-portfolio.md +│ │ │ ├── ideas-for-this-website.md +│ │ │ ├── index.md +│ │ │ ├── intrests.md +│ │ │ ├── job-search.md +│ │ │ └── resume.md +│ │ ├── articles +│ │ │ ├── basic-web-dev.md +│ │ │ ├── buffers.md +│ │ │ ├── dev-dep.md +│ │ │ ├── event-loop.md +│ │ │ ├── fs-module.md +│ │ │ ├── how-the-web-works.md +│ │ │ ├── http.md +│ │ │ ├── index.md +│ │ │ ├── install.md +│ │ │ ├── intro.md +│ │ │ ├── modules.md +│ │ │ ├── nextjs.md +│ │ │ ├── node-api-express.md +│ │ │ ├── node-cli-args.md +│ │ │ ├── node-common-modules.md +│ │ │ ├── node-env-variables.md +│ │ │ ├── node-js-language.md +│ │ │ ├── node-package-manager.md +│ │ │ ├── node-repl.md +│ │ │ ├── node-run-cli.md +│ │ │ ├── nodejs.md +│ │ │ ├── nodevsbrowser.md +│ │ │ ├── npm.md +│ │ │ ├── npx.md +│ │ │ ├── os-module.md +│ │ │ ├── reading-files.md +│ │ │ ├── semantic-html.md +│ │ │ ├── semantic.md +│ │ │ ├── the-uniform-resource-locator-(url).md +│ │ │ ├── understanding-firebase.md +│ │ │ ├── v8.md +│ │ │ ├── web-standards-checklist.md +│ │ │ ├── webdev-tools.md +│ │ │ └── writing-files.md +│ │ ├── audio +│ │ │ ├── audio-feature-extraction.md +│ │ │ ├── audio.md +│ │ │ ├── dfft.md +│ │ │ ├── discrete-fft.md +│ │ │ ├── dtw-python-explained.md +│ │ │ ├── dynamic-time-warping.md +│ │ │ ├── index.md +│ │ │ └── web-audio-api.md +│ │ ├── career +│ │ │ ├── dev-interview.md +│ │ │ ├── index.md +│ │ │ ├── interview-dos-n-donts.md +│ │ │ └── job-boards.md +│ │ ├── community +│ │ │ ├── an-open-letter-2-future-developers.md +│ │ │ ├── index.md +│ │ │ └── video-chat.md +│ │ ├── content +│ │ │ ├── algo.md +│ │ │ ├── archive.md +│ │ │ ├── gatsby-Queries-Mutations.md +│ │ │ ├── history-api.md +│ │ │ ├── index.md +│ │ │ ├── main-projects.md +│ │ │ └── trouble-shooting.md +│ │ ├── data-structures +│ │ │ └── index.md +│ │ ├── docs +│ │ │ ├── appendix.md +│ │ │ ├── art-of-command-line.md +│ │ │ ├── bash.md +│ │ │ ├── content.md +│ │ │ ├── css.md +│ │ │ ├── data-structures-docs.md +│ │ │ ├── es-6-features.md +│ │ │ ├── git-reference.md +│ │ │ ├── git-repos.md +│ │ │ ├── html-spec.md +│ │ │ ├── index.md +│ │ │ ├── markdown.md +│ │ │ ├── no-whiteboarding.md +│ │ │ ├── node-docs-complete.md +│ │ │ ├── node-docs-full.md +│ │ │ ├── regex-in-js.md +│ │ │ └── sitemap.md +│ │ ├── faq +│ │ │ ├── contact.md +│ │ │ ├── index.md +│ │ │ └── plug-ins.md +│ │ ├── gists.md +│ │ ├── index.md +│ │ ├── interact +│ │ │ ├── callstack-visual.md +│ │ │ ├── clock.md +│ │ │ ├── index.md +│ │ │ ├── jupyter-notebooks.md +│ │ │ ├── other-sites.md +│ │ │ └── video-chat.md +│ │ ├── interview +│ │ │ ├── index.md +│ │ │ ├── job-search-nav.md +│ │ │ └── review-concepts.md +│ │ ├── javascript +│ │ │ ├── arrow-functions.md +│ │ │ ├── asyncjs.md +│ │ │ ├── await-keyword.md +│ │ │ ├── bigo.md +│ │ │ ├── clean-code.md +│ │ │ ├── constructor-functions.md +│ │ │ ├── index.md +│ │ │ ├── promises.md +│ │ │ ├── review.md +│ │ │ └── this-is-about-this.md +│ │ ├── leetcode +│ │ │ └── index.md +│ │ ├── privacy-policy.md +│ │ ├── projects +│ │ │ ├── embeded-websites.md +│ │ │ ├── index.md +│ │ │ ├── list-of-projects.md +│ │ │ ├── mini-projects.md +│ │ │ └── my-websites.md +│ │ ├── python +│ │ │ ├── at-length.md +│ │ │ ├── cheat-sheet.md +│ │ │ ├── comprehensive-guide.md +│ │ │ ├── examples.md +│ │ │ ├── flow-control.md +│ │ │ ├── functions.md +│ │ │ ├── google-sheets-api.md +│ │ │ ├── index.md +│ │ │ ├── intro-for-js-devs.md +│ │ │ ├── python-ds.md +│ │ │ └── snippets.md +│ │ ├── quick-reference +│ │ │ ├── Emmet.md +│ │ │ ├── all-emojis.md +│ │ │ ├── create-react-app.md +│ │ │ ├── git-bash.md +│ │ │ ├── git-tricks.md +│ │ │ ├── google-firebase.md +│ │ │ ├── heroku-error-codes.md +│ │ │ ├── index.md +│ │ │ ├── installation.md +│ │ │ ├── markdown-dropdowns.md +│ │ │ ├── minifiction.md +│ │ │ ├── new-repo-instructions.md +│ │ │ ├── psql-setup.md +│ │ │ ├── pull-request-rubric.md +│ │ │ ├── quick-links.md +│ │ │ ├── topRepos.md +│ │ │ ├── understanding-path.md +│ │ │ └── vscode-themes.md +│ │ ├── react +│ │ │ ├── ajax-n-apis.md +│ │ │ ├── cheatsheet.md +│ │ │ ├── createReactApp.md +│ │ │ ├── demo.md +│ │ │ ├── dont-use-index-as-keys.md +│ │ │ ├── index.md +│ │ │ ├── jsx.md +│ │ │ ├── react-docs.md +│ │ │ ├── react-in-depth.md +│ │ │ ├── react2.md +│ │ │ └── render-elements.md +│ │ ├── reference +│ │ │ ├── awesome-lists.md +│ │ │ ├── awesome-static.md +│ │ │ ├── bash-commands.md +│ │ │ ├── bookmarks.md +│ │ │ ├── embed-the-web.md +│ │ │ ├── github-search.md +│ │ │ ├── google-cloud.md +│ │ │ ├── how-2-reinstall-npm.md +│ │ │ ├── how-to-kill-a-process.md +│ │ │ ├── index.md +│ │ │ ├── installing-node.md +│ │ │ ├── intro-to-nodejs.md +│ │ │ ├── notes-template.md +│ │ │ ├── psql.md +│ │ │ ├── resources.md +│ │ │ ├── vscode.md +│ │ │ └── web-api's.md +│ │ ├── search.md +│ │ ├── sitemap.md +│ │ ├── tips +│ │ │ ├── array-methods.md +│ │ │ ├── index.md +│ │ │ └── insert-into-array.md +│ │ ├── tools +│ │ │ ├── Archive.md +│ │ │ ├── data-structures.md +│ │ │ ├── dev-utilities.md +│ │ │ ├── index.md +│ │ │ └── markdown-html.md +│ │ └── tutorials +│ │ ├── enviorment-setup.md +│ │ └── index.md +│ ├── index.md +│ ├── privacy-policy.md +│ ├── readme.md +│ └── showcase.md ├── sass -│   ├── imports -│   │   ├── _animations.scss -│   │   ├── _buttons.scss -│   │   ├── _docs.scss -│   │   ├── _footer.scss -│   │   ├── _forms.scss -│   │   ├── _functions.scss -│   │   ├── _general.scss -│   │   ├── _header.scss -│   │   ├── _helpers.scss -│   │   ├── _icons.scss -│   │   ├── _palettes.scss -│   │   ├── _posts.scss -│   │   ├── _prism.scss -│   │   ├── _reset.scss -│   │   ├── _sections.scss -│   │   ├── _structure.scss -│   │   ├── _tables.scss -│   │   └── _variables.scss -│   └── main.scss +│ ├── imports +│ │ ├── _animations.scss +│ │ ├── _buttons.scss +│ │ ├── _docs.scss +│ │ ├── _footer.scss +│ │ ├── _forms.scss +│ │ ├── _functions.scss +│ │ ├── _general.scss +│ │ ├── _header.scss +│ │ ├── _helpers.scss +│ │ ├── _icons.scss +│ │ ├── _palettes.scss +│ │ ├── _posts.scss +│ │ ├── _prism.scss +│ │ ├── _reset.scss +│ │ ├── _sections.scss +│ │ ├── _structure.scss +│ │ ├── _tables.scss +│ │ └── _variables.scss +│ └── main.scss ├── templates -│   ├── advanced.js -│   ├── blog.js -│   ├── docs.js -│   ├── page.js -│   ├── post.js -│   └── templates.md +│ ├── advanced.js +│ ├── blog.js +│ ├── docs.js +│ ├── page.js +│ ├── post.js +│ └── templates.md └── utils ├── attribute.js ├── blm-badge.js @@ -325,8 +325,8 @@ ├── ActionLink.js ├── CtaButtons.js ├── DarkToggle -│   ├── index.js -│   └── styles.js +│ ├── index.js +│ └── styles.js ├── DocsMenu.js ├── DocsSubmenu.js ├── Footer.js diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/tech-used.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/tech-used.md.md index abe925c051..7eb0792db5 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/tech-used.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/tech-used.md.md @@ -4,7 +4,7 @@ ## ![Simple Analytics](https://d363qos3mhnap4.cloudfront.net/thumb/qe-d6-88-zj-39-z5/n)[Simple Analytics](https://trends.builtwith.com/analytics/Simple-Analytics) -[Simple Analytics Usage Statistics](https://trends.builtwith.com/analytics/Simple-Analytics) - [Download List of All Websites using Simple Analytics](https://trends.builtwith.com/websitelist/Simple-Analytics) +[Simple Analytics Usage Statistics](https://trends.builtwith.com/analytics/Simple-Analytics) - [Download List of All Websites using Simple Analytics](https://trends.builtwith.com/websitelist/Simple-Analytics) Pageviews, referrers, top pages, and screen size analytics tracking system. @@ -12,21 +12,21 @@ Pageviews, referrers, top pages, and screen size analytics tracking system. ## ![Global Site Tag](https://dbuflkpcdpfh3.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Global Site Tag](https://trends.builtwith.com/analytics/Global-Site-Tag) -[Global Site Tag Usage Statistics](https://trends.builtwith.com/analytics/Global-Site-Tag) - [Download List of All Websites using Global Site Tag](https://trends.builtwith.com/websitelist/Global-Site-Tag) +[Global Site Tag Usage Statistics](https://trends.builtwith.com/analytics/Global-Site-Tag) - [Download List of All Websites using Global Site Tag](https://trends.builtwith.com/websitelist/Global-Site-Tag) Google's primary tag for Google Measurement/Conversion Tracking, Adwords and DoubleClick. ## ![Google Analytics](https://d2uu9ep1796sii.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Analytics](https://trends.builtwith.com/analytics/Google-Analytics) -[Google Analytics Usage Statistics](https://trends.builtwith.com/analytics/Google-Analytics) - [Download List of All Websites using Google Analytics](https://trends.builtwith.com/websitelist/Google-Analytics) +[Google Analytics Usage Statistics](https://trends.builtwith.com/analytics/Google-Analytics) - [Download List of All Websites using Google Analytics](https://trends.builtwith.com/websitelist/Google-Analytics) Google Analytics offers a host of compelling features and benefits for everyone from senior executives and advertising and marketing professionals to site owners and content developers. -[Application Performance](https://trends.builtwith.com/analytics/application-performance) - [Audience Measurement](https://trends.builtwith.com/analytics/audience-measurement) - [Visitor Count Tracking](https://trends.builtwith.com/analytics/visitor-count-tracking) +[Application Performance](https://trends.builtwith.com/analytics/application-performance) - [Audience Measurement](https://trends.builtwith.com/analytics/audience-measurement) - [Visitor Count Tracking](https://trends.builtwith.com/analytics/visitor-count-tracking) ##### ![Google Analytics 4](https://deo39crpw7zzn.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Analytics 4](https://trends.builtwith.com/analytics/Google-Analytics-4) -[Google Analytics 4 Usage Statistics](https://trends.builtwith.com/analytics/Google-Analytics-4) - [Download List of All Websites using Google Analytics 4](https://trends.builtwith.com/websitelist/Google-Analytics-4) +[Google Analytics 4 Usage Statistics](https://trends.builtwith.com/analytics/Google-Analytics-4) - [Download List of All Websites using Google Analytics 4](https://trends.builtwith.com/websitelist/Google-Analytics-4) Google Analytics 4 formerly known as App + Web is a new version of Google Analytics that was released in October 2020. @@ -36,13 +36,13 @@ Google Analytics 4 formerly known as App + Web is a new version of Google Analyt ## ![Imgur](https://dbuflkpcdpfh3.cloudfront.net/thumb/7j-jc-12-69-dc-30/n)[Imgur](https://trends.builtwith.com/widgets/Imgur) -[Imgur Usage Statistics](https://trends.builtwith.com/widgets/Imgur) - [Download List of All Websites using Imgur](https://trends.builtwith.com/websitelist/Imgur) +[Imgur Usage Statistics](https://trends.builtwith.com/widgets/Imgur) - [Download List of All Websites using Imgur](https://trends.builtwith.com/websitelist/Imgur) The page contains content from image sharing website imgur. ## ![Google Font API](https://dbuflkpcdpfh3.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Font API](https://trends.builtwith.com/widgets/Google-Font-API) -[Google Font API Usage Statistics](https://trends.builtwith.com/widgets/Google-Font-API) - [Download List of All Websites using Google Font API](https://trends.builtwith.com/websitelist/Google-Font-API) +[Google Font API Usage Statistics](https://trends.builtwith.com/widgets/Google-Font-API) - [Download List of All Websites using Google Font API](https://trends.builtwith.com/websitelist/Google-Font-API) The Google Font API helps you add web fonts to any web page. @@ -50,7 +50,7 @@ The Google Font API helps you add web fonts to any web page. ## ![Google Tag Manager](https://d2uu9ep1796sii.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Tag Manager](https://trends.builtwith.com/widgets/Google-Tag-Manager) -[Google Tag Manager Usage Statistics](https://trends.builtwith.com/widgets/Google-Tag-Manager) - [Download List of All Websites using Google Tag Manager](https://trends.builtwith.com/websitelist/Google-Tag-Manager) +[Google Tag Manager Usage Statistics](https://trends.builtwith.com/widgets/Google-Tag-Manager) - [Download List of All Websites using Google Tag Manager](https://trends.builtwith.com/websitelist/Google-Tag-Manager) Tag management that lets you add and update website tags without changes to underlying website code. @@ -58,7 +58,7 @@ Tag management that lets you add and update website tags without changes to unde ## ![Icons8](https://dbuflkpcdpfh3.cloudfront.net/thumb/qj-44-7q-25-27-46/n)[Icons8](https://trends.builtwith.com/widgets/Icons8) -[Icons8 Usage Statistics](https://trends.builtwith.com/widgets/Icons8) - [Download List of All Websites using Icons8](https://trends.builtwith.com/websitelist/Icons8) +[Icons8 Usage Statistics](https://trends.builtwith.com/widgets/Icons8) - [Download List of All Websites using Icons8](https://trends.builtwith.com/websitelist/Icons8) Icons, photos and illustrations. @@ -70,19 +70,19 @@ Icons, photos and illustrations. ## ![Firebase](https://deo39crpw7zzn.cloudfront.net/thumb/8j-10-57-77-5q-2c/n)[Firebase](https://trends.builtwith.com/framework/Firebase) -[Firebase Usage Statistics](https://trends.builtwith.com/framework/Firebase) - [Download List of All Websites using Firebase](https://trends.builtwith.com/websitelist/Firebase) +[Firebase Usage Statistics](https://trends.builtwith.com/framework/Firebase) - [Download List of All Websites using Firebase](https://trends.builtwith.com/websitelist/Firebase) A scalable real time backend system for websites. ## ![Gatsby JS](https://dbuflkpcdpfh3.cloudfront.net/thumb/qj-9z-d6-dd-ej-c6/n)[Gatsby JS](https://trends.builtwith.com/framework/Gatsby-JS) -[Gatsby JS Usage Statistics](https://trends.builtwith.com/framework/Gatsby-JS) - [Download List of All Websites using Gatsby JS](https://trends.builtwith.com/websitelist/Gatsby-JS) +[Gatsby JS Usage Statistics](https://trends.builtwith.com/framework/Gatsby-JS) - [Download List of All Websites using Gatsby JS](https://trends.builtwith.com/websitelist/Gatsby-JS) Modern website and web apps generator for React. ## ![PHP](https://d3c1mi4ekssrlm.cloudfront.net/thumb/37-1z-j4-66-47-qe/n)[PHP](https://trends.builtwith.com/framework/PHP) -[PHP Usage Statistics](https://trends.builtwith.com/framework/PHP) - [Download List of All Websites using PHP](https://trends.builtwith.com/websitelist/PHP) +[PHP Usage Statistics](https://trends.builtwith.com/framework/PHP) - [Download List of All Websites using PHP](https://trends.builtwith.com/websitelist/PHP) PHP is a widely used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. @@ -92,19 +92,19 @@ PHP is a widely used general-purpose scripting language that is especially suite ## ![Viewport Meta](https://dbuflkpcdpfh3.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Viewport Meta](https://trends.builtwith.com/mobile/Viewport-Meta) -[Viewport Meta Usage Statistics](https://trends.builtwith.com/mobile/Viewport-Meta) - [Download List of All Websites using Viewport Meta](https://trends.builtwith.com/websitelist/Viewport-Meta) +[Viewport Meta Usage Statistics](https://trends.builtwith.com/mobile/Viewport-Meta) - [Download List of All Websites using Viewport Meta](https://trends.builtwith.com/websitelist/Viewport-Meta) This page uses the viewport meta tag which means the content may be optimized for mobile content. ## ![IPhone / Mobile Compatible](https://d3c1mi4ekssrlm.cloudfront.net/thumb/q7-6j-j6-0e-c0-z5/n)[IPhone / Mobile Compatible](https://trends.builtwith.com/mobile/IPhone---Mobile-Compatible) -[IPhone / Mobile Compatible Usage Statistics](https://trends.builtwith.com/mobile/IPhone---Mobile-Compatible) - [Download List of All Websites using IPhone / Mobile Compatible](https://trends.builtwith.com/websitelist/IPhone---Mobile-Compatible) +[IPhone / Mobile Compatible Usage Statistics](https://trends.builtwith.com/mobile/IPhone---Mobile-Compatible) - [Download List of All Websites using IPhone / Mobile Compatible](https://trends.builtwith.com/websitelist/IPhone---Mobile-Compatible) The website contains code that allows the page to support IPhone / Mobile Content. ## ![Apple Mobile Web Clips Icon](https://d3c1mi4ekssrlm.cloudfront.net/thumb/q7-6j-j6-0e-c0-z5/n)[Apple Mobile Web Clips Icon](https://trends.builtwith.com/mobile/Apple-Mobile-Web-Clips-Icon) -[Apple Mobile Web Clips Icon Usage Statistics](https://trends.builtwith.com/mobile/Apple-Mobile-Web-Clips-Icon) - [Download List of All Websites using Apple Mobile Web Clips Icon](https://trends.builtwith.com/websitelist/Apple-Mobile-Web-Clips-Icon) +[Apple Mobile Web Clips Icon Usage Statistics](https://trends.builtwith.com/mobile/Apple-Mobile-Web-Clips-Icon) - [Download List of All Websites using Apple Mobile Web Clips Icon](https://trends.builtwith.com/websitelist/Apple-Mobile-Web-Clips-Icon) This page contains an icon for iPhone, iPad and iTouch devices. @@ -114,25 +114,25 @@ This page contains an icon for iPhone, iPad and iTouch devices. ## ![AJAX Libraries API](https://dbuflkpcdpfh3.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[AJAX Libraries API](https://trends.builtwith.com/cdn/AJAX-Libraries-API) -[AJAX Libraries API Usage Statistics](https://trends.builtwith.com/cdn/AJAX-Libraries-API) - [Download List of All Websites using AJAX Libraries API](https://trends.builtwith.com/websitelist/AJAX-Libraries-API) +[AJAX Libraries API Usage Statistics](https://trends.builtwith.com/cdn/AJAX-Libraries-API) - [Download List of All Websites using AJAX Libraries API](https://trends.builtwith.com/websitelist/AJAX-Libraries-API) The AJAX Libraries API is a content distribution network and loading architecture for the most popular, open source JavaScript libraries. ## ![GStatic Google Static Content](https://d3dpwkknyrpnnn.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[GStatic Google Static Content](https://trends.builtwith.com/cdn/GStatic-Google-Static-Content) -[GStatic Google Static Content Usage Statistics](https://trends.builtwith.com/cdn/GStatic-Google-Static-Content) - [Download List of All Websites using GStatic Google Static Content](https://trends.builtwith.com/websitelist/GStatic-Google-Static-Content) +[GStatic Google Static Content Usage Statistics](https://trends.builtwith.com/cdn/GStatic-Google-Static-Content) - [Download List of All Websites using GStatic Google Static Content](https://trends.builtwith.com/websitelist/GStatic-Google-Static-Content) Google has off-loaded static content (Javascript/Images/CSS) to a different domain name in an effort to reduce bandwidth usage and increase network performance for the end user. ## ![jsDelivr](https://d3c1mi4ekssrlm.cloudfront.net/thumb/e4-97-7j-d6-79-40/n)[jsDelivr](https://trends.builtwith.com/cdn/jsDelivr) -[jsDelivr Usage Statistics](https://trends.builtwith.com/cdn/jsDelivr) - [Download List of All Websites using jsDelivr](https://trends.builtwith.com/websitelist/jsDelivr) +[jsDelivr Usage Statistics](https://trends.builtwith.com/cdn/jsDelivr) - [Download List of All Websites using jsDelivr](https://trends.builtwith.com/websitelist/jsDelivr) A free CDN where Javascript developers can host their files. Encompasses MaxCDN, and BootstrapCDN. ## ![CloudFront](https://d2uu9ep1796sii.cloudfront.net/thumb/e6-59-87-q5-e8-94/n)[CloudFront](https://trends.builtwith.com/cdn/CloudFront) -[CloudFront Usage Statistics](https://trends.builtwith.com/cdn/CloudFront) - [Download List of All Websites using CloudFront](https://trends.builtwith.com/websitelist/CloudFront) +[CloudFront Usage Statistics](https://trends.builtwith.com/cdn/CloudFront) - [Download List of All Websites using CloudFront](https://trends.builtwith.com/websitelist/CloudFront) Amazon CloudFront is a web service for content delivery. It integrates with other Amazon Web Services to give developers and businesses an easy way to distribute content to end users with low latency, high data transfer speeds, and no commitments. @@ -142,7 +142,7 @@ Amazon CloudFront is a web service for content delivery. It integrates with othe ## ![Loom](https://dbuflkpcdpfh3.cloudfront.net/thumb/j6-59-98-6z-2d-c9/n)[Loom](https://trends.builtwith.com/media/Loom) -[Loom Usage Statistics](https://trends.builtwith.com/media/Loom) - [Download List of All Websites using Loom](https://trends.builtwith.com/websitelist/Loom) +[Loom Usage Statistics](https://trends.builtwith.com/media/Loom) - [Download List of All Websites using Loom](https://trends.builtwith.com/websitelist/Loom) Free Screen and video recording software. @@ -152,7 +152,7 @@ Free Screen and video recording software. ## ![Netlify](https://d363qos3mhnap4.cloudfront.net/thumb/77-08-dd-68-d6-jj/n)[Netlify](https://trends.builtwith.com/cms/Netlify) -[Netlify Usage Statistics](https://trends.builtwith.com/cms/Netlify) - [Download List of All Websites using Netlify](https://trends.builtwith.com/websitelist/Netlify) +[Netlify Usage Statistics](https://trends.builtwith.com/cms/Netlify) - [Download List of All Websites using Netlify](https://trends.builtwith.com/websitelist/Netlify) Netlify is a platform that automates your code to create web sites. @@ -162,25 +162,25 @@ Netlify is a platform that automates your code to create web sites. ## ![Google Hosted Libraries](https://d363qos3mhnap4.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Hosted Libraries](https://trends.builtwith.com/javascript/Google-Hosted-Libraries) -[Google Hosted Libraries Usage Statistics](https://trends.builtwith.com/javascript/Google-Hosted-Libraries) - [Download List of All Websites using Google Hosted Libraries](https://trends.builtwith.com/websitelist/Google-Hosted-Libraries) +[Google Hosted Libraries Usage Statistics](https://trends.builtwith.com/javascript/Google-Hosted-Libraries) - [Download List of All Websites using Google Hosted Libraries](https://trends.builtwith.com/websitelist/Google-Hosted-Libraries) Google Hosted Libraries is a globally available content distribution network for the most popular, open-source JavaScript libraries. ##### ![Google Hosted jQuery](https://d2uu9ep1796sii.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Hosted jQuery](https://trends.builtwith.com/javascript/Google-Hosted-jQuery) -[Google Hosted jQuery Usage Statistics](https://trends.builtwith.com/javascript/Google-Hosted-jQuery) - [Download List of All Websites using Google Hosted jQuery](https://trends.builtwith.com/websitelist/Google-Hosted-jQuery) +[Google Hosted jQuery Usage Statistics](https://trends.builtwith.com/javascript/Google-Hosted-jQuery) - [Download List of All Websites using Google Hosted jQuery](https://trends.builtwith.com/websitelist/Google-Hosted-jQuery) jQuery hoted at Google. ## ![Facebook for Websites](https://d3dpwkknyrpnnn.cloudfront.net/thumb/78-jd-31-5d-34-06/n)[Facebook for Websites](https://trends.builtwith.com/javascript/Facebook-for-Websites) -[Facebook for Websites Usage Statistics](https://trends.builtwith.com/javascript/Facebook-for-Websites) - [Download List of All Websites using Facebook for Websites](https://trends.builtwith.com/websitelist/Facebook-for-Websites) +[Facebook for Websites Usage Statistics](https://trends.builtwith.com/javascript/Facebook-for-Websites) - [Download List of All Websites using Facebook for Websites](https://trends.builtwith.com/websitelist/Facebook-for-Websites) Allows a user to make a website more sociable and connected with integrations from the hugely popular Facebook website. ## ![Facebook SDK](https://d1nywwyphm5jsu.cloudfront.net/thumb/78-jd-31-5d-34-06/n)[Facebook SDK](https://trends.builtwith.com/javascript/Facebook-SDK) -[Facebook SDK Usage Statistics](https://trends.builtwith.com/javascript/Facebook-SDK) - [Download List of All Websites using Facebook SDK](https://trends.builtwith.com/websitelist/Facebook-SDK) +[Facebook SDK Usage Statistics](https://trends.builtwith.com/javascript/Facebook-SDK) - [Download List of All Websites using Facebook SDK](https://trends.builtwith.com/websitelist/Facebook-SDK) JavaScript SDK enables you to access all of the features of the Graph API via JavaScript, and it provides a rich set of client-side functionality for authentication and sharing. It differs from Facebook Connect. @@ -190,7 +190,7 @@ JavaScript SDK enables you to access all of the features of the Graph API via Ja ## ![Google Adsense](https://d2uu9ep1796sii.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Adsense](https://trends.builtwith.com/ads/Google-Adsense) -[Google Adsense Usage Statistics](https://trends.builtwith.com/ads/Google-Adsense) - [Download List of All Websites using Google Adsense](https://trends.builtwith.com/websitelist/Google-Adsense) +[Google Adsense Usage Statistics](https://trends.builtwith.com/ads/Google-Adsense) - [Download List of All Websites using Google Adsense](https://trends.builtwith.com/websitelist/Google-Adsense) A contextual advertising solution for delivering Google AdWords ads that are relevant to site content pages. @@ -198,7 +198,7 @@ A contextual advertising solution for delivering Google AdWords ads that are rel ##### ![Google Adsense Asynchronous](https://d2uu9ep1796sii.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Adsense Asynchronous](https://trends.builtwith.com/ads/Google-Adsense-Asynchronous) -[Google Adsense Asynchronous Usage Statistics](https://trends.builtwith.com/ads/Google-Adsense-Asynchronous) - [Download List of All Websites using Google Adsense Asynchronous](https://trends.builtwith.com/websitelist/Google-Adsense-Asynchronous) +[Google Adsense Asynchronous Usage Statistics](https://trends.builtwith.com/ads/Google-Adsense-Asynchronous) - [Download List of All Websites using Google Adsense Asynchronous](https://trends.builtwith.com/websitelist/Google-Adsense-Asynchronous) Fully asynchronous version of the AdSense ad code. @@ -284,7 +284,7 @@ Bootstrap is a toolkit from Twitter designed to kickstart development of webapps ##### ![Bootstrap 5.1.*](https://dbsikz63q4tyx.cloudfront.net/thumb/57-j1-ec-41-c9-3d/n)[Bootstrap 5.1.\*](https://trends.builtwith.com/docinfo/Bootstrap-5.1.*) -[Bootstrap 5.1.\* Usage Statistics](https://trends.builtwith.com/docinfo/Bootstrap-5.1.*) - [Download List of All Websites using Bootstrap 5.1.\*](https://trends.builtwith.com/websitelist/Bootstrap-5.1.*) +[Bootstrap 5.1.\* Usage Statistics](https://trends.builtwith.com/docinfo/Bootstrap-5.1.*) - [Download List of All Websites using Bootstrap 5.1.\*](https://trends.builtwith.com/websitelist/Bootstrap-5.1.*) Bootstrap Version 5.1.\* @@ -324,7 +324,7 @@ This website includes instructions for HSTS loading that would allow it to be su ## ![Google Webmaster](https://d3nsmo0b6ncuv0.cloudfront.net/thumb/5z-6j-53-j0-c4-77/n)[Google Webmaster](https://trends.builtwith.com/Web-Master/Google-Webmaster) -[Google Webmaster Usage Statistics](https://trends.builtwith.com/Web-Master/Google-Webmaster) - [Download List of All Websites using Google Webmaster](https://trends.builtwith.com/websitelist/Google-Webmaster) +[Google Webmaster Usage Statistics](https://trends.builtwith.com/Web-Master/Google-Webmaster) - [Download List of All Websites using Google Webmaster](https://trends.builtwith.com/websitelist/Google-Webmaster) Webmaster tools provide you with a free and easy way to make your site more Google-friendly. @@ -334,7 +334,7 @@ Webmaster tools provide you with a free and easy way to make your site more Goog ## ![Content Delivery Network](https://deo39crpw7zzn.cloudfront.net/thumb/ee-d6-z4-q2-dz-21/n)[Content Delivery Network](https://trends.builtwith.com/CDN/Content-Delivery-Network) -[Content Delivery Network Usage Statistics](https://trends.builtwith.com/CDN/Content-Delivery-Network) - [Download List of All Websites using Content Delivery Network](https://trends.builtwith.com/websitelist/Content-Delivery-Network) +[Content Delivery Network Usage Statistics](https://trends.builtwith.com/CDN/Content-Delivery-Network) - [Download List of All Websites using Content Delivery Network](https://trends.builtwith.com/websitelist/Content-Delivery-Network) This page contains links that give the impression that some of the site contents are stored on a content delivery network. @@ -488,4 +488,4 @@ Get a notification when netlify.app adds new technologies. ###### Suggest a Technology -Can't find the technology you are looking for? [Send us a su](https://builtwith.com/suggest) +Can't find the technology you are looking for? [Send us a su](https://builtwith.com/suggest) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/documentation/validation-report.md.md b/notes/BGOONZ_BLOG_2.0.wiki/documentation/validation-report.md.md index 380dc88375..084d6b83a8 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/documentation/validation-report.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/documentation/validation-report.md.md @@ -402,15 +402,15 @@ Note that iconic images that are redundant with text next to them or purely deco 34. ` setTheme(preferredTheme || (darkQuery.matches ? 'dark' : 'light'))``↩ ` 35. ` }()``↩ ` 36. `

        I am a musician, electrical engineer & web developer

        A passionate student of web development from New Jersey U.S.A

        ******************** ****

        ****

        A Quick Guide To Big O

        Memoization, Tabulation, and Sorting Algorithms by Example``↩ ` -37. ` Why is looking at runtime not a reliable method of calculating time complexity?

        **python**

        Python Guide

        Python has a built in help function that let’s you see a description of the source code without having to navigate to it… “-SickNasty … Autor Unknown” .

        ****

        Guitar Effects Triggering w DTW

        This section exists for me to day dream ideas for the future... and maybe... just maybe, hold myself accountable to them.

        **img of dtw**

        Beginner Guide React

        As I learn to build web applications in React I will blog about it in this series in an attempt to capture the questions that a complete beginner might encounter that a more seasoned developer would take for granted!

        **img of react**

        Scope & Closure

        Scope & Context in JS

        The scope of a program in JavaScript is the set of variables that are available for use within the program.

        **Every idea needs a medium**

        My Medium Blog

        PostgreSQL Cheat Sheet, Everything You Need to Get Started With VSCode + Extensions & Resources, Super Simple Intro To HTML, Understanding Git... etc....

        **
        **
        **medium**

        Web Audio DAW

        Music

        **

        Spotify

        **

        Current Interests

        From github repositories to existential questions.

        **angolia**

        Angolia

        Full Text Search

        **

        **

        **neural networks**

        ****Convolutional Neural Networks

        Artificial neural networks, usually simply called neural networks, are computing systems vaguely inspired by the biological neural networks****

        **jamstack**

        Jamstack

        Why Jamstack

        Jamstack is the new standard architecture for the web. Using Git workflows and modern build tools, pre-rendered content is served to a CDN and made dynamic through APIs and serverless functions. Technologies in the stack include JavaScript frameworks, Static Site Generators, Headless CMSs, and CDNs.

        Resume & Portfolio

        ****

        Showcase

        ****My Projects!

        **
        **

        Mini Projects

        **

        Spotify

        **

        Current Interests

        From github repositories to existential questions.

        **angolia**

        Angolia

        Full Text Search

        **

        **

        **neural networks**

        ****Convolutional Neural Networks

        Artificial neural networks, usually simply called neural networks, are computing systems vaguely inspired by the biological neural networks****

        **jamstack**

        Jamstack

        Why Jamstack

        Jamstack is the new standard architecture for the web. Using Git workflows and modern build tools, pre-rendered content is served to a CDN and made dynamic through APIs and serverless functions. Technologies in the stack include JavaScript frameworks, Static Site Generators, Headless CMSs, and CDNs.

        Resume & Portfolio

        ****

        Showcase

        ****My Projects!

        **
        **

        Mini Projects

        **

        Code Playground(s)

        **

        Code Playground(s)

        **
        **
        **

        Mini Projects

        **
        **
        **

        Mini Projects

        **
        **
        **

        Blog-Archive

        **
        **
        **

        Blog-Archive

        **

        Nextjs & SanityCMS Blog W Comments

        **

        Nextjs & SanityCMS Blog W Comments

        **
        **
        **

        Contact

        ` diff --git a/notes/BGOONZ_BLOG_2.0.wiki/embeds/links-2-embed.md.md b/notes/BGOONZ_BLOG_2.0.wiki/embeds/links-2-embed.md.md index 7ff1019b42..074da92890 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/embeds/links-2-embed.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/embeds/links-2-embed.md.md @@ -1,12 +1,12 @@ - + https://sanity-signup.netlify.app/ https://random-static-html-deploys.netlify.app/embeds-showcase.html - + - + - [cheat sheets](https://cheatsheets-42.netlify.app/) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/features/Add-site-search-w-algolia.md.md b/notes/BGOONZ_BLOG_2.0.wiki/features/Add-site-search-w-algolia.md.md index 090abf8f4c..ae6cc35d68 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/features/Add-site-search-w-algolia.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/features/Add-site-search-w-algolia.md.md @@ -1,8 +1,8 @@ # Adding a Site Search to Your Stackbit Gatsby Site -There are a number of options for adding search to your Stackbit site built with Gatsby. There are some free options like [Lunr](https://lunrjs.com/) that are free and open source and can perform simple searches on pre-generated indexes. In this example, we'll use a service called [Algolia](https://www.algolia.com/) for the search API. Algolia is a service specifically geared towards search and thus has many more features. Algolia is a commercial offering, but it has a generous free tier. +There are a number of options for adding search to your Stackbit site built with Gatsby. There are some free options like [Lunr](https://lunrjs.com/) that are free and open source and can perform simple searches on pre-generated indexes. In this example, we'll use a service called [Algolia](https://www.algolia.com/) for the search API. Algolia is a service specifically geared towards search and thus has many more features. Algolia is a commercial offering, but it has a generous free tier. -The example below was built with Stackbit. You can see the full project code at ). +The example below was built with Stackbit. You can see the full project code at ). ## [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#setting_up_algolia)Setting Up Algolia @@ -10,8 +10,8 @@ You'll need to set up your account on Algolia and set up a project. You can skip Algolia provides two projects that we'll make use of: -- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. -- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. +- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. +- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. Let's start by installing these on our Gatsby project. @@ -24,7 +24,7 @@ Copy ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#configuring_algolia_in_our_gatsby_project)Configuring Algolia in Our Gatsby Project -Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. +Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. ``` const queries = require('./src/utils/algolia'); @@ -34,7 +34,7 @@ require('dotenv').config(); Copy -Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: +Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: ``` { @@ -49,7 +49,7 @@ Neither of these files exist yet, but we'll create them in a moment. Staying in ``` -Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) +Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) ``` GATSBY_ALGOLIA_APP_ID=MY_ALGOLIA_APP_ID @@ -58,13 +58,13 @@ GATSBY_ALGOLIA_ADMIN_KEY=MY_ALGOLIA_ADMIN_KEY ``` -Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. +Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#adding_slugs_to_posts)Adding Slugs to Posts -In some cases, pages do not have a `slug` field in the frontmatter. Having slugs available in the search makes it much easier to output the results. Rather than manually add slugs to all of the content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. +In some cases, pages do not have a `slug` field in the frontmatter. Having slugs available in the search makes it much easier to output the results. Rather than manually add slugs to all of the content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. -This depends on `gatsby-source-filesystem`, so we'll need to install that first. Then, add the following code to `gatsby-node.js`: +This depends on `gatsby-source-filesystem`, so we'll need to install that first. Then, add the following code to `gatsby-node.js`: ``` const { createFilePath } = require(`gatsby-source-filesystem`); @@ -89,11 +89,11 @@ Now when we query Gastby for our pages, we'll be able to get the slug and provid ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#populating_our_indices)Populating Our Indices -Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. +Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. -Typically a Stackbit site has both pages and posts that have differing front matter properties. For this example, we'll be creating a blog search so we'll create an index that is specific to the blog called `Posts`. Feel free to customize the query to create indices for whatever content you wish to make searchable. +Typically a Stackbit site has both pages and posts that have differing front matter properties. For this example, we'll be creating a blog search so we'll create an index that is specific to the blog called `Posts`. Feel free to customize the query to create indices for whatever content you wish to make searchable. -Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. +Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. ``` const postQuery = `{ @@ -141,7 +141,7 @@ module.exports = queries; Copy -With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. +With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. ![console showing indices have been populated](https://www.stackbit.com/docs/images/indices-populated-sm.png) @@ -151,9 +151,9 @@ We can now see the results when going into Algolia and browsing Indices. ## [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#creating_the_search_ui)Creating the Search UI -Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). +Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). -Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. +Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. ``` import React from 'react'; @@ -184,7 +184,7 @@ export default class Search extends React.Component { Copy -We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. +We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. ``` --- @@ -196,15 +196,15 @@ template: search Copy -From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: +From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: ![InstantSearch unstyled](https://www.stackbit.com/docs/images/basic-instantsearch.gif) ### [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#customizing_the_output)Customizing the Output -Let's integrate the search into our existing blog page, allowing a user to filter the results based upon their search. In doing so, we'll see how to customize the output of the InstantSearch `Hits` component. +Let's integrate the search into our existing blog page, allowing a user to filter the results based upon their search. In doing so, we'll see how to customize the output of the InstantSearch `Hits` component. -Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. +Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. ``` import React from 'react'; @@ -266,9 +266,9 @@ export default function Search({ indexName }) { Copy -As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. +As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. -Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: +Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: ``` import React from 'react'; @@ -303,7 +303,7 @@ The result works as shown below. ## [](https://www.stackbit.com/docs/developer-guides/gatsby/site-search/#deployment)Deployment -When we're ready to deploy the search, we need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. +When we're ready to deploy the search, we need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. ![Netlify environment variables](https://www.stackbit.com/docs/images/env-variables-sm.png) diff --git a/notes/BGOONZ_BLOG_2.0.wiki/features/Adding-search-2-gatsby-site.md.md b/notes/BGOONZ_BLOG_2.0.wiki/features/Adding-search-2-gatsby-site.md.md index 68adeee8d8..9661ddd5e8 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/features/Adding-search-2-gatsby-site.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/features/Adding-search-2-gatsby-site.md.md @@ -1,6 +1,6 @@ # Adding Search to Your Gatsby Site -Brian Rinaldi --- July 01, 2020 +Brian Rinaldi --- July 01, 2020 Search is a common site requirement. Let's look at how to populate a search index on Algolia and implement search on a Jamstack site built with Gatsby. @@ -8,7 +8,7 @@ Search is an important part of almost any site. Once you have a lot of content, ![nope](https://www.stackbit.com/images/1593607475-nope.jpg) -In this post, we're going to explore adding search to a site built with Gatsby. We'll use a service called [Algolia](https://www.algolia.com/) for the search API. This is a commercial offering, but it has a generous free tier. The example site was built with Stackbit, though there's nothing in the code that we'll discuss that is Stackbit specific (for reference, you can see the full project code at ). Ok, enough intro...let's get coding. +In this post, we're going to explore adding search to a site built with Gatsby. We'll use a service called [Algolia](https://www.algolia.com/) for the search API. This is a commercial offering, but it has a generous free tier. The example site was built with Stackbit, though there's nothing in the code that we'll discuss that is Stackbit specific (for reference, you can see the full project code at ). Ok, enough intro...let's get coding. ## Setting Up Algolia @@ -16,8 +16,8 @@ First things first, you'll need to set up your account on Algolia and set up a p Algolia provides two projects that we'll make use of: -- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. -- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. +- [Gatsby Plugin Algolia](https://github.com/algolia/gatsby-plugin-algolia) will help us create our indices and make sure they are kept in sync with our content. +- [React InstantSearch](https://github.com/algolia/react-instantsearch) provides a pre-built set of tools for interacting with Algolia's search API for a "search as you type" UI. This project also encompasses the `react-instantsearch-dom` UI tools we'll also use. Let's start by installing these on our Gatsby project. @@ -30,7 +30,7 @@ Copy ### Configuring Algolia in Our Gatsby Project -Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. +Next we need to edit our `gatsby-config.js` file, first by adding these two lines prior to the `module.exports` block. ``` const queries = require('./src/utils/algolia'); @@ -40,7 +40,7 @@ require('dotenv').config(); Copy -Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: +Neither of these files exist yet, but we'll create them in a moment. Staying in `gatsby-config.js`, within the `module.exports` block and within the `plugins` array, add the following details: ``` { @@ -55,7 +55,7 @@ Neither of these files exist yet, but we'll create them in a moment. Staying in ``` -Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) +Finally, create (or open) a `.env` file and add the API key details from Algolia to the file as follow (replacing the values on the right of the equal signs with the appropriate keys from Algolia) ``` GATSBY_ALGOLIA_APP_ID=MY_ALGOLIA_APP_ID @@ -64,13 +64,13 @@ GATSBY_ALGOLIA_ADMIN_KEY=MY_ALGOLIA_ADMIN_KEY ``` -Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. +Please ensure that this `.env` file is added to your `.gitignore` so that you do not accidentally check in your private keys. ### Adding Slugs to Posts -In some cases, as in my site generated by Stackbit, pages do not have a `slug` field in the frontmatter. Having slugs available in the search made it much easier to output the results. Rather than manually add slugs to all of my content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. +In some cases, as in my site generated by Stackbit, pages do not have a `slug` field in the frontmatter. Having slugs available in the search made it much easier to output the results. Rather than manually add slugs to all of my content, Gatsby provides instructions on how to [create slugs for pages](https://www.gatsbyjs.org/docs/creating-slugs-for-pages/) automatically. -This depends on `gatsby-source-filesystem`, so you'll need to install that first. Then, add the following code to `gatsby-node.js`: +This depends on `gatsby-source-filesystem`, so you'll need to install that first. Then, add the following code to `gatsby-node.js`: ``` const { createFilePath } = require(`gatsby-source-filesystem`); @@ -95,11 +95,11 @@ Now when we query Gastby for our pages, we'll be able to get the slug and provid ### Populating Our Indices -Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. +Let's create the queries that will populate our indices on Algolia. It's important to note that your query depends on the data you have in your content and how you store your content. The best way to create and test your GraphQL queries to be sure you will populate your indices correctly is to use GraphiQL, which is running locally whenever you run `gatsby develop` generally at `http://localhost:8000/___graphql`. -In my case, my Stackbit site has both pages and posts that have differing frontmatter properties. For this example, we'll be creating a blog search so I created an index that is specific to the blog calles `Posts`. Feel free to customize your query to create indices for whatever content you wish to make searchable. +In my case, my Stackbit site has both pages and posts that have differing frontmatter properties. For this example, we'll be creating a blog search so I created an index that is specific to the blog calles `Posts`. Feel free to customize your query to create indices for whatever content you wish to make searchable. -Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. +Place the query in a `/src/utils/algolia.js` file like the one below (recall that we referenced this file in our `gatsby-config.js` file above). Note that the excerpts for the content are truncated to prevent going over the character limit for individual Algolia records. ``` const postQuery = `{ @@ -147,7 +147,7 @@ module.exports = queries; Copy -With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. +With the queries in place, our indices on Algolia will update whenever we build our Gatsby site. To do this, run `gatsby build` from the command line to run a production build of the site. We should see an indication that our indices have been populated from the console output. ![console showing indices have been populated](https://www.stackbit.com/images/1593607471-indices-populated-sm.png) @@ -157,9 +157,9 @@ We can now see the results when going into Algolia and browsing Indices. ## Creating the Search UI -Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). +Now that our search indices are populated, let's display some results. To do this, we're going to use [React InstantSearch](https://github.com/algolia/react-instantsearch), which offers a search-as-you-type experience. It pretty much works out of the box using the [code they provide](https://www.algolia.com/doc/guides/building-search-ui/installation/react/). -Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. +Let's look at the most basic implementation in action. Start by creating a new template as `/src/templates/search.js`. This template will just wrap the example code taken almost directly from the InstantSearch page and place it in the site's UI so that we can try it out. ``` import React from 'react'; @@ -190,7 +190,7 @@ export default class Search extends React.Component { Copy -We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. +We initialize the search client with the secrets that are in the `.env` file we created earlier. Within the layout elements, we include the `InstantSearch` element tied to our `Posts` index in Algolia. The `SearchBox` outputs a search input UI and `hits` outputs the results. Next, just create a search page that will utilize this layout at `/src/pages/blog/search.md`. ``` --- @@ -202,7 +202,7 @@ template: search Copy -From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: +From the console run `gatsby develop` and then navigate to the page, which is typically available at `http://localhost:8000/blog/search/`. Here's what you should see: ![](https://www.stackbit.com/images/gatsby-basic-instant-search.png) @@ -214,9 +214,9 @@ Looks great! We're done! So, ok, our boss has suggested that perhaps we're not quite done yet. She doesn't think the search results are very attractive and, worse yet, they don't even lead anywhere. She has a point. -What if, instead of a separate search page, we actually integrated the search into our existing blog page, allowing a user to filter the results based upon their search? Let's do that and, in doing so, learn how to customize the output of the InstantSearch `Hits` component. +What if, instead of a separate search page, we actually integrated the search into our existing blog page, allowing a user to filter the results based upon their search? Let's do that and, in doing so, learn how to customize the output of the InstantSearch `Hits` component. -Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. +Create a new component as `src/components/search.js` using the source below. Don't worry, I'll explain what we're doing in a moment. ``` import React from 'react'; @@ -278,9 +278,9 @@ export default function Search({ indexName }) { Copy -As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. +As you can see, the actual component output UI is almost identical to the prior search page, with just a `SearchBox` and `Hits`. However, prior to that, we are overriding the default output behavior of `Hits`. If the results return any records, we loop through them, outputting cards identical to the existing blog list on `src/templates/blog.js`, using the `hit` (i.e. search result) values to populate the output. If there are no results, we just display some text informing the user. -Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: +Now let's add it to our blog. Keep in mind that the output of the search results are identical to the regular blog list output and we are using the search without [conditionally handling an empty query](https://www.algolia.com/doc/guides/building-search-ui/going-further/conditional-display/react/#handling-the-empty-query) - this means it will always display posts even if the user has not searched yet. Thus, we can actually replace the regular page output with the search results as in the updated source for `src/templates/blog.js` below: ``` import React from 'react'; @@ -315,10 +315,10 @@ The result works as shown below. ## Where to Go From Here -There's one more step that I should mention. We need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. +There's one more step that I should mention. We need to ensure that the environment variables we created are available when we deploy. On Netlify, all we need to do is go to Settings > Build & Deploy > Environment and add the necessary variables defined in our `.env` file to our deployment settings. ![Netlify environment variables](https://www.stackbit.com/images/1593607459-env-variables-sm.png) We're all set! -Obviously, this is just one way to implement the search. The [Gatsby documentation](https://www.gatsbyjs.org/docs/adding-search-with-algolia/) offers a similar but probably more flexible implementation. The [InstantSearch](https://www.algolia.com/doc/api-reference/widgets/instantsearch/react/) documentation also offers a ton of API and customization details with code samples to help you make the tools fit the needs of your specific site. In the end, implementing a search seems like a complicated task, but, thankfully, the tools and libraries available to us do a lot of the heavy lifting, making our jobs much easier. +Obviously, this is just one way to implement the search. The [Gatsby documentation](https://www.gatsbyjs.org/docs/adding-search-with-algolia/) offers a similar but probably more flexible implementation. The [InstantSearch](https://www.algolia.com/doc/api-reference/widgets/instantsearch/react/) documentation also offers a ton of API and customization details with code samples to help you make the tools fit the needs of your specific site. In the end, implementing a search seems like a complicated task, but, thankfully, the tools and libraries available to us do a lot of the heavy lifting, making our jobs much easier. diff --git a/notes/BGOONZ_BLOG_2.0.wiki/features/add-copy-to-code-blocks.md.md b/notes/BGOONZ_BLOG_2.0.wiki/features/add-copy-to-code-blocks.md.md index 56a92a4369..f9f7a7f287 100644 --- a/notes/BGOONZ_BLOG_2.0.wiki/features/add-copy-to-code-blocks.md.md +++ b/notes/BGOONZ_BLOG_2.0.wiki/features/add-copy-to-code-blocks.md.md @@ -1,8 +1,8 @@ # gatsby-remark-code-buttons -Add buttons to **markdown** code snippets. +Add buttons to **markdown** code snippets. -> This plugin doesn't support MDX. Example of [MDX copy button](https://github.com/gatsbyjs/gatsby/pull/15834). +> This plugin doesn't support MDX. Example of [MDX copy button](https://github.com/gatsbyjs/gatsby/pull/15834). ## [](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#install)Install @@ -14,7 +14,7 @@ npm install gatsby-remark-code-buttons --save-dev ## [](https://www.gatsbyjs.com/plugins/gatsby-remark-code-buttons/#how-to-use)How to use -in your `gatsby-config.js` +in your `gatsby-config.js` ``` plugins: [ @@ -81,7 +81,7 @@ Now that we've injected the custom button, we need to style it! .gatsby-code-button-toaster-text {} ``` -To apply custom styles import stylesheet in your app's root `gatsby-browser.js`. +To apply custom styles import stylesheet in your app's root `gatsby-browser.js`. ``` // gatsby-browser.js @@ -99,7 +99,7 @@ alert('click to copy 💾'); ``` -This plugin will parse the Markdown AST, pluck the button, and then "clean" the code snippet language for further processing. With the default config options this plugin will create the following structure, injecting a custom `div`: +This plugin will parse the Markdown AST, pluck the button, and then "clean" the code snippet language for further processing. With the default config options this plugin will create the following structure, injecting a custom `div`: ``` @@ -118,7 +118,7 @@ This plugin will parse the Markdown AST, pluck the button, and then "clean" the ``` -With `toasterText` config enabled this plugin will inject a custom toaster node: +With `toasterText` config enabled this plugin will inject a custom toaster node: ```
        @@ -153,25 +153,25 @@ alert('will not be copied 💾'); -Accessing the OS clipboard using browser JavaScript has been possible for several years using [`document.execCommand()`](https://www.sitepoint.com/javascript-copy-to-clipboard/). +Accessing the OS clipboard using browser JavaScript has been possible for several years using [`document.execCommand()`](https://www.sitepoint.com/javascript-copy-to-clipboard/). Unfortunately, there are some problems: - clipboard access is synchronous, which has performance and security implications - support is patchy, especially on older versions of Safari on macOS and iOS - permissions access varies across browsers, and -- the API could never be considered *elegant* +- the API could never be considered *elegant* -It's finally been superseded by a new [asynchronous Clipboard API](https://developer.mozilla.org/Web/API/Clipboard_API). It's new, and no browser supports all features, but it's easier to use and more robust. +It's finally been superseded by a new [asynchronous Clipboard API](https://developer.mozilla.org/Web/API/Clipboard_API). It's new, and no browser supports all features, but it's easier to use and more robust. Why Would an App Need to Access the Clipboard? ---------------------------------------------- As a developer, you'll know how the clipboard works and regularly use the following keyboard shortcuts: -- `Ctrl` | `Cmd` + `C` to copy -- `Ctrl` | `Cmd` + `X` to cut -- `Ctrl` | `Cmd` + `V` to paste +- `Ctrl` | `Cmd` + `C` to copy +- `Ctrl` | `Cmd` + `X` to cut +- `Ctrl` | `Cmd` + `V` to paste Those with less computing experience won't necessarily have that knowledge. They may also be using a touch-screen device where keyboard shortcuts aren't available. Offering easy-to-use cut and paste icons can be useful. @@ -185,7 +185,7 @@ Accessing the clipboard programmatically raises several security concerns: - Users often copy passwords or private information so no page should be able to arbitrarily read clipboard data. - Pages should be restricted when adding data to the clipboard. A nefarious page could replace copied text with a dangerous command or even an executable file. -To avoid potential issues, the Clipboard API can only be used on pages served over HTTPS (`localhost` is also permitted). When running in an iframe, the parent page must also grant `clipboard-read` and/or `clipboard-write` permissions: +To avoid potential issues, the Clipboard API can only be used on pages served over HTTPS (`localhost` is also permitted). When running in an iframe, the parent page must also grant `clipboard-read` and/or `clipboard-write` permissions: ``` @@ -200,12 +200,12 @@ The API is only available to the active browser tab (not background tabs) and ca ![Clipboard API user permission](https://uploads.sitepoint.com/wp-content/uploads/2020/11/1606317380permission.png) -This alert is shown when a page first requests clipboard access. It shouldn't cause any issues, given that the API is asynchronous and returns a Promise. It's also possible to examine and request the status using the [Permissions API](https://developer.mozilla.org/Web/API/Permissions_API). +This alert is shown when a page first requests clipboard access. It shouldn't cause any issues, given that the API is asynchronous and returns a Promise. It's also possible to examine and request the status using the [Permissions API](https://developer.mozilla.org/Web/API/Permissions_API). Clipboard API Feature Detection ------------------------------- -The Clipboard API is available when `navigator.clipboard` returns a truthy result. For example: +The Clipboard API is available when `navigator.clipboard` returns a truthy result. For example: ``` @@ -217,7 +217,7 @@ console.log('Clipboard API available'); ``` -However, this doesn't guarantee the browser supports all features, so it's necessary to make further checks. For example, at the time of writing, Chrome supports the API's [readText()](https://developer.mozilla.org/Web/API/Clipboard/readText) method, while Firefox doesn't. +However, this doesn't guarantee the browser supports all features, so it's necessary to make further checks. For example, at the time of writing, Chrome supports the API's [readText()](https://developer.mozilla.org/Web/API/Clipboard/readText) method, while Firefox doesn't. Copy and Paste Text ------------------- @@ -238,14 +238,14 @@ You'll require considerably more code to detect support and handle errors ... [View the Clipboard API text demonstration](https://rawcdn.githack.com/sitepoint-editors/clipboardapi/a8dfad6a1355bbb79381e61a2ae68394af144cc2/demotext.html) -The code can be [downloaded from GitHub](https://github.com/sitepoint-editors/clipboardapi). Refer to [clipboardtext.js](https://github.com/sitepoint-editors/clipboardapi/blob/main/js/clipboardtext.js) for the JavaScript. +The code can be [downloaded from GitHub](https://github.com/sitepoint-editors/clipboardapi). Refer to [clipboardtext.js](https://github.com/sitepoint-editors/clipboardapi/blob/main/js/clipboardtext.js) for the JavaScript. -This example implements text copying when a `data-copy` attribute is added any HTML element such as a button. You can set this value to either of these: +This example implements text copying when a `data-copy` attribute is added any HTML element such as a button. You can set this value to either of these: -1. a hard-coded string --- such as `data-copy="copy this to the clipboard"`. -2. a CSS selector --- such as `data-copy="#mysection"`. The text content of the first matching element is then copied. +1. a hard-coded string --- such as `data-copy="copy this to the clipboard"`. +2. a CSS selector --- such as `data-copy="#mysection"`. The text content of the first matching element is then copied. -Optionally, you can set a custom success message in a `data-done` attribute: +Optionally, you can set a custom success message in a `data-done` attribute: ``` @@ -255,9 +255,9 @@ Optionally, you can set a custom success message in a `data-done` attribute: ``` -The button is only shown when `navigator.clipboard.writeText()` is supported. When clicked, the JavaScript event handler locates the text, copies it to the clipboard, and shows an animated success message. +The button is only shown when `navigator.clipboard.writeText()` is supported. When clicked, the JavaScript event handler locates the text, copies it to the clipboard, and shows an animated success message. -The text paste button is very similar except it defines a `data-paste` attribute which must point to a DOM node: +The text paste button is very similar except it defines a `data-paste` attribute which must point to a DOM node: ``` @@ -269,9 +269,9 @@ The text paste button is very similar except it defines a `data-paste` attribu Copy and Paste Data ------------------- -The Clipboard API's [`readText()`](https://developer.mozilla.org/Web/API/Clipboard/readText) and [`writeText()`](https://developer.mozilla.org/Web/API/Clipboard/writeText) are convenience options for the more generic `read()` and [`write()`](https://developer.mozilla.org/Web/API/Clipboard/write) methods. These have less browser support but are able to copy and paste any type of data such as binary images. +The Clipboard API's [`readText()`](https://developer.mozilla.org/Web/API/Clipboard/readText) and [`writeText()`](https://developer.mozilla.org/Web/API/Clipboard/writeText) are convenience options for the more generic `read()` and [`write()`](https://developer.mozilla.org/Web/API/Clipboard/write) methods. These have less browser support but are able to copy and paste any type of data such as binary images. -Copying requires blob data typically returned by a [`fetch()`](https://developer.mozilla.org/Web/API/Fetch_API) or [`canvas.toBlob()`](https://developer.mozilla.org/Web/API/HTMLCanvasElement/toBlob) method. This is passed to a [`ClipboardItem`](https://developer.mozilla.org/Web/API/ClipboardItem) constructor so it can be written to the clipboard: +Copying requires blob data typically returned by a [`fetch()`](https://developer.mozilla.org/Web/API/Fetch_API) or [`canvas.toBlob()`](https://developer.mozilla.org/Web/API/HTMLCanvasElement/toBlob) method. This is passed to a [`ClipboardItem`](https://developer.mozilla.org/Web/API/ClipboardItem) constructor so it can be written to the clipboard: ``` @@ -285,7 +285,7 @@ new ClipboardItem({ [blob.type]: blob }) ``` -Pasting is more complex because multiple `ClipboardItem` objects can be returned with differing content types. It's therefore necessary to iterate through each type until a useful format is found. For example: +Pasting is more complex because multiple `ClipboardItem` objects can be returned with differing content types. It's therefore necessary to iterate through each type until a useful format is found. For example: ``` @@ -308,11 +308,11 @@ for (const type of clipboardItem.types) { ``` -[View the Clipboard API image demonstration](https://rawcdn.githack.com/sitepoint-editors/clipboardapi/a8dfad6a1355bbb79381e61a2ae68394af144cc2/demoblob.html) (supported in Chromium-based browsers). +[View the Clipboard API image demonstration](https://rawcdn.githack.com/sitepoint-editors/clipboardapi/a8dfad6a1355bbb79381e61a2ae68394af144cc2/demoblob.html) (supported in Chromium-based browsers). -The code can be [downloaded from GitHub](https://github.com/sitepoint-editors/clipboardapi). Refer to [clipboardblob.js](https://github.com/sitepoint-editors/clipboardapi/blob/main/js/clipboardblob.js) for the JavaScript. +The code can be [downloaded from GitHub](https://github.com/sitepoint-editors/clipboardapi). Refer to [clipboardblob.js](https://github.com/sitepoint-editors/clipboardapi/blob/main/js/clipboardblob.js) for the JavaScript. -This works in a similar way to the text demonstration, in that copy and paste buttons must point to DOM elements using a CSS selector in `data-copyblob` and `data-pasteblob` attributes. For example: +This works in a similar way to the text demonstration, in that copy and paste buttons must point to DOM elements using a CSS selector in `data-copyblob` and `data-pasteblob` attributes. For example: ``` @@ -337,9 +337,9 @@ Try copying image data from a graphics application, then use the paste button. Cut, Copy, and Paste Events --------------------------- -The `cut`, `copy`, and `paste` events fire whenever the user initiates a clipboard action in the browser --- typically with right-click menus or the keyboard shortcuts mentioned above. This is supported in most browsers and handler functions can intercept the events to make changes using a [`clipboardData` object](https://wiki.developer.mozilla.org/en-US/API/ClipboardEvent/clipboardData) passed as a parameter. +The `cut`, `copy`, and `paste` events fire whenever the user initiates a clipboard action in the browser --- typically with right-click menus or the keyboard shortcuts mentioned above. This is supported in most browsers and handler functions can intercept the events to make changes using a [`clipboardData` object](https://wiki.developer.mozilla.org/en-US/API/ClipboardEvent/clipboardData) passed as a parameter. -The following function forces all cut or copied text to be uppercase. Note that `e.preventDefault()` stops the default cut/copy action which would override it: +The following function forces all cut or copied text to be uppercase. Note that `e.preventDefault()` stops the default cut/copy action which would override it: ``` @@ -366,7 +366,7 @@ e.preventDefault(); ``` -The following code attaches a paste handler to a specific `

        vO@8Q1#r?w#A%-Y$3$ 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

      • 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 diff --git a/static/images/screencapture-bgoonz-blog-netlify-app-2022-01-20-23_58_59.png b/static/images/screencapture-bgoonz-blog-netlify-app-2022-01-20-23_58_59.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cfdd4bf31fbb791794b98686a42de0ea185ec4 GIT binary patch literal 1923327 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�tYO0)sAsUx%D#i~xUAVA-`63VkF{O6 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