From e8191757f7b8fcd9fcf1a2e4e56ee37de1d11172 Mon Sep 17 00:00:00 2001 From: Alexander Sullivan Date: Fri, 3 May 2024 19:01:14 -0400 Subject: [PATCH] Update Service Worker files --- src/serviceWorker/sw.js | 2 +- src/serviceWorker/sw.js.map | 2 +- src/serviceWorker/workbox-717fa00d.js | 2 - src/serviceWorker/workbox-db952f2a.js | 2 + ...17fa00d.js.map => workbox-db952f2a.js.map} | 2 +- workbox-config.js | 53 ++++++++++--------- 6 files changed, 32 insertions(+), 31 deletions(-) delete mode 100644 src/serviceWorker/workbox-717fa00d.js create mode 100644 src/serviceWorker/workbox-db952f2a.js rename src/serviceWorker/{workbox-717fa00d.js.map => workbox-db952f2a.js.map} (84%) diff --git a/src/serviceWorker/sw.js b/src/serviceWorker/sw.js index ba440aa..92a87df 100644 --- a/src/serviceWorker/sw.js +++ b/src/serviceWorker/sw.js @@ -1,2 +1,2 @@ -if(!self.define){let e,a={};const i=(i,r)=>(i=new URL(i+".js",r).href,a[i]||new Promise((a=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=a,document.head.appendChild(e)}else e=i,importScripts(i),a()})).then((()=>{let e=a[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e})));self.define=(r,l)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(a[c])return;let n={};const d=e=>i(e,c),u={module:{uri:c},exports:n,require:d};a[c]=Promise.all(r.map((e=>u[e]||d(e)))).then((e=>(l(...e),n)))}}define(["./workbox-717fa00d"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"../../src/articleArchive/articleData.json",revision:"4e82f111c803e5425e3afb0cc77e4450"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image1.jpg",revision:"27dcfa9ecd0efd99b9df432879c08219"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image10.jpg",revision:"afe9afcca0f32a8976567d16cd988c85"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image11.jpg",revision:"8d9210ff1cb1a22a43010fa06295e0b7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image12.jpg",revision:"087daa82594a5041a5f61ae899909f99"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image2.jpg",revision:"e52a795a738be47b86fd5a46c38752ef"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image3.jpg",revision:"bb151e1aa85b98eb23a5d098eecb961d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image4.jpg",revision:"3cbe6c46e8bc384cae1823d75c78924d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image5.png",revision:"def8648d4bee746deebeff24603e37ec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image6.jpg",revision:"a743180627e5e421c310676294a1d5e7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image7.jpg",revision:"7d896113d82eef58199f7b53e04ce414"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image8.jpg",revision:"fe2e019064f54af3a81007f0d6d61cdc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image9.jpg",revision:"7ca083aaca86b6438beee09c2b35d071"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image1.jpg",revision:"42316989cb3524a4a0b9b1539c18ffb9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image2.jpg",revision:"a269c955ae1e919560fc4ed3a8202a60"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image3.jpg",revision:"16ddaf2bf7720d2102ca2550ed40093a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image4.jpg",revision:"463b92557e750b3e59e70ab79c37db2b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image5.jpg",revision:"da3db4e9f9a70d6818a3a808c23db5f2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-17_Hello/image1.jpg",revision:"f935347ae298343a9f8d8cbe065ee765"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image1.jpg",revision:"1a312289757ff487438359521def9550"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image2.jpg",revision:"b95583b7e8856b83fb7428623c353a81"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image3.jpg",revision:"59431aa1577fe958ab19994156ff1025"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image4.jpg",revision:"c531ca2589e869827254619aba3f0b98"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image1.jpg",revision:"1e8b13c9e625916dd7a50e584c431662"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image2.jpg",revision:"5ac54287ee5f4229f511494c8ff36e93"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image3.jpg",revision:"00b32d6566c2fad7dc07294cdc02230f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image4.jpg",revision:"064e7701fabeedac72b6192091601a24"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image1.jpg",revision:"ed7edfa7336e49b1ea7292a0d3e91697"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image2.jpg",revision:"8d6e7f18aa0128a12623145b1f54dc54"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image3.jpg",revision:"a23e0efba39d8a5f5540d8fb0eb5da7b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image4.jpg",revision:"9fc8fda1cf4b455b83287a71a65dce14"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image5.jpg",revision:"5822849d86c3e6af1c6b25e109ecf53e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image6.jpg",revision:"b13fd0313185fa3cad01a269ea06fbf6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image7.png",revision:"505681b94d20d38734cdb53770be5fe9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image1.jpg",revision:"c24400d9aa82c02094384873e6efee8b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image2.jpg",revision:"07f26519bb81bde15c8ca54a030cb77f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image3.jpg",revision:"e6433878b8f7b1a94a3315bb5dfe6fff"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image4.jpg",revision:"21d73f39d66a4df4c7e34804987cae2e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image5.jpg",revision:"bb37ac6d808f2ec37a2d7dee37478c0e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image6.jpg",revision:"513ec0cccbbc4d3e7c7300791b1beb21"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image7.jpg",revision:"98d31c43e0adb9ae03c3308b5e3ca444"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image1.jpg",revision:"d31e1c075f0f05e5c23dcb0b9a8d9d62"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image2.jpg",revision:"507c2c06bfefb7a3684e28d579663625"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image1.jpg",revision:"bd72a27ee9638d04ef5c3acd361bb0e1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image2.jpg",revision:"f0dc1c99b95da3defedd96a14ccc6025"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image3.jpg",revision:"6b24f06c18869e2c8dbb075e9a667a85"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image4.jpg",revision:"8575a22044df8f31f9cee862838db9cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image5.jpg",revision:"7638f5ab7c7d5b5a278c0c269bdae422"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image6.jpg",revision:"6b2a27fd3d61804010db39e8a51cd5cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image1.jpg",revision:"173dfdb7293f01e6e60fa58ce33ae62f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image2.jpg",revision:"de798c27fe9604941f3cdd24181546bd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image3.jpg",revision:"ec2a7a9a8774cb5b2c01d67b8d4442c5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image4.jpg",revision:"57a5e970597f3ba03e904deb47d6d852"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image5.jpg",revision:"689426e2328af6970a456654853c0a6d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image6.jpg",revision:"7f0f406210596cb2e23de523b32b1740"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image7.jpg",revision:"4aad1805627179cbcb4552754b90731f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image8.jpg",revision:"173dfdb7293f01e6e60fa58ce33ae62f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image1.jpg",revision:"23c560be26525f9dd8feb4038560c46a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image2.jpg",revision:"9e4e319f065b67d62bfd086d2ec701e9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image3.jpg",revision:"8a97e4b9f9f46a2374dcc5d9f3aa0f27"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image4.jpg",revision:"5b0ed78f26309666f2cf5d94aabb5291"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image5.jpg",revision:"65a85df77a68596ca9f4fa3a1625110d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image6.jpg",revision:"72ee0e02d69c613d27c64b4af0303ab5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image7.jpg",revision:"f24d7cdb0616627945e07452fd1a56a4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image1.png",revision:"2fbf9f405d5be8bd99805ade06b7964b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image10.jpg",revision:"fd0763f6f229687bbc75a61c0f7a5ca7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image11.jpg",revision:"520d7a254b380ac68d860dfdf672257c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image2.jpg",revision:"48d7ade2d8f8b150698ff2ed92f1f5eb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image3.png",revision:"492db2a417835f95b4d3dcb80f8422bc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image4.png",revision:"d5e7c367b8772f9fd271c14a7b92d2d8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image5.png",revision:"00df4ab01cda692490fe960e1c62d524"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image6.jpg",revision:"f04f1c20328b95a291bb158b949e752b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image7.jpg",revision:"56cd148c847e9d1e572ba685c636f80d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image8.jpg",revision:"32beecbb0188bce1ee1f2ffbdc459918"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image9.jpg",revision:"48ca4959a17874f31ccdbe2d1c068842"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image1.jpg",revision:"a7bd23e54c13cfedfc74f019153fa350"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image10.jpg",revision:"7eb0de5b6a49230830f8b14d7e49a21a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image11.jpg",revision:"08d5b6f1be486aeda749b9c787733ec6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image12.jpg",revision:"4493acf6c791acfc5fd5e6cc0380e914"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image13.jpg",revision:"9f3fd48941f83484b1b3f1d999306cc7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image2.jpg",revision:"1b53b42d6f6fc430c055d6861fd8383c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image3.jpg",revision:"1157d7cb31d41809050aa8fc08c69d07"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image4.jpg",revision:"50940dfe47ebd228eca982b9ff59c3a5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image5.jpg",revision:"a89976b97983f854b9e812d6417147e9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image6.jpg",revision:"d9ff99e6242ab96f652a7209d8baa07a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image7.jpg",revision:"947e3a2d6079a41ecf6e359977a1b306"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image8.png",revision:"8c0cce94724fce633adef9881df7b485"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image9.jpg",revision:"5e8693b0d8804fab484ca5bb72ee1ffe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image1.jpg",revision:"8047492b24054f2f4c1377dd41c9f6ed"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image10.jpg",revision:"bc684c6fc3948df91e45b1f1a6c52618"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image11.jpg",revision:"edc5bc1bf1c5941e7b23bda9cb9b4480"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image12.jpg",revision:"a49b345c9265fbbf21284546af86c055"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image13.jpg",revision:"694cdf48da02964c0687a94fd741a650"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image2.jpg",revision:"599388471d74d344f937ee243855b242"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image3.jpg",revision:"c4394ab19c2d2938d84fc2272a8f0356"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image4.jpg",revision:"286e4dce6f67acfc63d3b28b96481b65"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image5.jpg",revision:"48aec9824256e02c78ef8b5f3aa84ffe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image6.jpg",revision:"cb0e7aa1dd96cdb6218175db906abbbf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image7.jpg",revision:"05cffef2939b69fe7bc8fffe24288ecc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image8.jpg",revision:"ab45b2524d98451f99aefb1b5a1da118"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image9.jpg",revision:"14af306a60783767a1af5f5f8c67d74c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image1.jpg",revision:"b8dfb9102ccf2cc92fc34aa280f08cc9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image10.jpg",revision:"66682a6bfce09cfd180a83af40d9f3a6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image11.jpg",revision:"3b74fd37a7d9e4e65b3eeeae85033656"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image12.jpg",revision:"79421de15b792aa4ccbd5e367da3ba4f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image2.jpg",revision:"45afc084a6c9e5bfc7e02840ef38024c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image3.jpg",revision:"8a7a047fd8542b0d68604b43a8b74202"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image4.jpg",revision:"7282bbef120a5418fd36b6568e84e61d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image5.jpg",revision:"3d1fad1043444f389b6367e33f32105b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image6.jpg",revision:"45f6f65bc0f09d231beef2a342529728"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image7.jpg",revision:"6663c04488bc344d01be9aa4cd1d3cf9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image8.jpg",revision:"bfe4f8fe33a5eca2d5b35745f9630faa"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image9.jpg",revision:"bb17bcb13fa1865d7c73498632a033f2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image1.jpg",revision:"0f46f35ad92b1477a363dc757e472b20"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image2.jpg",revision:"38c9ca222aab8cc44984ca4083a4942c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image3.jpg",revision:"20a6885c9142134aae37df4d06d52571"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image4.jpg",revision:"e90e4f2d3db64d1bfe7666037b58d58f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image5.jpg",revision:"1358d3899a04b5ddf45fb2e68a62fffd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image6.jpg",revision:"0305a218bc5817fc084149b815850c06"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image7.jpg",revision:"140738b1f29726a381773bea82783cde"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image1.png",revision:"bdb0db3c8620478df4f1e1791b0f7c52"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image2.jpg",revision:"689dfbc01761c5548bb13344e664096a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image3.jpg",revision:"82a01cacd45c6dad1a58630a4fed5f35"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image4.jpg",revision:"066c5b01983cee0fd12af57224ec91cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image5.png",revision:"1cbb8519b460b98ec9b534ba705899d9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image6.png",revision:"e6aad3dd2452c8db0ac3913077ef15bb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image7.png",revision:"2cf22786b597039bd4dd033709ceb97b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_OneLifeLeft/image1.jpg",revision:"db4f17d2c77770830065ff86dcf39798"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image1.jpg",revision:"91ab146483da921afadde595ad300c1d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image2.png",revision:"5285ba17551853f34669d5f3cd5434e7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image3.jpg",revision:"5e2a63899fc1f942a97c37374de85236"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image4.png",revision:"901bd62bc86fea78989629ec8e500058"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image5.jpg",revision:"ed06eb504a713536e9d05181bd25eb36"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image6.jpg",revision:"82797c9e1bdaac040557385d63a8efcf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image7.jpg",revision:"73e87e33214bae5415b535c61b047159"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image8.jpg",revision:"ed4c5a27fe4e590f4754669521e3bec0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image9.jpg",revision:"1446e055a564775bbf85135412e05ac9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image1.jpg",revision:"6db612ad1adc86394145d2dbf008ae78"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image2.jpg",revision:"7eb0f705595ae29fdf3740209e22bac8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image3.jpg",revision:"503976a147e77e51ef996a63afda208f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image4.jpg",revision:"6e29916ea8a34453700f352d7dc6ad19"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image5.jpg",revision:"0e2b7a92664c5b7f61daacb6c0f97ffe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image6.jpg",revision:"df0c407ea360c3333b2d2d317bacb5f3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image7.jpg",revision:"b18927a283786b19cf5e8ff8dbae68ad"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image8.png",revision:"564d1334c46d244c22d35dbcd5393b4e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image1.jpg",revision:"5029917134900956505fc07f969cbf7c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image2.jpg",revision:"9c0709172457638827efab9cfbb2cb2e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image3.jpg",revision:"72d4c6e6782b89dc6b1d22d05a046753"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image4.jpg",revision:"78f059113d5e0f0f7f81f41034d3f558"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image5.jpg",revision:"0db43db70d44eaa467c1dca37cba71cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image6.jpg",revision:"a91f1d3b2b4a64657d596fb384520e35"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image7.jpg",revision:"a50d72749eab11a5c55d2068bb4cb319"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image8.jpg",revision:"c9fb70ec4dc20201f0a783c4169dd5c2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image1.jpg",revision:"f1e2ffd6f28ad03975bddfa34b8ed82d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image2.jpg",revision:"a6726b9e94b791ac903081407723c4c6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image3.jpg",revision:"81a179e3f0d788928e85a471f4310887"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image4.jpg",revision:"ceb65b0f1a2a52c24122cffbc230f854"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image5.jpg",revision:"fc4e23b17fa1b9413941bd7330afbfec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image6.jpg",revision:"12b2d1f4c84c3c67a0686cc064019d8e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image7.jpg",revision:"7fa9482353d9b047c8442ba3183fc73d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image8.jpg",revision:"159094bec3a88654026cb01fa4102cea"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image9.jpg",revision:"edef323af40be3c9f28bce825f54bf9a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image1.png",revision:"b2ef9d4a9f2e1999d3aaa05011d9ee06"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image2.png",revision:"e7efa0067442d7e87295674435df787a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image3.png",revision:"d4786bf9d21d00ef9f44a4f46f5baf62"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image4.jpg",revision:"bd4093288975c01af4bf30190d367176"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image5.png",revision:"6702d7487576fd015572cc5150ea3362"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image6.png",revision:"742bd34a6a8dc6399173d08beeb7ee94"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image7.png",revision:"98065b05c544e132a2ba7bfd598e30e2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image8.png",revision:"102cd35ae2db4ea282115004085690c3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image9.png",revision:"a9f964a0d804b8193b5be0d5dce0c0f5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image1.jpg",revision:"dce00c583231a8ca92dfe4fb4075a0a4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image10.png",revision:"8f1624797c8e49518059fb70341cb4c7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image11.jpg",revision:"99f9f3777965f0c782ff2608993c688a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image2.jpg",revision:"919d2fc9606b90f6dca7e62fdf926faf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image3.jpg",revision:"b145a9249334c7969123efef8adc5468"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image4.png",revision:"c5da356d707423bb9d15989dad326875"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image5.jpg",revision:"b65917cd35f7c482a28bc78bcaab92fe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image6.jpg",revision:"074b1c382fe8ddf3641a60d0a08b7bf5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image7.png",revision:"e8dc2ca0ae4f4af0253b194625453534"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image8.png",revision:"467b3e86843414afdf38ac8d4c88856f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image9.jpg",revision:"f60375cf0c4431a8ba797dbf56d64f2b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image1.png",revision:"a2797b97b88edfea12649fdf05fd88de"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image2.png",revision:"fa0e34f24a10af6f84acd620a329ce53"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image3.png",revision:"44d55d9588f4e57f7595a43edf4b0a56"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image4.jpg",revision:"4ab8bf3ce79f08d09d39278ec286ee91"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image5.png",revision:"46a3e77429a914a0fc7ca1b620ead51a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image1.jpg",revision:"2a5c8c9be4df50e1d8ca17530c4263ae"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image2.jpg",revision:"5a1fc1955d337c45fa715f881983b777"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image3.jpg",revision:"3fa0199e3b86e6d04ea6aa4deb23ba10"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image4.jpg",revision:"db3f1cdda23155567c46ac258f574e5b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image5.jpg",revision:"944b63b9053880378b161021063d2953"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image6.jpg",revision:"3a7abc7411fc69029e9c498dc0923650"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image7.jpg",revision:"34873386d56efa6143194a8cbe6e1a13"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image1.jpg",revision:"0df19ec53a5438e7852570241ad6cb8a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image2.jpg",revision:"82eae902b1a14ab0191768b1b3d622d0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image3.jpg",revision:"6af31d464429ed9a8a7c1d595d4863ea"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image4.jpg",revision:"4a6dce15c5a5d4fe8bec5b5baed2daaf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image5.jpg",revision:"26ff6de3a9e80f30cd8507b0ad5ebe89"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image6.jpg",revision:"e30be39f6820e3617fde3407072b6e8f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image7.jpg",revision:"2ca0ff627fd58ffd65792c4a4650b478"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image8.jpg",revision:"5c37f7bb28f1c898cd0a796460290dc4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-11_BeyondInfinity/image1.jpg",revision:"ca3918b596d69345902b93cab250995a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image1.jpg",revision:"969ae9c2a8b0695d291d08f5d510520b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image2.png",revision:"9f2afa3957285da421fe2ec81d4b4fd3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image3.png",revision:"f65650157c2a7ebc4940d45109db55aa"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image4.png",revision:"ea7060524456b08d1660690443f91c42"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image5.png",revision:"be4ed8539d5b403baff250d5264410a8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image6.png",revision:"19dd1ba71a924337f8b1c0b20bba55c0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image7.png",revision:"70950ce872bd828046613e6a146a8449"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image8.png",revision:"79c4094b3b3369394c375e7daecab4af"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image9.png",revision:"d86046a881e897727e4ba5e46ccfc6ec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-13_CubeMetalHeart2/image1.jpg",revision:"d2a3634a6b26e4107fb009365bcc0585"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image1.jpg",revision:"6985c503e2440e09b0f98097ebc973d7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image2.jpg",revision:"e1733add2770d1800357a3e1c50f5bdb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image3.jpg",revision:"772f0dcd2d43cdaa22926db4c104faa6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image4.jpg",revision:"2736a2f63cecc8247ac82740b88711e4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image5.jpg",revision:"b609c9767485b3ce1752a3ac5e34f189"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image6.jpg",revision:"86479a854fdfb90037ef509a73e91c3b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image7.jpg",revision:"14e0c76554569c97263986cc63fff87c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image8.jpg",revision:"aad8e8b41f96e70d2e95db02146461f3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image9.jpg",revision:"0b28ba8fb5335a25082b0327a7f1ed8b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image1.png",revision:"28e06c30374b410246bc759213b94431"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image10.jpg",revision:"7928cc5248fca24edb621243339239a8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image2.jpg",revision:"90865b965988fcf9cd7118cc95a7122b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image3.jpg",revision:"9c4620e4447474c3327e3695e4658d0a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image4.jpg",revision:"00323e2dfaa5a9b9feb32349776439f2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image5.jpg",revision:"e581a66f0794b01bd6fe8b02a2d17bb8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image6.jpg",revision:"926a0a8692502227402c7e88c3462ce7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image7.jpg",revision:"4f40bf239470d9d6d6471f4ae5853f9c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image8.jpg",revision:"445969f3dea1a1a37bdca7fb61f8be9a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image9.jpg",revision:"b646c0c7e12663a0bc0943190871e46c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image1.jpg",revision:"b244d8c43d3e4f0c0554d2c41f0c8748"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image10.jpg",revision:"5b019d58c48bedaa3b2db649bee9f0ab"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image11.jpg",revision:"f44519812b8832db10b0e66b602f238c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image2.jpg",revision:"889e530b818f9724bd460ab9297c79cd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image3.jpg",revision:"c2f2eec3a1e2754ecb94904a6eb97f1a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image4.jpg",revision:"5ff7570dba36e15c3d16effc44708a50"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image5.jpg",revision:"96cc9857fe52e1aaaea6016c4653bbc5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image6.jpg",revision:"ffb4ed920f9da2bd0e2e4b0e279abc07"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image7.jpg",revision:"18661eb309bfe8202b1164b6dd14824b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image8.jpg",revision:"2dcf0dbe71bc63ca37f71727c91d74fc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image9.jpg",revision:"c120e37e3bfde902b212501d08e3fac8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image1.jpg",revision:"7280a7b2247ee3653cb17564dee93fd1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image10.jpg",revision:"17458c1da295eba4f733b5353190a1d0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image2.jpg",revision:"36bf376552b667976c8daf04f648f469"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image3.jpg",revision:"f5cb9302f99c336f51e4df6c5a78a5e4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image4.jpg",revision:"2e39a520bc245942c8c72a272fd5b3a5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image5.jpg",revision:"c67b46f501df14a52f1e984b7cccfb3e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image6.jpg",revision:"a01171fa9bdae2b3589d8057f180626e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image7.jpg",revision:"c5fa71094a08129e86a9126e7a4ebe44"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image8.jpg",revision:"3a84d080ca340dd547acfbd9d8a9cdb3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image9.jpg",revision:"d220becf4f5178a4a1684c54d655b113"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image1.png",revision:"35666a582d971835eb6dab5f49e57708"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image10.jpg",revision:"7ec66f5d5a7fead07b3251345d38a359"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image2.jpg",revision:"7e8440ed2955c1d60157648a0da173ea"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image3.jpg",revision:"99d5c5f459682ef62c7a3cc98b74ccd4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image4.jpg",revision:"9469109fae2e8f09471d9ac486069220"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image5.jpg",revision:"d3795070e6514f326994c3c1590b547b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image6.jpg",revision:"dfd0d6443bc6eec14c64fead9492d192"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image7.jpg",revision:"84022322b84870d6590df5c0151caeeb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image8.jpg",revision:"6731fd43898ed1f3ee3ed471edd47ada"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image9.jpg",revision:"1af3277705effeaef5cd27b5d3446a9a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image1.png",revision:"80abefadcf91449132b9678c78b430a9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image2.png",revision:"c5e0a5962685800b401d0a1913eb3ba6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-13_QuickSlickDeadlyTrailer/image1.jpg",revision:"4b3f12019ae90e99c477c632fcbb7d40"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image1.jpg",revision:"e252c9bc34b65fc4fbfa68e91c059f3a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image2.jpg",revision:"8328e27fdeddb789cccce3622f19709e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image3.jpg",revision:"f1035b84d2568c075c9c6e0f8b34197f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image4.jpg",revision:"83b7d2e6f0a56bddacc0fe6f031f4c10"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image5.jpg",revision:"8b70862e000b889d3c05935b9c3d7784"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image6.jpg",revision:"e8f0ab72d0ffbf3e8ae4626595794030"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image7.jpg",revision:"fb756fe1d10704f8d4f700e963338d70"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-16_MotteIsland/image1.jpg",revision:"ea87444e9c4640bd862d6098b4bb6f1e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image1.png",revision:"34f3bdd237e7b7196e0507be3745efca"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image10.png",revision:"e371c2a35cb13276c45ab67244706e28"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image2.png",revision:"75f33390f8a561aa82f06a9257ac0245"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image3.png",revision:"534b10322cf0ef6a3562f697668278d0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image4.png",revision:"03c93a901f2ef292a342330e7729d422"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image5.png",revision:"c4342af6ab7c7ea6698026061f005377"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image6.png",revision:"b326191989250f6524e08a5b819c8e32"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image7.png",revision:"8ea1535d1d981c2222327d76d2aa637f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image8.png",revision:"4e6615d28d22a83ef0c99fa8e3aee624"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image9.png",revision:"4cd779c5b8aaaa88ca5dccf6e31719b3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-19_ProjectTemporality/image1.jpg",revision:"12c7f75562a71494cb236b1cd6413ec0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image1.png",revision:"20d8fc45e13befe6968dfb5db8491e51"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image10.jpg",revision:"e7b14995674d200c7b89b1f7a4bceceb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image2.png",revision:"8fcff4dabfae8b1d42bc0b4c23e697d4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image3.png",revision:"dcb482c84bef290ad021b2d9d220c8b7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image4.jpg",revision:"0a54796fd651389edeb8e4c672c78c81"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image5.jpg",revision:"0fc8ef2ef8523da1697ec5ce1f8acaf7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image6.jpg",revision:"74abb9383c4545188c93f3f7001a70ce"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image7.jpg",revision:"c288350a97fb3607198635248efbb0bb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image8.jpg",revision:"81607e4f5d75bee81bc49b610fd0bfa5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image9.jpg",revision:"4732c349b66c503ad05f6f5072476476"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image1.jpg",revision:"ed7709fa547382018e3e5389aa9d5a74"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image2.jpg",revision:"9937d5c6320d0eb3ccdbb561afe2fd1e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image3.jpg",revision:"bcdf78d9ba26d4dcba29db1925968cbf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image4.jpg",revision:"b6b8f79891f5b28968e4f6d5389e1403"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image5.jpg",revision:"e9ca97ff5620d39822dc5e1fd5cf1099"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image6.jpg",revision:"1adc22403d4ceba05d90dfa8a4a30cf7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image7.jpg",revision:"4479fd4343f7df4b26642534ab9247fc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image8.jpg",revision:"a554a695aa14e80a41ac140c276a2f15"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image9.jpg",revision:"a70613da9a23cbd60ed43da23afcef46"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image1.png",revision:"8335e880a0e50433ba57832d55f98d04"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image10.jpg",revision:"665453487cee76046c6996900df65742"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image11.jpg",revision:"c1bf4e21062b27021b577b0054d3ee05"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image12.jpg",revision:"797269adaab601a10de5968c75740c9b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image13.jpg",revision:"998fb25c60ecdaaded79ad5f325c42dd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image2.jpg",revision:"4a707552ed7bbfbb0f2f3f5009ad2d99"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image3.jpg",revision:"7888eec1ecea13b48444679726b8a83a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image4.jpg",revision:"5a8e3601a1e5ac5c6684cce3844162c4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image5.jpg",revision:"cd21b9c429cc4d2ec6cb9c3e8177d007"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image6.jpg",revision:"162119a60951b91e3d19f71bd440fb6a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image7.jpg",revision:"9161f5a156e29f544226ef2e5a7139a3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image8.jpg",revision:"ad5d7a8504a225e7f40a5f4678ed571b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image9.jpg",revision:"15225de368c024c0cfac87e33ced5a8a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image1.png",revision:"299b713c8ba7fb34ce4812919fe9e03e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image2.png",revision:"f2c2bdb3ec5820be66f8f520ad7997d9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image3.png",revision:"d5731ce115c6af073ab9c1806692b2e8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image4.png",revision:"7d120ba85b19cc45b89ef3dc0c6b9cc1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image5.png",revision:"fd915f1b3284ca6a98fc994be84ba9c0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image1.png",revision:"2ff7e5641d3983a2b26121879f0c6768"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image2.png",revision:"1ec667d777e79f978ff4aeefdce1081f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image3.png",revision:"871733da343647401017c914a8830453"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image4.png",revision:"c1405f9b5baa3062660248395ac0157e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image5.png",revision:"5a93be18f700f9425de0d030c889493a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image6.jpg",revision:"95072f7182de90d0c9134d006d5003a6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image7.png",revision:"2835cfe51ef48668d6402252c7aa1f5a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image8.png",revision:"04588d04a275594757bbea6e514ca089"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image1.png",revision:"50f88e9f70978d94c7d8ae35704f0b11"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image10.png",revision:"b8d00155a9c0ecafa6f57d55a300f50e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image2.png",revision:"cb4c57e8da565d757fe9a7dec471c5f4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image3.jpg",revision:"083d5e6f02393306af76686b4083aae8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image4.png",revision:"2cd4e79358a6029a2c06e3e9691c6f0d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image5.png",revision:"f361958232fceb901732a063136d4398"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image6.png",revision:"30125f459d3d8fa68e86e6e06543a55f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image7.png",revision:"762dd5f98d498b4d606184077cd778e8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image8.png",revision:"af8a33c09e2cdfce09db891b4554fa61"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image9.png",revision:"02ce56af8a12814e4995452bff2e44e6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image1.jpg",revision:"c7685c02f00b2f0a6415220868bd8530"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image10.jpg",revision:"724d63b5cd9cc42440d81935291b5887"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image2.jpg",revision:"a1dff16d384d349f30d368e39201ace3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image3.jpg",revision:"a35ab9b8de060858d21a9ec2fb98f5ce"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image4.jpg",revision:"f5369f0338f87703fa5d8068c9c05a81"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image5.jpg",revision:"cb76e4c7f76050908df369cb5313a3eb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image6.jpg",revision:"aa71c08a590f3f8aee35f6a3de184eff"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image7.jpg",revision:"14b707bb05353d60ba9109573b2c5be8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image8.jpg",revision:"2473ab776cd3c5ac0a4f3848be7b8ae3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image9.jpg",revision:"7a277c4dd822b0e0cd41391d11111a00"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image1.jpg",revision:"d999dea8111b13b545f4ae9bed04e4a1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image2.jpg",revision:"841e52644790d60dcce83a57ddabd140"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image3.jpg",revision:"0d6907f6d45ad4c1e7db3db10cabea9b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image4.jpg",revision:"6a6b872364e79cc1088115e4f2ffaa54"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image5.jpg",revision:"47fc58cb67ac5b4d5116d1b62c42f8fb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image6.jpg",revision:"8c18b20f4d0b9a466180b9d3a08653fc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image7.jpg",revision:"fb364eac0951773cb330ceb6aba2823e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image8.jpg",revision:"4f2526c4ccdec17b17ed2c1baa9e3791"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image1.png",revision:"9da1691851b60a29b30b3838804f2d70"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image10.png",revision:"04cef2521e8e6655cc015ac1bba05a5d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image11.png",revision:"c5f8b36eacb835da5c9a6f26d358e44e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image12.png",revision:"dc7b79abadc0e4f7f694063e49e23d89"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image2.png",revision:"dd48df93bed859be4e6284874e715389"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image3.png",revision:"62916c4ba515347d4ce6895469a09933"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image4.png",revision:"7a7d4f69271672f3ae22ec5b753d2d57"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image5.png",revision:"afb3771d0929c0d107d8f3a9eb5d0913"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image6.png",revision:"d4dd9dd1232d59b4849be170639dfa8f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image7.png",revision:"456a7a47aec2cded7499f725bd901b63"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image8.png",revision:"3a3a84f2d957586e149e3cb36d34d227"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image9.png",revision:"32e5f0d564ff45e1dd8cb00b3e8fcad3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image1.png",revision:"0390bdc1bfa8421099680021226d153f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image2.jpg",revision:"b577a76021fa1f7174a3aef31fb51d56"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image3.jpg",revision:"78cb82e3e019e192a1d78d07bd631d2f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image4.jpg",revision:"fbd7bcd77823647f40bebd5896a71771"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image5.jpg",revision:"a9753e3654ad97ec7bc8c26ede89250d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image6.jpg",revision:"74037b92dbb71626ed02bf85210ea4ff"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image7.png",revision:"c1edf94b993167cc6e04a09de778675c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image1.webp",revision:"05d285e3f80d258cbd2fbcfc247af4a3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image10.jpg",revision:"bc1414519e5c1273dcd9468449b55a20"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image2.jpg",revision:"7f329ef9c00eeb0143cdbe3797d2bc2e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image3.jpg",revision:"a484a9430d3726b74c6f2f56d0b6d6fd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image4.jpg",revision:"c4b9e761ebd778c1e1a6d16c52c68cd9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image5.jpg",revision:"a731b9997646af477545434fc3ef98e7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image6.jpg",revision:"2cf253207ba1d7d11fae57b3210018b6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image7.jpg",revision:"4211cedbdbf72b5986a665ad19da68d5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image8.jpg",revision:"b2bbc644824210016a36e173615ddfec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image9.jpg",revision:"3babeb8ce62bf3a0adffb456f0d6d3c6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image1.webp",revision:"ed4ef6474049e1bb384f81429520b754"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image2.gif",revision:"73ed6983ea36d907f0cff7c736f7a2dc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image3.jpg",revision:"69e4facbb77a5550752099425b673ecd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image4.gif",revision:"18584665ce49c013661d10af3c07cf87"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image5.gif",revision:"73e28bd84e1b79406c87e547c4190c55"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image6.gif",revision:"c7956df17cbcbb3bd2e28470bdf11bc5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image7.gif",revision:"cd7e4ee307a214068188eaa2864a835a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image8.jpg",revision:"9cbdd824ac895cd6cee6267612b03af3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_PlaysetsTrailer/image1.jpg",revision:"9432cc5b42136150924aba36f20d4835"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image1.jpg",revision:"fc490a69e70a434f0585ea2d68b7332f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image2.jpg",revision:"95f4b2826fd04024a2d865845278022a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image3.jpg",revision:"551c7a18e6312c61f77c3bf1671ea762"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image4.jpg",revision:"32716c1bd0593b7f3431c5fdb9caf974"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image5.jpg",revision:"f81d478345f158f3c1a3464352f03982"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image6.jpg",revision:"35a6741230000357728e9a8e195cf2a9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image7.jpg",revision:"7bf846f610368e235844a37847dfec56"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image1.webp",revision:"7934a466ae8f3a0b553c6b121468d405"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image2.png",revision:"fcc6cc0fb1d798f572895a5e39b83d0b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image3.png",revision:"af9f4dabbd9d85fefd7310c52f9fa8c6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image4.png",revision:"bc3207531d8a2e1d80085002482fc42f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image5.png",revision:"77b347def110cc04bf2eb218ae274c17"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image6.png",revision:"255772860e0104a5a72f862d27b44e3e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image7.png",revision:"bdc491e7aedae34ea8f6a652694aa5fa"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image8.jpg",revision:"8f26289f86fdf8a7e95f6db6191e3491"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image1.webp",revision:"553c975c1cd76e7976b7eb1c2c03ad25"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image2.png",revision:"fd4ddda59288f82dff542ef27f0380b1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image1.jpg",revision:"f1ba99bf880385dd4f10d141de869dd5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image10.jpg",revision:"f90a4ad5d2e7f0e583c096dae71de576"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image11.jpg",revision:"b41d8dd56d65c1c62c124b64e1ba1241"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image12.jpg",revision:"8352dcd7d629aa21e14d28c9a868b728"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image2.jpg",revision:"97c9d4535f7957366bfd33c7f8f131f8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image3.jpg",revision:"669012e419e2368c41a8860b28a659cd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image4.jpg",revision:"6040a96345fe01925d4a7f44b14bbe7a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image5.jpg",revision:"ef55e1e26e6605f8ae5e9355df8cda13"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image6.jpg",revision:"45a5457c26f4070e27cf2342a223108a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image7.jpg",revision:"a58d36f8413f0460b896edb13e99054c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image8.jpg",revision:"926cc385abed62e976cf8db3136da901"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image9.jpg",revision:"bd54a017ab5a1dc886e58618dd9bd0c0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-26_WeCare/image1.jpg",revision:"961518648539049372bd2bbf393fb5f1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image1.jpg",revision:"7ff370d80ef3fc938e983ae0b2ae8832"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image2.jpg",revision:"ac4dc7e596d93d432d8fe75f6226f29d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image3.jpg",revision:"1100826917a344c0593ae4a0cc78b373"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image4.jpg",revision:"03043600776b8167aaf780a6c3c3af5f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-03_HOYO/image1.webp",revision:"03fdfdfc1c641dbf4668db3830bf644d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image1.jpg",revision:"d16f3b3ce5de1f8844fbcd3ffce5c452"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image2.jpg",revision:"f21721a2b0e128c240a8735b0a70419a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image3.jpg",revision:"598d3064fc39aa820f3304c1fd4dabfd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image4.jpg",revision:"b03f8f0d488b052936634a6b22046be5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image5.jpg",revision:"5bc26836df52497bb063ef028144200e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image6.jpg",revision:"432451480dc10c73af20235640c3578b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image7.jpg",revision:"2d01ef36da37d44b15d3e1eb834b6f7a"},{url:"../../src/articleArchive/authorJeffCen/2013-05-04_LumberIsland/image1.jpg",revision:"03fc72284cc485ed05301c8a2cdeb4f8"},{url:"../../src/articleArchive/authorJeffCen/2013-05-20_1916/image1.jpg",revision:"cc0320604793569b287ccfe3e18b4c0e"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image1.jpg",revision:"944b6fed7d11b29767d411f899b0c1e5"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image10.jpg",revision:"778423e7cfc195c8b1626bf1984028ab"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image2.jpg",revision:"8e8cc2a279f6192368d5f63d2921e2c8"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image3.png",revision:"13c45d9e45e0843af490c79bcf9112f0"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image4.jpg",revision:"d6e0ac8d3aa958fe732e5b534678aeae"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image5.jpg",revision:"81cd2ce7ac648624fbe5c4424bb40a3d"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image6.jpg",revision:"eae6596f7285f37da79485b1d824ed06"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image7.jpg",revision:"4d00ee9206e340f9bfc9c0e05fed9d70"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image8.png",revision:"476d822555557c9f8e2e1a6ed84de333"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image9.jpg",revision:"143c7ea554ad452f73f2158d54966ed1"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image1.jpg",revision:"1b8b21d8fba9bb03f330668314e0f95b"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image2.jpg",revision:"3edb75fac6e1d813ecc18f0e8d84e0dd"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image3.jpg",revision:"2f1e067a37f38cf17addaed54aa3eaec"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image4.jpg",revision:"4ad59209e2f3349e6d8f6081d4831d29"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image5.jpg",revision:"1a1222807c32dcee8cdbbcec1c99d44b"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image6.jpg",revision:"533564a28b630e01c9a43a47e5477b92"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image7.jpg",revision:"3f4beba90e836f88ae2c72db4a77053e"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image8.jpg",revision:"cccfb1ebb6076366b0e5387b0ae500bb"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image9.jpg",revision:"74be12350f518e432092e2374c0817d5"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-01_TacticalInterventionReview/image1.jpg",revision:"ffae8ecd36e9d6ac0958af44fe0ddf07"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image1.png",revision:"6c934e7f0a94ffb82e8ad03baf33ed27"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image2.png",revision:"a4789ea575c1f149db00fa3ae156ccca"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image3.png",revision:"720b110966f9540a073d9e84fe70c2ff"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image4.png",revision:"51cd3b9282c3a4f90cba36caf2c85881"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image5.png",revision:"13598a98df94dea6df498c0cf5069ec6"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image1.jpg",revision:"f644b028a35b8fc45c7eab17d1100eba"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image2.jpg",revision:"deab3e4abe15fab915f6000f5ce219e4"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image3.webp",revision:"ae3d05e54952d5200cba5a5c4ea586fb"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image1.jpg",revision:"9d67f1004f26a3b845913627125114cf"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.jpg",revision:"693448ee9dafbde1f187a4403df3b998"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.webp",revision:"b9c9933779ba81e26b7f061e7432c59d"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image3.png",revision:"3e214a4f1bcb8f6e39832eb5f0ee6c27"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image4.jpg",revision:"e93c1c4732d00472ce5b958b6eb32507"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image5.jpg",revision:"f6483f63aa45042b410fecd8412dbe4d"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image6.png",revision:"3e8ecc1d80e244b46a3608b1447d1cbd"},{url:"../../src/icon/android-chrome-144x144.png",revision:"150037da79b66c6b1626b0dc8ab18386"},{url:"../../src/icon/android-chrome-192x192.png",revision:"ebdb6848cccb1c3bb386a31bf2cd1198"},{url:"../../src/icon/android-chrome-256x256.png",revision:"3db24f6428860ef5b8710d164f2f7443"},{url:"../../src/icon/android-chrome-36x36.png",revision:"72ef8d40e86aa07babf1207fcfd508de"},{url:"../../src/icon/android-chrome-384x384.png",revision:"537beeb0ac092d0c03a1ae061f30f4df"},{url:"../../src/icon/android-chrome-48x48.png",revision:"e757907a4ea0fc34637a76f6bfaf35c3"},{url:"../../src/icon/android-chrome-512x512.png",revision:"f24bcc3facbb90204f74454b00276ac7"},{url:"../../src/icon/android-chrome-72x72.png",revision:"fea09f854fe850dc90c1265760a49655"},{url:"../../src/icon/android-chrome-96x96.png",revision:"a2325150e4c1a267c4b08686cde94ba9"},{url:"../../src/icon/apple-touch-icon-114x114-precomposed.png",revision:"023dddb9cb18efe77f040fefd3dcae3f"},{url:"../../src/icon/apple-touch-icon-114x114.png",revision:"e66b4caa7f9da868f059ce6d4e6519bf"},{url:"../../src/icon/apple-touch-icon-120x120-precomposed.png",revision:"af72d1d3873245e10be8aba73c29ff62"},{url:"../../src/icon/apple-touch-icon-120x120.png",revision:"2387233207d780cdf09c918e31d5b7e1"},{url:"../../src/icon/apple-touch-icon-144x144-precomposed.png",revision:"6d16b423cb74b8f7aaece4b8281122d8"},{url:"../../src/icon/apple-touch-icon-144x144.png",revision:"495240ff6c9fe75a63d5feb349e3c925"},{url:"../../src/icon/apple-touch-icon-152x152-precomposed.png",revision:"c895db198ec31d6abb68b4f158276257"},{url:"../../src/icon/apple-touch-icon-152x152.png",revision:"62accd49fd6e3d7abb3ca0f8947565bd"},{url:"../../src/icon/apple-touch-icon-180x180-precomposed.png",revision:"37de2dc46db6e1cd270c7104ae17493d"},{url:"../../src/icon/apple-touch-icon-180x180.png",revision:"6aeda0af32228fc4dae14b08af5b93e8"},{url:"../../src/icon/apple-touch-icon-57x57-precomposed.png",revision:"a9b848e76c7842800e167fcd5b3f7cac"},{url:"../../src/icon/apple-touch-icon-57x57.png",revision:"9b7f6f2dfbcfc843d5764e8b1253dcfb"},{url:"../../src/icon/apple-touch-icon-60x60-precomposed.png",revision:"994c65076e69863ec0492dda9dded823"},{url:"../../src/icon/apple-touch-icon-60x60.png",revision:"187f7e918dee18f9e94f2bbe57d23ccf"},{url:"../../src/icon/apple-touch-icon-72x72-precomposed.png",revision:"81ac10bdafbf041740d1cd727dc6eade"},{url:"../../src/icon/apple-touch-icon-72x72.png",revision:"9fbcc7caa5a7ea24fb4ac207dbfb8ba9"},{url:"../../src/icon/apple-touch-icon-76x76-precomposed.png",revision:"9a244bf4222ec9f9e07be19ba2b2cc0d"},{url:"../../src/icon/apple-touch-icon-76x76.png",revision:"896f3494bde7403518c8f77a909d50d5"},{url:"../../src/icon/apple-touch-icon-precomposed.png",revision:"37de2dc46db6e1cd270c7104ae17493d"},{url:"../../src/icon/apple-touch-icon.png",revision:"6aeda0af32228fc4dae14b08af5b93e8"},{url:"../../src/icon/browserconfig.xml",revision:"d6a6ed4ae6be46c4272ebdaeeebe3635"},{url:"../../src/icon/favicon-16x16.png",revision:"521b6c7a85040303c452574186f4aaa7"},{url:"../../src/icon/favicon-32x32.png",revision:"abc3b2c04d387b15b6a095e4d57607f1"},{url:"../../src/icon/favicon.ico",revision:"fdb418cff9de0070a0171eac6524fa7f"},{url:"../../src/icon/maskable_icon_x128.png",revision:"0cf5907a0d6a387ee3efbcf7f75f5833"},{url:"../../src/icon/maskable_icon_x192.png",revision:"cd008a7876521e106a8ce3d879d4bb0d"},{url:"../../src/icon/maskable_icon_x384.png",revision:"b631fd915cdba817285cfc8388c4c27d"},{url:"../../src/icon/maskable_icon_x48.png",revision:"8c90175e38a2bacc4f440b2802419658"},{url:"../../src/icon/maskable_icon_x512.png",revision:"d39afa45bb3e2db10c1e8d2069fe2c02"},{url:"../../src/icon/maskable_icon_x72.png",revision:"4acb0a9221c010a73817631b71df2373"},{url:"../../src/icon/maskable_icon_x96.png",revision:"6e8aaada301b3a092a0b2a3424108867"},{url:"../../src/icon/maskable_icon.png",revision:"70323e1764adc77e65ec31dd127bf863"},{url:"../../src/icon/mstile-144x144.png",revision:"150037da79b66c6b1626b0dc8ab18386"},{url:"../../src/icon/mstile-150x150.png",revision:"23e0a94aac4c64ac81218346e47f357f"},{url:"../../src/icon/mstile-310x150.png",revision:"fdcc061e92851d4bb2424d44f14a330b"},{url:"../../src/icon/mstile-310x310.png",revision:"219233365848720bfbe14df7ddedbec3"},{url:"../../src/icon/mstile-70x70.png",revision:"0766ea016338863db2d6091d26b0248a"},{url:"../../src/icon/resoc.png",revision:"09ef507b07d8762342ab8bd0edb8f575"},{url:"../../src/icon/safari-pinned-tab.svg",revision:"e41d676b428a9436096866226937e5bb"},{url:"../../src/icon/screenshot1.webp",revision:"208af10afc13a402fbb8fd381f450a8b"},{url:"../../src/icon/screenshot2.webp",revision:"b11308dba17a28992ca8882d779c6485"},{url:"../../src/icon/screenshot3.webp",revision:"0a43570feda9a66c609945ed90756873"},{url:"../../src/icon/site.webmanifest",revision:"c03c9ad94639201a84a10718a7805740"},{url:"../../src/images/backgroundnew.gif",revision:"7adfd4f06d023b4fc04933d951fa020d"},{url:"../../src/images/COMING_SOON.svg",revision:"cc6507cf09df32f597ec080eb0165cb7"},{url:"../../src/images/divider.gif",revision:"8dd0e40f42389ca295f0c9408e28c22c"},{url:"../../src/images/logo.svg",revision:"90d8d81f1c27b6742d4b02be5f18938f"},{url:"../../src/images/shade.png",revision:"63692a2b6c9a9203e8ade8aa43b9f91e"},{url:"../../src/images/title.svg",revision:"6d1249ed36d9269fbe989e78bb633f9f"},{url:"../../src/legacyPages/legacyPagesDisplay.json",revision:"674e904c5dfbdbaeb0ecb0227cf1b04b"},{url:"../../src/scripts/index.js",revision:"fb90d9b1869ddbfab892519a2894a6c3"},{url:"../../src/scripts/index.min.js",revision:"e50b99a60e8dbeaa26cef8bb6348bcab"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.css",revision:"88a1a050ac10613882d9b1ea58f39a04"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.min.css",revision:"7c218347bb2fdfd6b18ec2c892d33587"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.css",revision:"7a54abeae32365edb8b1bd4d4b7f6f4a"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.min.css",revision:"c2ddda8b98dcae6b41d6d1dc782a7e1a"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.css",revision:"292dc3f9fa0daf4aca278b093dcc82f7"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.min.css",revision:"fb689eb57aef781178b5b295d4b61e81"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.css",revision:"d80efc0de1b8f3767a0fff7fbf64f743"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.min.css",revision:"85ccb5c4f75f1ec670243240d8c4faf8"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.css",revision:"390e5e885c6137f3c8406fbb7ee97678"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.min.css",revision:"1a9d5a205310b030f2a1c075cc9b9ad1"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.css",revision:"2807321baffce3f4cbe0a7ba91c513ea"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.min.css",revision:"58348c84aae17b088558358167a46849"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.css",revision:"c1ca1e21ab9c6b86028c8335b66e9408"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.min.css",revision:"fe7fdfec700d100dc745dc64d3600cb2"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.css",revision:"9a040d9b7289c890a4795be07148e298"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.min.css",revision:"f4b976988fc103085c1c9694d00a84aa"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.js",revision:"57a985a5376d69aeb76bda8cdedc9ad1"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.min.js",revision:"849e6db145f2905ce210f628bddd9de5"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.js",revision:"7b035133f2cbd1f35b9545709fc725b3"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.min.js",revision:"df21bc4ff36ca1341a99bb09f401300d"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.js",revision:"77d976360ee7592ecd1e64ababc1c245"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.min.js",revision:"716e3e3c1588d51d4dfa6da3752b0bea"},{url:"../../src/scripts/libraries/jquery/jquery.min.js",revision:"ed4e85ddc6e188c8490191794776f22e"},{url:"../../src/scripts/libraries/showdown/showdown.min.js",revision:"14517f70ed205ae583be682c9157ebe9"},{url:"../../src/style.css",revision:"ec68e1f8b0e304f90cd37c3d3007bf26"},{url:"../../src/style.min.css",revision:"cc2a8050a0719a2ac398b521683a8fad"}],{}),e.registerRoute(/\.(?:png|jpg|jpeg|webp|ico|svg)$/,new e.CacheFirst({cacheName:"images",plugins:[new e.ExpirationPlugin({maxEntries:10})]}),"GET")})); +if(!self.define){let e,a={};const i=(i,r)=>(i=new URL(i+".js",r).href,a[i]||new Promise((a=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=a,document.head.appendChild(e);}else e=i,importScripts(i),a();})).then((()=>{let e=a[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e;})));self.define=(r,l)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(a[c])return;let n={};const d=e=>i(e,c),u={module:{uri:c},exports:n,require:d};a[c]=Promise.all(r.map((e=>u[e]||d(e)))).then((e=>(l(...e),n)));};}define(["./workbox-db952f2a"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting();})),e.precacheAndRoute([{url:"../../src/articleArchive/articleData.json",revision:"4e82f111c803e5425e3afb0cc77e4450"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image1.jpg",revision:"27dcfa9ecd0efd99b9df432879c08219"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image10.jpg",revision:"afe9afcca0f32a8976567d16cd988c85"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image11.jpg",revision:"8d9210ff1cb1a22a43010fa06295e0b7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image12.jpg",revision:"087daa82594a5041a5f61ae899909f99"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image2.jpg",revision:"e52a795a738be47b86fd5a46c38752ef"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image3.jpg",revision:"bb151e1aa85b98eb23a5d098eecb961d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image4.jpg",revision:"3cbe6c46e8bc384cae1823d75c78924d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image5.png",revision:"def8648d4bee746deebeff24603e37ec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image6.jpg",revision:"a743180627e5e421c310676294a1d5e7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image7.jpg",revision:"7d896113d82eef58199f7b53e04ce414"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image8.jpg",revision:"fe2e019064f54af3a81007f0d6d61cdc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image9.jpg",revision:"7ca083aaca86b6438beee09c2b35d071"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image1.jpg",revision:"42316989cb3524a4a0b9b1539c18ffb9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image2.jpg",revision:"a269c955ae1e919560fc4ed3a8202a60"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image3.jpg",revision:"16ddaf2bf7720d2102ca2550ed40093a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image4.jpg",revision:"463b92557e750b3e59e70ab79c37db2b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image5.jpg",revision:"da3db4e9f9a70d6818a3a808c23db5f2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-17_Hello/image1.jpg",revision:"f935347ae298343a9f8d8cbe065ee765"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image1.jpg",revision:"1a312289757ff487438359521def9550"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image2.jpg",revision:"b95583b7e8856b83fb7428623c353a81"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image3.jpg",revision:"59431aa1577fe958ab19994156ff1025"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image4.jpg",revision:"c531ca2589e869827254619aba3f0b98"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image1.jpg",revision:"1e8b13c9e625916dd7a50e584c431662"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image2.jpg",revision:"5ac54287ee5f4229f511494c8ff36e93"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image3.jpg",revision:"00b32d6566c2fad7dc07294cdc02230f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image4.jpg",revision:"064e7701fabeedac72b6192091601a24"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image1.jpg",revision:"ed7edfa7336e49b1ea7292a0d3e91697"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image2.jpg",revision:"8d6e7f18aa0128a12623145b1f54dc54"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image3.jpg",revision:"a23e0efba39d8a5f5540d8fb0eb5da7b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image4.jpg",revision:"9fc8fda1cf4b455b83287a71a65dce14"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image5.jpg",revision:"5822849d86c3e6af1c6b25e109ecf53e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image6.jpg",revision:"b13fd0313185fa3cad01a269ea06fbf6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image7.png",revision:"505681b94d20d38734cdb53770be5fe9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image1.jpg",revision:"c24400d9aa82c02094384873e6efee8b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image2.jpg",revision:"07f26519bb81bde15c8ca54a030cb77f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image3.jpg",revision:"e6433878b8f7b1a94a3315bb5dfe6fff"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image4.jpg",revision:"21d73f39d66a4df4c7e34804987cae2e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image5.jpg",revision:"bb37ac6d808f2ec37a2d7dee37478c0e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image6.jpg",revision:"513ec0cccbbc4d3e7c7300791b1beb21"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image7.jpg",revision:"98d31c43e0adb9ae03c3308b5e3ca444"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image1.jpg",revision:"d31e1c075f0f05e5c23dcb0b9a8d9d62"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image2.jpg",revision:"507c2c06bfefb7a3684e28d579663625"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image1.jpg",revision:"bd72a27ee9638d04ef5c3acd361bb0e1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image2.jpg",revision:"f0dc1c99b95da3defedd96a14ccc6025"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image3.jpg",revision:"6b24f06c18869e2c8dbb075e9a667a85"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image4.jpg",revision:"8575a22044df8f31f9cee862838db9cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image5.jpg",revision:"7638f5ab7c7d5b5a278c0c269bdae422"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image6.jpg",revision:"6b2a27fd3d61804010db39e8a51cd5cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image1.jpg",revision:"173dfdb7293f01e6e60fa58ce33ae62f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image2.jpg",revision:"de798c27fe9604941f3cdd24181546bd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image3.jpg",revision:"ec2a7a9a8774cb5b2c01d67b8d4442c5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image4.jpg",revision:"57a5e970597f3ba03e904deb47d6d852"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image5.jpg",revision:"689426e2328af6970a456654853c0a6d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image6.jpg",revision:"7f0f406210596cb2e23de523b32b1740"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image7.jpg",revision:"4aad1805627179cbcb4552754b90731f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image8.jpg",revision:"173dfdb7293f01e6e60fa58ce33ae62f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image1.jpg",revision:"23c560be26525f9dd8feb4038560c46a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image2.jpg",revision:"9e4e319f065b67d62bfd086d2ec701e9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image3.jpg",revision:"8a97e4b9f9f46a2374dcc5d9f3aa0f27"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image4.jpg",revision:"5b0ed78f26309666f2cf5d94aabb5291"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image5.jpg",revision:"65a85df77a68596ca9f4fa3a1625110d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image6.jpg",revision:"72ee0e02d69c613d27c64b4af0303ab5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image7.jpg",revision:"f24d7cdb0616627945e07452fd1a56a4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image1.png",revision:"2fbf9f405d5be8bd99805ade06b7964b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image10.jpg",revision:"fd0763f6f229687bbc75a61c0f7a5ca7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image11.jpg",revision:"520d7a254b380ac68d860dfdf672257c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image2.jpg",revision:"48d7ade2d8f8b150698ff2ed92f1f5eb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image3.png",revision:"492db2a417835f95b4d3dcb80f8422bc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image4.png",revision:"d5e7c367b8772f9fd271c14a7b92d2d8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image5.png",revision:"00df4ab01cda692490fe960e1c62d524"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image6.jpg",revision:"f04f1c20328b95a291bb158b949e752b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image7.jpg",revision:"56cd148c847e9d1e572ba685c636f80d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image8.jpg",revision:"32beecbb0188bce1ee1f2ffbdc459918"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image9.jpg",revision:"48ca4959a17874f31ccdbe2d1c068842"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image1.jpg",revision:"a7bd23e54c13cfedfc74f019153fa350"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image10.jpg",revision:"7eb0de5b6a49230830f8b14d7e49a21a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image11.jpg",revision:"08d5b6f1be486aeda749b9c787733ec6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image12.jpg",revision:"4493acf6c791acfc5fd5e6cc0380e914"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image13.jpg",revision:"9f3fd48941f83484b1b3f1d999306cc7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image2.jpg",revision:"1b53b42d6f6fc430c055d6861fd8383c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image3.jpg",revision:"1157d7cb31d41809050aa8fc08c69d07"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image4.jpg",revision:"50940dfe47ebd228eca982b9ff59c3a5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image5.jpg",revision:"a89976b97983f854b9e812d6417147e9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image6.jpg",revision:"d9ff99e6242ab96f652a7209d8baa07a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image7.jpg",revision:"947e3a2d6079a41ecf6e359977a1b306"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image8.png",revision:"8c0cce94724fce633adef9881df7b485"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image9.jpg",revision:"5e8693b0d8804fab484ca5bb72ee1ffe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image1.jpg",revision:"8047492b24054f2f4c1377dd41c9f6ed"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image10.jpg",revision:"bc684c6fc3948df91e45b1f1a6c52618"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image11.jpg",revision:"edc5bc1bf1c5941e7b23bda9cb9b4480"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image12.jpg",revision:"a49b345c9265fbbf21284546af86c055"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image13.jpg",revision:"694cdf48da02964c0687a94fd741a650"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image2.jpg",revision:"599388471d74d344f937ee243855b242"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image3.jpg",revision:"c4394ab19c2d2938d84fc2272a8f0356"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image4.jpg",revision:"286e4dce6f67acfc63d3b28b96481b65"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image5.jpg",revision:"48aec9824256e02c78ef8b5f3aa84ffe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image6.jpg",revision:"cb0e7aa1dd96cdb6218175db906abbbf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image7.jpg",revision:"05cffef2939b69fe7bc8fffe24288ecc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image8.jpg",revision:"ab45b2524d98451f99aefb1b5a1da118"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image9.jpg",revision:"14af306a60783767a1af5f5f8c67d74c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image1.jpg",revision:"b8dfb9102ccf2cc92fc34aa280f08cc9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image10.jpg",revision:"66682a6bfce09cfd180a83af40d9f3a6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image11.jpg",revision:"3b74fd37a7d9e4e65b3eeeae85033656"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image12.jpg",revision:"79421de15b792aa4ccbd5e367da3ba4f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image2.jpg",revision:"45afc084a6c9e5bfc7e02840ef38024c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image3.jpg",revision:"8a7a047fd8542b0d68604b43a8b74202"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image4.jpg",revision:"7282bbef120a5418fd36b6568e84e61d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image5.jpg",revision:"3d1fad1043444f389b6367e33f32105b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image6.jpg",revision:"45f6f65bc0f09d231beef2a342529728"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image7.jpg",revision:"6663c04488bc344d01be9aa4cd1d3cf9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image8.jpg",revision:"bfe4f8fe33a5eca2d5b35745f9630faa"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image9.jpg",revision:"bb17bcb13fa1865d7c73498632a033f2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image1.jpg",revision:"0f46f35ad92b1477a363dc757e472b20"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image2.jpg",revision:"38c9ca222aab8cc44984ca4083a4942c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image3.jpg",revision:"20a6885c9142134aae37df4d06d52571"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image4.jpg",revision:"e90e4f2d3db64d1bfe7666037b58d58f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image5.jpg",revision:"1358d3899a04b5ddf45fb2e68a62fffd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image6.jpg",revision:"0305a218bc5817fc084149b815850c06"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image7.jpg",revision:"140738b1f29726a381773bea82783cde"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image1.png",revision:"bdb0db3c8620478df4f1e1791b0f7c52"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image2.jpg",revision:"689dfbc01761c5548bb13344e664096a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image3.jpg",revision:"82a01cacd45c6dad1a58630a4fed5f35"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image4.jpg",revision:"066c5b01983cee0fd12af57224ec91cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image5.png",revision:"1cbb8519b460b98ec9b534ba705899d9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image6.png",revision:"e6aad3dd2452c8db0ac3913077ef15bb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image7.png",revision:"2cf22786b597039bd4dd033709ceb97b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_OneLifeLeft/image1.jpg",revision:"db4f17d2c77770830065ff86dcf39798"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image1.jpg",revision:"91ab146483da921afadde595ad300c1d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image2.png",revision:"5285ba17551853f34669d5f3cd5434e7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image3.jpg",revision:"5e2a63899fc1f942a97c37374de85236"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image4.png",revision:"901bd62bc86fea78989629ec8e500058"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image5.jpg",revision:"ed06eb504a713536e9d05181bd25eb36"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image6.jpg",revision:"82797c9e1bdaac040557385d63a8efcf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image7.jpg",revision:"73e87e33214bae5415b535c61b047159"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image8.jpg",revision:"ed4c5a27fe4e590f4754669521e3bec0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image9.jpg",revision:"1446e055a564775bbf85135412e05ac9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image1.jpg",revision:"6db612ad1adc86394145d2dbf008ae78"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image2.jpg",revision:"7eb0f705595ae29fdf3740209e22bac8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image3.jpg",revision:"503976a147e77e51ef996a63afda208f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image4.jpg",revision:"6e29916ea8a34453700f352d7dc6ad19"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image5.jpg",revision:"0e2b7a92664c5b7f61daacb6c0f97ffe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image6.jpg",revision:"df0c407ea360c3333b2d2d317bacb5f3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image7.jpg",revision:"b18927a283786b19cf5e8ff8dbae68ad"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image8.png",revision:"564d1334c46d244c22d35dbcd5393b4e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image1.jpg",revision:"5029917134900956505fc07f969cbf7c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image2.jpg",revision:"9c0709172457638827efab9cfbb2cb2e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image3.jpg",revision:"72d4c6e6782b89dc6b1d22d05a046753"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image4.jpg",revision:"78f059113d5e0f0f7f81f41034d3f558"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image5.jpg",revision:"0db43db70d44eaa467c1dca37cba71cf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image6.jpg",revision:"a91f1d3b2b4a64657d596fb384520e35"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image7.jpg",revision:"a50d72749eab11a5c55d2068bb4cb319"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image8.jpg",revision:"c9fb70ec4dc20201f0a783c4169dd5c2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image1.jpg",revision:"f1e2ffd6f28ad03975bddfa34b8ed82d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image2.jpg",revision:"a6726b9e94b791ac903081407723c4c6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image3.jpg",revision:"81a179e3f0d788928e85a471f4310887"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image4.jpg",revision:"ceb65b0f1a2a52c24122cffbc230f854"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image5.jpg",revision:"fc4e23b17fa1b9413941bd7330afbfec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image6.jpg",revision:"12b2d1f4c84c3c67a0686cc064019d8e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image7.jpg",revision:"7fa9482353d9b047c8442ba3183fc73d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image8.jpg",revision:"159094bec3a88654026cb01fa4102cea"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image9.jpg",revision:"edef323af40be3c9f28bce825f54bf9a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image1.png",revision:"b2ef9d4a9f2e1999d3aaa05011d9ee06"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image2.png",revision:"e7efa0067442d7e87295674435df787a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image3.png",revision:"d4786bf9d21d00ef9f44a4f46f5baf62"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image4.jpg",revision:"bd4093288975c01af4bf30190d367176"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image5.png",revision:"6702d7487576fd015572cc5150ea3362"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image6.png",revision:"742bd34a6a8dc6399173d08beeb7ee94"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image7.png",revision:"98065b05c544e132a2ba7bfd598e30e2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image8.png",revision:"102cd35ae2db4ea282115004085690c3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image9.png",revision:"a9f964a0d804b8193b5be0d5dce0c0f5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image1.jpg",revision:"dce00c583231a8ca92dfe4fb4075a0a4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image10.png",revision:"8f1624797c8e49518059fb70341cb4c7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image11.jpg",revision:"99f9f3777965f0c782ff2608993c688a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image2.jpg",revision:"919d2fc9606b90f6dca7e62fdf926faf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image3.jpg",revision:"b145a9249334c7969123efef8adc5468"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image4.png",revision:"c5da356d707423bb9d15989dad326875"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image5.jpg",revision:"b65917cd35f7c482a28bc78bcaab92fe"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image6.jpg",revision:"074b1c382fe8ddf3641a60d0a08b7bf5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image7.png",revision:"e8dc2ca0ae4f4af0253b194625453534"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image8.png",revision:"467b3e86843414afdf38ac8d4c88856f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image9.jpg",revision:"f60375cf0c4431a8ba797dbf56d64f2b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image1.png",revision:"a2797b97b88edfea12649fdf05fd88de"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image2.png",revision:"fa0e34f24a10af6f84acd620a329ce53"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image3.png",revision:"44d55d9588f4e57f7595a43edf4b0a56"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image4.jpg",revision:"4ab8bf3ce79f08d09d39278ec286ee91"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image5.png",revision:"46a3e77429a914a0fc7ca1b620ead51a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image1.jpg",revision:"2a5c8c9be4df50e1d8ca17530c4263ae"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image2.jpg",revision:"5a1fc1955d337c45fa715f881983b777"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image3.jpg",revision:"3fa0199e3b86e6d04ea6aa4deb23ba10"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image4.jpg",revision:"db3f1cdda23155567c46ac258f574e5b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image5.jpg",revision:"944b63b9053880378b161021063d2953"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image6.jpg",revision:"3a7abc7411fc69029e9c498dc0923650"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image7.jpg",revision:"34873386d56efa6143194a8cbe6e1a13"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image1.jpg",revision:"0df19ec53a5438e7852570241ad6cb8a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image2.jpg",revision:"82eae902b1a14ab0191768b1b3d622d0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image3.jpg",revision:"6af31d464429ed9a8a7c1d595d4863ea"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image4.jpg",revision:"4a6dce15c5a5d4fe8bec5b5baed2daaf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image5.jpg",revision:"26ff6de3a9e80f30cd8507b0ad5ebe89"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image6.jpg",revision:"e30be39f6820e3617fde3407072b6e8f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image7.jpg",revision:"2ca0ff627fd58ffd65792c4a4650b478"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image8.jpg",revision:"5c37f7bb28f1c898cd0a796460290dc4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-11_BeyondInfinity/image1.jpg",revision:"ca3918b596d69345902b93cab250995a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image1.jpg",revision:"969ae9c2a8b0695d291d08f5d510520b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image2.png",revision:"9f2afa3957285da421fe2ec81d4b4fd3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image3.png",revision:"f65650157c2a7ebc4940d45109db55aa"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image4.png",revision:"ea7060524456b08d1660690443f91c42"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image5.png",revision:"be4ed8539d5b403baff250d5264410a8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image6.png",revision:"19dd1ba71a924337f8b1c0b20bba55c0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image7.png",revision:"70950ce872bd828046613e6a146a8449"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image8.png",revision:"79c4094b3b3369394c375e7daecab4af"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image9.png",revision:"d86046a881e897727e4ba5e46ccfc6ec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-13_CubeMetalHeart2/image1.jpg",revision:"d2a3634a6b26e4107fb009365bcc0585"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image1.jpg",revision:"6985c503e2440e09b0f98097ebc973d7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image2.jpg",revision:"e1733add2770d1800357a3e1c50f5bdb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image3.jpg",revision:"772f0dcd2d43cdaa22926db4c104faa6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image4.jpg",revision:"2736a2f63cecc8247ac82740b88711e4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image5.jpg",revision:"b609c9767485b3ce1752a3ac5e34f189"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image6.jpg",revision:"86479a854fdfb90037ef509a73e91c3b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image7.jpg",revision:"14e0c76554569c97263986cc63fff87c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image8.jpg",revision:"aad8e8b41f96e70d2e95db02146461f3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image9.jpg",revision:"0b28ba8fb5335a25082b0327a7f1ed8b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image1.png",revision:"28e06c30374b410246bc759213b94431"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image10.jpg",revision:"7928cc5248fca24edb621243339239a8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image2.jpg",revision:"90865b965988fcf9cd7118cc95a7122b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image3.jpg",revision:"9c4620e4447474c3327e3695e4658d0a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image4.jpg",revision:"00323e2dfaa5a9b9feb32349776439f2"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image5.jpg",revision:"e581a66f0794b01bd6fe8b02a2d17bb8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image6.jpg",revision:"926a0a8692502227402c7e88c3462ce7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image7.jpg",revision:"4f40bf239470d9d6d6471f4ae5853f9c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image8.jpg",revision:"445969f3dea1a1a37bdca7fb61f8be9a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image9.jpg",revision:"b646c0c7e12663a0bc0943190871e46c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image1.jpg",revision:"b244d8c43d3e4f0c0554d2c41f0c8748"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image10.jpg",revision:"5b019d58c48bedaa3b2db649bee9f0ab"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image11.jpg",revision:"f44519812b8832db10b0e66b602f238c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image2.jpg",revision:"889e530b818f9724bd460ab9297c79cd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image3.jpg",revision:"c2f2eec3a1e2754ecb94904a6eb97f1a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image4.jpg",revision:"5ff7570dba36e15c3d16effc44708a50"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image5.jpg",revision:"96cc9857fe52e1aaaea6016c4653bbc5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image6.jpg",revision:"ffb4ed920f9da2bd0e2e4b0e279abc07"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image7.jpg",revision:"18661eb309bfe8202b1164b6dd14824b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image8.jpg",revision:"2dcf0dbe71bc63ca37f71727c91d74fc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image9.jpg",revision:"c120e37e3bfde902b212501d08e3fac8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image1.jpg",revision:"7280a7b2247ee3653cb17564dee93fd1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image10.jpg",revision:"17458c1da295eba4f733b5353190a1d0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image2.jpg",revision:"36bf376552b667976c8daf04f648f469"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image3.jpg",revision:"f5cb9302f99c336f51e4df6c5a78a5e4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image4.jpg",revision:"2e39a520bc245942c8c72a272fd5b3a5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image5.jpg",revision:"c67b46f501df14a52f1e984b7cccfb3e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image6.jpg",revision:"a01171fa9bdae2b3589d8057f180626e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image7.jpg",revision:"c5fa71094a08129e86a9126e7a4ebe44"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image8.jpg",revision:"3a84d080ca340dd547acfbd9d8a9cdb3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image9.jpg",revision:"d220becf4f5178a4a1684c54d655b113"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image1.png",revision:"35666a582d971835eb6dab5f49e57708"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image10.jpg",revision:"7ec66f5d5a7fead07b3251345d38a359"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image2.jpg",revision:"7e8440ed2955c1d60157648a0da173ea"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image3.jpg",revision:"99d5c5f459682ef62c7a3cc98b74ccd4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image4.jpg",revision:"9469109fae2e8f09471d9ac486069220"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image5.jpg",revision:"d3795070e6514f326994c3c1590b547b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image6.jpg",revision:"dfd0d6443bc6eec14c64fead9492d192"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image7.jpg",revision:"84022322b84870d6590df5c0151caeeb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image8.jpg",revision:"6731fd43898ed1f3ee3ed471edd47ada"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image9.jpg",revision:"1af3277705effeaef5cd27b5d3446a9a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image1.png",revision:"80abefadcf91449132b9678c78b430a9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image2.png",revision:"c5e0a5962685800b401d0a1913eb3ba6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-13_QuickSlickDeadlyTrailer/image1.jpg",revision:"4b3f12019ae90e99c477c632fcbb7d40"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image1.jpg",revision:"e252c9bc34b65fc4fbfa68e91c059f3a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image2.jpg",revision:"8328e27fdeddb789cccce3622f19709e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image3.jpg",revision:"f1035b84d2568c075c9c6e0f8b34197f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image4.jpg",revision:"83b7d2e6f0a56bddacc0fe6f031f4c10"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image5.jpg",revision:"8b70862e000b889d3c05935b9c3d7784"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image6.jpg",revision:"e8f0ab72d0ffbf3e8ae4626595794030"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image7.jpg",revision:"fb756fe1d10704f8d4f700e963338d70"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-16_MotteIsland/image1.jpg",revision:"ea87444e9c4640bd862d6098b4bb6f1e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image1.png",revision:"34f3bdd237e7b7196e0507be3745efca"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image10.png",revision:"e371c2a35cb13276c45ab67244706e28"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image2.png",revision:"75f33390f8a561aa82f06a9257ac0245"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image3.png",revision:"534b10322cf0ef6a3562f697668278d0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image4.png",revision:"03c93a901f2ef292a342330e7729d422"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image5.png",revision:"c4342af6ab7c7ea6698026061f005377"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image6.png",revision:"b326191989250f6524e08a5b819c8e32"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image7.png",revision:"8ea1535d1d981c2222327d76d2aa637f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image8.png",revision:"4e6615d28d22a83ef0c99fa8e3aee624"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image9.png",revision:"4cd779c5b8aaaa88ca5dccf6e31719b3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-19_ProjectTemporality/image1.jpg",revision:"12c7f75562a71494cb236b1cd6413ec0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image1.png",revision:"20d8fc45e13befe6968dfb5db8491e51"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image10.jpg",revision:"e7b14995674d200c7b89b1f7a4bceceb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image2.png",revision:"8fcff4dabfae8b1d42bc0b4c23e697d4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image3.png",revision:"dcb482c84bef290ad021b2d9d220c8b7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image4.jpg",revision:"0a54796fd651389edeb8e4c672c78c81"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image5.jpg",revision:"0fc8ef2ef8523da1697ec5ce1f8acaf7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image6.jpg",revision:"74abb9383c4545188c93f3f7001a70ce"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image7.jpg",revision:"c288350a97fb3607198635248efbb0bb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image8.jpg",revision:"81607e4f5d75bee81bc49b610fd0bfa5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image9.jpg",revision:"4732c349b66c503ad05f6f5072476476"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image1.jpg",revision:"ed7709fa547382018e3e5389aa9d5a74"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image2.jpg",revision:"9937d5c6320d0eb3ccdbb561afe2fd1e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image3.jpg",revision:"bcdf78d9ba26d4dcba29db1925968cbf"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image4.jpg",revision:"b6b8f79891f5b28968e4f6d5389e1403"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image5.jpg",revision:"e9ca97ff5620d39822dc5e1fd5cf1099"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image6.jpg",revision:"1adc22403d4ceba05d90dfa8a4a30cf7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image7.jpg",revision:"4479fd4343f7df4b26642534ab9247fc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image8.jpg",revision:"a554a695aa14e80a41ac140c276a2f15"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image9.jpg",revision:"a70613da9a23cbd60ed43da23afcef46"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image1.png",revision:"8335e880a0e50433ba57832d55f98d04"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image10.jpg",revision:"665453487cee76046c6996900df65742"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image11.jpg",revision:"c1bf4e21062b27021b577b0054d3ee05"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image12.jpg",revision:"797269adaab601a10de5968c75740c9b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image13.jpg",revision:"998fb25c60ecdaaded79ad5f325c42dd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image2.jpg",revision:"4a707552ed7bbfbb0f2f3f5009ad2d99"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image3.jpg",revision:"7888eec1ecea13b48444679726b8a83a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image4.jpg",revision:"5a8e3601a1e5ac5c6684cce3844162c4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image5.jpg",revision:"cd21b9c429cc4d2ec6cb9c3e8177d007"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image6.jpg",revision:"162119a60951b91e3d19f71bd440fb6a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image7.jpg",revision:"9161f5a156e29f544226ef2e5a7139a3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image8.jpg",revision:"ad5d7a8504a225e7f40a5f4678ed571b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image9.jpg",revision:"15225de368c024c0cfac87e33ced5a8a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image1.png",revision:"299b713c8ba7fb34ce4812919fe9e03e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image2.png",revision:"f2c2bdb3ec5820be66f8f520ad7997d9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image3.png",revision:"d5731ce115c6af073ab9c1806692b2e8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image4.png",revision:"7d120ba85b19cc45b89ef3dc0c6b9cc1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image5.png",revision:"fd915f1b3284ca6a98fc994be84ba9c0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image1.png",revision:"2ff7e5641d3983a2b26121879f0c6768"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image2.png",revision:"1ec667d777e79f978ff4aeefdce1081f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image3.png",revision:"871733da343647401017c914a8830453"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image4.png",revision:"c1405f9b5baa3062660248395ac0157e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image5.png",revision:"5a93be18f700f9425de0d030c889493a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image6.jpg",revision:"95072f7182de90d0c9134d006d5003a6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image7.png",revision:"2835cfe51ef48668d6402252c7aa1f5a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image8.png",revision:"04588d04a275594757bbea6e514ca089"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image1.png",revision:"50f88e9f70978d94c7d8ae35704f0b11"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image10.png",revision:"b8d00155a9c0ecafa6f57d55a300f50e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image2.png",revision:"cb4c57e8da565d757fe9a7dec471c5f4"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image3.jpg",revision:"083d5e6f02393306af76686b4083aae8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image4.png",revision:"2cd4e79358a6029a2c06e3e9691c6f0d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image5.png",revision:"f361958232fceb901732a063136d4398"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image6.png",revision:"30125f459d3d8fa68e86e6e06543a55f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image7.png",revision:"762dd5f98d498b4d606184077cd778e8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image8.png",revision:"af8a33c09e2cdfce09db891b4554fa61"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image9.png",revision:"02ce56af8a12814e4995452bff2e44e6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image1.jpg",revision:"c7685c02f00b2f0a6415220868bd8530"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image10.jpg",revision:"724d63b5cd9cc42440d81935291b5887"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image2.jpg",revision:"a1dff16d384d349f30d368e39201ace3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image3.jpg",revision:"a35ab9b8de060858d21a9ec2fb98f5ce"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image4.jpg",revision:"f5369f0338f87703fa5d8068c9c05a81"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image5.jpg",revision:"cb76e4c7f76050908df369cb5313a3eb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image6.jpg",revision:"aa71c08a590f3f8aee35f6a3de184eff"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image7.jpg",revision:"14b707bb05353d60ba9109573b2c5be8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image8.jpg",revision:"2473ab776cd3c5ac0a4f3848be7b8ae3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image9.jpg",revision:"7a277c4dd822b0e0cd41391d11111a00"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image1.jpg",revision:"d999dea8111b13b545f4ae9bed04e4a1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image2.jpg",revision:"841e52644790d60dcce83a57ddabd140"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image3.jpg",revision:"0d6907f6d45ad4c1e7db3db10cabea9b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image4.jpg",revision:"6a6b872364e79cc1088115e4f2ffaa54"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image5.jpg",revision:"47fc58cb67ac5b4d5116d1b62c42f8fb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image6.jpg",revision:"8c18b20f4d0b9a466180b9d3a08653fc"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image7.jpg",revision:"fb364eac0951773cb330ceb6aba2823e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image8.jpg",revision:"4f2526c4ccdec17b17ed2c1baa9e3791"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image1.png",revision:"9da1691851b60a29b30b3838804f2d70"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image10.png",revision:"04cef2521e8e6655cc015ac1bba05a5d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image11.png",revision:"c5f8b36eacb835da5c9a6f26d358e44e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image12.png",revision:"dc7b79abadc0e4f7f694063e49e23d89"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image2.png",revision:"dd48df93bed859be4e6284874e715389"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image3.png",revision:"62916c4ba515347d4ce6895469a09933"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image4.png",revision:"7a7d4f69271672f3ae22ec5b753d2d57"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image5.png",revision:"afb3771d0929c0d107d8f3a9eb5d0913"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image6.png",revision:"d4dd9dd1232d59b4849be170639dfa8f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image7.png",revision:"456a7a47aec2cded7499f725bd901b63"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image8.png",revision:"3a3a84f2d957586e149e3cb36d34d227"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image9.png",revision:"32e5f0d564ff45e1dd8cb00b3e8fcad3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image1.png",revision:"0390bdc1bfa8421099680021226d153f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image2.jpg",revision:"b577a76021fa1f7174a3aef31fb51d56"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image3.jpg",revision:"78cb82e3e019e192a1d78d07bd631d2f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image4.jpg",revision:"fbd7bcd77823647f40bebd5896a71771"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image5.jpg",revision:"a9753e3654ad97ec7bc8c26ede89250d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image6.jpg",revision:"74037b92dbb71626ed02bf85210ea4ff"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image7.png",revision:"c1edf94b993167cc6e04a09de778675c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image1.webp",revision:"05d285e3f80d258cbd2fbcfc247af4a3"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image10.jpg",revision:"bc1414519e5c1273dcd9468449b55a20"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image2.jpg",revision:"7f329ef9c00eeb0143cdbe3797d2bc2e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image3.jpg",revision:"a484a9430d3726b74c6f2f56d0b6d6fd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image4.jpg",revision:"c4b9e761ebd778c1e1a6d16c52c68cd9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image5.jpg",revision:"a731b9997646af477545434fc3ef98e7"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image6.jpg",revision:"2cf253207ba1d7d11fae57b3210018b6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image7.jpg",revision:"4211cedbdbf72b5986a665ad19da68d5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image8.jpg",revision:"b2bbc644824210016a36e173615ddfec"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image9.jpg",revision:"3babeb8ce62bf3a0adffb456f0d6d3c6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image1.webp",revision:"3a24925a2b3f0cb5c19d8b59b86e7be8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image2.gif",revision:"27cef56926535e48b93b0a5ed02e9adb"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image3.jpg",revision:"5cdf6d0112ba9f6c99a8b2748f0dc402"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image4.gif",revision:"7140f81fd28621dc0f13c2718fc3aba0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image5.gif",revision:"5e5a679faa69d0a49b8de0570d6720f0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image6.gif",revision:"b3ab0571a09114426ea68cd8dfc143b6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image7.gif",revision:"bfe28d73c56a0fcec4bfb460b5baf220"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image8.jpg",revision:"ba64b482c7988d0adbcd01c72feeb5ac"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_PlaysetsTrailer/image1.jpg",revision:"9432cc5b42136150924aba36f20d4835"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image1.jpg",revision:"fc490a69e70a434f0585ea2d68b7332f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image2.jpg",revision:"95f4b2826fd04024a2d865845278022a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image3.jpg",revision:"551c7a18e6312c61f77c3bf1671ea762"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image4.jpg",revision:"32716c1bd0593b7f3431c5fdb9caf974"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image5.jpg",revision:"f81d478345f158f3c1a3464352f03982"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image6.jpg",revision:"35a6741230000357728e9a8e195cf2a9"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image7.jpg",revision:"7bf846f610368e235844a37847dfec56"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image1.webp",revision:"7934a466ae8f3a0b553c6b121468d405"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image2.png",revision:"fcc6cc0fb1d798f572895a5e39b83d0b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image3.png",revision:"af9f4dabbd9d85fefd7310c52f9fa8c6"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image4.png",revision:"bc3207531d8a2e1d80085002482fc42f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image5.png",revision:"77b347def110cc04bf2eb218ae274c17"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image6.png",revision:"255772860e0104a5a72f862d27b44e3e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image7.png",revision:"bdc491e7aedae34ea8f6a652694aa5fa"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image8.jpg",revision:"8f26289f86fdf8a7e95f6db6191e3491"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image1.webp",revision:"553c975c1cd76e7976b7eb1c2c03ad25"},{url:"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image2.png",revision:"fd4ddda59288f82dff542ef27f0380b1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image1.jpg",revision:"f1ba99bf880385dd4f10d141de869dd5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image10.jpg",revision:"f90a4ad5d2e7f0e583c096dae71de576"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image11.jpg",revision:"b41d8dd56d65c1c62c124b64e1ba1241"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image12.jpg",revision:"8352dcd7d629aa21e14d28c9a868b728"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image2.jpg",revision:"97c9d4535f7957366bfd33c7f8f131f8"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image3.jpg",revision:"669012e419e2368c41a8860b28a659cd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image4.jpg",revision:"6040a96345fe01925d4a7f44b14bbe7a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image5.jpg",revision:"ef55e1e26e6605f8ae5e9355df8cda13"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image6.jpg",revision:"45a5457c26f4070e27cf2342a223108a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image7.jpg",revision:"a58d36f8413f0460b896edb13e99054c"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image8.jpg",revision:"926cc385abed62e976cf8db3136da901"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image9.jpg",revision:"bd54a017ab5a1dc886e58618dd9bd0c0"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-01-26_WeCare/image1.jpg",revision:"961518648539049372bd2bbf393fb5f1"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image1.jpg",revision:"7ff370d80ef3fc938e983ae0b2ae8832"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image2.jpg",revision:"ac4dc7e596d93d432d8fe75f6226f29d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image3.jpg",revision:"1100826917a344c0593ae4a0cc78b373"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image4.jpg",revision:"03043600776b8167aaf780a6c3c3af5f"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-03_HOYO/image1.webp",revision:"03fdfdfc1c641dbf4668db3830bf644d"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image1.jpg",revision:"d16f3b3ce5de1f8844fbcd3ffce5c452"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image2.jpg",revision:"f21721a2b0e128c240a8735b0a70419a"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image3.jpg",revision:"598d3064fc39aa820f3304c1fd4dabfd"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image4.jpg",revision:"b03f8f0d488b052936634a6b22046be5"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image5.jpg",revision:"5bc26836df52497bb063ef028144200e"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image6.jpg",revision:"432451480dc10c73af20235640c3578b"},{url:"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image7.jpg",revision:"2d01ef36da37d44b15d3e1eb834b6f7a"},{url:"../../src/articleArchive/authorJeffCen/2013-05-04_LumberIsland/image1.jpg",revision:"03fc72284cc485ed05301c8a2cdeb4f8"},{url:"../../src/articleArchive/authorJeffCen/2013-05-20_1916/image1.jpg",revision:"cc0320604793569b287ccfe3e18b4c0e"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image1.jpg",revision:"944b6fed7d11b29767d411f899b0c1e5"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image10.jpg",revision:"778423e7cfc195c8b1626bf1984028ab"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image2.jpg",revision:"8e8cc2a279f6192368d5f63d2921e2c8"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image3.png",revision:"13c45d9e45e0843af490c79bcf9112f0"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image4.jpg",revision:"d6e0ac8d3aa958fe732e5b534678aeae"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image5.jpg",revision:"81cd2ce7ac648624fbe5c4424bb40a3d"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image6.jpg",revision:"eae6596f7285f37da79485b1d824ed06"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image7.jpg",revision:"4d00ee9206e340f9bfc9c0e05fed9d70"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image8.png",revision:"476d822555557c9f8e2e1a6ed84de333"},{url:"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image9.jpg",revision:"143c7ea554ad452f73f2158d54966ed1"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image1.jpg",revision:"1b8b21d8fba9bb03f330668314e0f95b"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image2.jpg",revision:"3edb75fac6e1d813ecc18f0e8d84e0dd"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image3.jpg",revision:"2f1e067a37f38cf17addaed54aa3eaec"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image4.jpg",revision:"4ad59209e2f3349e6d8f6081d4831d29"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image5.jpg",revision:"1a1222807c32dcee8cdbbcec1c99d44b"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image6.jpg",revision:"533564a28b630e01c9a43a47e5477b92"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image7.jpg",revision:"3f4beba90e836f88ae2c72db4a77053e"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image8.jpg",revision:"cccfb1ebb6076366b0e5387b0ae500bb"},{url:"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image9.jpg",revision:"74be12350f518e432092e2374c0817d5"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-01_TacticalInterventionReview/image1.jpg",revision:"ffae8ecd36e9d6ac0958af44fe0ddf07"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image1.png",revision:"6c934e7f0a94ffb82e8ad03baf33ed27"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image2.png",revision:"a4789ea575c1f149db00fa3ae156ccca"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image3.png",revision:"720b110966f9540a073d9e84fe70c2ff"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image4.png",revision:"51cd3b9282c3a4f90cba36caf2c85881"},{url:"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image5.png",revision:"13598a98df94dea6df498c0cf5069ec6"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image1.jpg",revision:"f644b028a35b8fc45c7eab17d1100eba"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image2.jpg",revision:"deab3e4abe15fab915f6000f5ce219e4"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image3.webp",revision:"ae3d05e54952d5200cba5a5c4ea586fb"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image1.jpg",revision:"9d67f1004f26a3b845913627125114cf"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.jpg",revision:"693448ee9dafbde1f187a4403df3b998"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.webp",revision:"b9c9933779ba81e26b7f061e7432c59d"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image3.png",revision:"3e214a4f1bcb8f6e39832eb5f0ee6c27"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image4.jpg",revision:"e93c1c4732d00472ce5b958b6eb32507"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image5.jpg",revision:"f6483f63aa45042b410fecd8412dbe4d"},{url:"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image6.png",revision:"3e8ecc1d80e244b46a3608b1447d1cbd"},{url:"../../src/icon/android-chrome-144x144.png",revision:"150037da79b66c6b1626b0dc8ab18386"},{url:"../../src/icon/android-chrome-192x192.png",revision:"ebdb6848cccb1c3bb386a31bf2cd1198"},{url:"../../src/icon/android-chrome-256x256.png",revision:"3db24f6428860ef5b8710d164f2f7443"},{url:"../../src/icon/android-chrome-36x36.png",revision:"72ef8d40e86aa07babf1207fcfd508de"},{url:"../../src/icon/android-chrome-384x384.png",revision:"537beeb0ac092d0c03a1ae061f30f4df"},{url:"../../src/icon/android-chrome-48x48.png",revision:"e757907a4ea0fc34637a76f6bfaf35c3"},{url:"../../src/icon/android-chrome-512x512.png",revision:"f24bcc3facbb90204f74454b00276ac7"},{url:"../../src/icon/android-chrome-72x72.png",revision:"fea09f854fe850dc90c1265760a49655"},{url:"../../src/icon/android-chrome-96x96.png",revision:"a2325150e4c1a267c4b08686cde94ba9"},{url:"../../src/icon/apple-touch-icon-114x114-precomposed.png",revision:"023dddb9cb18efe77f040fefd3dcae3f"},{url:"../../src/icon/apple-touch-icon-114x114.png",revision:"e66b4caa7f9da868f059ce6d4e6519bf"},{url:"../../src/icon/apple-touch-icon-120x120-precomposed.png",revision:"af72d1d3873245e10be8aba73c29ff62"},{url:"../../src/icon/apple-touch-icon-120x120.png",revision:"2387233207d780cdf09c918e31d5b7e1"},{url:"../../src/icon/apple-touch-icon-144x144-precomposed.png",revision:"6d16b423cb74b8f7aaece4b8281122d8"},{url:"../../src/icon/apple-touch-icon-144x144.png",revision:"495240ff6c9fe75a63d5feb349e3c925"},{url:"../../src/icon/apple-touch-icon-152x152-precomposed.png",revision:"c895db198ec31d6abb68b4f158276257"},{url:"../../src/icon/apple-touch-icon-152x152.png",revision:"62accd49fd6e3d7abb3ca0f8947565bd"},{url:"../../src/icon/apple-touch-icon-180x180-precomposed.png",revision:"37de2dc46db6e1cd270c7104ae17493d"},{url:"../../src/icon/apple-touch-icon-180x180.png",revision:"6aeda0af32228fc4dae14b08af5b93e8"},{url:"../../src/icon/apple-touch-icon-57x57-precomposed.png",revision:"a9b848e76c7842800e167fcd5b3f7cac"},{url:"../../src/icon/apple-touch-icon-57x57.png",revision:"9b7f6f2dfbcfc843d5764e8b1253dcfb"},{url:"../../src/icon/apple-touch-icon-60x60-precomposed.png",revision:"994c65076e69863ec0492dda9dded823"},{url:"../../src/icon/apple-touch-icon-60x60.png",revision:"187f7e918dee18f9e94f2bbe57d23ccf"},{url:"../../src/icon/apple-touch-icon-72x72-precomposed.png",revision:"81ac10bdafbf041740d1cd727dc6eade"},{url:"../../src/icon/apple-touch-icon-72x72.png",revision:"9fbcc7caa5a7ea24fb4ac207dbfb8ba9"},{url:"../../src/icon/apple-touch-icon-76x76-precomposed.png",revision:"9a244bf4222ec9f9e07be19ba2b2cc0d"},{url:"../../src/icon/apple-touch-icon-76x76.png",revision:"896f3494bde7403518c8f77a909d50d5"},{url:"../../src/icon/apple-touch-icon-precomposed.png",revision:"37de2dc46db6e1cd270c7104ae17493d"},{url:"../../src/icon/apple-touch-icon.png",revision:"6aeda0af32228fc4dae14b08af5b93e8"},{url:"../../src/icon/browserconfig.xml",revision:"d6a6ed4ae6be46c4272ebdaeeebe3635"},{url:"../../src/icon/favicon-16x16.png",revision:"521b6c7a85040303c452574186f4aaa7"},{url:"../../src/icon/favicon-32x32.png",revision:"abc3b2c04d387b15b6a095e4d57607f1"},{url:"../../src/icon/favicon.ico",revision:"fdb418cff9de0070a0171eac6524fa7f"},{url:"../../src/icon/maskable_icon_x128.png",revision:"0cf5907a0d6a387ee3efbcf7f75f5833"},{url:"../../src/icon/maskable_icon_x192.png",revision:"cd008a7876521e106a8ce3d879d4bb0d"},{url:"../../src/icon/maskable_icon_x384.png",revision:"b631fd915cdba817285cfc8388c4c27d"},{url:"../../src/icon/maskable_icon_x48.png",revision:"8c90175e38a2bacc4f440b2802419658"},{url:"../../src/icon/maskable_icon_x512.png",revision:"d39afa45bb3e2db10c1e8d2069fe2c02"},{url:"../../src/icon/maskable_icon_x72.png",revision:"4acb0a9221c010a73817631b71df2373"},{url:"../../src/icon/maskable_icon_x96.png",revision:"6e8aaada301b3a092a0b2a3424108867"},{url:"../../src/icon/maskable_icon.png",revision:"70323e1764adc77e65ec31dd127bf863"},{url:"../../src/icon/mstile-144x144.png",revision:"150037da79b66c6b1626b0dc8ab18386"},{url:"../../src/icon/mstile-150x150.png",revision:"23e0a94aac4c64ac81218346e47f357f"},{url:"../../src/icon/mstile-310x150.png",revision:"fdcc061e92851d4bb2424d44f14a330b"},{url:"../../src/icon/mstile-310x310.png",revision:"219233365848720bfbe14df7ddedbec3"},{url:"../../src/icon/mstile-70x70.png",revision:"0766ea016338863db2d6091d26b0248a"},{url:"../../src/icon/resoc.png",revision:"09ef507b07d8762342ab8bd0edb8f575"},{url:"../../src/icon/safari-pinned-tab.svg",revision:"e41d676b428a9436096866226937e5bb"},{url:"../../src/icon/screenshot1.webp",revision:"208af10afc13a402fbb8fd381f450a8b"},{url:"../../src/icon/screenshot2.webp",revision:"b11308dba17a28992ca8882d779c6485"},{url:"../../src/icon/screenshot3.webp",revision:"0a43570feda9a66c609945ed90756873"},{url:"../../src/icon/site.webmanifest",revision:"c03c9ad94639201a84a10718a7805740"},{url:"../../src/images/backgroundnew.gif",revision:"7adfd4f06d023b4fc04933d951fa020d"},{url:"../../src/images/COMING_SOON.svg",revision:"cc6507cf09df32f597ec080eb0165cb7"},{url:"../../src/images/divider.gif",revision:"8dd0e40f42389ca295f0c9408e28c22c"},{url:"../../src/images/logo.svg",revision:"90d8d81f1c27b6742d4b02be5f18938f"},{url:"../../src/images/shade.png",revision:"63692a2b6c9a9203e8ade8aa43b9f91e"},{url:"../../src/images/title.svg",revision:"6d1249ed36d9269fbe989e78bb633f9f"},{url:"../../src/legacyPages/legacyPagesDisplay.json",revision:"674e904c5dfbdbaeb0ecb0227cf1b04b"},{url:"../../src/scripts/index.js",revision:"fb90d9b1869ddbfab892519a2894a6c3"},{url:"../../src/scripts/index.min.js",revision:"e50b99a60e8dbeaa26cef8bb6348bcab"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.css",revision:"0b849bedbbfa9f2f79fbda15d99adf60"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.min.css",revision:"39d86e0381ffc70d7946fb64f7196c35"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.css",revision:"d7033814406584373d344344725dc8c3"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.min.css",revision:"e2a866eadcf7433c4ddee586e8274afb"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.css",revision:"1955fc0aa4b5b461c6168b8898d1ea88"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.min.css",revision:"4bd9c7e9da52cb7f2c034cb8254b4439"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.css",revision:"e02a9453f8b7b01a54ffea46f471b0f3"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.min.css",revision:"ea37e78d14adc3c2b997a37ed6405182"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.css",revision:"e37f368fb80f834e421346e2714de253"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.min.css",revision:"c20520043b2fef578f56664502feef29"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.css",revision:"442d3421b1a94baf36310d693cbe3308"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.min.css",revision:"09f073ec3e8af42408824792d94e5f8b"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.css",revision:"0f0f4fb619d0b8187bdea9ee84692b39"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.min.css",revision:"cd822b7fd22c8a95a68470c795adea69"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.css",revision:"476379dfafbb63eba2302eac2e79f547"},{url:"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.min.css",revision:"54cf0bc79dadd28e7b1eb2df032f7bfb"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.js",revision:"fe87f14dfe6a44b0d03fb2ae9764a3f9"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.min.js",revision:"6baf57f25796c332144ed58a2a0cd9ee"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.js",revision:"296ea7c80a8730e2a511c9c756a27887"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.min.js",revision:"37f036058f51ced4d7be7972e81de087"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.js",revision:"7b140b82d972ce11c804035a2e10575c"},{url:"../../src/scripts/libraries/bootstrap/js/bootstrap.min.js",revision:"f63dfbdcc649f13af4791a90e51f7907"},{url:"../../src/scripts/libraries/jquery/jquery.min.js",revision:"b83db83a1d89113ee03ab730efa48c7a"},{url:"../../src/scripts/libraries/showdown/showdown.min.js",revision:"14517f70ed205ae583be682c9157ebe9"},{url:"../../src/style.css",revision:"9d3c41bf29a97c729cb1bd42f7e2d4a6"},{url:"../../src/style.min.css",revision:"09995713c6259a01dd3bed9f49c27584"}],{}),e.registerRoute(/\.(?:png|jpg|jpeg|webp|ico|svg)$/,new e.CacheFirst({cacheName:"images",plugins:[new e.ExpirationPlugin({maxEntries:10})]}),"GET");})); //# sourceMappingURL=sw.js.map diff --git a/src/serviceWorker/sw.js.map b/src/serviceWorker/sw.js.map index cd80ed7..e22cae6 100644 --- a/src/serviceWorker/sw.js.map +++ b/src/serviceWorker/sw.js.map @@ -1 +1 @@ -{"version":3,"file":"sw.js","sources":["../../../../AppData/Local/Temp/19b79c20717ceb2a9b5b59e1aa4f11ea/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from 'C:/Users/alexa/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-routing/registerRoute.mjs';\nimport {ExpirationPlugin as workbox_expiration_ExpirationPlugin} from 'C:/Users/alexa/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-expiration/ExpirationPlugin.mjs';\nimport {CacheFirst as workbox_strategies_CacheFirst} from 'C:/Users/alexa/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-strategies/CacheFirst.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from 'C:/Users/alexa/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"../../src/articleArchive/articleData.json\",\n \"revision\": \"4e82f111c803e5425e3afb0cc77e4450\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image1.jpg\",\n \"revision\": \"27dcfa9ecd0efd99b9df432879c08219\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image10.jpg\",\n \"revision\": \"afe9afcca0f32a8976567d16cd988c85\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image11.jpg\",\n \"revision\": \"8d9210ff1cb1a22a43010fa06295e0b7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image12.jpg\",\n \"revision\": \"087daa82594a5041a5f61ae899909f99\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image2.jpg\",\n \"revision\": \"e52a795a738be47b86fd5a46c38752ef\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image3.jpg\",\n \"revision\": \"bb151e1aa85b98eb23a5d098eecb961d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image4.jpg\",\n \"revision\": \"3cbe6c46e8bc384cae1823d75c78924d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image5.png\",\n \"revision\": \"def8648d4bee746deebeff24603e37ec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image6.jpg\",\n \"revision\": \"a743180627e5e421c310676294a1d5e7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image7.jpg\",\n \"revision\": \"7d896113d82eef58199f7b53e04ce414\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image8.jpg\",\n \"revision\": \"fe2e019064f54af3a81007f0d6d61cdc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image9.jpg\",\n \"revision\": \"7ca083aaca86b6438beee09c2b35d071\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image1.jpg\",\n \"revision\": \"42316989cb3524a4a0b9b1539c18ffb9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image2.jpg\",\n \"revision\": \"a269c955ae1e919560fc4ed3a8202a60\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image3.jpg\",\n \"revision\": \"16ddaf2bf7720d2102ca2550ed40093a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image4.jpg\",\n \"revision\": \"463b92557e750b3e59e70ab79c37db2b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image5.jpg\",\n \"revision\": \"da3db4e9f9a70d6818a3a808c23db5f2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-17_Hello/image1.jpg\",\n \"revision\": \"f935347ae298343a9f8d8cbe065ee765\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image1.jpg\",\n \"revision\": \"1a312289757ff487438359521def9550\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image2.jpg\",\n \"revision\": \"b95583b7e8856b83fb7428623c353a81\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image3.jpg\",\n \"revision\": \"59431aa1577fe958ab19994156ff1025\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image4.jpg\",\n \"revision\": \"c531ca2589e869827254619aba3f0b98\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image1.jpg\",\n \"revision\": \"1e8b13c9e625916dd7a50e584c431662\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image2.jpg\",\n \"revision\": \"5ac54287ee5f4229f511494c8ff36e93\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image3.jpg\",\n \"revision\": \"00b32d6566c2fad7dc07294cdc02230f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image4.jpg\",\n \"revision\": \"064e7701fabeedac72b6192091601a24\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image1.jpg\",\n \"revision\": \"ed7edfa7336e49b1ea7292a0d3e91697\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image2.jpg\",\n \"revision\": \"8d6e7f18aa0128a12623145b1f54dc54\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image3.jpg\",\n \"revision\": \"a23e0efba39d8a5f5540d8fb0eb5da7b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image4.jpg\",\n \"revision\": \"9fc8fda1cf4b455b83287a71a65dce14\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image5.jpg\",\n \"revision\": \"5822849d86c3e6af1c6b25e109ecf53e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image6.jpg\",\n \"revision\": \"b13fd0313185fa3cad01a269ea06fbf6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image7.png\",\n \"revision\": \"505681b94d20d38734cdb53770be5fe9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image1.jpg\",\n \"revision\": \"c24400d9aa82c02094384873e6efee8b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image2.jpg\",\n \"revision\": \"07f26519bb81bde15c8ca54a030cb77f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image3.jpg\",\n \"revision\": \"e6433878b8f7b1a94a3315bb5dfe6fff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image4.jpg\",\n \"revision\": \"21d73f39d66a4df4c7e34804987cae2e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image5.jpg\",\n \"revision\": \"bb37ac6d808f2ec37a2d7dee37478c0e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image6.jpg\",\n \"revision\": \"513ec0cccbbc4d3e7c7300791b1beb21\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image7.jpg\",\n \"revision\": \"98d31c43e0adb9ae03c3308b5e3ca444\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image1.jpg\",\n \"revision\": \"d31e1c075f0f05e5c23dcb0b9a8d9d62\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image2.jpg\",\n \"revision\": \"507c2c06bfefb7a3684e28d579663625\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image1.jpg\",\n \"revision\": \"bd72a27ee9638d04ef5c3acd361bb0e1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image2.jpg\",\n \"revision\": \"f0dc1c99b95da3defedd96a14ccc6025\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image3.jpg\",\n \"revision\": \"6b24f06c18869e2c8dbb075e9a667a85\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image4.jpg\",\n \"revision\": \"8575a22044df8f31f9cee862838db9cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image5.jpg\",\n \"revision\": \"7638f5ab7c7d5b5a278c0c269bdae422\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image6.jpg\",\n \"revision\": \"6b2a27fd3d61804010db39e8a51cd5cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image1.jpg\",\n \"revision\": \"173dfdb7293f01e6e60fa58ce33ae62f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image2.jpg\",\n \"revision\": \"de798c27fe9604941f3cdd24181546bd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image3.jpg\",\n \"revision\": \"ec2a7a9a8774cb5b2c01d67b8d4442c5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image4.jpg\",\n \"revision\": \"57a5e970597f3ba03e904deb47d6d852\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image5.jpg\",\n \"revision\": \"689426e2328af6970a456654853c0a6d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image6.jpg\",\n \"revision\": \"7f0f406210596cb2e23de523b32b1740\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image7.jpg\",\n \"revision\": \"4aad1805627179cbcb4552754b90731f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image8.jpg\",\n \"revision\": \"173dfdb7293f01e6e60fa58ce33ae62f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image1.jpg\",\n \"revision\": \"23c560be26525f9dd8feb4038560c46a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image2.jpg\",\n \"revision\": \"9e4e319f065b67d62bfd086d2ec701e9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image3.jpg\",\n \"revision\": \"8a97e4b9f9f46a2374dcc5d9f3aa0f27\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image4.jpg\",\n \"revision\": \"5b0ed78f26309666f2cf5d94aabb5291\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image5.jpg\",\n \"revision\": \"65a85df77a68596ca9f4fa3a1625110d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image6.jpg\",\n \"revision\": \"72ee0e02d69c613d27c64b4af0303ab5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image7.jpg\",\n \"revision\": \"f24d7cdb0616627945e07452fd1a56a4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image1.png\",\n \"revision\": \"2fbf9f405d5be8bd99805ade06b7964b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image10.jpg\",\n \"revision\": \"fd0763f6f229687bbc75a61c0f7a5ca7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image11.jpg\",\n \"revision\": \"520d7a254b380ac68d860dfdf672257c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image2.jpg\",\n \"revision\": \"48d7ade2d8f8b150698ff2ed92f1f5eb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image3.png\",\n \"revision\": \"492db2a417835f95b4d3dcb80f8422bc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image4.png\",\n \"revision\": \"d5e7c367b8772f9fd271c14a7b92d2d8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image5.png\",\n \"revision\": \"00df4ab01cda692490fe960e1c62d524\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image6.jpg\",\n \"revision\": \"f04f1c20328b95a291bb158b949e752b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image7.jpg\",\n \"revision\": \"56cd148c847e9d1e572ba685c636f80d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image8.jpg\",\n \"revision\": \"32beecbb0188bce1ee1f2ffbdc459918\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image9.jpg\",\n \"revision\": \"48ca4959a17874f31ccdbe2d1c068842\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image1.jpg\",\n \"revision\": \"a7bd23e54c13cfedfc74f019153fa350\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image10.jpg\",\n \"revision\": \"7eb0de5b6a49230830f8b14d7e49a21a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image11.jpg\",\n \"revision\": \"08d5b6f1be486aeda749b9c787733ec6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image12.jpg\",\n \"revision\": \"4493acf6c791acfc5fd5e6cc0380e914\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image13.jpg\",\n \"revision\": \"9f3fd48941f83484b1b3f1d999306cc7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image2.jpg\",\n \"revision\": \"1b53b42d6f6fc430c055d6861fd8383c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image3.jpg\",\n \"revision\": \"1157d7cb31d41809050aa8fc08c69d07\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image4.jpg\",\n \"revision\": \"50940dfe47ebd228eca982b9ff59c3a5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image5.jpg\",\n \"revision\": \"a89976b97983f854b9e812d6417147e9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image6.jpg\",\n \"revision\": \"d9ff99e6242ab96f652a7209d8baa07a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image7.jpg\",\n \"revision\": \"947e3a2d6079a41ecf6e359977a1b306\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image8.png\",\n \"revision\": \"8c0cce94724fce633adef9881df7b485\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image9.jpg\",\n \"revision\": \"5e8693b0d8804fab484ca5bb72ee1ffe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image1.jpg\",\n \"revision\": \"8047492b24054f2f4c1377dd41c9f6ed\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image10.jpg\",\n \"revision\": \"bc684c6fc3948df91e45b1f1a6c52618\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image11.jpg\",\n \"revision\": \"edc5bc1bf1c5941e7b23bda9cb9b4480\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image12.jpg\",\n \"revision\": \"a49b345c9265fbbf21284546af86c055\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image13.jpg\",\n \"revision\": \"694cdf48da02964c0687a94fd741a650\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image2.jpg\",\n \"revision\": \"599388471d74d344f937ee243855b242\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image3.jpg\",\n \"revision\": \"c4394ab19c2d2938d84fc2272a8f0356\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image4.jpg\",\n \"revision\": \"286e4dce6f67acfc63d3b28b96481b65\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image5.jpg\",\n \"revision\": \"48aec9824256e02c78ef8b5f3aa84ffe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image6.jpg\",\n \"revision\": \"cb0e7aa1dd96cdb6218175db906abbbf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image7.jpg\",\n \"revision\": \"05cffef2939b69fe7bc8fffe24288ecc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image8.jpg\",\n \"revision\": \"ab45b2524d98451f99aefb1b5a1da118\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image9.jpg\",\n \"revision\": \"14af306a60783767a1af5f5f8c67d74c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image1.jpg\",\n \"revision\": \"b8dfb9102ccf2cc92fc34aa280f08cc9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image10.jpg\",\n \"revision\": \"66682a6bfce09cfd180a83af40d9f3a6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image11.jpg\",\n \"revision\": \"3b74fd37a7d9e4e65b3eeeae85033656\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image12.jpg\",\n \"revision\": \"79421de15b792aa4ccbd5e367da3ba4f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image2.jpg\",\n \"revision\": \"45afc084a6c9e5bfc7e02840ef38024c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image3.jpg\",\n \"revision\": \"8a7a047fd8542b0d68604b43a8b74202\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image4.jpg\",\n \"revision\": \"7282bbef120a5418fd36b6568e84e61d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image5.jpg\",\n \"revision\": \"3d1fad1043444f389b6367e33f32105b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image6.jpg\",\n \"revision\": \"45f6f65bc0f09d231beef2a342529728\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image7.jpg\",\n \"revision\": \"6663c04488bc344d01be9aa4cd1d3cf9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image8.jpg\",\n \"revision\": \"bfe4f8fe33a5eca2d5b35745f9630faa\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image9.jpg\",\n \"revision\": \"bb17bcb13fa1865d7c73498632a033f2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image1.jpg\",\n \"revision\": \"0f46f35ad92b1477a363dc757e472b20\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image2.jpg\",\n \"revision\": \"38c9ca222aab8cc44984ca4083a4942c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image3.jpg\",\n \"revision\": \"20a6885c9142134aae37df4d06d52571\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image4.jpg\",\n \"revision\": \"e90e4f2d3db64d1bfe7666037b58d58f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image5.jpg\",\n \"revision\": \"1358d3899a04b5ddf45fb2e68a62fffd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image6.jpg\",\n \"revision\": \"0305a218bc5817fc084149b815850c06\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image7.jpg\",\n \"revision\": \"140738b1f29726a381773bea82783cde\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image1.png\",\n \"revision\": \"bdb0db3c8620478df4f1e1791b0f7c52\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image2.jpg\",\n \"revision\": \"689dfbc01761c5548bb13344e664096a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image3.jpg\",\n \"revision\": \"82a01cacd45c6dad1a58630a4fed5f35\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image4.jpg\",\n \"revision\": \"066c5b01983cee0fd12af57224ec91cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image5.png\",\n \"revision\": \"1cbb8519b460b98ec9b534ba705899d9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image6.png\",\n \"revision\": \"e6aad3dd2452c8db0ac3913077ef15bb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image7.png\",\n \"revision\": \"2cf22786b597039bd4dd033709ceb97b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_OneLifeLeft/image1.jpg\",\n \"revision\": \"db4f17d2c77770830065ff86dcf39798\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image1.jpg\",\n \"revision\": \"91ab146483da921afadde595ad300c1d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image2.png\",\n \"revision\": \"5285ba17551853f34669d5f3cd5434e7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image3.jpg\",\n \"revision\": \"5e2a63899fc1f942a97c37374de85236\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image4.png\",\n \"revision\": \"901bd62bc86fea78989629ec8e500058\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image5.jpg\",\n \"revision\": \"ed06eb504a713536e9d05181bd25eb36\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image6.jpg\",\n \"revision\": \"82797c9e1bdaac040557385d63a8efcf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image7.jpg\",\n \"revision\": \"73e87e33214bae5415b535c61b047159\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image8.jpg\",\n \"revision\": \"ed4c5a27fe4e590f4754669521e3bec0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image9.jpg\",\n \"revision\": \"1446e055a564775bbf85135412e05ac9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image1.jpg\",\n \"revision\": \"6db612ad1adc86394145d2dbf008ae78\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image2.jpg\",\n \"revision\": \"7eb0f705595ae29fdf3740209e22bac8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image3.jpg\",\n \"revision\": \"503976a147e77e51ef996a63afda208f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image4.jpg\",\n \"revision\": \"6e29916ea8a34453700f352d7dc6ad19\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image5.jpg\",\n \"revision\": \"0e2b7a92664c5b7f61daacb6c0f97ffe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image6.jpg\",\n \"revision\": \"df0c407ea360c3333b2d2d317bacb5f3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image7.jpg\",\n \"revision\": \"b18927a283786b19cf5e8ff8dbae68ad\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image8.png\",\n \"revision\": \"564d1334c46d244c22d35dbcd5393b4e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image1.jpg\",\n \"revision\": \"5029917134900956505fc07f969cbf7c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image2.jpg\",\n \"revision\": \"9c0709172457638827efab9cfbb2cb2e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image3.jpg\",\n \"revision\": \"72d4c6e6782b89dc6b1d22d05a046753\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image4.jpg\",\n \"revision\": \"78f059113d5e0f0f7f81f41034d3f558\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image5.jpg\",\n \"revision\": \"0db43db70d44eaa467c1dca37cba71cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image6.jpg\",\n \"revision\": \"a91f1d3b2b4a64657d596fb384520e35\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image7.jpg\",\n \"revision\": \"a50d72749eab11a5c55d2068bb4cb319\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image8.jpg\",\n \"revision\": \"c9fb70ec4dc20201f0a783c4169dd5c2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image1.jpg\",\n \"revision\": \"f1e2ffd6f28ad03975bddfa34b8ed82d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image2.jpg\",\n \"revision\": \"a6726b9e94b791ac903081407723c4c6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image3.jpg\",\n \"revision\": \"81a179e3f0d788928e85a471f4310887\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image4.jpg\",\n \"revision\": \"ceb65b0f1a2a52c24122cffbc230f854\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image5.jpg\",\n \"revision\": \"fc4e23b17fa1b9413941bd7330afbfec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image6.jpg\",\n \"revision\": \"12b2d1f4c84c3c67a0686cc064019d8e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image7.jpg\",\n \"revision\": \"7fa9482353d9b047c8442ba3183fc73d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image8.jpg\",\n \"revision\": \"159094bec3a88654026cb01fa4102cea\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image9.jpg\",\n \"revision\": \"edef323af40be3c9f28bce825f54bf9a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image1.png\",\n \"revision\": \"b2ef9d4a9f2e1999d3aaa05011d9ee06\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image2.png\",\n \"revision\": \"e7efa0067442d7e87295674435df787a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image3.png\",\n \"revision\": \"d4786bf9d21d00ef9f44a4f46f5baf62\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image4.jpg\",\n \"revision\": \"bd4093288975c01af4bf30190d367176\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image5.png\",\n \"revision\": \"6702d7487576fd015572cc5150ea3362\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image6.png\",\n \"revision\": \"742bd34a6a8dc6399173d08beeb7ee94\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image7.png\",\n \"revision\": \"98065b05c544e132a2ba7bfd598e30e2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image8.png\",\n \"revision\": \"102cd35ae2db4ea282115004085690c3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image9.png\",\n \"revision\": \"a9f964a0d804b8193b5be0d5dce0c0f5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image1.jpg\",\n \"revision\": \"dce00c583231a8ca92dfe4fb4075a0a4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image10.png\",\n \"revision\": \"8f1624797c8e49518059fb70341cb4c7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image11.jpg\",\n \"revision\": \"99f9f3777965f0c782ff2608993c688a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image2.jpg\",\n \"revision\": \"919d2fc9606b90f6dca7e62fdf926faf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image3.jpg\",\n \"revision\": \"b145a9249334c7969123efef8adc5468\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image4.png\",\n \"revision\": \"c5da356d707423bb9d15989dad326875\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image5.jpg\",\n \"revision\": \"b65917cd35f7c482a28bc78bcaab92fe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image6.jpg\",\n \"revision\": \"074b1c382fe8ddf3641a60d0a08b7bf5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image7.png\",\n \"revision\": \"e8dc2ca0ae4f4af0253b194625453534\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image8.png\",\n \"revision\": \"467b3e86843414afdf38ac8d4c88856f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image9.jpg\",\n \"revision\": \"f60375cf0c4431a8ba797dbf56d64f2b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image1.png\",\n \"revision\": \"a2797b97b88edfea12649fdf05fd88de\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image2.png\",\n \"revision\": \"fa0e34f24a10af6f84acd620a329ce53\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image3.png\",\n \"revision\": \"44d55d9588f4e57f7595a43edf4b0a56\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image4.jpg\",\n \"revision\": \"4ab8bf3ce79f08d09d39278ec286ee91\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image5.png\",\n \"revision\": \"46a3e77429a914a0fc7ca1b620ead51a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image1.jpg\",\n \"revision\": \"2a5c8c9be4df50e1d8ca17530c4263ae\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image2.jpg\",\n \"revision\": \"5a1fc1955d337c45fa715f881983b777\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image3.jpg\",\n \"revision\": \"3fa0199e3b86e6d04ea6aa4deb23ba10\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image4.jpg\",\n \"revision\": \"db3f1cdda23155567c46ac258f574e5b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image5.jpg\",\n \"revision\": \"944b63b9053880378b161021063d2953\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image6.jpg\",\n \"revision\": \"3a7abc7411fc69029e9c498dc0923650\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image7.jpg\",\n \"revision\": \"34873386d56efa6143194a8cbe6e1a13\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image1.jpg\",\n \"revision\": \"0df19ec53a5438e7852570241ad6cb8a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image2.jpg\",\n \"revision\": \"82eae902b1a14ab0191768b1b3d622d0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image3.jpg\",\n \"revision\": \"6af31d464429ed9a8a7c1d595d4863ea\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image4.jpg\",\n \"revision\": \"4a6dce15c5a5d4fe8bec5b5baed2daaf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image5.jpg\",\n \"revision\": \"26ff6de3a9e80f30cd8507b0ad5ebe89\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image6.jpg\",\n \"revision\": \"e30be39f6820e3617fde3407072b6e8f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image7.jpg\",\n \"revision\": \"2ca0ff627fd58ffd65792c4a4650b478\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image8.jpg\",\n \"revision\": \"5c37f7bb28f1c898cd0a796460290dc4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-11_BeyondInfinity/image1.jpg\",\n \"revision\": \"ca3918b596d69345902b93cab250995a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image1.jpg\",\n \"revision\": \"969ae9c2a8b0695d291d08f5d510520b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image2.png\",\n \"revision\": \"9f2afa3957285da421fe2ec81d4b4fd3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image3.png\",\n \"revision\": \"f65650157c2a7ebc4940d45109db55aa\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image4.png\",\n \"revision\": \"ea7060524456b08d1660690443f91c42\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image5.png\",\n \"revision\": \"be4ed8539d5b403baff250d5264410a8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image6.png\",\n \"revision\": \"19dd1ba71a924337f8b1c0b20bba55c0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image7.png\",\n \"revision\": \"70950ce872bd828046613e6a146a8449\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image8.png\",\n \"revision\": \"79c4094b3b3369394c375e7daecab4af\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image9.png\",\n \"revision\": \"d86046a881e897727e4ba5e46ccfc6ec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-13_CubeMetalHeart2/image1.jpg\",\n \"revision\": \"d2a3634a6b26e4107fb009365bcc0585\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image1.jpg\",\n \"revision\": \"6985c503e2440e09b0f98097ebc973d7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image2.jpg\",\n \"revision\": \"e1733add2770d1800357a3e1c50f5bdb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image3.jpg\",\n \"revision\": \"772f0dcd2d43cdaa22926db4c104faa6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image4.jpg\",\n \"revision\": \"2736a2f63cecc8247ac82740b88711e4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image5.jpg\",\n \"revision\": \"b609c9767485b3ce1752a3ac5e34f189\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image6.jpg\",\n \"revision\": \"86479a854fdfb90037ef509a73e91c3b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image7.jpg\",\n \"revision\": \"14e0c76554569c97263986cc63fff87c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image8.jpg\",\n \"revision\": \"aad8e8b41f96e70d2e95db02146461f3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image9.jpg\",\n \"revision\": \"0b28ba8fb5335a25082b0327a7f1ed8b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image1.png\",\n \"revision\": \"28e06c30374b410246bc759213b94431\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image10.jpg\",\n \"revision\": \"7928cc5248fca24edb621243339239a8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image2.jpg\",\n \"revision\": \"90865b965988fcf9cd7118cc95a7122b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image3.jpg\",\n \"revision\": \"9c4620e4447474c3327e3695e4658d0a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image4.jpg\",\n \"revision\": \"00323e2dfaa5a9b9feb32349776439f2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image5.jpg\",\n \"revision\": \"e581a66f0794b01bd6fe8b02a2d17bb8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image6.jpg\",\n \"revision\": \"926a0a8692502227402c7e88c3462ce7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image7.jpg\",\n \"revision\": \"4f40bf239470d9d6d6471f4ae5853f9c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image8.jpg\",\n \"revision\": \"445969f3dea1a1a37bdca7fb61f8be9a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image9.jpg\",\n \"revision\": \"b646c0c7e12663a0bc0943190871e46c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image1.jpg\",\n \"revision\": \"b244d8c43d3e4f0c0554d2c41f0c8748\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image10.jpg\",\n \"revision\": \"5b019d58c48bedaa3b2db649bee9f0ab\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image11.jpg\",\n \"revision\": \"f44519812b8832db10b0e66b602f238c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image2.jpg\",\n \"revision\": \"889e530b818f9724bd460ab9297c79cd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image3.jpg\",\n \"revision\": \"c2f2eec3a1e2754ecb94904a6eb97f1a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image4.jpg\",\n \"revision\": \"5ff7570dba36e15c3d16effc44708a50\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image5.jpg\",\n \"revision\": \"96cc9857fe52e1aaaea6016c4653bbc5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image6.jpg\",\n \"revision\": \"ffb4ed920f9da2bd0e2e4b0e279abc07\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image7.jpg\",\n \"revision\": \"18661eb309bfe8202b1164b6dd14824b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image8.jpg\",\n \"revision\": \"2dcf0dbe71bc63ca37f71727c91d74fc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image9.jpg\",\n \"revision\": \"c120e37e3bfde902b212501d08e3fac8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image1.jpg\",\n \"revision\": \"7280a7b2247ee3653cb17564dee93fd1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image10.jpg\",\n \"revision\": \"17458c1da295eba4f733b5353190a1d0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image2.jpg\",\n \"revision\": \"36bf376552b667976c8daf04f648f469\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image3.jpg\",\n \"revision\": \"f5cb9302f99c336f51e4df6c5a78a5e4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image4.jpg\",\n \"revision\": \"2e39a520bc245942c8c72a272fd5b3a5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image5.jpg\",\n \"revision\": \"c67b46f501df14a52f1e984b7cccfb3e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image6.jpg\",\n \"revision\": \"a01171fa9bdae2b3589d8057f180626e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image7.jpg\",\n \"revision\": \"c5fa71094a08129e86a9126e7a4ebe44\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image8.jpg\",\n \"revision\": \"3a84d080ca340dd547acfbd9d8a9cdb3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image9.jpg\",\n \"revision\": \"d220becf4f5178a4a1684c54d655b113\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image1.png\",\n \"revision\": \"35666a582d971835eb6dab5f49e57708\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image10.jpg\",\n \"revision\": \"7ec66f5d5a7fead07b3251345d38a359\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image2.jpg\",\n \"revision\": \"7e8440ed2955c1d60157648a0da173ea\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image3.jpg\",\n \"revision\": \"99d5c5f459682ef62c7a3cc98b74ccd4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image4.jpg\",\n \"revision\": \"9469109fae2e8f09471d9ac486069220\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image5.jpg\",\n \"revision\": \"d3795070e6514f326994c3c1590b547b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image6.jpg\",\n \"revision\": \"dfd0d6443bc6eec14c64fead9492d192\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image7.jpg\",\n \"revision\": \"84022322b84870d6590df5c0151caeeb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image8.jpg\",\n \"revision\": \"6731fd43898ed1f3ee3ed471edd47ada\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image9.jpg\",\n \"revision\": \"1af3277705effeaef5cd27b5d3446a9a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image1.png\",\n \"revision\": \"80abefadcf91449132b9678c78b430a9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image2.png\",\n \"revision\": \"c5e0a5962685800b401d0a1913eb3ba6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-13_QuickSlickDeadlyTrailer/image1.jpg\",\n \"revision\": \"4b3f12019ae90e99c477c632fcbb7d40\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image1.jpg\",\n \"revision\": \"e252c9bc34b65fc4fbfa68e91c059f3a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image2.jpg\",\n \"revision\": \"8328e27fdeddb789cccce3622f19709e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image3.jpg\",\n \"revision\": \"f1035b84d2568c075c9c6e0f8b34197f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image4.jpg\",\n \"revision\": \"83b7d2e6f0a56bddacc0fe6f031f4c10\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image5.jpg\",\n \"revision\": \"8b70862e000b889d3c05935b9c3d7784\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image6.jpg\",\n \"revision\": \"e8f0ab72d0ffbf3e8ae4626595794030\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image7.jpg\",\n \"revision\": \"fb756fe1d10704f8d4f700e963338d70\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-16_MotteIsland/image1.jpg\",\n \"revision\": \"ea87444e9c4640bd862d6098b4bb6f1e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image1.png\",\n \"revision\": \"34f3bdd237e7b7196e0507be3745efca\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image10.png\",\n \"revision\": \"e371c2a35cb13276c45ab67244706e28\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image2.png\",\n \"revision\": \"75f33390f8a561aa82f06a9257ac0245\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image3.png\",\n \"revision\": \"534b10322cf0ef6a3562f697668278d0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image4.png\",\n \"revision\": \"03c93a901f2ef292a342330e7729d422\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image5.png\",\n \"revision\": \"c4342af6ab7c7ea6698026061f005377\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image6.png\",\n \"revision\": \"b326191989250f6524e08a5b819c8e32\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image7.png\",\n \"revision\": \"8ea1535d1d981c2222327d76d2aa637f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image8.png\",\n \"revision\": \"4e6615d28d22a83ef0c99fa8e3aee624\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image9.png\",\n \"revision\": \"4cd779c5b8aaaa88ca5dccf6e31719b3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-19_ProjectTemporality/image1.jpg\",\n \"revision\": \"12c7f75562a71494cb236b1cd6413ec0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image1.png\",\n \"revision\": \"20d8fc45e13befe6968dfb5db8491e51\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image10.jpg\",\n \"revision\": \"e7b14995674d200c7b89b1f7a4bceceb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image2.png\",\n \"revision\": \"8fcff4dabfae8b1d42bc0b4c23e697d4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image3.png\",\n \"revision\": \"dcb482c84bef290ad021b2d9d220c8b7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image4.jpg\",\n \"revision\": \"0a54796fd651389edeb8e4c672c78c81\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image5.jpg\",\n \"revision\": \"0fc8ef2ef8523da1697ec5ce1f8acaf7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image6.jpg\",\n \"revision\": \"74abb9383c4545188c93f3f7001a70ce\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image7.jpg\",\n \"revision\": \"c288350a97fb3607198635248efbb0bb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image8.jpg\",\n \"revision\": \"81607e4f5d75bee81bc49b610fd0bfa5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image9.jpg\",\n \"revision\": \"4732c349b66c503ad05f6f5072476476\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image1.jpg\",\n \"revision\": \"ed7709fa547382018e3e5389aa9d5a74\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image2.jpg\",\n \"revision\": \"9937d5c6320d0eb3ccdbb561afe2fd1e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image3.jpg\",\n \"revision\": \"bcdf78d9ba26d4dcba29db1925968cbf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image4.jpg\",\n \"revision\": \"b6b8f79891f5b28968e4f6d5389e1403\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image5.jpg\",\n \"revision\": \"e9ca97ff5620d39822dc5e1fd5cf1099\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image6.jpg\",\n \"revision\": \"1adc22403d4ceba05d90dfa8a4a30cf7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image7.jpg\",\n \"revision\": \"4479fd4343f7df4b26642534ab9247fc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image8.jpg\",\n \"revision\": \"a554a695aa14e80a41ac140c276a2f15\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image9.jpg\",\n \"revision\": \"a70613da9a23cbd60ed43da23afcef46\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image1.png\",\n \"revision\": \"8335e880a0e50433ba57832d55f98d04\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image10.jpg\",\n \"revision\": \"665453487cee76046c6996900df65742\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image11.jpg\",\n \"revision\": \"c1bf4e21062b27021b577b0054d3ee05\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image12.jpg\",\n \"revision\": \"797269adaab601a10de5968c75740c9b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image13.jpg\",\n \"revision\": \"998fb25c60ecdaaded79ad5f325c42dd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image2.jpg\",\n \"revision\": \"4a707552ed7bbfbb0f2f3f5009ad2d99\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image3.jpg\",\n \"revision\": \"7888eec1ecea13b48444679726b8a83a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image4.jpg\",\n \"revision\": \"5a8e3601a1e5ac5c6684cce3844162c4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image5.jpg\",\n \"revision\": \"cd21b9c429cc4d2ec6cb9c3e8177d007\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image6.jpg\",\n \"revision\": \"162119a60951b91e3d19f71bd440fb6a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image7.jpg\",\n \"revision\": \"9161f5a156e29f544226ef2e5a7139a3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image8.jpg\",\n \"revision\": \"ad5d7a8504a225e7f40a5f4678ed571b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image9.jpg\",\n \"revision\": \"15225de368c024c0cfac87e33ced5a8a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image1.png\",\n \"revision\": \"299b713c8ba7fb34ce4812919fe9e03e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image2.png\",\n \"revision\": \"f2c2bdb3ec5820be66f8f520ad7997d9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image3.png\",\n \"revision\": \"d5731ce115c6af073ab9c1806692b2e8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image4.png\",\n \"revision\": \"7d120ba85b19cc45b89ef3dc0c6b9cc1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image5.png\",\n \"revision\": \"fd915f1b3284ca6a98fc994be84ba9c0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image1.png\",\n \"revision\": \"2ff7e5641d3983a2b26121879f0c6768\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image2.png\",\n \"revision\": \"1ec667d777e79f978ff4aeefdce1081f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image3.png\",\n \"revision\": \"871733da343647401017c914a8830453\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image4.png\",\n \"revision\": \"c1405f9b5baa3062660248395ac0157e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image5.png\",\n \"revision\": \"5a93be18f700f9425de0d030c889493a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image6.jpg\",\n \"revision\": \"95072f7182de90d0c9134d006d5003a6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image7.png\",\n \"revision\": \"2835cfe51ef48668d6402252c7aa1f5a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image8.png\",\n \"revision\": \"04588d04a275594757bbea6e514ca089\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image1.png\",\n \"revision\": \"50f88e9f70978d94c7d8ae35704f0b11\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image10.png\",\n \"revision\": \"b8d00155a9c0ecafa6f57d55a300f50e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image2.png\",\n \"revision\": \"cb4c57e8da565d757fe9a7dec471c5f4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image3.jpg\",\n \"revision\": \"083d5e6f02393306af76686b4083aae8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image4.png\",\n \"revision\": \"2cd4e79358a6029a2c06e3e9691c6f0d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image5.png\",\n \"revision\": \"f361958232fceb901732a063136d4398\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image6.png\",\n \"revision\": \"30125f459d3d8fa68e86e6e06543a55f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image7.png\",\n \"revision\": \"762dd5f98d498b4d606184077cd778e8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image8.png\",\n \"revision\": \"af8a33c09e2cdfce09db891b4554fa61\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image9.png\",\n \"revision\": \"02ce56af8a12814e4995452bff2e44e6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image1.jpg\",\n \"revision\": \"c7685c02f00b2f0a6415220868bd8530\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image10.jpg\",\n \"revision\": \"724d63b5cd9cc42440d81935291b5887\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image2.jpg\",\n \"revision\": \"a1dff16d384d349f30d368e39201ace3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image3.jpg\",\n \"revision\": \"a35ab9b8de060858d21a9ec2fb98f5ce\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image4.jpg\",\n \"revision\": \"f5369f0338f87703fa5d8068c9c05a81\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image5.jpg\",\n \"revision\": \"cb76e4c7f76050908df369cb5313a3eb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image6.jpg\",\n \"revision\": \"aa71c08a590f3f8aee35f6a3de184eff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image7.jpg\",\n \"revision\": \"14b707bb05353d60ba9109573b2c5be8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image8.jpg\",\n \"revision\": \"2473ab776cd3c5ac0a4f3848be7b8ae3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image9.jpg\",\n \"revision\": \"7a277c4dd822b0e0cd41391d11111a00\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image1.jpg\",\n \"revision\": \"d999dea8111b13b545f4ae9bed04e4a1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image2.jpg\",\n \"revision\": \"841e52644790d60dcce83a57ddabd140\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image3.jpg\",\n \"revision\": \"0d6907f6d45ad4c1e7db3db10cabea9b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image4.jpg\",\n \"revision\": \"6a6b872364e79cc1088115e4f2ffaa54\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image5.jpg\",\n \"revision\": \"47fc58cb67ac5b4d5116d1b62c42f8fb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image6.jpg\",\n \"revision\": \"8c18b20f4d0b9a466180b9d3a08653fc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image7.jpg\",\n \"revision\": \"fb364eac0951773cb330ceb6aba2823e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image8.jpg\",\n \"revision\": \"4f2526c4ccdec17b17ed2c1baa9e3791\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image1.png\",\n \"revision\": \"9da1691851b60a29b30b3838804f2d70\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image10.png\",\n \"revision\": \"04cef2521e8e6655cc015ac1bba05a5d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image11.png\",\n \"revision\": \"c5f8b36eacb835da5c9a6f26d358e44e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image12.png\",\n \"revision\": \"dc7b79abadc0e4f7f694063e49e23d89\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image2.png\",\n \"revision\": \"dd48df93bed859be4e6284874e715389\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image3.png\",\n \"revision\": \"62916c4ba515347d4ce6895469a09933\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image4.png\",\n \"revision\": \"7a7d4f69271672f3ae22ec5b753d2d57\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image5.png\",\n \"revision\": \"afb3771d0929c0d107d8f3a9eb5d0913\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image6.png\",\n \"revision\": \"d4dd9dd1232d59b4849be170639dfa8f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image7.png\",\n \"revision\": \"456a7a47aec2cded7499f725bd901b63\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image8.png\",\n \"revision\": \"3a3a84f2d957586e149e3cb36d34d227\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image9.png\",\n \"revision\": \"32e5f0d564ff45e1dd8cb00b3e8fcad3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image1.png\",\n \"revision\": \"0390bdc1bfa8421099680021226d153f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image2.jpg\",\n \"revision\": \"b577a76021fa1f7174a3aef31fb51d56\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image3.jpg\",\n \"revision\": \"78cb82e3e019e192a1d78d07bd631d2f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image4.jpg\",\n \"revision\": \"fbd7bcd77823647f40bebd5896a71771\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image5.jpg\",\n \"revision\": \"a9753e3654ad97ec7bc8c26ede89250d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image6.jpg\",\n \"revision\": \"74037b92dbb71626ed02bf85210ea4ff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image7.png\",\n \"revision\": \"c1edf94b993167cc6e04a09de778675c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image1.webp\",\n \"revision\": \"05d285e3f80d258cbd2fbcfc247af4a3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image10.jpg\",\n \"revision\": \"bc1414519e5c1273dcd9468449b55a20\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image2.jpg\",\n \"revision\": \"7f329ef9c00eeb0143cdbe3797d2bc2e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image3.jpg\",\n \"revision\": \"a484a9430d3726b74c6f2f56d0b6d6fd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image4.jpg\",\n \"revision\": \"c4b9e761ebd778c1e1a6d16c52c68cd9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image5.jpg\",\n \"revision\": \"a731b9997646af477545434fc3ef98e7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image6.jpg\",\n \"revision\": \"2cf253207ba1d7d11fae57b3210018b6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image7.jpg\",\n \"revision\": \"4211cedbdbf72b5986a665ad19da68d5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image8.jpg\",\n \"revision\": \"b2bbc644824210016a36e173615ddfec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image9.jpg\",\n \"revision\": \"3babeb8ce62bf3a0adffb456f0d6d3c6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image1.webp\",\n \"revision\": \"ed4ef6474049e1bb384f81429520b754\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image2.gif\",\n \"revision\": \"73ed6983ea36d907f0cff7c736f7a2dc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image3.jpg\",\n \"revision\": \"69e4facbb77a5550752099425b673ecd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image4.gif\",\n \"revision\": \"18584665ce49c013661d10af3c07cf87\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image5.gif\",\n \"revision\": \"73e28bd84e1b79406c87e547c4190c55\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image6.gif\",\n \"revision\": \"c7956df17cbcbb3bd2e28470bdf11bc5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image7.gif\",\n \"revision\": \"cd7e4ee307a214068188eaa2864a835a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image8.jpg\",\n \"revision\": \"9cbdd824ac895cd6cee6267612b03af3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_PlaysetsTrailer/image1.jpg\",\n \"revision\": \"9432cc5b42136150924aba36f20d4835\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image1.jpg\",\n \"revision\": \"fc490a69e70a434f0585ea2d68b7332f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image2.jpg\",\n \"revision\": \"95f4b2826fd04024a2d865845278022a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image3.jpg\",\n \"revision\": \"551c7a18e6312c61f77c3bf1671ea762\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image4.jpg\",\n \"revision\": \"32716c1bd0593b7f3431c5fdb9caf974\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image5.jpg\",\n \"revision\": \"f81d478345f158f3c1a3464352f03982\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image6.jpg\",\n \"revision\": \"35a6741230000357728e9a8e195cf2a9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image7.jpg\",\n \"revision\": \"7bf846f610368e235844a37847dfec56\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image1.webp\",\n \"revision\": \"7934a466ae8f3a0b553c6b121468d405\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image2.png\",\n \"revision\": \"fcc6cc0fb1d798f572895a5e39b83d0b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image3.png\",\n \"revision\": \"af9f4dabbd9d85fefd7310c52f9fa8c6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image4.png\",\n \"revision\": \"bc3207531d8a2e1d80085002482fc42f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image5.png\",\n \"revision\": \"77b347def110cc04bf2eb218ae274c17\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image6.png\",\n \"revision\": \"255772860e0104a5a72f862d27b44e3e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image7.png\",\n \"revision\": \"bdc491e7aedae34ea8f6a652694aa5fa\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image8.jpg\",\n \"revision\": \"8f26289f86fdf8a7e95f6db6191e3491\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image1.webp\",\n \"revision\": \"553c975c1cd76e7976b7eb1c2c03ad25\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image2.png\",\n \"revision\": \"fd4ddda59288f82dff542ef27f0380b1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image1.jpg\",\n \"revision\": \"f1ba99bf880385dd4f10d141de869dd5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image10.jpg\",\n \"revision\": \"f90a4ad5d2e7f0e583c096dae71de576\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image11.jpg\",\n \"revision\": \"b41d8dd56d65c1c62c124b64e1ba1241\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image12.jpg\",\n \"revision\": \"8352dcd7d629aa21e14d28c9a868b728\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image2.jpg\",\n \"revision\": \"97c9d4535f7957366bfd33c7f8f131f8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image3.jpg\",\n \"revision\": \"669012e419e2368c41a8860b28a659cd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image4.jpg\",\n \"revision\": \"6040a96345fe01925d4a7f44b14bbe7a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image5.jpg\",\n \"revision\": \"ef55e1e26e6605f8ae5e9355df8cda13\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image6.jpg\",\n \"revision\": \"45a5457c26f4070e27cf2342a223108a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image7.jpg\",\n \"revision\": \"a58d36f8413f0460b896edb13e99054c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image8.jpg\",\n \"revision\": \"926cc385abed62e976cf8db3136da901\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image9.jpg\",\n \"revision\": \"bd54a017ab5a1dc886e58618dd9bd0c0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-26_WeCare/image1.jpg\",\n \"revision\": \"961518648539049372bd2bbf393fb5f1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image1.jpg\",\n \"revision\": \"7ff370d80ef3fc938e983ae0b2ae8832\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image2.jpg\",\n \"revision\": \"ac4dc7e596d93d432d8fe75f6226f29d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image3.jpg\",\n \"revision\": \"1100826917a344c0593ae4a0cc78b373\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image4.jpg\",\n \"revision\": \"03043600776b8167aaf780a6c3c3af5f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-03_HOYO/image1.webp\",\n \"revision\": \"03fdfdfc1c641dbf4668db3830bf644d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image1.jpg\",\n \"revision\": \"d16f3b3ce5de1f8844fbcd3ffce5c452\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image2.jpg\",\n \"revision\": \"f21721a2b0e128c240a8735b0a70419a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image3.jpg\",\n \"revision\": \"598d3064fc39aa820f3304c1fd4dabfd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image4.jpg\",\n \"revision\": \"b03f8f0d488b052936634a6b22046be5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image5.jpg\",\n \"revision\": \"5bc26836df52497bb063ef028144200e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image6.jpg\",\n \"revision\": \"432451480dc10c73af20235640c3578b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image7.jpg\",\n \"revision\": \"2d01ef36da37d44b15d3e1eb834b6f7a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorJeffCen/2013-05-04_LumberIsland/image1.jpg\",\n \"revision\": \"03fc72284cc485ed05301c8a2cdeb4f8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorJeffCen/2013-05-20_1916/image1.jpg\",\n \"revision\": \"cc0320604793569b287ccfe3e18b4c0e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image1.jpg\",\n \"revision\": \"944b6fed7d11b29767d411f899b0c1e5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image10.jpg\",\n \"revision\": \"778423e7cfc195c8b1626bf1984028ab\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image2.jpg\",\n \"revision\": \"8e8cc2a279f6192368d5f63d2921e2c8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image3.png\",\n \"revision\": \"13c45d9e45e0843af490c79bcf9112f0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image4.jpg\",\n \"revision\": \"d6e0ac8d3aa958fe732e5b534678aeae\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image5.jpg\",\n \"revision\": \"81cd2ce7ac648624fbe5c4424bb40a3d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image6.jpg\",\n \"revision\": \"eae6596f7285f37da79485b1d824ed06\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image7.jpg\",\n \"revision\": \"4d00ee9206e340f9bfc9c0e05fed9d70\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image8.png\",\n \"revision\": \"476d822555557c9f8e2e1a6ed84de333\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image9.jpg\",\n \"revision\": \"143c7ea554ad452f73f2158d54966ed1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image1.jpg\",\n \"revision\": \"1b8b21d8fba9bb03f330668314e0f95b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image2.jpg\",\n \"revision\": \"3edb75fac6e1d813ecc18f0e8d84e0dd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image3.jpg\",\n \"revision\": \"2f1e067a37f38cf17addaed54aa3eaec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image4.jpg\",\n \"revision\": \"4ad59209e2f3349e6d8f6081d4831d29\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image5.jpg\",\n \"revision\": \"1a1222807c32dcee8cdbbcec1c99d44b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image6.jpg\",\n \"revision\": \"533564a28b630e01c9a43a47e5477b92\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image7.jpg\",\n \"revision\": \"3f4beba90e836f88ae2c72db4a77053e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image8.jpg\",\n \"revision\": \"cccfb1ebb6076366b0e5387b0ae500bb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image9.jpg\",\n \"revision\": \"74be12350f518e432092e2374c0817d5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-01_TacticalInterventionReview/image1.jpg\",\n \"revision\": \"ffae8ecd36e9d6ac0958af44fe0ddf07\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image1.png\",\n \"revision\": \"6c934e7f0a94ffb82e8ad03baf33ed27\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image2.png\",\n \"revision\": \"a4789ea575c1f149db00fa3ae156ccca\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image3.png\",\n \"revision\": \"720b110966f9540a073d9e84fe70c2ff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image4.png\",\n \"revision\": \"51cd3b9282c3a4f90cba36caf2c85881\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image5.png\",\n \"revision\": \"13598a98df94dea6df498c0cf5069ec6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image1.jpg\",\n \"revision\": \"f644b028a35b8fc45c7eab17d1100eba\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image2.jpg\",\n \"revision\": \"deab3e4abe15fab915f6000f5ce219e4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image3.webp\",\n \"revision\": \"ae3d05e54952d5200cba5a5c4ea586fb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image1.jpg\",\n \"revision\": \"9d67f1004f26a3b845913627125114cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.jpg\",\n \"revision\": \"693448ee9dafbde1f187a4403df3b998\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.webp\",\n \"revision\": \"b9c9933779ba81e26b7f061e7432c59d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image3.png\",\n \"revision\": \"3e214a4f1bcb8f6e39832eb5f0ee6c27\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image4.jpg\",\n \"revision\": \"e93c1c4732d00472ce5b958b6eb32507\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image5.jpg\",\n \"revision\": \"f6483f63aa45042b410fecd8412dbe4d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image6.png\",\n \"revision\": \"3e8ecc1d80e244b46a3608b1447d1cbd\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-144x144.png\",\n \"revision\": \"150037da79b66c6b1626b0dc8ab18386\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-192x192.png\",\n \"revision\": \"ebdb6848cccb1c3bb386a31bf2cd1198\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-256x256.png\",\n \"revision\": \"3db24f6428860ef5b8710d164f2f7443\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-36x36.png\",\n \"revision\": \"72ef8d40e86aa07babf1207fcfd508de\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-384x384.png\",\n \"revision\": \"537beeb0ac092d0c03a1ae061f30f4df\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-48x48.png\",\n \"revision\": \"e757907a4ea0fc34637a76f6bfaf35c3\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-512x512.png\",\n \"revision\": \"f24bcc3facbb90204f74454b00276ac7\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-72x72.png\",\n \"revision\": \"fea09f854fe850dc90c1265760a49655\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-96x96.png\",\n \"revision\": \"a2325150e4c1a267c4b08686cde94ba9\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-114x114-precomposed.png\",\n \"revision\": \"023dddb9cb18efe77f040fefd3dcae3f\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-114x114.png\",\n \"revision\": \"e66b4caa7f9da868f059ce6d4e6519bf\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-120x120-precomposed.png\",\n \"revision\": \"af72d1d3873245e10be8aba73c29ff62\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-120x120.png\",\n \"revision\": \"2387233207d780cdf09c918e31d5b7e1\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-144x144-precomposed.png\",\n \"revision\": \"6d16b423cb74b8f7aaece4b8281122d8\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-144x144.png\",\n \"revision\": \"495240ff6c9fe75a63d5feb349e3c925\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-152x152-precomposed.png\",\n \"revision\": \"c895db198ec31d6abb68b4f158276257\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-152x152.png\",\n \"revision\": \"62accd49fd6e3d7abb3ca0f8947565bd\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-180x180-precomposed.png\",\n \"revision\": \"37de2dc46db6e1cd270c7104ae17493d\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-180x180.png\",\n \"revision\": \"6aeda0af32228fc4dae14b08af5b93e8\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-57x57-precomposed.png\",\n \"revision\": \"a9b848e76c7842800e167fcd5b3f7cac\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-57x57.png\",\n \"revision\": \"9b7f6f2dfbcfc843d5764e8b1253dcfb\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-60x60-precomposed.png\",\n \"revision\": \"994c65076e69863ec0492dda9dded823\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-60x60.png\",\n \"revision\": \"187f7e918dee18f9e94f2bbe57d23ccf\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-72x72-precomposed.png\",\n \"revision\": \"81ac10bdafbf041740d1cd727dc6eade\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-72x72.png\",\n \"revision\": \"9fbcc7caa5a7ea24fb4ac207dbfb8ba9\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-76x76-precomposed.png\",\n \"revision\": \"9a244bf4222ec9f9e07be19ba2b2cc0d\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-76x76.png\",\n \"revision\": \"896f3494bde7403518c8f77a909d50d5\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-precomposed.png\",\n \"revision\": \"37de2dc46db6e1cd270c7104ae17493d\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon.png\",\n \"revision\": \"6aeda0af32228fc4dae14b08af5b93e8\"\n },\n {\n \"url\": \"../../src/icon/browserconfig.xml\",\n \"revision\": \"d6a6ed4ae6be46c4272ebdaeeebe3635\"\n },\n {\n \"url\": \"../../src/icon/favicon-16x16.png\",\n \"revision\": \"521b6c7a85040303c452574186f4aaa7\"\n },\n {\n \"url\": \"../../src/icon/favicon-32x32.png\",\n \"revision\": \"abc3b2c04d387b15b6a095e4d57607f1\"\n },\n {\n \"url\": \"../../src/icon/favicon.ico\",\n \"revision\": \"fdb418cff9de0070a0171eac6524fa7f\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x128.png\",\n \"revision\": \"0cf5907a0d6a387ee3efbcf7f75f5833\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x192.png\",\n \"revision\": \"cd008a7876521e106a8ce3d879d4bb0d\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x384.png\",\n \"revision\": \"b631fd915cdba817285cfc8388c4c27d\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x48.png\",\n \"revision\": \"8c90175e38a2bacc4f440b2802419658\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x512.png\",\n \"revision\": \"d39afa45bb3e2db10c1e8d2069fe2c02\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x72.png\",\n \"revision\": \"4acb0a9221c010a73817631b71df2373\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x96.png\",\n \"revision\": \"6e8aaada301b3a092a0b2a3424108867\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon.png\",\n \"revision\": \"70323e1764adc77e65ec31dd127bf863\"\n },\n {\n \"url\": \"../../src/icon/mstile-144x144.png\",\n \"revision\": \"150037da79b66c6b1626b0dc8ab18386\"\n },\n {\n \"url\": \"../../src/icon/mstile-150x150.png\",\n \"revision\": \"23e0a94aac4c64ac81218346e47f357f\"\n },\n {\n \"url\": \"../../src/icon/mstile-310x150.png\",\n \"revision\": \"fdcc061e92851d4bb2424d44f14a330b\"\n },\n {\n \"url\": \"../../src/icon/mstile-310x310.png\",\n \"revision\": \"219233365848720bfbe14df7ddedbec3\"\n },\n {\n \"url\": \"../../src/icon/mstile-70x70.png\",\n \"revision\": \"0766ea016338863db2d6091d26b0248a\"\n },\n {\n \"url\": \"../../src/icon/resoc.png\",\n \"revision\": \"09ef507b07d8762342ab8bd0edb8f575\"\n },\n {\n \"url\": \"../../src/icon/safari-pinned-tab.svg\",\n \"revision\": \"e41d676b428a9436096866226937e5bb\"\n },\n {\n \"url\": \"../../src/icon/screenshot1.webp\",\n \"revision\": \"208af10afc13a402fbb8fd381f450a8b\"\n },\n {\n \"url\": \"../../src/icon/screenshot2.webp\",\n \"revision\": \"b11308dba17a28992ca8882d779c6485\"\n },\n {\n \"url\": \"../../src/icon/screenshot3.webp\",\n \"revision\": \"0a43570feda9a66c609945ed90756873\"\n },\n {\n \"url\": \"../../src/icon/site.webmanifest\",\n \"revision\": \"c03c9ad94639201a84a10718a7805740\"\n },\n {\n \"url\": \"../../src/images/backgroundnew.gif\",\n \"revision\": \"7adfd4f06d023b4fc04933d951fa020d\"\n },\n {\n \"url\": \"../../src/images/COMING_SOON.svg\",\n \"revision\": \"cc6507cf09df32f597ec080eb0165cb7\"\n },\n {\n \"url\": \"../../src/images/divider.gif\",\n \"revision\": \"8dd0e40f42389ca295f0c9408e28c22c\"\n },\n {\n \"url\": \"../../src/images/logo.svg\",\n \"revision\": \"90d8d81f1c27b6742d4b02be5f18938f\"\n },\n {\n \"url\": \"../../src/images/shade.png\",\n \"revision\": \"63692a2b6c9a9203e8ade8aa43b9f91e\"\n },\n {\n \"url\": \"../../src/images/title.svg\",\n \"revision\": \"6d1249ed36d9269fbe989e78bb633f9f\"\n },\n {\n \"url\": \"../../src/legacyPages/legacyPagesDisplay.json\",\n \"revision\": \"674e904c5dfbdbaeb0ecb0227cf1b04b\"\n },\n {\n \"url\": \"../../src/scripts/index.js\",\n \"revision\": \"fb90d9b1869ddbfab892519a2894a6c3\"\n },\n {\n \"url\": \"../../src/scripts/index.min.js\",\n \"revision\": \"e50b99a60e8dbeaa26cef8bb6348bcab\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.css\",\n \"revision\": \"88a1a050ac10613882d9b1ea58f39a04\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.min.css\",\n \"revision\": \"7c218347bb2fdfd6b18ec2c892d33587\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.css\",\n \"revision\": \"7a54abeae32365edb8b1bd4d4b7f6f4a\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.min.css\",\n \"revision\": \"c2ddda8b98dcae6b41d6d1dc782a7e1a\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.css\",\n \"revision\": \"292dc3f9fa0daf4aca278b093dcc82f7\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.min.css\",\n \"revision\": \"fb689eb57aef781178b5b295d4b61e81\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.css\",\n \"revision\": \"d80efc0de1b8f3767a0fff7fbf64f743\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.min.css\",\n \"revision\": \"85ccb5c4f75f1ec670243240d8c4faf8\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.css\",\n \"revision\": \"390e5e885c6137f3c8406fbb7ee97678\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.min.css\",\n \"revision\": \"1a9d5a205310b030f2a1c075cc9b9ad1\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.css\",\n \"revision\": \"2807321baffce3f4cbe0a7ba91c513ea\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.min.css\",\n \"revision\": \"58348c84aae17b088558358167a46849\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.css\",\n \"revision\": \"c1ca1e21ab9c6b86028c8335b66e9408\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.min.css\",\n \"revision\": \"fe7fdfec700d100dc745dc64d3600cb2\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.css\",\n \"revision\": \"9a040d9b7289c890a4795be07148e298\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.min.css\",\n \"revision\": \"f4b976988fc103085c1c9694d00a84aa\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.js\",\n \"revision\": \"57a985a5376d69aeb76bda8cdedc9ad1\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.min.js\",\n \"revision\": \"849e6db145f2905ce210f628bddd9de5\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.js\",\n \"revision\": \"7b035133f2cbd1f35b9545709fc725b3\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.min.js\",\n \"revision\": \"df21bc4ff36ca1341a99bb09f401300d\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.js\",\n \"revision\": \"77d976360ee7592ecd1e64ababc1c245\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.min.js\",\n \"revision\": \"716e3e3c1588d51d4dfa6da3752b0bea\"\n },\n {\n \"url\": \"../../src/scripts/libraries/jquery/jquery.min.js\",\n \"revision\": \"ed4e85ddc6e188c8490191794776f22e\"\n },\n {\n \"url\": \"../../src/scripts/libraries/showdown/showdown.min.js\",\n \"revision\": \"14517f70ed205ae583be682c9157ebe9\"\n },\n {\n \"url\": \"../../src/style.css\",\n \"revision\": \"ec68e1f8b0e304f90cd37c3d3007bf26\"\n },\n {\n \"url\": \"../../src/style.min.css\",\n \"revision\": \"cc2a8050a0719a2ac398b521683a8fad\"\n }\n], {});\n\n\n\n\nworkbox_routing_registerRoute(/\\.(?:png|jpg|jpeg|webp|ico|svg)$/, new workbox_strategies_CacheFirst({ \"cacheName\":\"images\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 10 })] }), 'GET');\n\n\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision","workbox_routing_registerRoute","workbox_strategies_CacheFirst","cacheName","plugins","workbox_expiration_ExpirationPlugin","maxEntries"],"mappings":"0nBAsBAA,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,0DACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,yFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,0DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,sDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,qCAEb,CAAE,GAKLC,EAAAA,cAA8B,mCAAoC,IAAIC,aAA8B,CAAEC,UAAY,SAAUC,QAAS,CAAC,IAAIC,mBAAoC,CAAEC,WAAY,QAAW"} \ No newline at end of file +{"version":3,"file":"sw.js","sources":["../../../../AppData/Local/Temp/f23a81e65c34b3e5a70c791b642a53ec/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from 'C:/Users/JooHyun/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-routing/registerRoute.mjs';\nimport {ExpirationPlugin as workbox_expiration_ExpirationPlugin} from 'C:/Users/JooHyun/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-expiration/ExpirationPlugin.mjs';\nimport {CacheFirst as workbox_strategies_CacheFirst} from 'C:/Users/JooHyun/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-strategies/CacheFirst.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from 'C:/Users/JooHyun/OneDrive/_OtherProjects/SmallDevTalk/SmallDevTalk-Code/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"../../src/articleArchive/articleData.json\",\n \"revision\": \"4e82f111c803e5425e3afb0cc77e4450\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image1.jpg\",\n \"revision\": \"27dcfa9ecd0efd99b9df432879c08219\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image10.jpg\",\n \"revision\": \"afe9afcca0f32a8976567d16cd988c85\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image11.jpg\",\n \"revision\": \"8d9210ff1cb1a22a43010fa06295e0b7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image12.jpg\",\n \"revision\": \"087daa82594a5041a5f61ae899909f99\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image2.jpg\",\n \"revision\": \"e52a795a738be47b86fd5a46c38752ef\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image3.jpg\",\n \"revision\": \"bb151e1aa85b98eb23a5d098eecb961d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image4.jpg\",\n \"revision\": \"3cbe6c46e8bc384cae1823d75c78924d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image5.png\",\n \"revision\": \"def8648d4bee746deebeff24603e37ec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image6.jpg\",\n \"revision\": \"a743180627e5e421c310676294a1d5e7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image7.jpg\",\n \"revision\": \"7d896113d82eef58199f7b53e04ce414\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image8.jpg\",\n \"revision\": \"fe2e019064f54af3a81007f0d6d61cdc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-07_Ghostship/image9.jpg\",\n \"revision\": \"7ca083aaca86b6438beee09c2b35d071\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image1.jpg\",\n \"revision\": \"42316989cb3524a4a0b9b1539c18ffb9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image2.jpg\",\n \"revision\": \"a269c955ae1e919560fc4ed3a8202a60\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image3.jpg\",\n \"revision\": \"16ddaf2bf7720d2102ca2550ed40093a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image4.jpg\",\n \"revision\": \"463b92557e750b3e59e70ab79c37db2b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-09_Outworld/image5.jpg\",\n \"revision\": \"da3db4e9f9a70d6818a3a808c23db5f2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-17_Hello/image1.jpg\",\n \"revision\": \"f935347ae298343a9f8d8cbe065ee765\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image1.jpg\",\n \"revision\": \"1a312289757ff487438359521def9550\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image2.jpg\",\n \"revision\": \"b95583b7e8856b83fb7428623c353a81\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image3.jpg\",\n \"revision\": \"59431aa1577fe958ab19994156ff1025\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-19_Vessel/image4.jpg\",\n \"revision\": \"c531ca2589e869827254619aba3f0b98\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image1.jpg\",\n \"revision\": \"1e8b13c9e625916dd7a50e584c431662\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image2.jpg\",\n \"revision\": \"5ac54287ee5f4229f511494c8ff36e93\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image3.jpg\",\n \"revision\": \"00b32d6566c2fad7dc07294cdc02230f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-20_Shadowlurker/image4.jpg\",\n \"revision\": \"064e7701fabeedac72b6192091601a24\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image1.jpg\",\n \"revision\": \"ed7edfa7336e49b1ea7292a0d3e91697\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image2.jpg\",\n \"revision\": \"8d6e7f18aa0128a12623145b1f54dc54\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image3.jpg\",\n \"revision\": \"a23e0efba39d8a5f5540d8fb0eb5da7b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image4.jpg\",\n \"revision\": \"9fc8fda1cf4b455b83287a71a65dce14\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image5.jpg\",\n \"revision\": \"5822849d86c3e6af1c6b25e109ecf53e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image6.jpg\",\n \"revision\": \"b13fd0313185fa3cad01a269ea06fbf6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-21_Prisonhood/image7.png\",\n \"revision\": \"505681b94d20d38734cdb53770be5fe9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image1.jpg\",\n \"revision\": \"c24400d9aa82c02094384873e6efee8b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image2.jpg\",\n \"revision\": \"07f26519bb81bde15c8ca54a030cb77f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image3.jpg\",\n \"revision\": \"e6433878b8f7b1a94a3315bb5dfe6fff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image4.jpg\",\n \"revision\": \"21d73f39d66a4df4c7e34804987cae2e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image5.jpg\",\n \"revision\": \"bb37ac6d808f2ec37a2d7dee37478c0e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image6.jpg\",\n \"revision\": \"513ec0cccbbc4d3e7c7300791b1beb21\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-22_YukiVsPanda/image7.jpg\",\n \"revision\": \"98d31c43e0adb9ae03c3308b5e3ca444\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image1.jpg\",\n \"revision\": \"d31e1c075f0f05e5c23dcb0b9a8d9d62\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-24_ThisIsNormal/image2.jpg\",\n \"revision\": \"507c2c06bfefb7a3684e28d579663625\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image1.jpg\",\n \"revision\": \"bd72a27ee9638d04ef5c3acd361bb0e1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image2.jpg\",\n \"revision\": \"f0dc1c99b95da3defedd96a14ccc6025\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image3.jpg\",\n \"revision\": \"6b24f06c18869e2c8dbb075e9a667a85\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image4.jpg\",\n \"revision\": \"8575a22044df8f31f9cee862838db9cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image5.jpg\",\n \"revision\": \"7638f5ab7c7d5b5a278c0c269bdae422\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-03-26_Caravaneer2/image6.jpg\",\n \"revision\": \"6b2a27fd3d61804010db39e8a51cd5cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image1.jpg\",\n \"revision\": \"173dfdb7293f01e6e60fa58ce33ae62f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image2.jpg\",\n \"revision\": \"de798c27fe9604941f3cdd24181546bd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image3.jpg\",\n \"revision\": \"ec2a7a9a8774cb5b2c01d67b8d4442c5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image4.jpg\",\n \"revision\": \"57a5e970597f3ba03e904deb47d6d852\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image5.jpg\",\n \"revision\": \"689426e2328af6970a456654853c0a6d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image6.jpg\",\n \"revision\": \"7f0f406210596cb2e23de523b32b1740\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image7.jpg\",\n \"revision\": \"4aad1805627179cbcb4552754b90731f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-01_ArmyMen3/image8.jpg\",\n \"revision\": \"173dfdb7293f01e6e60fa58ce33ae62f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image1.jpg\",\n \"revision\": \"23c560be26525f9dd8feb4038560c46a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image2.jpg\",\n \"revision\": \"9e4e319f065b67d62bfd086d2ec701e9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image3.jpg\",\n \"revision\": \"8a97e4b9f9f46a2374dcc5d9f3aa0f27\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image4.jpg\",\n \"revision\": \"5b0ed78f26309666f2cf5d94aabb5291\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image5.jpg\",\n \"revision\": \"65a85df77a68596ca9f4fa3a1625110d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image6.jpg\",\n \"revision\": \"72ee0e02d69c613d27c64b4af0303ab5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-03_LifeEssence/image7.jpg\",\n \"revision\": \"f24d7cdb0616627945e07452fd1a56a4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image1.png\",\n \"revision\": \"2fbf9f405d5be8bd99805ade06b7964b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image10.jpg\",\n \"revision\": \"fd0763f6f229687bbc75a61c0f7a5ca7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image11.jpg\",\n \"revision\": \"520d7a254b380ac68d860dfdf672257c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image2.jpg\",\n \"revision\": \"48d7ade2d8f8b150698ff2ed92f1f5eb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image3.png\",\n \"revision\": \"492db2a417835f95b4d3dcb80f8422bc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image4.png\",\n \"revision\": \"d5e7c367b8772f9fd271c14a7b92d2d8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image5.png\",\n \"revision\": \"00df4ab01cda692490fe960e1c62d524\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image6.jpg\",\n \"revision\": \"f04f1c20328b95a291bb158b949e752b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image7.jpg\",\n \"revision\": \"56cd148c847e9d1e572ba685c636f80d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image8.jpg\",\n \"revision\": \"32beecbb0188bce1ee1f2ffbdc459918\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-05_TowerOfGuns/image9.jpg\",\n \"revision\": \"48ca4959a17874f31ccdbe2d1c068842\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image1.jpg\",\n \"revision\": \"a7bd23e54c13cfedfc74f019153fa350\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image10.jpg\",\n \"revision\": \"7eb0de5b6a49230830f8b14d7e49a21a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image11.jpg\",\n \"revision\": \"08d5b6f1be486aeda749b9c787733ec6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image12.jpg\",\n \"revision\": \"4493acf6c791acfc5fd5e6cc0380e914\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image13.jpg\",\n \"revision\": \"9f3fd48941f83484b1b3f1d999306cc7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image2.jpg\",\n \"revision\": \"1b53b42d6f6fc430c055d6861fd8383c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image3.jpg\",\n \"revision\": \"1157d7cb31d41809050aa8fc08c69d07\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image4.jpg\",\n \"revision\": \"50940dfe47ebd228eca982b9ff59c3a5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image5.jpg\",\n \"revision\": \"a89976b97983f854b9e812d6417147e9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image6.jpg\",\n \"revision\": \"d9ff99e6242ab96f652a7209d8baa07a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image7.jpg\",\n \"revision\": \"947e3a2d6079a41ecf6e359977a1b306\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image8.png\",\n \"revision\": \"8c0cce94724fce633adef9881df7b485\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-11_PlanetExplorers/image9.jpg\",\n \"revision\": \"5e8693b0d8804fab484ca5bb72ee1ffe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image1.jpg\",\n \"revision\": \"8047492b24054f2f4c1377dd41c9f6ed\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image10.jpg\",\n \"revision\": \"bc684c6fc3948df91e45b1f1a6c52618\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image11.jpg\",\n \"revision\": \"edc5bc1bf1c5941e7b23bda9cb9b4480\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image12.jpg\",\n \"revision\": \"a49b345c9265fbbf21284546af86c055\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image13.jpg\",\n \"revision\": \"694cdf48da02964c0687a94fd741a650\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image2.jpg\",\n \"revision\": \"599388471d74d344f937ee243855b242\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image3.jpg\",\n \"revision\": \"c4394ab19c2d2938d84fc2272a8f0356\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image4.jpg\",\n \"revision\": \"286e4dce6f67acfc63d3b28b96481b65\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image5.jpg\",\n \"revision\": \"48aec9824256e02c78ef8b5f3aa84ffe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image6.jpg\",\n \"revision\": \"cb0e7aa1dd96cdb6218175db906abbbf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image7.jpg\",\n \"revision\": \"05cffef2939b69fe7bc8fffe24288ecc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image8.jpg\",\n \"revision\": \"ab45b2524d98451f99aefb1b5a1da118\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-13_SangFroid/image9.jpg\",\n \"revision\": \"14af306a60783767a1af5f5f8c67d74c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image1.jpg\",\n \"revision\": \"b8dfb9102ccf2cc92fc34aa280f08cc9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image10.jpg\",\n \"revision\": \"66682a6bfce09cfd180a83af40d9f3a6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image11.jpg\",\n \"revision\": \"3b74fd37a7d9e4e65b3eeeae85033656\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image12.jpg\",\n \"revision\": \"79421de15b792aa4ccbd5e367da3ba4f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image2.jpg\",\n \"revision\": \"45afc084a6c9e5bfc7e02840ef38024c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image3.jpg\",\n \"revision\": \"8a7a047fd8542b0d68604b43a8b74202\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image4.jpg\",\n \"revision\": \"7282bbef120a5418fd36b6568e84e61d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image5.jpg\",\n \"revision\": \"3d1fad1043444f389b6367e33f32105b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image6.jpg\",\n \"revision\": \"45f6f65bc0f09d231beef2a342529728\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image7.jpg\",\n \"revision\": \"6663c04488bc344d01be9aa4cd1d3cf9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image8.jpg\",\n \"revision\": \"bfe4f8fe33a5eca2d5b35745f9630faa\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-15_Titanic/image9.jpg\",\n \"revision\": \"bb17bcb13fa1865d7c73498632a033f2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image1.jpg\",\n \"revision\": \"0f46f35ad92b1477a363dc757e472b20\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image2.jpg\",\n \"revision\": \"38c9ca222aab8cc44984ca4083a4942c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image3.jpg\",\n \"revision\": \"20a6885c9142134aae37df4d06d52571\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image4.jpg\",\n \"revision\": \"e90e4f2d3db64d1bfe7666037b58d58f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image5.jpg\",\n \"revision\": \"1358d3899a04b5ddf45fb2e68a62fffd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image6.jpg\",\n \"revision\": \"0305a218bc5817fc084149b815850c06\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-16_Runes/image7.jpg\",\n \"revision\": \"140738b1f29726a381773bea82783cde\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image1.png\",\n \"revision\": \"bdb0db3c8620478df4f1e1791b0f7c52\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image2.jpg\",\n \"revision\": \"689dfbc01761c5548bb13344e664096a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image3.jpg\",\n \"revision\": \"82a01cacd45c6dad1a58630a4fed5f35\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image4.jpg\",\n \"revision\": \"066c5b01983cee0fd12af57224ec91cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image5.png\",\n \"revision\": \"1cbb8519b460b98ec9b534ba705899d9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image6.png\",\n \"revision\": \"e6aad3dd2452c8db0ac3913077ef15bb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_LeviathanCrossfire/image7.png\",\n \"revision\": \"2cf22786b597039bd4dd033709ceb97b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-17_OneLifeLeft/image1.jpg\",\n \"revision\": \"db4f17d2c77770830065ff86dcf39798\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image1.jpg\",\n \"revision\": \"91ab146483da921afadde595ad300c1d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image2.png\",\n \"revision\": \"5285ba17551853f34669d5f3cd5434e7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image3.jpg\",\n \"revision\": \"5e2a63899fc1f942a97c37374de85236\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image4.png\",\n \"revision\": \"901bd62bc86fea78989629ec8e500058\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image5.jpg\",\n \"revision\": \"ed06eb504a713536e9d05181bd25eb36\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image6.jpg\",\n \"revision\": \"82797c9e1bdaac040557385d63a8efcf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image7.jpg\",\n \"revision\": \"73e87e33214bae5415b535c61b047159\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image8.jpg\",\n \"revision\": \"ed4c5a27fe4e590f4754669521e3bec0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-19_DreadOut/image9.jpg\",\n \"revision\": \"1446e055a564775bbf85135412e05ac9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image1.jpg\",\n \"revision\": \"6db612ad1adc86394145d2dbf008ae78\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image2.jpg\",\n \"revision\": \"7eb0f705595ae29fdf3740209e22bac8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image3.jpg\",\n \"revision\": \"503976a147e77e51ef996a63afda208f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image4.jpg\",\n \"revision\": \"6e29916ea8a34453700f352d7dc6ad19\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image5.jpg\",\n \"revision\": \"0e2b7a92664c5b7f61daacb6c0f97ffe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image6.jpg\",\n \"revision\": \"df0c407ea360c3333b2d2d317bacb5f3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image7.jpg\",\n \"revision\": \"b18927a283786b19cf5e8ff8dbae68ad\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-21_SonOfNor/image8.png\",\n \"revision\": \"564d1334c46d244c22d35dbcd5393b4e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image1.jpg\",\n \"revision\": \"5029917134900956505fc07f969cbf7c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image2.jpg\",\n \"revision\": \"9c0709172457638827efab9cfbb2cb2e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image3.jpg\",\n \"revision\": \"72d4c6e6782b89dc6b1d22d05a046753\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image4.jpg\",\n \"revision\": \"78f059113d5e0f0f7f81f41034d3f558\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image5.jpg\",\n \"revision\": \"0db43db70d44eaa467c1dca37cba71cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image6.jpg\",\n \"revision\": \"a91f1d3b2b4a64657d596fb384520e35\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image7.jpg\",\n \"revision\": \"a50d72749eab11a5c55d2068bb4cb319\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-23_Oceania/image8.jpg\",\n \"revision\": \"c9fb70ec4dc20201f0a783c4169dd5c2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image1.jpg\",\n \"revision\": \"f1e2ffd6f28ad03975bddfa34b8ed82d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image2.jpg\",\n \"revision\": \"a6726b9e94b791ac903081407723c4c6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image3.jpg\",\n \"revision\": \"81a179e3f0d788928e85a471f4310887\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image4.jpg\",\n \"revision\": \"ceb65b0f1a2a52c24122cffbc230f854\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image5.jpg\",\n \"revision\": \"fc4e23b17fa1b9413941bd7330afbfec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image6.jpg\",\n \"revision\": \"12b2d1f4c84c3c67a0686cc064019d8e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image7.jpg\",\n \"revision\": \"7fa9482353d9b047c8442ba3183fc73d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image8.jpg\",\n \"revision\": \"159094bec3a88654026cb01fa4102cea\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-24_BlackSoul/image9.jpg\",\n \"revision\": \"edef323af40be3c9f28bce825f54bf9a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image1.png\",\n \"revision\": \"b2ef9d4a9f2e1999d3aaa05011d9ee06\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image2.png\",\n \"revision\": \"e7efa0067442d7e87295674435df787a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image3.png\",\n \"revision\": \"d4786bf9d21d00ef9f44a4f46f5baf62\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image4.jpg\",\n \"revision\": \"bd4093288975c01af4bf30190d367176\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image5.png\",\n \"revision\": \"6702d7487576fd015572cc5150ea3362\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image6.png\",\n \"revision\": \"742bd34a6a8dc6399173d08beeb7ee94\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image7.png\",\n \"revision\": \"98065b05c544e132a2ba7bfd598e30e2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image8.png\",\n \"revision\": \"102cd35ae2db4ea282115004085690c3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-25_KingsportCases/image9.png\",\n \"revision\": \"a9f964a0d804b8193b5be0d5dce0c0f5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image1.jpg\",\n \"revision\": \"dce00c583231a8ca92dfe4fb4075a0a4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image10.png\",\n \"revision\": \"8f1624797c8e49518059fb70341cb4c7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image11.jpg\",\n \"revision\": \"99f9f3777965f0c782ff2608993c688a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image2.jpg\",\n \"revision\": \"919d2fc9606b90f6dca7e62fdf926faf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image3.jpg\",\n \"revision\": \"b145a9249334c7969123efef8adc5468\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image4.png\",\n \"revision\": \"c5da356d707423bb9d15989dad326875\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image5.jpg\",\n \"revision\": \"b65917cd35f7c482a28bc78bcaab92fe\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image6.jpg\",\n \"revision\": \"074b1c382fe8ddf3641a60d0a08b7bf5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image7.png\",\n \"revision\": \"e8dc2ca0ae4f4af0253b194625453534\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image8.png\",\n \"revision\": \"467b3e86843414afdf38ac8d4c88856f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-04-30_GloriaVictis/image9.jpg\",\n \"revision\": \"f60375cf0c4431a8ba797dbf56d64f2b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image1.png\",\n \"revision\": \"a2797b97b88edfea12649fdf05fd88de\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image2.png\",\n \"revision\": \"fa0e34f24a10af6f84acd620a329ce53\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image3.png\",\n \"revision\": \"44d55d9588f4e57f7595a43edf4b0a56\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image4.jpg\",\n \"revision\": \"4ab8bf3ce79f08d09d39278ec286ee91\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-03_Aurora/image5.png\",\n \"revision\": \"46a3e77429a914a0fc7ca1b620ead51a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image1.jpg\",\n \"revision\": \"2a5c8c9be4df50e1d8ca17530c4263ae\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image2.jpg\",\n \"revision\": \"5a1fc1955d337c45fa715f881983b777\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image3.jpg\",\n \"revision\": \"3fa0199e3b86e6d04ea6aa4deb23ba10\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image4.jpg\",\n \"revision\": \"db3f1cdda23155567c46ac258f574e5b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image5.jpg\",\n \"revision\": \"944b63b9053880378b161021063d2953\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image6.jpg\",\n \"revision\": \"3a7abc7411fc69029e9c498dc0923650\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-06_RunningDude/image7.jpg\",\n \"revision\": \"34873386d56efa6143194a8cbe6e1a13\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image1.jpg\",\n \"revision\": \"0df19ec53a5438e7852570241ad6cb8a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image2.jpg\",\n \"revision\": \"82eae902b1a14ab0191768b1b3d622d0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image3.jpg\",\n \"revision\": \"6af31d464429ed9a8a7c1d595d4863ea\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image4.jpg\",\n \"revision\": \"4a6dce15c5a5d4fe8bec5b5baed2daaf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image5.jpg\",\n \"revision\": \"26ff6de3a9e80f30cd8507b0ad5ebe89\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image6.jpg\",\n \"revision\": \"e30be39f6820e3617fde3407072b6e8f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image7.jpg\",\n \"revision\": \"2ca0ff627fd58ffd65792c4a4650b478\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-07_Wave/image8.jpg\",\n \"revision\": \"5c37f7bb28f1c898cd0a796460290dc4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-11_BeyondInfinity/image1.jpg\",\n \"revision\": \"ca3918b596d69345902b93cab250995a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image1.jpg\",\n \"revision\": \"969ae9c2a8b0695d291d08f5d510520b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image2.png\",\n \"revision\": \"9f2afa3957285da421fe2ec81d4b4fd3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image3.png\",\n \"revision\": \"f65650157c2a7ebc4940d45109db55aa\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image4.png\",\n \"revision\": \"ea7060524456b08d1660690443f91c42\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image5.png\",\n \"revision\": \"be4ed8539d5b403baff250d5264410a8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image6.png\",\n \"revision\": \"19dd1ba71a924337f8b1c0b20bba55c0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image7.png\",\n \"revision\": \"70950ce872bd828046613e6a146a8449\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image8.png\",\n \"revision\": \"79c4094b3b3369394c375e7daecab4af\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-12_Outpost/image9.png\",\n \"revision\": \"d86046a881e897727e4ba5e46ccfc6ec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-13_CubeMetalHeart2/image1.jpg\",\n \"revision\": \"d2a3634a6b26e4107fb009365bcc0585\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image1.jpg\",\n \"revision\": \"6985c503e2440e09b0f98097ebc973d7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image2.jpg\",\n \"revision\": \"e1733add2770d1800357a3e1c50f5bdb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image3.jpg\",\n \"revision\": \"772f0dcd2d43cdaa22926db4c104faa6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image4.jpg\",\n \"revision\": \"2736a2f63cecc8247ac82740b88711e4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image5.jpg\",\n \"revision\": \"b609c9767485b3ce1752a3ac5e34f189\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image6.jpg\",\n \"revision\": \"86479a854fdfb90037ef509a73e91c3b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image7.jpg\",\n \"revision\": \"14e0c76554569c97263986cc63fff87c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image8.jpg\",\n \"revision\": \"aad8e8b41f96e70d2e95db02146461f3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-19_Warlords/image9.jpg\",\n \"revision\": \"0b28ba8fb5335a25082b0327a7f1ed8b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image1.png\",\n \"revision\": \"28e06c30374b410246bc759213b94431\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image10.jpg\",\n \"revision\": \"7928cc5248fca24edb621243339239a8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image2.jpg\",\n \"revision\": \"90865b965988fcf9cd7118cc95a7122b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image3.jpg\",\n \"revision\": \"9c4620e4447474c3327e3695e4658d0a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image4.jpg\",\n \"revision\": \"00323e2dfaa5a9b9feb32349776439f2\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image5.jpg\",\n \"revision\": \"e581a66f0794b01bd6fe8b02a2d17bb8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image6.jpg\",\n \"revision\": \"926a0a8692502227402c7e88c3462ce7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image7.jpg\",\n \"revision\": \"4f40bf239470d9d6d6471f4ae5853f9c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image8.jpg\",\n \"revision\": \"445969f3dea1a1a37bdca7fb61f8be9a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-21_MemoryOfSoul/image9.jpg\",\n \"revision\": \"b646c0c7e12663a0bc0943190871e46c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image1.jpg\",\n \"revision\": \"b244d8c43d3e4f0c0554d2c41f0c8748\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image10.jpg\",\n \"revision\": \"5b019d58c48bedaa3b2db649bee9f0ab\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image11.jpg\",\n \"revision\": \"f44519812b8832db10b0e66b602f238c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image2.jpg\",\n \"revision\": \"889e530b818f9724bd460ab9297c79cd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image3.jpg\",\n \"revision\": \"c2f2eec3a1e2754ecb94904a6eb97f1a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image4.jpg\",\n \"revision\": \"5ff7570dba36e15c3d16effc44708a50\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image5.jpg\",\n \"revision\": \"96cc9857fe52e1aaaea6016c4653bbc5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image6.jpg\",\n \"revision\": \"ffb4ed920f9da2bd0e2e4b0e279abc07\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image7.jpg\",\n \"revision\": \"18661eb309bfe8202b1164b6dd14824b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image8.jpg\",\n \"revision\": \"2dcf0dbe71bc63ca37f71727c91d74fc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-23_JaggedAllianceFlashback/image9.jpg\",\n \"revision\": \"c120e37e3bfde902b212501d08e3fac8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image1.jpg\",\n \"revision\": \"7280a7b2247ee3653cb17564dee93fd1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image10.jpg\",\n \"revision\": \"17458c1da295eba4f733b5353190a1d0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image2.jpg\",\n \"revision\": \"36bf376552b667976c8daf04f648f469\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image3.jpg\",\n \"revision\": \"f5cb9302f99c336f51e4df6c5a78a5e4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image4.jpg\",\n \"revision\": \"2e39a520bc245942c8c72a272fd5b3a5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image5.jpg\",\n \"revision\": \"c67b46f501df14a52f1e984b7cccfb3e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image6.jpg\",\n \"revision\": \"a01171fa9bdae2b3589d8057f180626e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image7.jpg\",\n \"revision\": \"c5fa71094a08129e86a9126e7a4ebe44\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image8.jpg\",\n \"revision\": \"3a84d080ca340dd547acfbd9d8a9cdb3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-05-28_TheRealm/image9.jpg\",\n \"revision\": \"d220becf4f5178a4a1684c54d655b113\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image1.png\",\n \"revision\": \"35666a582d971835eb6dab5f49e57708\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image10.jpg\",\n \"revision\": \"7ec66f5d5a7fead07b3251345d38a359\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image2.jpg\",\n \"revision\": \"7e8440ed2955c1d60157648a0da173ea\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image3.jpg\",\n \"revision\": \"99d5c5f459682ef62c7a3cc98b74ccd4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image4.jpg\",\n \"revision\": \"9469109fae2e8f09471d9ac486069220\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image5.jpg\",\n \"revision\": \"d3795070e6514f326994c3c1590b547b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image6.jpg\",\n \"revision\": \"dfd0d6443bc6eec14c64fead9492d192\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image7.jpg\",\n \"revision\": \"84022322b84870d6590df5c0151caeeb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image8.jpg\",\n \"revision\": \"6731fd43898ed1f3ee3ed471edd47ada\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-03_Doorways/image9.jpg\",\n \"revision\": \"1af3277705effeaef5cd27b5d3446a9a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image1.png\",\n \"revision\": \"80abefadcf91449132b9678c78b430a9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-06-18_ShroudsBurden/image2.png\",\n \"revision\": \"c5e0a5962685800b401d0a1913eb3ba6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-13_QuickSlickDeadlyTrailer/image1.jpg\",\n \"revision\": \"4b3f12019ae90e99c477c632fcbb7d40\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image1.jpg\",\n \"revision\": \"e252c9bc34b65fc4fbfa68e91c059f3a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image2.jpg\",\n \"revision\": \"8328e27fdeddb789cccce3622f19709e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image3.jpg\",\n \"revision\": \"f1035b84d2568c075c9c6e0f8b34197f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image4.jpg\",\n \"revision\": \"83b7d2e6f0a56bddacc0fe6f031f4c10\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image5.jpg\",\n \"revision\": \"8b70862e000b889d3c05935b9c3d7784\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image6.jpg\",\n \"revision\": \"e8f0ab72d0ffbf3e8ae4626595794030\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-15_JackieRose/image7.jpg\",\n \"revision\": \"fb756fe1d10704f8d4f700e963338d70\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-16_MotteIsland/image1.jpg\",\n \"revision\": \"ea87444e9c4640bd862d6098b4bb6f1e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image1.png\",\n \"revision\": \"34f3bdd237e7b7196e0507be3745efca\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image10.png\",\n \"revision\": \"e371c2a35cb13276c45ab67244706e28\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image2.png\",\n \"revision\": \"75f33390f8a561aa82f06a9257ac0245\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image3.png\",\n \"revision\": \"534b10322cf0ef6a3562f697668278d0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image4.png\",\n \"revision\": \"03c93a901f2ef292a342330e7729d422\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image5.png\",\n \"revision\": \"c4342af6ab7c7ea6698026061f005377\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image6.png\",\n \"revision\": \"b326191989250f6524e08a5b819c8e32\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image7.png\",\n \"revision\": \"8ea1535d1d981c2222327d76d2aa637f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image8.png\",\n \"revision\": \"4e6615d28d22a83ef0c99fa8e3aee624\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-17_LucunaPassage/image9.png\",\n \"revision\": \"4cd779c5b8aaaa88ca5dccf6e31719b3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-19_ProjectTemporality/image1.jpg\",\n \"revision\": \"12c7f75562a71494cb236b1cd6413ec0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image1.png\",\n \"revision\": \"20d8fc45e13befe6968dfb5db8491e51\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image10.jpg\",\n \"revision\": \"e7b14995674d200c7b89b1f7a4bceceb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image2.png\",\n \"revision\": \"8fcff4dabfae8b1d42bc0b4c23e697d4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image3.png\",\n \"revision\": \"dcb482c84bef290ad021b2d9d220c8b7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image4.jpg\",\n \"revision\": \"0a54796fd651389edeb8e4c672c78c81\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image5.jpg\",\n \"revision\": \"0fc8ef2ef8523da1697ec5ce1f8acaf7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image6.jpg\",\n \"revision\": \"74abb9383c4545188c93f3f7001a70ce\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image7.jpg\",\n \"revision\": \"c288350a97fb3607198635248efbb0bb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image8.jpg\",\n \"revision\": \"81607e4f5d75bee81bc49b610fd0bfa5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-21_DeadPlasma/image9.jpg\",\n \"revision\": \"4732c349b66c503ad05f6f5072476476\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image1.jpg\",\n \"revision\": \"ed7709fa547382018e3e5389aa9d5a74\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image2.jpg\",\n \"revision\": \"9937d5c6320d0eb3ccdbb561afe2fd1e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image3.jpg\",\n \"revision\": \"bcdf78d9ba26d4dcba29db1925968cbf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image4.jpg\",\n \"revision\": \"b6b8f79891f5b28968e4f6d5389e1403\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image5.jpg\",\n \"revision\": \"e9ca97ff5620d39822dc5e1fd5cf1099\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image6.jpg\",\n \"revision\": \"1adc22403d4ceba05d90dfa8a4a30cf7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image7.jpg\",\n \"revision\": \"4479fd4343f7df4b26642534ab9247fc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image8.jpg\",\n \"revision\": \"a554a695aa14e80a41ac140c276a2f15\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_QuickSlickDeadly/image9.jpg\",\n \"revision\": \"a70613da9a23cbd60ed43da23afcef46\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image1.png\",\n \"revision\": \"8335e880a0e50433ba57832d55f98d04\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image10.jpg\",\n \"revision\": \"665453487cee76046c6996900df65742\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image11.jpg\",\n \"revision\": \"c1bf4e21062b27021b577b0054d3ee05\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image12.jpg\",\n \"revision\": \"797269adaab601a10de5968c75740c9b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image13.jpg\",\n \"revision\": \"998fb25c60ecdaaded79ad5f325c42dd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image2.jpg\",\n \"revision\": \"4a707552ed7bbfbb0f2f3f5009ad2d99\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image3.jpg\",\n \"revision\": \"7888eec1ecea13b48444679726b8a83a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image4.jpg\",\n \"revision\": \"5a8e3601a1e5ac5c6684cce3844162c4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image5.jpg\",\n \"revision\": \"cd21b9c429cc4d2ec6cb9c3e8177d007\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image6.jpg\",\n \"revision\": \"162119a60951b91e3d19f71bd440fb6a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image7.jpg\",\n \"revision\": \"9161f5a156e29f544226ef2e5a7139a3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image8.jpg\",\n \"revision\": \"ad5d7a8504a225e7f40a5f4678ed571b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-27_SNOW/image9.jpg\",\n \"revision\": \"15225de368c024c0cfac87e33ced5a8a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image1.png\",\n \"revision\": \"299b713c8ba7fb34ce4812919fe9e03e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image2.png\",\n \"revision\": \"f2c2bdb3ec5820be66f8f520ad7997d9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image3.png\",\n \"revision\": \"d5731ce115c6af073ab9c1806692b2e8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image4.png\",\n \"revision\": \"7d120ba85b19cc45b89ef3dc0c6b9cc1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-07-29_AdventureTidesOnline/image5.png\",\n \"revision\": \"fd915f1b3284ca6a98fc994be84ba9c0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image1.png\",\n \"revision\": \"2ff7e5641d3983a2b26121879f0c6768\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image2.png\",\n \"revision\": \"1ec667d777e79f978ff4aeefdce1081f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image3.png\",\n \"revision\": \"871733da343647401017c914a8830453\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image4.png\",\n \"revision\": \"c1405f9b5baa3062660248395ac0157e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image5.png\",\n \"revision\": \"5a93be18f700f9425de0d030c889493a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image6.jpg\",\n \"revision\": \"95072f7182de90d0c9134d006d5003a6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image7.png\",\n \"revision\": \"2835cfe51ef48668d6402252c7aa1f5a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-13_SociallyAwkward/image8.png\",\n \"revision\": \"04588d04a275594757bbea6e514ca089\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image1.png\",\n \"revision\": \"50f88e9f70978d94c7d8ae35704f0b11\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image10.png\",\n \"revision\": \"b8d00155a9c0ecafa6f57d55a300f50e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image2.png\",\n \"revision\": \"cb4c57e8da565d757fe9a7dec471c5f4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image3.jpg\",\n \"revision\": \"083d5e6f02393306af76686b4083aae8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image4.png\",\n \"revision\": \"2cd4e79358a6029a2c06e3e9691c6f0d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image5.png\",\n \"revision\": \"f361958232fceb901732a063136d4398\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image6.png\",\n \"revision\": \"30125f459d3d8fa68e86e6e06543a55f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image7.png\",\n \"revision\": \"762dd5f98d498b4d606184077cd778e8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image8.png\",\n \"revision\": \"af8a33c09e2cdfce09db891b4554fa61\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_FluoroVu/image9.png\",\n \"revision\": \"02ce56af8a12814e4995452bff2e44e6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image1.jpg\",\n \"revision\": \"c7685c02f00b2f0a6415220868bd8530\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image10.jpg\",\n \"revision\": \"724d63b5cd9cc42440d81935291b5887\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image2.jpg\",\n \"revision\": \"a1dff16d384d349f30d368e39201ace3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image3.jpg\",\n \"revision\": \"a35ab9b8de060858d21a9ec2fb98f5ce\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image4.jpg\",\n \"revision\": \"f5369f0338f87703fa5d8068c9c05a81\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image5.jpg\",\n \"revision\": \"cb76e4c7f76050908df369cb5313a3eb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image6.jpg\",\n \"revision\": \"aa71c08a590f3f8aee35f6a3de184eff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image7.jpg\",\n \"revision\": \"14b707bb05353d60ba9109573b2c5be8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image8.jpg\",\n \"revision\": \"2473ab776cd3c5ac0a4f3848be7b8ae3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-18_SaltBurn/image9.jpg\",\n \"revision\": \"7a277c4dd822b0e0cd41391d11111a00\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image1.jpg\",\n \"revision\": \"d999dea8111b13b545f4ae9bed04e4a1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image2.jpg\",\n \"revision\": \"841e52644790d60dcce83a57ddabd140\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image3.jpg\",\n \"revision\": \"0d6907f6d45ad4c1e7db3db10cabea9b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image4.jpg\",\n \"revision\": \"6a6b872364e79cc1088115e4f2ffaa54\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image5.jpg\",\n \"revision\": \"47fc58cb67ac5b4d5116d1b62c42f8fb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image6.jpg\",\n \"revision\": \"8c18b20f4d0b9a466180b9d3a08653fc\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image7.jpg\",\n \"revision\": \"fb364eac0951773cb330ceb6aba2823e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-19_StoneRage/image8.jpg\",\n \"revision\": \"4f2526c4ccdec17b17ed2c1baa9e3791\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image1.png\",\n \"revision\": \"9da1691851b60a29b30b3838804f2d70\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image10.png\",\n \"revision\": \"04cef2521e8e6655cc015ac1bba05a5d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image11.png\",\n \"revision\": \"c5f8b36eacb835da5c9a6f26d358e44e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image12.png\",\n \"revision\": \"dc7b79abadc0e4f7f694063e49e23d89\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image2.png\",\n \"revision\": \"dd48df93bed859be4e6284874e715389\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image3.png\",\n \"revision\": \"62916c4ba515347d4ce6895469a09933\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image4.png\",\n \"revision\": \"7a7d4f69271672f3ae22ec5b753d2d57\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image5.png\",\n \"revision\": \"afb3771d0929c0d107d8f3a9eb5d0913\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image6.png\",\n \"revision\": \"d4dd9dd1232d59b4849be170639dfa8f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image7.png\",\n \"revision\": \"456a7a47aec2cded7499f725bd901b63\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image8.png\",\n \"revision\": \"3a3a84f2d957586e149e3cb36d34d227\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-22_AfterReset/image9.png\",\n \"revision\": \"32e5f0d564ff45e1dd8cb00b3e8fcad3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image1.png\",\n \"revision\": \"0390bdc1bfa8421099680021226d153f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image2.jpg\",\n \"revision\": \"b577a76021fa1f7174a3aef31fb51d56\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image3.jpg\",\n \"revision\": \"78cb82e3e019e192a1d78d07bd631d2f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image4.jpg\",\n \"revision\": \"fbd7bcd77823647f40bebd5896a71771\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image5.jpg\",\n \"revision\": \"a9753e3654ad97ec7bc8c26ede89250d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image6.jpg\",\n \"revision\": \"74037b92dbb71626ed02bf85210ea4ff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-23_RickFuture/image7.png\",\n \"revision\": \"c1edf94b993167cc6e04a09de778675c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image1.webp\",\n \"revision\": \"05d285e3f80d258cbd2fbcfc247af4a3\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image10.jpg\",\n \"revision\": \"bc1414519e5c1273dcd9468449b55a20\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image2.jpg\",\n \"revision\": \"7f329ef9c00eeb0143cdbe3797d2bc2e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image3.jpg\",\n \"revision\": \"a484a9430d3726b74c6f2f56d0b6d6fd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image4.jpg\",\n \"revision\": \"c4b9e761ebd778c1e1a6d16c52c68cd9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image5.jpg\",\n \"revision\": \"a731b9997646af477545434fc3ef98e7\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image6.jpg\",\n \"revision\": \"2cf253207ba1d7d11fae57b3210018b6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image7.jpg\",\n \"revision\": \"4211cedbdbf72b5986a665ad19da68d5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image8.jpg\",\n \"revision\": \"b2bbc644824210016a36e173615ddfec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-08-25_Bound/image9.jpg\",\n \"revision\": \"3babeb8ce62bf3a0adffb456f0d6d3c6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image1.webp\",\n \"revision\": \"3a24925a2b3f0cb5c19d8b59b86e7be8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image2.gif\",\n \"revision\": \"27cef56926535e48b93b0a5ed02e9adb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image3.jpg\",\n \"revision\": \"5cdf6d0112ba9f6c99a8b2748f0dc402\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image4.gif\",\n \"revision\": \"7140f81fd28621dc0f13c2718fc3aba0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image5.gif\",\n \"revision\": \"5e5a679faa69d0a49b8de0570d6720f0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image6.gif\",\n \"revision\": \"b3ab0571a09114426ea68cd8dfc143b6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image7.gif\",\n \"revision\": \"bfe28d73c56a0fcec4bfb460b5baf220\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-03_Playsets/image8.jpg\",\n \"revision\": \"ba64b482c7988d0adbcd01c72feeb5ac\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_PlaysetsTrailer/image1.jpg\",\n \"revision\": \"9432cc5b42136150924aba36f20d4835\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image1.jpg\",\n \"revision\": \"fc490a69e70a434f0585ea2d68b7332f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image2.jpg\",\n \"revision\": \"95f4b2826fd04024a2d865845278022a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image3.jpg\",\n \"revision\": \"551c7a18e6312c61f77c3bf1671ea762\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image4.jpg\",\n \"revision\": \"32716c1bd0593b7f3431c5fdb9caf974\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image5.jpg\",\n \"revision\": \"f81d478345f158f3c1a3464352f03982\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image6.jpg\",\n \"revision\": \"35a6741230000357728e9a8e195cf2a9\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-05_ShutteredCity/image7.jpg\",\n \"revision\": \"7bf846f610368e235844a37847dfec56\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image1.webp\",\n \"revision\": \"7934a466ae8f3a0b553c6b121468d405\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image2.png\",\n \"revision\": \"fcc6cc0fb1d798f572895a5e39b83d0b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image3.png\",\n \"revision\": \"af9f4dabbd9d85fefd7310c52f9fa8c6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image4.png\",\n \"revision\": \"bc3207531d8a2e1d80085002482fc42f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image5.png\",\n \"revision\": \"77b347def110cc04bf2eb218ae274c17\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image6.png\",\n \"revision\": \"255772860e0104a5a72f862d27b44e3e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image7.png\",\n \"revision\": \"bdc491e7aedae34ea8f6a652694aa5fa\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-08_ChampionOfDema/image8.jpg\",\n \"revision\": \"8f26289f86fdf8a7e95f6db6191e3491\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image1.webp\",\n \"revision\": \"553c975c1cd76e7976b7eb1c2c03ad25\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2013-11-13_LinkedPathways/image2.png\",\n \"revision\": \"fd4ddda59288f82dff542ef27f0380b1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image1.jpg\",\n \"revision\": \"f1ba99bf880385dd4f10d141de869dd5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image10.jpg\",\n \"revision\": \"f90a4ad5d2e7f0e583c096dae71de576\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image11.jpg\",\n \"revision\": \"b41d8dd56d65c1c62c124b64e1ba1241\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image12.jpg\",\n \"revision\": \"8352dcd7d629aa21e14d28c9a868b728\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image2.jpg\",\n \"revision\": \"97c9d4535f7957366bfd33c7f8f131f8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image3.jpg\",\n \"revision\": \"669012e419e2368c41a8860b28a659cd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image4.jpg\",\n \"revision\": \"6040a96345fe01925d4a7f44b14bbe7a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image5.jpg\",\n \"revision\": \"ef55e1e26e6605f8ae5e9355df8cda13\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image6.jpg\",\n \"revision\": \"45a5457c26f4070e27cf2342a223108a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image7.jpg\",\n \"revision\": \"a58d36f8413f0460b896edb13e99054c\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image8.jpg\",\n \"revision\": \"926cc385abed62e976cf8db3136da901\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-25_DClic/image9.jpg\",\n \"revision\": \"bd54a017ab5a1dc886e58618dd9bd0c0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-01-26_WeCare/image1.jpg\",\n \"revision\": \"961518648539049372bd2bbf393fb5f1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image1.jpg\",\n \"revision\": \"7ff370d80ef3fc938e983ae0b2ae8832\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image2.jpg\",\n \"revision\": \"ac4dc7e596d93d432d8fe75f6226f29d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image3.jpg\",\n \"revision\": \"1100826917a344c0593ae4a0cc78b373\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-02_CENTS/image4.jpg\",\n \"revision\": \"03043600776b8167aaf780a6c3c3af5f\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-03_HOYO/image1.webp\",\n \"revision\": \"03fdfdfc1c641dbf4668db3830bf644d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image1.jpg\",\n \"revision\": \"d16f3b3ce5de1f8844fbcd3ffce5c452\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image2.jpg\",\n \"revision\": \"f21721a2b0e128c240a8735b0a70419a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image3.jpg\",\n \"revision\": \"598d3064fc39aa820f3304c1fd4dabfd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image4.jpg\",\n \"revision\": \"b03f8f0d488b052936634a6b22046be5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image5.jpg\",\n \"revision\": \"5bc26836df52497bb063ef028144200e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image6.jpg\",\n \"revision\": \"432451480dc10c73af20235640c3578b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorAlexanderSullivan/2014-02-07_COLORINO/image7.jpg\",\n \"revision\": \"2d01ef36da37d44b15d3e1eb834b6f7a\"\n },\n {\n \"url\": \"../../src/articleArchive/authorJeffCen/2013-05-04_LumberIsland/image1.jpg\",\n \"revision\": \"03fc72284cc485ed05301c8a2cdeb4f8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorJeffCen/2013-05-20_1916/image1.jpg\",\n \"revision\": \"cc0320604793569b287ccfe3e18b4c0e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image1.jpg\",\n \"revision\": \"944b6fed7d11b29767d411f899b0c1e5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image10.jpg\",\n \"revision\": \"778423e7cfc195c8b1626bf1984028ab\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image2.jpg\",\n \"revision\": \"8e8cc2a279f6192368d5f63d2921e2c8\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image3.png\",\n \"revision\": \"13c45d9e45e0843af490c79bcf9112f0\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image4.jpg\",\n \"revision\": \"d6e0ac8d3aa958fe732e5b534678aeae\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image5.jpg\",\n \"revision\": \"81cd2ce7ac648624fbe5c4424bb40a3d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image6.jpg\",\n \"revision\": \"eae6596f7285f37da79485b1d824ed06\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image7.jpg\",\n \"revision\": \"4d00ee9206e340f9bfc9c0e05fed9d70\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image8.png\",\n \"revision\": \"476d822555557c9f8e2e1a6ed84de333\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-03-12_StarWarsBattlecry/image9.jpg\",\n \"revision\": \"143c7ea554ad452f73f2158d54966ed1\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image1.jpg\",\n \"revision\": \"1b8b21d8fba9bb03f330668314e0f95b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image2.jpg\",\n \"revision\": \"3edb75fac6e1d813ecc18f0e8d84e0dd\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image3.jpg\",\n \"revision\": \"2f1e067a37f38cf17addaed54aa3eaec\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image4.jpg\",\n \"revision\": \"4ad59209e2f3349e6d8f6081d4831d29\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image5.jpg\",\n \"revision\": \"1a1222807c32dcee8cdbbcec1c99d44b\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image6.jpg\",\n \"revision\": \"533564a28b630e01c9a43a47e5477b92\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image7.jpg\",\n \"revision\": \"3f4beba90e836f88ae2c72db4a77053e\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image8.jpg\",\n \"revision\": \"cccfb1ebb6076366b0e5387b0ae500bb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-04-20_TacticalIntervention/image9.jpg\",\n \"revision\": \"74be12350f518e432092e2374c0817d5\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-01_TacticalInterventionReview/image1.jpg\",\n \"revision\": \"ffae8ecd36e9d6ac0958af44fe0ddf07\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image1.png\",\n \"revision\": \"6c934e7f0a94ffb82e8ad03baf33ed27\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image2.png\",\n \"revision\": \"a4789ea575c1f149db00fa3ae156ccca\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image3.png\",\n \"revision\": \"720b110966f9540a073d9e84fe70c2ff\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image4.png\",\n \"revision\": \"51cd3b9282c3a4f90cba36caf2c85881\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2013-05-29_LittleSimPeeps/image5.png\",\n \"revision\": \"13598a98df94dea6df498c0cf5069ec6\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image1.jpg\",\n \"revision\": \"f644b028a35b8fc45c7eab17d1100eba\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image2.jpg\",\n \"revision\": \"deab3e4abe15fab915f6000f5ce219e4\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-13_EarlyAccessPhantasmal/image3.webp\",\n \"revision\": \"ae3d05e54952d5200cba5a5c4ea586fb\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image1.jpg\",\n \"revision\": \"9d67f1004f26a3b845913627125114cf\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.jpg\",\n \"revision\": \"693448ee9dafbde1f187a4403df3b998\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image2.webp\",\n \"revision\": \"b9c9933779ba81e26b7f061e7432c59d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image3.png\",\n \"revision\": \"3e214a4f1bcb8f6e39832eb5f0ee6c27\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image4.jpg\",\n \"revision\": \"e93c1c4732d00472ce5b958b6eb32507\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image5.jpg\",\n \"revision\": \"f6483f63aa45042b410fecd8412dbe4d\"\n },\n {\n \"url\": \"../../src/articleArchive/authorNeilRampone/2016-04-15_HearthstoneDownWithTheSickness/image6.png\",\n \"revision\": \"3e8ecc1d80e244b46a3608b1447d1cbd\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-144x144.png\",\n \"revision\": \"150037da79b66c6b1626b0dc8ab18386\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-192x192.png\",\n \"revision\": \"ebdb6848cccb1c3bb386a31bf2cd1198\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-256x256.png\",\n \"revision\": \"3db24f6428860ef5b8710d164f2f7443\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-36x36.png\",\n \"revision\": \"72ef8d40e86aa07babf1207fcfd508de\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-384x384.png\",\n \"revision\": \"537beeb0ac092d0c03a1ae061f30f4df\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-48x48.png\",\n \"revision\": \"e757907a4ea0fc34637a76f6bfaf35c3\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-512x512.png\",\n \"revision\": \"f24bcc3facbb90204f74454b00276ac7\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-72x72.png\",\n \"revision\": \"fea09f854fe850dc90c1265760a49655\"\n },\n {\n \"url\": \"../../src/icon/android-chrome-96x96.png\",\n \"revision\": \"a2325150e4c1a267c4b08686cde94ba9\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-114x114-precomposed.png\",\n \"revision\": \"023dddb9cb18efe77f040fefd3dcae3f\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-114x114.png\",\n \"revision\": \"e66b4caa7f9da868f059ce6d4e6519bf\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-120x120-precomposed.png\",\n \"revision\": \"af72d1d3873245e10be8aba73c29ff62\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-120x120.png\",\n \"revision\": \"2387233207d780cdf09c918e31d5b7e1\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-144x144-precomposed.png\",\n \"revision\": \"6d16b423cb74b8f7aaece4b8281122d8\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-144x144.png\",\n \"revision\": \"495240ff6c9fe75a63d5feb349e3c925\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-152x152-precomposed.png\",\n \"revision\": \"c895db198ec31d6abb68b4f158276257\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-152x152.png\",\n \"revision\": \"62accd49fd6e3d7abb3ca0f8947565bd\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-180x180-precomposed.png\",\n \"revision\": \"37de2dc46db6e1cd270c7104ae17493d\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-180x180.png\",\n \"revision\": \"6aeda0af32228fc4dae14b08af5b93e8\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-57x57-precomposed.png\",\n \"revision\": \"a9b848e76c7842800e167fcd5b3f7cac\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-57x57.png\",\n \"revision\": \"9b7f6f2dfbcfc843d5764e8b1253dcfb\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-60x60-precomposed.png\",\n \"revision\": \"994c65076e69863ec0492dda9dded823\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-60x60.png\",\n \"revision\": \"187f7e918dee18f9e94f2bbe57d23ccf\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-72x72-precomposed.png\",\n \"revision\": \"81ac10bdafbf041740d1cd727dc6eade\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-72x72.png\",\n \"revision\": \"9fbcc7caa5a7ea24fb4ac207dbfb8ba9\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-76x76-precomposed.png\",\n \"revision\": \"9a244bf4222ec9f9e07be19ba2b2cc0d\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-76x76.png\",\n \"revision\": \"896f3494bde7403518c8f77a909d50d5\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon-precomposed.png\",\n \"revision\": \"37de2dc46db6e1cd270c7104ae17493d\"\n },\n {\n \"url\": \"../../src/icon/apple-touch-icon.png\",\n \"revision\": \"6aeda0af32228fc4dae14b08af5b93e8\"\n },\n {\n \"url\": \"../../src/icon/browserconfig.xml\",\n \"revision\": \"d6a6ed4ae6be46c4272ebdaeeebe3635\"\n },\n {\n \"url\": \"../../src/icon/favicon-16x16.png\",\n \"revision\": \"521b6c7a85040303c452574186f4aaa7\"\n },\n {\n \"url\": \"../../src/icon/favicon-32x32.png\",\n \"revision\": \"abc3b2c04d387b15b6a095e4d57607f1\"\n },\n {\n \"url\": \"../../src/icon/favicon.ico\",\n \"revision\": \"fdb418cff9de0070a0171eac6524fa7f\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x128.png\",\n \"revision\": \"0cf5907a0d6a387ee3efbcf7f75f5833\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x192.png\",\n \"revision\": \"cd008a7876521e106a8ce3d879d4bb0d\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x384.png\",\n \"revision\": \"b631fd915cdba817285cfc8388c4c27d\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x48.png\",\n \"revision\": \"8c90175e38a2bacc4f440b2802419658\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x512.png\",\n \"revision\": \"d39afa45bb3e2db10c1e8d2069fe2c02\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x72.png\",\n \"revision\": \"4acb0a9221c010a73817631b71df2373\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon_x96.png\",\n \"revision\": \"6e8aaada301b3a092a0b2a3424108867\"\n },\n {\n \"url\": \"../../src/icon/maskable_icon.png\",\n \"revision\": \"70323e1764adc77e65ec31dd127bf863\"\n },\n {\n \"url\": \"../../src/icon/mstile-144x144.png\",\n \"revision\": \"150037da79b66c6b1626b0dc8ab18386\"\n },\n {\n \"url\": \"../../src/icon/mstile-150x150.png\",\n \"revision\": \"23e0a94aac4c64ac81218346e47f357f\"\n },\n {\n \"url\": \"../../src/icon/mstile-310x150.png\",\n \"revision\": \"fdcc061e92851d4bb2424d44f14a330b\"\n },\n {\n \"url\": \"../../src/icon/mstile-310x310.png\",\n \"revision\": \"219233365848720bfbe14df7ddedbec3\"\n },\n {\n \"url\": \"../../src/icon/mstile-70x70.png\",\n \"revision\": \"0766ea016338863db2d6091d26b0248a\"\n },\n {\n \"url\": \"../../src/icon/resoc.png\",\n \"revision\": \"09ef507b07d8762342ab8bd0edb8f575\"\n },\n {\n \"url\": \"../../src/icon/safari-pinned-tab.svg\",\n \"revision\": \"e41d676b428a9436096866226937e5bb\"\n },\n {\n \"url\": \"../../src/icon/screenshot1.webp\",\n \"revision\": \"208af10afc13a402fbb8fd381f450a8b\"\n },\n {\n \"url\": \"../../src/icon/screenshot2.webp\",\n \"revision\": \"b11308dba17a28992ca8882d779c6485\"\n },\n {\n \"url\": \"../../src/icon/screenshot3.webp\",\n \"revision\": \"0a43570feda9a66c609945ed90756873\"\n },\n {\n \"url\": \"../../src/icon/site.webmanifest\",\n \"revision\": \"c03c9ad94639201a84a10718a7805740\"\n },\n {\n \"url\": \"../../src/images/backgroundnew.gif\",\n \"revision\": \"7adfd4f06d023b4fc04933d951fa020d\"\n },\n {\n \"url\": \"../../src/images/COMING_SOON.svg\",\n \"revision\": \"cc6507cf09df32f597ec080eb0165cb7\"\n },\n {\n \"url\": \"../../src/images/divider.gif\",\n \"revision\": \"8dd0e40f42389ca295f0c9408e28c22c\"\n },\n {\n \"url\": \"../../src/images/logo.svg\",\n \"revision\": \"90d8d81f1c27b6742d4b02be5f18938f\"\n },\n {\n \"url\": \"../../src/images/shade.png\",\n \"revision\": \"63692a2b6c9a9203e8ade8aa43b9f91e\"\n },\n {\n \"url\": \"../../src/images/title.svg\",\n \"revision\": \"6d1249ed36d9269fbe989e78bb633f9f\"\n },\n {\n \"url\": \"../../src/legacyPages/legacyPagesDisplay.json\",\n \"revision\": \"674e904c5dfbdbaeb0ecb0227cf1b04b\"\n },\n {\n \"url\": \"../../src/scripts/index.js\",\n \"revision\": \"fb90d9b1869ddbfab892519a2894a6c3\"\n },\n {\n \"url\": \"../../src/scripts/index.min.js\",\n \"revision\": \"e50b99a60e8dbeaa26cef8bb6348bcab\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.css\",\n \"revision\": \"0b849bedbbfa9f2f79fbda15d99adf60\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.min.css\",\n \"revision\": \"39d86e0381ffc70d7946fb64f7196c35\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.css\",\n \"revision\": \"d7033814406584373d344344725dc8c3\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-grid.rtl.min.css\",\n \"revision\": \"e2a866eadcf7433c4ddee586e8274afb\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.css\",\n \"revision\": \"1955fc0aa4b5b461c6168b8898d1ea88\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.min.css\",\n \"revision\": \"4bd9c7e9da52cb7f2c034cb8254b4439\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.css\",\n \"revision\": \"e02a9453f8b7b01a54ffea46f471b0f3\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-reboot.rtl.min.css\",\n \"revision\": \"ea37e78d14adc3c2b997a37ed6405182\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.css\",\n \"revision\": \"e37f368fb80f834e421346e2714de253\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.min.css\",\n \"revision\": \"c20520043b2fef578f56664502feef29\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.css\",\n \"revision\": \"442d3421b1a94baf36310d693cbe3308\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap-utilities.rtl.min.css\",\n \"revision\": \"09f073ec3e8af42408824792d94e5f8b\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.css\",\n \"revision\": \"0f0f4fb619d0b8187bdea9ee84692b39\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.min.css\",\n \"revision\": \"cd822b7fd22c8a95a68470c795adea69\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.css\",\n \"revision\": \"476379dfafbb63eba2302eac2e79f547\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/css/bootstrap.rtl.min.css\",\n \"revision\": \"54cf0bc79dadd28e7b1eb2df032f7bfb\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.js\",\n \"revision\": \"fe87f14dfe6a44b0d03fb2ae9764a3f9\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.bundle.min.js\",\n \"revision\": \"6baf57f25796c332144ed58a2a0cd9ee\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.js\",\n \"revision\": \"296ea7c80a8730e2a511c9c756a27887\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.esm.min.js\",\n \"revision\": \"37f036058f51ced4d7be7972e81de087\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.js\",\n \"revision\": \"7b140b82d972ce11c804035a2e10575c\"\n },\n {\n \"url\": \"../../src/scripts/libraries/bootstrap/js/bootstrap.min.js\",\n \"revision\": \"f63dfbdcc649f13af4791a90e51f7907\"\n },\n {\n \"url\": \"../../src/scripts/libraries/jquery/jquery.min.js\",\n \"revision\": \"b83db83a1d89113ee03ab730efa48c7a\"\n },\n {\n \"url\": \"../../src/scripts/libraries/showdown/showdown.min.js\",\n \"revision\": \"14517f70ed205ae583be682c9157ebe9\"\n },\n {\n \"url\": \"../../src/style.css\",\n \"revision\": \"9d3c41bf29a97c729cb1bd42f7e2d4a6\"\n },\n {\n \"url\": \"../../src/style.min.css\",\n \"revision\": \"09995713c6259a01dd3bed9f49c27584\"\n }\n], {});\n\n\n\n\nworkbox_routing_registerRoute(/\\.(?:png|jpg|jpeg|webp|ico|svg)$/, new workbox_strategies_CacheFirst({ \"cacheName\":\"images\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 10 })] }), 'GET');\n\n\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision","workbox_routing_registerRoute","workbox_strategies_CacheFirst","cacheName","plugins","workbox_expiration_ExpirationPlugin","maxEntries"],"mappings":"0nBAsBAA,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,uEACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,uFACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,kFACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oEACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,0EACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,yEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,6EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,sEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,qEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,0DACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,4EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,2EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,8EACPC,SAAY,oCAEd,CACED,IAAO,oFACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,wEACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,+EACPC,SAAY,oCAEd,CACED,IAAO,gFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,yFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,wFACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,4BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,kBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,sCACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,6DACPC,SAAY,oCAEd,CACED,IAAO,uDACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,2DACPC,SAAY,oCAEd,CACED,IAAO,+DACPC,SAAY,oCAEd,CACED,IAAO,0DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,8DACPC,SAAY,oCAEd,CACED,IAAO,kEACPC,SAAY,oCAEd,CACED,IAAO,gDACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,oDACPC,SAAY,oCAEd,CACED,IAAO,wDACPC,SAAY,oCAEd,CACED,IAAO,qDACPC,SAAY,oCAEd,CACED,IAAO,yDACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,sDACPC,SAAY,oCAEd,CACED,IAAO,8CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,gBACPC,SAAY,qCAEb,CAAE,GAKLC,EAAAA,cAA8B,mCAAoC,IAAIC,aAA8B,CAAEC,UAAY,SAAUC,QAAS,CAAC,IAAIC,mBAAoC,CAAEC,WAAY,QAAW"} \ No newline at end of file diff --git a/src/serviceWorker/workbox-717fa00d.js b/src/serviceWorker/workbox-717fa00d.js deleted file mode 100644 index 31b2040..0000000 --- a/src/serviceWorker/workbox-717fa00d.js +++ /dev/null @@ -1,2 +0,0 @@ -define(["exports"],(function(t){"use strict";try{self["workbox:core:7.0.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:7.0.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class a{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let a=r&&r.handler;const o=t.method;if(!a&&this.i.has(o)&&(a=this.i.get(o)),!a)return;let c;try{c=a.handle({url:s,request:t,event:e,params:i})}catch(t){c=Promise.reject(t)}const h=r&&r.catchHandler;return c instanceof Promise&&(this.o||h)&&(c=c.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),c}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const a=r.match({url:t,sameOrigin:e,request:s,event:n});if(a)return i=a,(Array.isArray(i)&&0===i.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"==typeof a)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let o;const c=()=>(o||(o=new a,o.addFetchListener(),o.addCacheListener()),o);function h(t,e,n){let a;if("string"==typeof t){const s=new URL(t,location.href);a=new i((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)a=new r(t,e,n);else if("function"==typeof t)a=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=t}return c().registerRoute(a),a}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter((t=>t&&t.length>0)).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t){t.then((()=>{}))}const p=new Set;function y(){return y=Object.assign?Object.assign.bind():function(t){for(var e=1;ee.some((e=>t instanceof e));let m,R;const v=new WeakMap,b=new WeakMap,q=new WeakMap,D=new WeakMap,U=new WeakMap;let x={get(t,e,s){if(t instanceof IDBTransaction){if("done"===e)return b.get(t);if("objectStoreNames"===e)return t.objectStoreNames||q.get(t);if("store"===e)return s.objectStoreNames[1]?void 0:s.objectStore(s.objectStoreNames[0])}return E(t[e])},set:(t,e,s)=>(t[e]=s,!0),has:(t,e)=>t instanceof IDBTransaction&&("done"===e||"store"===e)||e in t};function L(t){return t!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(R||(R=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply(C(this),e),E(v.get(this))}:function(...e){return E(t.apply(C(this),e))}:function(e,...s){const n=t.call(C(this),e,...s);return q.set(n,e.sort?e.sort():[e]),E(n)}}function I(t){return"function"==typeof t?L(t):(t instanceof IDBTransaction&&function(t){if(b.has(t))return;const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("complete",i),t.removeEventListener("error",r),t.removeEventListener("abort",r)},i=()=>{e(),n()},r=()=>{s(t.error||new DOMException("AbortError","AbortError")),n()};t.addEventListener("complete",i),t.addEventListener("error",r),t.addEventListener("abort",r)}));b.set(t,e)}(t),g(t,m||(m=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(t,x):t)}function E(t){if(t instanceof IDBRequest)return function(t){const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("success",i),t.removeEventListener("error",r)},i=()=>{e(E(t.result)),n()},r=()=>{s(t.error),n()};t.addEventListener("success",i),t.addEventListener("error",r)}));return e.then((e=>{e instanceof IDBCursor&&v.set(e,t)})).catch((()=>{})),U.set(e,t),e}(t);if(D.has(t))return D.get(t);const e=I(t);return e!==t&&(D.set(t,e),U.set(e,t)),e}const C=t=>U.get(t);const N=["get","getKey","getAll","getAllKeys","count"],O=["put","add","delete","clear"],B=new Map;function k(t,e){if(!(t instanceof IDBDatabase)||e in t||"string"!=typeof e)return;if(B.get(e))return B.get(e);const s=e.replace(/FromIndex$/,""),n=e!==s,i=O.includes(s);if(!(s in(n?IDBIndex:IDBObjectStore).prototype)||!i&&!N.includes(s))return;const r=async function(t,...e){const r=this.transaction(t,i?"readwrite":"readonly");let a=r.store;return n&&(a=a.index(e.shift())),(await Promise.all([a[s](...e),i&&r.done]))[0]};return B.set(e,r),r}x=(t=>y({},t,{get:(e,s,n)=>k(e,s)||t.get(e,s,n),has:(e,s)=>!!k(e,s)||t.has(e,s)}))(x);try{self["workbox:expiration:7.0.0"]&&_()}catch(t){}const M="cache-entries",T=t=>{const e=new URL(t,location.href);return e.hash="",e.href};class j{constructor(t){this.h=null,this.u=t}l(t){const e=t.createObjectStore(M,{keyPath:"id"});e.createIndex("cacheName","cacheName",{unique:!1}),e.createIndex("timestamp","timestamp",{unique:!1})}p(t){this.l(t),this.u&&function(t,{blocked:e}={}){const s=indexedDB.deleteDatabase(t);e&&s.addEventListener("blocked",(t=>e(t.oldVersion,t))),E(s).then((()=>{}))}(this.u)}async setTimestamp(t,e){const s={url:t=T(t),timestamp:e,cacheName:this.u,id:this.g(t)},n=(await this.getDb()).transaction(M,"readwrite",{durability:"relaxed"});await n.store.put(s),await n.done}async getTimestamp(t){const e=await this.getDb(),s=await e.get(M,this.g(t));return null==s?void 0:s.timestamp}async expireEntries(t,e){const s=await this.getDb();let n=await s.transaction(M).store.index("timestamp").openCursor(null,"prev");const i=[];let r=0;for(;n;){const s=n.value;s.cacheName===this.u&&(t&&s.timestamp=e?i.push(n.value):r++),n=await n.continue()}const a=[];for(const t of i)await s.delete(M,t.id),a.push(t.url);return a}g(t){return this.u+"|"+T(t)}async getDb(){return this.h||(this.h=await function(t,e,{blocked:s,upgrade:n,blocking:i,terminated:r}={}){const a=indexedDB.open(t,e),o=E(a);return n&&a.addEventListener("upgradeneeded",(t=>{n(E(a.result),t.oldVersion,t.newVersion,E(a.transaction),t)})),s&&a.addEventListener("blocked",(t=>s(t.oldVersion,t.newVersion,t))),o.then((t=>{r&&t.addEventListener("close",(()=>r())),i&&t.addEventListener("versionchange",(t=>i(t.oldVersion,t.newVersion,t)))})).catch((()=>{})),o}("workbox-expiration",1,{upgrade:this.p.bind(this)})),this.h}}class W{constructor(t,e={}){this.m=!1,this.R=!1,this.v=e.maxEntries,this.q=e.maxAgeSeconds,this.D=e.matchOptions,this.u=t,this.U=new j(t)}async expireEntries(){if(this.m)return void(this.R=!0);this.m=!0;const t=this.q?Date.now()-1e3*this.q:0,e=await this.U.expireEntries(t,this.v),s=await self.caches.open(this.u);for(const t of e)await s.delete(t,this.D);this.m=!1,this.R&&(this.R=!1,d(this.expireEntries()))}async updateTimestamp(t){await this.U.setTimestamp(t,Date.now())}async isURLExpired(t){if(this.q){const e=await this.U.getTimestamp(t),s=Date.now()-1e3*this.q;return void 0===e||e{this.resolve=t,this.reject=e}))}}try{self["workbox:strategies:7.0.0"]&&_()}catch(t){}function K(t){return"string"==typeof t?new Request(t):t}class A{constructor(t,e){this.L={},Object.assign(this,e),this.event=e.event,this._=t,this.I=new S,this.C=[],this.N=[...t.plugins],this.O=new Map;for(const t of this.N)this.O.set(t,{});this.event.waitUntil(this.I.promise)}async fetch(t){const{event:e}=this;let n=K(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this._.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=K(t);let s;const{cacheName:n,matchOptions:i}=this._,r=await this.getCacheKey(e,"read"),a=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,a);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=K(t);var i;await(i=0,new Promise((t=>setTimeout(t,i))));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(a=r.url,new URL(String(a),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var a;const o=await this.B(e);if(!o)return!1;const{cacheName:c,matchOptions:h}=this._,u=await self.caches.open(c),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=P(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),a=await t.keys(e,r);for(const e of a)if(i===P(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?o.clone():o)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of p)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:c,oldResponse:f,newResponse:o.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.L[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=K(await t({mode:e,request:n,event:this.event,params:this.params}));this.L[s]=n}return this.L[s]}hasCallback(t){for(const e of this._.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this._.plugins)if("function"==typeof e[t]){const s=this.O.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.C.push(t),t}async doneWaiting(){let t;for(;t=this.C.shift();)await t}destroy(){this.I.resolve(null)}async B(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class F{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new A(this,{event:e,request:s,params:n}),r=this.k(i,s,e);return[r,this.M(r,i,s,e)]}async k(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this.T(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async M(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}function H(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:7.0.0"]&&_()}catch(t){}function $(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class G{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class V{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.j.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.j=t}}let J,Q;async function z(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},a=e?e(r):r,o=function(){if(void 0===J){const t=new Response("");if("body"in t)try{new Response(t.body),J=!0}catch(t){J=!1}J=!1}return J}()?i.body:await i.blob();return new Response(o,a)}class X extends F{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.W=!1!==t.fallbackToNetwork,this.plugins.push(X.copyRedirectedCacheableResponsesPlugin)}async T(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.P(t,e):await this.S(t,e))}async S(t,e){let n;const i=e.params||{};if(!this.W)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,a=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&a&&"no-cors"!==t.mode&&(this.K(),await e.cachePut(t,n.clone()))}return n}async P(t,e){this.K();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}K(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==X.copyRedirectedCacheableResponsesPlugin&&(n===X.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(X.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}X.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},X.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await z(t):t};class Y{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.A=new Map,this.F=new Map,this.H=new Map,this._=new X({cacheName:f(t),plugins:[...e,new V({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._}precache(t){this.addToCacheList(t),this.$||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.$=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=$(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.A.has(i)&&this.A.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.A.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.H.has(t)&&this.H.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.H.set(t,n.integrity)}if(this.A.set(i,t),this.F.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return H(t,(async()=>{const e=new G;this.strategy.plugins.push(e);for(const[e,s]of this.A){const n=this.H.get(s),i=this.F.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return H(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.A.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.A}getCachedURLs(){return[...this.A.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.A.get(e.href)}getIntegrityForCacheKey(t){return this.H.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}const Z=()=>(Q||(Q=new Y),Q);class tt extends i{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const a=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(r,e);if(yield a.href,s&&a.pathname.endsWith("/")){const t=new URL(a.href);t.pathname+=s,yield t.href}if(n){const t=new URL(a.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}}),t.strategy)}}t.CacheFirst=class extends F{async T(t,e){let n,i=await e.cacheMatch(t);if(!i)try{i=await e.fetchAndCachePut(t)}catch(t){t instanceof Error&&(n=t)}if(!i)throw new s("no-response",{url:t.url,error:n});return i}},t.ExpirationPlugin=class{constructor(t={}){this.cachedResponseWillBeUsed=async({event:t,request:e,cacheName:s,cachedResponse:n})=>{if(!n)return null;const i=this.G(n),r=this.V(s);d(r.expireEntries());const a=r.updateTimestamp(e.url);if(t)try{t.waitUntil(a)}catch(t){}return i?n:null},this.cacheDidUpdate=async({cacheName:t,request:e})=>{const s=this.V(t);await s.updateTimestamp(e.url),await s.expireEntries()},this.J=t,this.q=t.maxAgeSeconds,this.X=new Map,t.purgeOnQuotaError&&function(t){p.add(t)}((()=>this.deleteCacheAndMetadata()))}V(t){if(t===w())throw new s("expire-custom-caches-only");let e=this.X.get(t);return e||(e=new W(t,this.J),this.X.set(t,e)),e}G(t){if(!this.q)return!0;const e=this.Y(t);if(null===e)return!0;return e>=Date.now()-1e3*this.q}Y(t){if(!t.headers.has("date"))return null;const e=t.headers.get("date"),s=new Date(e).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[t,e]of this.X)await self.caches.delete(t),await e.delete();this.X=new Map}},t.precacheAndRoute=function(t,e){!function(t){Z().precache(t)}(t),function(t){const e=Z();h(new tt(e,t))}(e)},t.registerRoute=h})); -//# sourceMappingURL=workbox-717fa00d.js.map diff --git a/src/serviceWorker/workbox-db952f2a.js b/src/serviceWorker/workbox-db952f2a.js new file mode 100644 index 0000000..9d568fc --- /dev/null +++ b/src/serviceWorker/workbox-db952f2a.js @@ -0,0 +1,2 @@ +define(["exports"],(function(t){"use strict";try{self["workbox:core:7.0.0"]&&_();}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s;};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s;}}try{self["workbox:routing:7.0.0"]&&_();}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s;}setCatchHandler(t){this.catchHandler=n(t);}}class r extends i{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1);}),e,s);}}class a{constructor(){this.t=new Map,this.i=new Map;}get routes(){return this.t;}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s);}));}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t});})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)));}}));}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let a=r&&r.handler;const o=t.method;if(!a&&this.i.has(o)&&(a=this.i.get(o)),!a)return;let c;try{c=a.handle({url:s,request:t,event:e,params:i});}catch(t){c=Promise.reject(t);}const h=r&&r.catchHandler;return c instanceof Promise&&(this.o||h)&&(c=c.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i});}catch(t){t instanceof Error&&(n=t);}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n;}))),c;}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const a=r.match({url:t,sameOrigin:e,request:s,event:n});if(a)return i=a,(Array.isArray(i)&&0===i.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"==typeof a)&&(i=void 0),{route:r,params:i};}return{};}setDefaultHandler(t,e="GET"){this.i.set(e,n(t));}setCatchHandler(t){this.o=n(t);}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t);}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1);}}let o;const c=()=>(o||(o=new a,o.addFetchListener(),o.addCacheListener()),o);function h(t,e,n){let a;if("string"==typeof t){const s=new URL(t,location.href);a=new i((({url:t})=>t.href===s.href),e,n);}else if(t instanceof RegExp)a=new r(t,e,n);else if("function"==typeof t)a=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=t;}return c().registerRoute(a),a;}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter((t=>t&&t.length>0)).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t){t.then((()=>{}));}const p=new Set;function y(){return y=Object.assign?Object.assign.bind():function(t){for(var e=1;ee.some((e=>t instanceof e));let m,R;const v=new WeakMap,b=new WeakMap,q=new WeakMap,D=new WeakMap,U=new WeakMap;let x={get(t,e,s){if(t instanceof IDBTransaction){if("done"===e)return b.get(t);if("objectStoreNames"===e)return t.objectStoreNames||q.get(t);if("store"===e)return s.objectStoreNames[1]?void 0:s.objectStore(s.objectStoreNames[0]);}return E(t[e]);},set:(t,e,s)=>(t[e]=s,!0),has:(t,e)=>t instanceof IDBTransaction&&("done"===e||"store"===e)||e in t};function L(t){return t!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(R||(R=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply(C(this),e),E(v.get(this));}:function(...e){return E(t.apply(C(this),e));}:function(e,...s){const n=t.call(C(this),e,...s);return q.set(n,e.sort?e.sort():[e]),E(n);};}function I(t){return"function"==typeof t?L(t):(t instanceof IDBTransaction&&function(t){if(b.has(t))return;const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("complete",i),t.removeEventListener("error",r),t.removeEventListener("abort",r);},i=()=>{e(),n();},r=()=>{s(t.error||new DOMException("AbortError","AbortError")),n();};t.addEventListener("complete",i),t.addEventListener("error",r),t.addEventListener("abort",r);}));b.set(t,e);}(t),g(t,m||(m=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(t,x):t);}function E(t){if(t instanceof IDBRequest)return function(t){const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("success",i),t.removeEventListener("error",r);},i=()=>{e(E(t.result)),n();},r=()=>{s(t.error),n();};t.addEventListener("success",i),t.addEventListener("error",r);}));return e.then((e=>{e instanceof IDBCursor&&v.set(e,t);})).catch((()=>{})),U.set(e,t),e;}(t);if(D.has(t))return D.get(t);const e=I(t);return e!==t&&(D.set(t,e),U.set(e,t)),e;}const C=t=>U.get(t);const N=["get","getKey","getAll","getAllKeys","count"],O=["put","add","delete","clear"],B=new Map;function k(t,e){if(!(t instanceof IDBDatabase)||e in t||"string"!=typeof e)return;if(B.get(e))return B.get(e);const s=e.replace(/FromIndex$/,""),n=e!==s,i=O.includes(s);if(!(s in(n?IDBIndex:IDBObjectStore).prototype)||!i&&!N.includes(s))return;const r=async function(t,...e){const r=this.transaction(t,i?"readwrite":"readonly");let a=r.store;return n&&(a=a.index(e.shift())),(await Promise.all([a[s](...e),i&&r.done]))[0];};return B.set(e,r),r;}x=(t=>y({},t,{get:(e,s,n)=>k(e,s)||t.get(e,s,n),has:(e,s)=>!!k(e,s)||t.has(e,s)}))(x);try{self["workbox:expiration:7.0.0"]&&_();}catch(t){}const M="cache-entries",T=t=>{const e=new URL(t,location.href);return e.hash="",e.href;};class j{constructor(t){this.h=null,this.u=t;}l(t){const e=t.createObjectStore(M,{keyPath:"id"});e.createIndex("cacheName","cacheName",{unique:!1}),e.createIndex("timestamp","timestamp",{unique:!1});}p(t){this.l(t),this.u&&function(t,{blocked:e}={}){const s=indexedDB.deleteDatabase(t);e&&s.addEventListener("blocked",(t=>e(t.oldVersion,t))),E(s).then((()=>{}));}(this.u);}async setTimestamp(t,e){const s={url:t=T(t),timestamp:e,cacheName:this.u,id:this.m(t)},n=(await this.getDb()).transaction(M,"readwrite",{durability:"relaxed"});await n.store.put(s),await n.done;}async getTimestamp(t){const e=await this.getDb(),s=await e.get(M,this.m(t));return null==s?void 0:s.timestamp;}async expireEntries(t,e){const s=await this.getDb();let n=await s.transaction(M).store.index("timestamp").openCursor(null,"prev");const i=[];let r=0;for(;n;){const s=n.value;s.cacheName===this.u&&(t&&s.timestamp=e?i.push(n.value):r++),n=await n.continue();}const a=[];for(const t of i)await s.delete(M,t.id),a.push(t.url);return a;}m(t){return this.u+"|"+T(t);}async getDb(){return this.h||(this.h=await function(t,e,{blocked:s,upgrade:n,blocking:i,terminated:r}={}){const a=indexedDB.open(t,e),o=E(a);return n&&a.addEventListener("upgradeneeded",(t=>{n(E(a.result),t.oldVersion,t.newVersion,E(a.transaction),t);})),s&&a.addEventListener("blocked",(t=>s(t.oldVersion,t.newVersion,t))),o.then((t=>{r&&t.addEventListener("close",(()=>r())),i&&t.addEventListener("versionchange",(t=>i(t.oldVersion,t.newVersion,t)));})).catch((()=>{})),o;}("workbox-expiration",1,{upgrade:this.p.bind(this)})),this.h;}}class W{constructor(t,e={}){this.R=!1,this.v=!1,this.q=e.maxEntries,this.D=e.maxAgeSeconds,this.U=e.matchOptions,this.u=t,this.L=new j(t);}async expireEntries(){if(this.R)return void(this.v=!0);this.R=!0;const t=this.D?Date.now()-1e3*this.D:0,e=await this.L.expireEntries(t,this.q),s=await self.caches.open(this.u);for(const t of e)await s.delete(t,this.U);this.R=!1,this.v&&(this.v=!1,d(this.expireEntries()));}async updateTimestamp(t){await this.L.setTimestamp(t,Date.now());}async isURLExpired(t){if(this.D){const e=await this.L.getTimestamp(t),s=Date.now()-1e3*this.D;return void 0===e||e{this.resolve=t,this.reject=e;}));}}try{self["workbox:strategies:7.0.0"]&&_();}catch(t){}function K(t){return"string"==typeof t?new Request(t):t;}class A{constructor(t,e){this._={},Object.assign(this,e),this.event=e.event,this.I=t,this.C=new S,this.N=[],this.O=[...t.plugins],this.B=new Map;for(const t of this.O)this.B.set(t,{});this.event.waitUntil(this.C.promise);}async fetch(t){const{event:e}=this;let n=K(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t;}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e});}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message});}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.I.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t;}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t;}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e;}async cacheMatch(t){const e=K(t);let s;const{cacheName:n,matchOptions:i}=this.I,r=await this.getCacheKey(e,"read"),a=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,a);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s;}async cachePut(t,e){const n=K(t);var i;await(i=0,new Promise((t=>setTimeout(t,i))));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(a=r.url,new URL(String(a),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var a;const o=await this.k(e);if(!o)return!1;const{cacheName:c,matchOptions:h}=this.I,u=await self.caches.open(c),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=P(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),a=await t.keys(e,r);for(const e of a)if(i===P(e.url,s))return t.match(e,n);}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?o.clone():o);}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of p)await t();}(),t;}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:c,oldResponse:f,newResponse:o.clone(),request:r,event:this.event});return!0;}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this._[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=K(await t({mode:e,request:n,event:this.event,params:this.params}));this._[s]=n;}return this._[s];}hasCallback(t){for(const e of this.I.plugins)if(t in e)return!0;return!1;}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e);}*iterateCallbacks(t){for(const e of this.I.plugins)if("function"==typeof e[t]){const s=this.B.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i);};yield n;}}waitUntil(t){return this.N.push(t),t;}async doneWaiting(){let t;for(;t=this.N.shift();)await t;}destroy(){this.C.resolve(null);}async k(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e;}}class F{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions;}handle(t){const[e]=this.handleAll(t);return e;}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new A(this,{event:e,request:s,params:n}),r=this.M(i,s,e);return[r,this.T(r,i,s,e)];}async M(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this.j(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url});}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s;}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i;}async T(t,e,s,n){let i,r;try{i=await t;}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting();}catch(t){t instanceof Error&&(r=t);}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r;}}function H(t,e){const s=e();return t.waitUntil(s),s;}try{self["workbox:precaching:7.0.0"]&&_();}catch(t){}function $(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href};}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href};}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href};}class G{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t);},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t);}return s;};}}class V{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.W.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t;},this.W=t;}}let J,Q;async function z(t,e){let n=null;if(t.url){n=new URL(t.url).origin;}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},a=e?e(r):r,o=function(){if(void 0===J){const t=new Response("");if("body"in t)try{new Response(t.body),J=!0;}catch(t){J=!1;}J=!1;}return J;}()?i.body:await i.blob();return new Response(o,a);}class X extends F{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.P=!1!==t.fallbackToNetwork,this.plugins.push(X.copyRedirectedCacheableResponsesPlugin);}async j(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.S(t,e):await this.K(t,e));}async K(t,e){let n;const i=e.params||{};if(!this.P)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,a=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&a&&"no-cors"!==t.mode&&(this.A(),await e.cachePut(t,n.clone()));}return n;}async S(t,e){this.A();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n;}A(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==X.copyRedirectedCacheableResponsesPlugin&&(n===X.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(X.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1);}}X.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},X.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await z(t):t};class Y{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.F=new Map,this.H=new Map,this.$=new Map,this.I=new X({cacheName:f(t),plugins:[...e,new V({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this);}get strategy(){return this.I;}precache(t){this.addToCacheList(t),this.G||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.G=!0);}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=$(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.F.has(i)&&this.F.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.F.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.$.has(t)&&this.$.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.$.set(t,n.integrity);}if(this.F.set(i,t),this.H.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t);}}}install(t){return H(t,(async()=>{const e=new G;this.strategy.plugins.push(e);for(const[e,s]of this.F){const n=this.$.get(s),i=this.H.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}));}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n};}));}activate(t){return H(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.F.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n};}));}getURLsToCacheKeys(){return this.F;}getCachedURLs(){return[...this.F.keys()];}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.F.get(e.href);}getIntegrityForCacheKey(t){return this.$.get(t);}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s);}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s));}}const Z=()=>(Q||(Q=new Y),Q);class tt extends i{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const a=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t;}(r,e);if(yield a.href,s&&a.pathname.endsWith("/")){const t=new URL(a.href);t.pathname+=s,yield t.href;}if(n){const t=new URL(a.href);t.pathname+=".html",yield t.href;}if(i){const t=i({url:r});for(const e of t)yield e.href;}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)};}}}),t.strategy);}}t.CacheFirst=class extends F{async j(t,e){let n,i=await e.cacheMatch(t);if(!i)try{i=await e.fetchAndCachePut(t);}catch(t){t instanceof Error&&(n=t);}if(!i)throw new s("no-response",{url:t.url,error:n});return i;}},t.ExpirationPlugin=class{constructor(t={}){this.cachedResponseWillBeUsed=async({event:t,request:e,cacheName:s,cachedResponse:n})=>{if(!n)return null;const i=this.V(n),r=this.J(s);d(r.expireEntries());const a=r.updateTimestamp(e.url);if(t)try{t.waitUntil(a);}catch(t){}return i?n:null;},this.cacheDidUpdate=async({cacheName:t,request:e})=>{const s=this.J(t);await s.updateTimestamp(e.url),await s.expireEntries();},this.X=t,this.D=t.maxAgeSeconds,this.Y=new Map,t.purgeOnQuotaError&&function(t){p.add(t);}((()=>this.deleteCacheAndMetadata()));}J(t){if(t===w())throw new s("expire-custom-caches-only");let e=this.Y.get(t);return e||(e=new W(t,this.X),this.Y.set(t,e)),e;}V(t){if(!this.D)return!0;const e=this.Z(t);if(null===e)return!0;return e>=Date.now()-1e3*this.D;}Z(t){if(!t.headers.has("date"))return null;const e=t.headers.get("date"),s=new Date(e).getTime();return isNaN(s)?null:s;}async deleteCacheAndMetadata(){for(const[t,e]of this.Y)await self.caches.delete(t),await e.delete();this.Y=new Map;}},t.precacheAndRoute=function(t,e){!function(t){Z().precache(t);}(t),function(t){const e=Z();h(new tt(e,t));}(e);},t.registerRoute=h;})); +//# sourceMappingURL=workbox-db952f2a.js.map diff --git a/src/serviceWorker/workbox-717fa00d.js.map b/src/serviceWorker/workbox-db952f2a.js.map similarity index 84% rename from src/serviceWorker/workbox-717fa00d.js.map rename to src/serviceWorker/workbox-db952f2a.js.map index edde625..19775b0 100644 --- a/src/serviceWorker/workbox-717fa00d.js.map +++ b/src/serviceWorker/workbox-db952f2a.js.map @@ -1 +1 @@ -{"version":3,"file":"workbox-717fa00d.js","sources":["node_modules/workbox-core/_version.js","node_modules/workbox-core/_private/logger.js","node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-routing/_version.js","node_modules/workbox-routing/utils/constants.js","node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-routing/Route.js","node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-routing/Router.js","node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-routing/registerRoute.js","node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-core/_private/dontWaitFor.js","node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/idb/build/wrap-idb-value.js","node_modules/idb/build/index.js","node_modules/workbox-expiration/_version.js","node_modules/workbox-expiration/models/CacheTimestampsModel.js","node_modules/workbox-expiration/CacheExpiration.js","node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-strategies/_version.js","node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-core/_private/timeout.js","node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-strategies/Strategy.js","node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-precaching/_version.js","node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-core/copyResponse.js","node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-strategies/CacheFirst.js","node_modules/workbox-expiration/ExpirationPlugin.js","node_modules/workbox-core/registerQuotaErrorCallback.js","node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-precaching/precache.js","node_modules/workbox-precaching/addRoute.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production'\n ? null\n : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in globalThis)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null, // No colored prefix on groupEnd\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n })());\nexport { logger };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = process.env.NODE_ENV === 'production' ? fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * {@link workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * @memberof workbox-routing\n * @extends workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * {@link workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a `FetchEvent` using one or more\n * {@link workbox-routing.Route}, responding with a `Response` if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n void requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event, }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise &&\n (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event, }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do.\n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\n Object.keys(matchResult).length === 0) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call {@link workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {workbox-routing.Route} The generated `Route`.\n *\n * @memberof workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http')\n ? captureUrl.pathname\n : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (url.pathname === captureUrl.pathname &&\n url.origin !== captureUrl.origin) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url.toString()}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A helper function that prevents a promise from being flagged as unused.\n *\n * @private\n **/\nexport function dontWaitFor(promise) {\n // Effective no-op.\n void promise.then(() => { });\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:expiration:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { openDB, deleteDB } from 'idb';\nimport '../_version.js';\nconst DB_NAME = 'workbox-expiration';\nconst CACHE_OBJECT_STORE = 'cache-entries';\nconst normalizeURL = (unNormalizedUrl) => {\n const url = new URL(unNormalizedUrl, location.href);\n url.hash = '';\n return url.href;\n};\n/**\n * Returns the timestamp model.\n *\n * @private\n */\nclass CacheTimestampsModel {\n /**\n *\n * @param {string} cacheName\n *\n * @private\n */\n constructor(cacheName) {\n this._db = null;\n this._cacheName = cacheName;\n }\n /**\n * Performs an upgrade of indexedDB.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDb(db) {\n // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we\n // have to use the `id` keyPath here and create our own values (a\n // concatenation of `url + cacheName`) instead of simply using\n // `keyPath: ['url', 'cacheName']`, which is supported in other browsers.\n const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' });\n // TODO(philipwalton): once we don't have to support EdgeHTML, we can\n // create a single index with the keyPath `['cacheName', 'timestamp']`\n // instead of doing both these indexes.\n objStore.createIndex('cacheName', 'cacheName', { unique: false });\n objStore.createIndex('timestamp', 'timestamp', { unique: false });\n }\n /**\n * Performs an upgrade of indexedDB and deletes deprecated DBs.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDbAndDeleteOldDbs(db) {\n this._upgradeDb(db);\n if (this._cacheName) {\n void deleteDB(this._cacheName);\n }\n }\n /**\n * @param {string} url\n * @param {number} timestamp\n *\n * @private\n */\n async setTimestamp(url, timestamp) {\n url = normalizeURL(url);\n const entry = {\n url,\n timestamp,\n cacheName: this._cacheName,\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n id: this._getId(url),\n };\n const db = await this.getDb();\n const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', {\n durability: 'relaxed',\n });\n await tx.store.put(entry);\n await tx.done;\n }\n /**\n * Returns the timestamp stored for a given URL.\n *\n * @param {string} url\n * @return {number | undefined}\n *\n * @private\n */\n async getTimestamp(url) {\n const db = await this.getDb();\n const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));\n return entry === null || entry === void 0 ? void 0 : entry.timestamp;\n }\n /**\n * Iterates through all the entries in the object store (from newest to\n * oldest) and removes entries once either `maxCount` is reached or the\n * entry's timestamp is less than `minTimestamp`.\n *\n * @param {number} minTimestamp\n * @param {number} maxCount\n * @return {Array}\n *\n * @private\n */\n async expireEntries(minTimestamp, maxCount) {\n const db = await this.getDb();\n let cursor = await db\n .transaction(CACHE_OBJECT_STORE)\n .store.index('timestamp')\n .openCursor(null, 'prev');\n const entriesToDelete = [];\n let entriesNotDeletedCount = 0;\n while (cursor) {\n const result = cursor.value;\n // TODO(philipwalton): once we can use a multi-key index, we\n // won't have to check `cacheName` here.\n if (result.cacheName === this._cacheName) {\n // Delete an entry if it's older than the max age or\n // if we already have the max number allowed.\n if ((minTimestamp && result.timestamp < minTimestamp) ||\n (maxCount && entriesNotDeletedCount >= maxCount)) {\n // TODO(philipwalton): we should be able to delete the\n // entry right here, but doing so causes an iteration\n // bug in Safari stable (fixed in TP). Instead we can\n // store the keys of the entries to delete, and then\n // delete the separate transactions.\n // https://github.com/GoogleChrome/workbox/issues/1978\n // cursor.delete();\n // We only need to return the URL, not the whole entry.\n entriesToDelete.push(cursor.value);\n }\n else {\n entriesNotDeletedCount++;\n }\n }\n cursor = await cursor.continue();\n }\n // TODO(philipwalton): once the Safari bug in the following issue is fixed,\n // we should be able to remove this loop and do the entry deletion in the\n // cursor loop above:\n // https://github.com/GoogleChrome/workbox/issues/1978\n const urlsDeleted = [];\n for (const entry of entriesToDelete) {\n await db.delete(CACHE_OBJECT_STORE, entry.id);\n urlsDeleted.push(entry.url);\n }\n return urlsDeleted;\n }\n /**\n * Takes a URL and returns an ID that will be unique in the object store.\n *\n * @param {string} url\n * @return {string}\n *\n * @private\n */\n _getId(url) {\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n return this._cacheName + '|' + normalizeURL(url);\n }\n /**\n * Returns an open connection to the database.\n *\n * @private\n */\n async getDb() {\n if (!this._db) {\n this._db = await openDB(DB_NAME, 1, {\n upgrade: this._upgradeDbAndDeleteOldDbs.bind(this),\n });\n }\n return this._db;\n }\n}\nexport { CacheTimestampsModel };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheTimestampsModel } from './models/CacheTimestampsModel.js';\nimport './_version.js';\n/**\n * The `CacheExpiration` class allows you define an expiration and / or\n * limit on the number of responses stored in a\n * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).\n *\n * @memberof workbox-expiration\n */\nclass CacheExpiration {\n /**\n * To construct a new CacheExpiration instance you must provide at least\n * one of the `config` properties.\n *\n * @param {string} cacheName Name of the cache to apply restrictions to.\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n */\n constructor(cacheName, config = {}) {\n this._isRunning = false;\n this._rerunRequested = false;\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'cacheName',\n });\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._matchOptions = config.matchOptions;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n /**\n * Expires entries for the given cache and given criteria.\n */\n async expireEntries() {\n if (this._isRunning) {\n this._rerunRequested = true;\n return;\n }\n this._isRunning = true;\n const minTimestamp = this._maxAgeSeconds\n ? Date.now() - this._maxAgeSeconds * 1000\n : 0;\n const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n // Delete URLs from the cache\n const cache = await self.caches.open(this._cacheName);\n for (const url of urlsExpired) {\n await cache.delete(url, this._matchOptions);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (urlsExpired.length > 0) {\n logger.groupCollapsed(`Expired ${urlsExpired.length} ` +\n `${urlsExpired.length === 1 ? 'entry' : 'entries'} and removed ` +\n `${urlsExpired.length === 1 ? 'it' : 'them'} from the ` +\n `'${this._cacheName}' cache.`);\n logger.log(`Expired the following ${urlsExpired.length === 1 ? 'URL' : 'URLs'}:`);\n urlsExpired.forEach((url) => logger.log(` ${url}`));\n logger.groupEnd();\n }\n else {\n logger.debug(`Cache expiration ran and found no entries to remove.`);\n }\n }\n this._isRunning = false;\n if (this._rerunRequested) {\n this._rerunRequested = false;\n dontWaitFor(this.expireEntries());\n }\n }\n /**\n * Update the timestamp for the given URL. This ensures the when\n * removing entries based on maximum entries, most recently used\n * is accurate or when expiring, the timestamp is up-to-date.\n *\n * @param {string} url\n */\n async updateTimestamp(url) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(url, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'updateTimestamp',\n paramName: 'url',\n });\n }\n await this._timestampModel.setTimestamp(url, Date.now());\n }\n /**\n * Can be used to check if a URL has expired or not before it's used.\n *\n * This requires a look up from IndexedDB, so can be slow.\n *\n * Note: This method will not remove the cached entry, call\n * `expireEntries()` to remove indexedDB and Cache entries.\n *\n * @param {string} url\n * @return {boolean}\n */\n async isURLExpired(url) {\n if (!this._maxAgeSeconds) {\n if (process.env.NODE_ENV !== 'production') {\n throw new WorkboxError(`expired-test-without-max-age`, {\n methodName: 'isURLExpired',\n paramName: 'maxAgeSeconds',\n });\n }\n return false;\n }\n else {\n const timestamp = await this._timestampModel.getTimestamp(url);\n const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;\n return timestamp !== undefined ? timestamp < expireOlderThan : true;\n }\n }\n /**\n * Removes the IndexedDB object store used to keep track of cache expiration\n * metadata.\n */\n async delete() {\n // Make sure we don't attempt another rerun if we're called in the middle of\n // a cache expiration.\n this._rerunRequested = false;\n await this._timestampModel.expireEntries(Infinity); // Expires all.\n }\n}\nexport { CacheExpiration };\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array} ignoreParams\n * @return {Promise}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return typeof input === 'string' ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * {@link workbox-strategies.Strategy~handle} or\n * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params] The return value from the\n * {@link workbox-routing~matchCallback} (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * {@link workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = (await event.preloadResponse);\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail')\n ? request.clone()\n : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\n }\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cachedResponseWillByUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName });\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse =\n (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback\n ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions)\n : null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof Error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise}\n */\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n // params has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * {@link workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = Object.assign(Object.assign({}, param), { state });\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * {@link workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * {@link workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while ((promise = this._extendLifetimePromises.shift())) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache =\n (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * {@link workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to {@link workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of `[response, done]` promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string'\n ? new Request(options.request)\n : options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the {@link workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof workbox-strategies.Strategy\n */\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n if (state &&\n state.originalRequest &&\n state.originalRequest instanceof Request) {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n // Params is type any, can't change right now.\n /* eslint-disable */\n const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) ||\n this._precacheController.getCacheKeyForURL(request.url);\n /* eslint-enable */\n return cacheKey\n ? new Request(cacheKey, { headers: request.headers })\n : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream()\n ? clonedResponse.body\n : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A {@link workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * {@link workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork =\n options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n // If this is an `install` event for an entry that isn't already cached,\n // then populate the cache.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n // Getting here means something went wrong. An entry that should have been\n // precached wasn't found in the cache.\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response;\n const params = (handler.params || {});\n // Fall back to the network if we're configured to do so.\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n // Do not add integrity if the original request is no-cors\n // See https://github.com/GoogleChrome/workbox/issues/3096\n response = await handler.fetch(new Request(request, {\n integrity: request.mode !== 'no-cors'\n ? integrityInRequest || integrityInManifest\n : undefined,\n }));\n // It's only \"safe\" to repair the cache if we're using SRI to guarantee\n // that the response matches the precache manifest's expectations,\n // and there's either a) no integrity property in the incoming request\n // or b) there is an integrity, and it matches the precache manifest.\n // See https://github.com/GoogleChrome/workbox/issues/2858\n // Also if the original request users no-cors we don't use integrity.\n // See https://github.com/GoogleChrome/workbox/issues/3096\n if (integrityInManifest &&\n noIntegrityConflict &&\n request.mode !== 'no-cors') {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (process.env.NODE_ENV !== 'production') {\n if (wasCached) {\n logger.log(`A response for ${getFriendlyURL(request.url)} ` +\n `was used to \"repair\" the precache.`);\n }\n }\n }\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read'));\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n },\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n },\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true, } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n install(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n activate(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * @param {string} url A cache key whose SRI you want to look up.\n * @return {string} The subresource integrity associated with the cache key,\n * or undefined if it's not set.\n */\n getIntegrityForCacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = Object.assign({ cacheKey }, options.params);\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of {@link workbox-routing.Route} that takes a\n * {@link workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof workbox-precaching\n * @extends workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request, }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = precacheController.getIntegrityForCacheKey(cacheKey);\n return { cacheKey, integrity };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-first-falling-back-to-network)\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheFirst extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await handler.cacheMatch(request);\n let error = undefined;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will respond with a network request.`);\n }\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { CacheFirst };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { registerQuotaErrorCallback } from 'workbox-core/registerQuotaErrorCallback.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheExpiration } from './CacheExpiration.js';\nimport './_version.js';\n/**\n * This plugin can be used in a `workbox-strategy` to regularly enforce a\n * limit on the age and / or the number of cached requests.\n *\n * It can only be used with `workbox-strategy` instances that have a\n * [custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).\n * In other words, it can't be used to expire entries in strategy that uses the\n * default runtime cache name.\n *\n * Whenever a cached response is used or updated, this plugin will look\n * at the associated cache and remove any old or extra responses.\n *\n * When using `maxAgeSeconds`, responses may be used *once* after expiring\n * because the expiration clean up will not have occurred until *after* the\n * cached response has been used. If the response has a \"Date\" header, then\n * a light weight expiration check is performed and the response will not be\n * used immediately.\n *\n * When using `maxEntries`, the entry least-recently requested will be removed\n * from the cache first.\n *\n * @memberof workbox-expiration\n */\nclass ExpirationPlugin {\n /**\n * @param {ExpirationPluginOptions} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to\n * automatic deletion if the available storage quota has been exceeded.\n */\n constructor(config = {}) {\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when a `Response` is about to be returned\n * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to\n * the handler. It allows the `Response` to be inspected for freshness and\n * prevents it from being used if the `Response`'s `Date` header value is\n * older than the configured `maxAgeSeconds`.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache the response is in.\n * @param {Response} options.cachedResponse The `Response` object that's been\n * read from a cache and whose freshness should be checked.\n * @return {Response} Either the `cachedResponse`, if it's\n * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse, }) => {\n if (!cachedResponse) {\n return null;\n }\n const isFresh = this._isResponseDateFresh(cachedResponse);\n // Expire entries to ensure that even if the expiration date has\n // expired, it'll only be used once.\n const cacheExpiration = this._getCacheExpiration(cacheName);\n dontWaitFor(cacheExpiration.expireEntries());\n // Update the metadata for the request URL to the current timestamp,\n // but don't `await` it as we don't want to block the response.\n const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);\n if (event) {\n try {\n event.waitUntil(updateTimestampDone);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n // The event may not be a fetch event; only log the URL if it is.\n if ('request' in event) {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache entry for ` +\n `'${getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n }\n return isFresh ? cachedResponse : null;\n };\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when an entry is added to a cache.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache that was updated.\n * @param {string} options.request The Request for the cached entry.\n *\n * @private\n */\n this.cacheDidUpdate = async ({ cacheName, request, }) => {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName',\n });\n assert.isInstance(request, Request, {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request',\n });\n }\n const cacheExpiration = this._getCacheExpiration(cacheName);\n await cacheExpiration.updateTimestamp(request.url);\n await cacheExpiration.expireEntries();\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._config = config;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheExpirations = new Map();\n if (config.purgeOnQuotaError) {\n registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());\n }\n }\n /**\n * A simple helper method to return a CacheExpiration instance for a given\n * cache name.\n *\n * @param {string} cacheName\n * @return {CacheExpiration}\n *\n * @private\n */\n _getCacheExpiration(cacheName) {\n if (cacheName === cacheNames.getRuntimeName()) {\n throw new WorkboxError('expire-custom-caches-only');\n }\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n /**\n * @param {Response} cachedResponse\n * @return {boolean}\n *\n * @private\n */\n _isResponseDateFresh(cachedResponse) {\n if (!this._maxAgeSeconds) {\n // We aren't expiring by age, so return true, it's fresh\n return true;\n }\n // Check if the 'date' header will suffice a quick expiration check.\n // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for\n // discussion.\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n // Unable to parse date, so assume it's fresh.\n return true;\n }\n // If we have a valid headerTime, then our response is fresh iff the\n // headerTime plus maxAgeSeconds is greater than the current time.\n const now = Date.now();\n return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;\n }\n /**\n * This method will extract the data header and parse it into a useful\n * value.\n *\n * @param {Response} cachedResponse\n * @return {number|null}\n *\n * @private\n */\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has('date')) {\n return null;\n }\n const dateHeader = cachedResponse.headers.get('date');\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n // If the Date header was invalid for some reason, parsedDate.getTime()\n // will return NaN.\n if (isNaN(headerTime)) {\n return null;\n }\n return headerTime;\n }\n /**\n * This is a helper method that performs two operations:\n *\n * - Deletes *all* the underlying Cache instances associated with this plugin\n * instance, by calling caches.delete() on your behalf.\n * - Deletes the metadata from IndexedDB used to keep track of expiration\n * details for each Cache instance.\n *\n * When using cache expiration, calling this method is preferable to calling\n * `caches.delete()` directly, since this will ensure that the IndexedDB\n * metadata is also cleanly removed and open IndexedDB instances are deleted.\n *\n * Note that if you're *not* using cache expiration for a given cache, calling\n * `caches.delete()` and passing in the cache's name should be sufficient.\n * There is no Workbox-specific method needed for cleanup in that case.\n */\n async deleteCacheAndMetadata() {\n // Do this one at a time instead of all at once via `Promise.all()` to\n // reduce the chance of inconsistency if a promise rejects.\n for (const [cacheName, cacheExpiration] of this._cacheExpirations) {\n await self.caches.delete(cacheName);\n await cacheExpiration.delete();\n }\n // Reset this._cacheExpirations to its initial state.\n this._cacheExpirations = new Map();\n }\n}\nexport { ExpirationPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from './_private/logger.js';\nimport { assert } from './_private/assert.js';\nimport { quotaErrorCallbacks } from './models/quotaErrorCallbacks.js';\nimport './_version.js';\n/**\n * Adds a function to the set of quotaErrorCallbacks that will be executed if\n * there's a quota error.\n *\n * @param {Function} callback\n * @memberof workbox-core\n */\n// Can't change Function type\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction registerQuotaErrorCallback(callback) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(callback, 'function', {\n moduleName: 'workbox-core',\n funcName: 'register',\n paramName: 'callback',\n });\n }\n quotaErrorCallbacks.add(callback);\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered a callback to respond to quota errors.', callback);\n }\n}\nexport { registerQuotaErrorCallback };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * {@link workbox-precaching.precache} and\n * {@link workbox-precaching.addRoute} in a single call.\n *\n * @param {Array} entries Array of entries to precache.\n * @param {Object} [options] See the\n * {@link workbox-precaching.PrecacheRoute} options.\n *\n * @memberof workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * {@link workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * {@link workbox-precaching.precacheAndRoute}.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n *\n * @memberof workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute}\n * options.\n *\n * @memberof workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","Object","keys","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","getOrCreateDefaultRouter","capture","captureUrl","matchCallback","RegExp","moduleName","funcName","paramName","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","userCacheName","dontWaitFor","promise","quotaErrorCallbacks","Set","instanceOfAny","object","constructors","some","c","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","target","prop","receiver","IDBTransaction","objectStoreNames","objectStore","wrap","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","apply","unwrap","storeNames","tx","call","sort","transformCachableValue","done","resolve","unlisten","removeEventListener","complete","error","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","Proxy","IDBRequest","success","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","replace","useIndex","isWrite","storeName","store","shift","oldTraps","_extends","callback","CACHE_OBJECT_STORE","normalizeURL","unNormalizedUrl","hash","CacheTimestampsModel","_db","_cacheName","_upgradeDb","db","objStore","createObjectStore","keyPath","createIndex","unique","_upgradeDbAndDeleteOldDbs","blocked","indexedDB","deleteDatabase","oldVersion","deleteDB","timestamp","id","_getId","getDb","durability","put","minTimestamp","maxCount","cursor","openCursor","entriesToDelete","entriesNotDeletedCount","urlsDeleted","delete","version","upgrade","blocking","terminated","open","openPromise","newVersion","openDB","bind","CacheExpiration","config","_isRunning","_rerunRequested","_maxEntries","maxEntries","_maxAgeSeconds","maxAgeSeconds","_matchOptions","matchOptions","_timestampModel","Date","now","urlsExpired","expireEntries","cache","caches","setTimestamp","getTimestamp","expireOlderThan","Infinity","stripParams","fullURL","ignoreParams","strippedURL","param","searchParams","Deferred","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","mode","FetchEvent","preloadResponse","possiblePreloadResponse","originalRequest","hasCallback","clone","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetch","fetchOptions","response","runCallbacks","responseClone","cachePut","key","cachedResponse","effectiveRequest","getCacheKey","multiMatchOptions","ms","setTimeout","String","responseToCache","_ensureResponseSafeToCache","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheKey","cacheMatchIgnoreParams","executeQuotaErrorCallbacks","newResponse","state","statefulCallback","statefulParam","destroy","pluginsUsed","status","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","doneWaiting","waitUntilError","asyncFn","returnPromise","createCacheKey","urlObject","revision","cacheKeyURL","originalURL","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","cachedResponseWillBeUsed","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","modifier","clonedResponse","responseInit","Headers","statusText","modifiedResponseInit","body","testResponse","Response","canConstructResponseFromBodyStream","blob","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","cacheMatch","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","urlWithoutIgnoredParams","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","fetchAndCachePut","isFresh","_isResponseDateFresh","cacheExpiration","_getCacheExpiration","updateTimestampDone","updateTimestamp","cacheDidUpdate","_config","_cacheExpirations","purgeOnQuotaError","add","registerQuotaErrorCallback","deleteCacheAndMetadata","dateHeaderTimestamp","_getDateHeaderTimestamp","dateHeader","headerTime","getTime","isNaN","addRoute"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"workbox-db952f2a.js","sources":["node_modules/workbox-core/_version.js","node_modules/workbox-core/_private/logger.js","node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-routing/_version.js","node_modules/workbox-routing/utils/constants.js","node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-routing/Route.js","node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-routing/Router.js","node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-routing/registerRoute.js","node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-core/_private/dontWaitFor.js","node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/idb/build/wrap-idb-value.js","node_modules/idb/build/index.js","node_modules/workbox-expiration/_version.js","node_modules/workbox-expiration/models/CacheTimestampsModel.js","node_modules/workbox-expiration/CacheExpiration.js","node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-strategies/_version.js","node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-core/_private/timeout.js","node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-strategies/Strategy.js","node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-precaching/_version.js","node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-core/copyResponse.js","node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-strategies/CacheFirst.js","node_modules/workbox-expiration/ExpirationPlugin.js","node_modules/workbox-core/registerQuotaErrorCallback.js","node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-precaching/precache.js","node_modules/workbox-precaching/addRoute.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production'\n ? null\n : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in globalThis)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null, // No colored prefix on groupEnd\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n })());\nexport { logger };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = process.env.NODE_ENV === 'production' ? fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * {@link workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * @memberof workbox-routing\n * @extends workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * {@link workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a `FetchEvent` using one or more\n * {@link workbox-routing.Route}, responding with a `Response` if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n void requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event, }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise &&\n (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event, }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do.\n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\n Object.keys(matchResult).length === 0) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call {@link workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {workbox-routing.Route} The generated `Route`.\n *\n * @memberof workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http')\n ? captureUrl.pathname\n : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (url.pathname === captureUrl.pathname &&\n url.origin !== captureUrl.origin) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url.toString()}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A helper function that prevents a promise from being flagged as unused.\n *\n * @private\n **/\nexport function dontWaitFor(promise) {\n // Effective no-op.\n void promise.then(() => { });\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:expiration:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { openDB, deleteDB } from 'idb';\nimport '../_version.js';\nconst DB_NAME = 'workbox-expiration';\nconst CACHE_OBJECT_STORE = 'cache-entries';\nconst normalizeURL = (unNormalizedUrl) => {\n const url = new URL(unNormalizedUrl, location.href);\n url.hash = '';\n return url.href;\n};\n/**\n * Returns the timestamp model.\n *\n * @private\n */\nclass CacheTimestampsModel {\n /**\n *\n * @param {string} cacheName\n *\n * @private\n */\n constructor(cacheName) {\n this._db = null;\n this._cacheName = cacheName;\n }\n /**\n * Performs an upgrade of indexedDB.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDb(db) {\n // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we\n // have to use the `id` keyPath here and create our own values (a\n // concatenation of `url + cacheName`) instead of simply using\n // `keyPath: ['url', 'cacheName']`, which is supported in other browsers.\n const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' });\n // TODO(philipwalton): once we don't have to support EdgeHTML, we can\n // create a single index with the keyPath `['cacheName', 'timestamp']`\n // instead of doing both these indexes.\n objStore.createIndex('cacheName', 'cacheName', { unique: false });\n objStore.createIndex('timestamp', 'timestamp', { unique: false });\n }\n /**\n * Performs an upgrade of indexedDB and deletes deprecated DBs.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDbAndDeleteOldDbs(db) {\n this._upgradeDb(db);\n if (this._cacheName) {\n void deleteDB(this._cacheName);\n }\n }\n /**\n * @param {string} url\n * @param {number} timestamp\n *\n * @private\n */\n async setTimestamp(url, timestamp) {\n url = normalizeURL(url);\n const entry = {\n url,\n timestamp,\n cacheName: this._cacheName,\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n id: this._getId(url),\n };\n const db = await this.getDb();\n const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', {\n durability: 'relaxed',\n });\n await tx.store.put(entry);\n await tx.done;\n }\n /**\n * Returns the timestamp stored for a given URL.\n *\n * @param {string} url\n * @return {number | undefined}\n *\n * @private\n */\n async getTimestamp(url) {\n const db = await this.getDb();\n const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));\n return entry === null || entry === void 0 ? void 0 : entry.timestamp;\n }\n /**\n * Iterates through all the entries in the object store (from newest to\n * oldest) and removes entries once either `maxCount` is reached or the\n * entry's timestamp is less than `minTimestamp`.\n *\n * @param {number} minTimestamp\n * @param {number} maxCount\n * @return {Array}\n *\n * @private\n */\n async expireEntries(minTimestamp, maxCount) {\n const db = await this.getDb();\n let cursor = await db\n .transaction(CACHE_OBJECT_STORE)\n .store.index('timestamp')\n .openCursor(null, 'prev');\n const entriesToDelete = [];\n let entriesNotDeletedCount = 0;\n while (cursor) {\n const result = cursor.value;\n // TODO(philipwalton): once we can use a multi-key index, we\n // won't have to check `cacheName` here.\n if (result.cacheName === this._cacheName) {\n // Delete an entry if it's older than the max age or\n // if we already have the max number allowed.\n if ((minTimestamp && result.timestamp < minTimestamp) ||\n (maxCount && entriesNotDeletedCount >= maxCount)) {\n // TODO(philipwalton): we should be able to delete the\n // entry right here, but doing so causes an iteration\n // bug in Safari stable (fixed in TP). Instead we can\n // store the keys of the entries to delete, and then\n // delete the separate transactions.\n // https://github.com/GoogleChrome/workbox/issues/1978\n // cursor.delete();\n // We only need to return the URL, not the whole entry.\n entriesToDelete.push(cursor.value);\n }\n else {\n entriesNotDeletedCount++;\n }\n }\n cursor = await cursor.continue();\n }\n // TODO(philipwalton): once the Safari bug in the following issue is fixed,\n // we should be able to remove this loop and do the entry deletion in the\n // cursor loop above:\n // https://github.com/GoogleChrome/workbox/issues/1978\n const urlsDeleted = [];\n for (const entry of entriesToDelete) {\n await db.delete(CACHE_OBJECT_STORE, entry.id);\n urlsDeleted.push(entry.url);\n }\n return urlsDeleted;\n }\n /**\n * Takes a URL and returns an ID that will be unique in the object store.\n *\n * @param {string} url\n * @return {string}\n *\n * @private\n */\n _getId(url) {\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n return this._cacheName + '|' + normalizeURL(url);\n }\n /**\n * Returns an open connection to the database.\n *\n * @private\n */\n async getDb() {\n if (!this._db) {\n this._db = await openDB(DB_NAME, 1, {\n upgrade: this._upgradeDbAndDeleteOldDbs.bind(this),\n });\n }\n return this._db;\n }\n}\nexport { CacheTimestampsModel };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheTimestampsModel } from './models/CacheTimestampsModel.js';\nimport './_version.js';\n/**\n * The `CacheExpiration` class allows you define an expiration and / or\n * limit on the number of responses stored in a\n * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).\n *\n * @memberof workbox-expiration\n */\nclass CacheExpiration {\n /**\n * To construct a new CacheExpiration instance you must provide at least\n * one of the `config` properties.\n *\n * @param {string} cacheName Name of the cache to apply restrictions to.\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n */\n constructor(cacheName, config = {}) {\n this._isRunning = false;\n this._rerunRequested = false;\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'cacheName',\n });\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._matchOptions = config.matchOptions;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n /**\n * Expires entries for the given cache and given criteria.\n */\n async expireEntries() {\n if (this._isRunning) {\n this._rerunRequested = true;\n return;\n }\n this._isRunning = true;\n const minTimestamp = this._maxAgeSeconds\n ? Date.now() - this._maxAgeSeconds * 1000\n : 0;\n const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n // Delete URLs from the cache\n const cache = await self.caches.open(this._cacheName);\n for (const url of urlsExpired) {\n await cache.delete(url, this._matchOptions);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (urlsExpired.length > 0) {\n logger.groupCollapsed(`Expired ${urlsExpired.length} ` +\n `${urlsExpired.length === 1 ? 'entry' : 'entries'} and removed ` +\n `${urlsExpired.length === 1 ? 'it' : 'them'} from the ` +\n `'${this._cacheName}' cache.`);\n logger.log(`Expired the following ${urlsExpired.length === 1 ? 'URL' : 'URLs'}:`);\n urlsExpired.forEach((url) => logger.log(` ${url}`));\n logger.groupEnd();\n }\n else {\n logger.debug(`Cache expiration ran and found no entries to remove.`);\n }\n }\n this._isRunning = false;\n if (this._rerunRequested) {\n this._rerunRequested = false;\n dontWaitFor(this.expireEntries());\n }\n }\n /**\n * Update the timestamp for the given URL. This ensures the when\n * removing entries based on maximum entries, most recently used\n * is accurate or when expiring, the timestamp is up-to-date.\n *\n * @param {string} url\n */\n async updateTimestamp(url) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(url, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'updateTimestamp',\n paramName: 'url',\n });\n }\n await this._timestampModel.setTimestamp(url, Date.now());\n }\n /**\n * Can be used to check if a URL has expired or not before it's used.\n *\n * This requires a look up from IndexedDB, so can be slow.\n *\n * Note: This method will not remove the cached entry, call\n * `expireEntries()` to remove indexedDB and Cache entries.\n *\n * @param {string} url\n * @return {boolean}\n */\n async isURLExpired(url) {\n if (!this._maxAgeSeconds) {\n if (process.env.NODE_ENV !== 'production') {\n throw new WorkboxError(`expired-test-without-max-age`, {\n methodName: 'isURLExpired',\n paramName: 'maxAgeSeconds',\n });\n }\n return false;\n }\n else {\n const timestamp = await this._timestampModel.getTimestamp(url);\n const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;\n return timestamp !== undefined ? timestamp < expireOlderThan : true;\n }\n }\n /**\n * Removes the IndexedDB object store used to keep track of cache expiration\n * metadata.\n */\n async delete() {\n // Make sure we don't attempt another rerun if we're called in the middle of\n // a cache expiration.\n this._rerunRequested = false;\n await this._timestampModel.expireEntries(Infinity); // Expires all.\n }\n}\nexport { CacheExpiration };\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array} ignoreParams\n * @return {Promise}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return typeof input === 'string' ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * {@link workbox-strategies.Strategy~handle} or\n * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params] The return value from the\n * {@link workbox-routing~matchCallback} (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * {@link workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = (await event.preloadResponse);\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail')\n ? request.clone()\n : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\n }\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cachedResponseWillByUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName });\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse =\n (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback\n ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions)\n : null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof Error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise}\n */\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n // params has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * {@link workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = Object.assign(Object.assign({}, param), { state });\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * {@link workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * {@link workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while ((promise = this._extendLifetimePromises.shift())) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache =\n (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * {@link workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to {@link workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of `[response, done]` promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string'\n ? new Request(options.request)\n : options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the {@link workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof workbox-strategies.Strategy\n */\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:7.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n if (state &&\n state.originalRequest &&\n state.originalRequest instanceof Request) {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n // Params is type any, can't change right now.\n /* eslint-disable */\n const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) ||\n this._precacheController.getCacheKeyForURL(request.url);\n /* eslint-enable */\n return cacheKey\n ? new Request(cacheKey, { headers: request.headers })\n : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream()\n ? clonedResponse.body\n : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A {@link workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * {@link workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork =\n options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n // If this is an `install` event for an entry that isn't already cached,\n // then populate the cache.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n // Getting here means something went wrong. An entry that should have been\n // precached wasn't found in the cache.\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response;\n const params = (handler.params || {});\n // Fall back to the network if we're configured to do so.\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n // Do not add integrity if the original request is no-cors\n // See https://github.com/GoogleChrome/workbox/issues/3096\n response = await handler.fetch(new Request(request, {\n integrity: request.mode !== 'no-cors'\n ? integrityInRequest || integrityInManifest\n : undefined,\n }));\n // It's only \"safe\" to repair the cache if we're using SRI to guarantee\n // that the response matches the precache manifest's expectations,\n // and there's either a) no integrity property in the incoming request\n // or b) there is an integrity, and it matches the precache manifest.\n // See https://github.com/GoogleChrome/workbox/issues/2858\n // Also if the original request users no-cors we don't use integrity.\n // See https://github.com/GoogleChrome/workbox/issues/3096\n if (integrityInManifest &&\n noIntegrityConflict &&\n request.mode !== 'no-cors') {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (process.env.NODE_ENV !== 'production') {\n if (wasCached) {\n logger.log(`A response for ${getFriendlyURL(request.url)} ` +\n `was used to \"repair\" the precache.`);\n }\n }\n }\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read'));\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n },\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n },\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true, } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n install(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n activate(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * @param {string} url A cache key whose SRI you want to look up.\n * @return {string} The subresource integrity associated with the cache key,\n * or undefined if it's not set.\n */\n getIntegrityForCacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = Object.assign({ cacheKey }, options.params);\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of {@link workbox-routing.Route} that takes a\n * {@link workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof workbox-precaching\n * @extends workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request, }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = precacheController.getIntegrityForCacheKey(cacheKey);\n return { cacheKey, integrity };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-first-falling-back-to-network)\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheFirst extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await handler.cacheMatch(request);\n let error = undefined;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will respond with a network request.`);\n }\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { CacheFirst };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { registerQuotaErrorCallback } from 'workbox-core/registerQuotaErrorCallback.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheExpiration } from './CacheExpiration.js';\nimport './_version.js';\n/**\n * This plugin can be used in a `workbox-strategy` to regularly enforce a\n * limit on the age and / or the number of cached requests.\n *\n * It can only be used with `workbox-strategy` instances that have a\n * [custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).\n * In other words, it can't be used to expire entries in strategy that uses the\n * default runtime cache name.\n *\n * Whenever a cached response is used or updated, this plugin will look\n * at the associated cache and remove any old or extra responses.\n *\n * When using `maxAgeSeconds`, responses may be used *once* after expiring\n * because the expiration clean up will not have occurred until *after* the\n * cached response has been used. If the response has a \"Date\" header, then\n * a light weight expiration check is performed and the response will not be\n * used immediately.\n *\n * When using `maxEntries`, the entry least-recently requested will be removed\n * from the cache first.\n *\n * @memberof workbox-expiration\n */\nclass ExpirationPlugin {\n /**\n * @param {ExpirationPluginOptions} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to\n * automatic deletion if the available storage quota has been exceeded.\n */\n constructor(config = {}) {\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when a `Response` is about to be returned\n * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to\n * the handler. It allows the `Response` to be inspected for freshness and\n * prevents it from being used if the `Response`'s `Date` header value is\n * older than the configured `maxAgeSeconds`.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache the response is in.\n * @param {Response} options.cachedResponse The `Response` object that's been\n * read from a cache and whose freshness should be checked.\n * @return {Response} Either the `cachedResponse`, if it's\n * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse, }) => {\n if (!cachedResponse) {\n return null;\n }\n const isFresh = this._isResponseDateFresh(cachedResponse);\n // Expire entries to ensure that even if the expiration date has\n // expired, it'll only be used once.\n const cacheExpiration = this._getCacheExpiration(cacheName);\n dontWaitFor(cacheExpiration.expireEntries());\n // Update the metadata for the request URL to the current timestamp,\n // but don't `await` it as we don't want to block the response.\n const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);\n if (event) {\n try {\n event.waitUntil(updateTimestampDone);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n // The event may not be a fetch event; only log the URL if it is.\n if ('request' in event) {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache entry for ` +\n `'${getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n }\n return isFresh ? cachedResponse : null;\n };\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when an entry is added to a cache.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache that was updated.\n * @param {string} options.request The Request for the cached entry.\n *\n * @private\n */\n this.cacheDidUpdate = async ({ cacheName, request, }) => {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName',\n });\n assert.isInstance(request, Request, {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request',\n });\n }\n const cacheExpiration = this._getCacheExpiration(cacheName);\n await cacheExpiration.updateTimestamp(request.url);\n await cacheExpiration.expireEntries();\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._config = config;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheExpirations = new Map();\n if (config.purgeOnQuotaError) {\n registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());\n }\n }\n /**\n * A simple helper method to return a CacheExpiration instance for a given\n * cache name.\n *\n * @param {string} cacheName\n * @return {CacheExpiration}\n *\n * @private\n */\n _getCacheExpiration(cacheName) {\n if (cacheName === cacheNames.getRuntimeName()) {\n throw new WorkboxError('expire-custom-caches-only');\n }\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n /**\n * @param {Response} cachedResponse\n * @return {boolean}\n *\n * @private\n */\n _isResponseDateFresh(cachedResponse) {\n if (!this._maxAgeSeconds) {\n // We aren't expiring by age, so return true, it's fresh\n return true;\n }\n // Check if the 'date' header will suffice a quick expiration check.\n // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for\n // discussion.\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n // Unable to parse date, so assume it's fresh.\n return true;\n }\n // If we have a valid headerTime, then our response is fresh iff the\n // headerTime plus maxAgeSeconds is greater than the current time.\n const now = Date.now();\n return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;\n }\n /**\n * This method will extract the data header and parse it into a useful\n * value.\n *\n * @param {Response} cachedResponse\n * @return {number|null}\n *\n * @private\n */\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has('date')) {\n return null;\n }\n const dateHeader = cachedResponse.headers.get('date');\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n // If the Date header was invalid for some reason, parsedDate.getTime()\n // will return NaN.\n if (isNaN(headerTime)) {\n return null;\n }\n return headerTime;\n }\n /**\n * This is a helper method that performs two operations:\n *\n * - Deletes *all* the underlying Cache instances associated with this plugin\n * instance, by calling caches.delete() on your behalf.\n * - Deletes the metadata from IndexedDB used to keep track of expiration\n * details for each Cache instance.\n *\n * When using cache expiration, calling this method is preferable to calling\n * `caches.delete()` directly, since this will ensure that the IndexedDB\n * metadata is also cleanly removed and open IndexedDB instances are deleted.\n *\n * Note that if you're *not* using cache expiration for a given cache, calling\n * `caches.delete()` and passing in the cache's name should be sufficient.\n * There is no Workbox-specific method needed for cleanup in that case.\n */\n async deleteCacheAndMetadata() {\n // Do this one at a time instead of all at once via `Promise.all()` to\n // reduce the chance of inconsistency if a promise rejects.\n for (const [cacheName, cacheExpiration] of this._cacheExpirations) {\n await self.caches.delete(cacheName);\n await cacheExpiration.delete();\n }\n // Reset this._cacheExpirations to its initial state.\n this._cacheExpirations = new Map();\n }\n}\nexport { ExpirationPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from './_private/logger.js';\nimport { assert } from './_private/assert.js';\nimport { quotaErrorCallbacks } from './models/quotaErrorCallbacks.js';\nimport './_version.js';\n/**\n * Adds a function to the set of quotaErrorCallbacks that will be executed if\n * there's a quota error.\n *\n * @param {Function} callback\n * @memberof workbox-core\n */\n// Can't change Function type\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction registerQuotaErrorCallback(callback) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(callback, 'function', {\n moduleName: 'workbox-core',\n funcName: 'register',\n paramName: 'callback',\n });\n }\n quotaErrorCallbacks.add(callback);\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered a callback to respond to quota errors.', callback);\n }\n}\nexport { registerQuotaErrorCallback };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * {@link workbox-precaching.precache} and\n * {@link workbox-precaching.addRoute} in a single call.\n *\n * @param {Array} entries Array of entries to precache.\n * @param {Object} [options] See the\n * {@link workbox-precaching.PrecacheRoute} options.\n *\n * @memberof workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * {@link workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * {@link workbox-precaching.precacheAndRoute}.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n *\n * @memberof workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute}\n * options.\n *\n * @memberof workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","Object","keys","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","getOrCreateDefaultRouter","capture","captureUrl","matchCallback","RegExp","moduleName","funcName","paramName","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","userCacheName","dontWaitFor","promise","quotaErrorCallbacks","Set","instanceOfAny","object","constructors","some","c","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","target","prop","receiver","IDBTransaction","objectStoreNames","objectStore","wrap","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","apply","unwrap","storeNames","tx","call","sort","transformCachableValue","done","resolve","unlisten","removeEventListener","complete","error","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","Proxy","IDBRequest","success","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","replace","useIndex","isWrite","storeName","store","shift","oldTraps","_extends","callback","CACHE_OBJECT_STORE","normalizeURL","unNormalizedUrl","hash","CacheTimestampsModel","_db","_cacheName","_upgradeDb","db","objStore","createObjectStore","keyPath","createIndex","unique","_upgradeDbAndDeleteOldDbs","blocked","indexedDB","deleteDatabase","oldVersion","deleteDB","setTimestamp","timestamp","id","_getId","getDb","durability","put","getTimestamp","expireEntries","minTimestamp","maxCount","cursor","openCursor","entriesToDelete","entriesNotDeletedCount","urlsDeleted","delete","version","upgrade","blocking","terminated","open","openPromise","newVersion","openDB","bind","CacheExpiration","config","_isRunning","_rerunRequested","_maxEntries","maxEntries","_maxAgeSeconds","maxAgeSeconds","_matchOptions","matchOptions","_timestampModel","Date","now","urlsExpired","cache","caches","updateTimestamp","isURLExpired","expireOlderThan","Infinity","stripParams","fullURL","ignoreParams","strippedURL","param","searchParams","Deferred","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","originalRequest","hasCallback","clone","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","response","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","key","cachedResponse","effectiveRequest","getCacheKey","multiMatchOptions","ms","setTimeout","String","responseToCache","_ensureResponseSafeToCache","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheKey","cacheMatchIgnoreParams","executeQuotaErrorCallbacks","newResponse","state","statefulCallback","statefulParam","doneWaiting","destroy","pluginsUsed","status","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","asyncFn","returnPromise","createCacheKey","urlObject","revision","cacheKeyURL","originalURL","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","cachedResponseWillBeUsed","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","modifier","clonedResponse","responseInit","Headers","statusText","modifiedResponseInit","body","testResponse","Response","canConstructResponseFromBodyStream","blob","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","urlWithoutIgnoredParams","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","isFresh","_isResponseDateFresh","cacheExpiration","_getCacheExpiration","updateTimestampDone","cacheDidUpdate","_config","_cacheExpirations","purgeOnQuotaError","add","registerQuotaErrorCallback","deleteCacheAndMetadata","dateHeaderTimestamp","_getDateHeaderTimestamp","dateHeader","headerTime","getTime","isNaN","addRoute"],"mappings":"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"} \ No newline at end of file diff --git a/workbox-config.js b/workbox-config.js index c8142e1..8fe1c7b 100644 --- a/workbox-config.js +++ b/workbox-config.js @@ -1,32 +1,33 @@ module.exports = { - "globDirectory": "./src/", - "globPatterns": [ - "**/*.{html,json,jpg,png,mp4,gif,xml,ico,svg,webmanifest,js,css,webp}" - ], - "swDest": "./src/serviceWorker/sw.js", - "globIgnores": [ - 'index.html', - 'workbox-config.js', - 'package.json', - 'package-lock.json' - ], + "globDirectory": "./src/", + "globPatterns": [ + "**/*.{html,json,jpg,png,mp4,gif,xml,ico,svg,webmanifest,js,css,webp}" + ], + "swDest": "./src/serviceWorker/sw.js", + "globIgnores": [ + 'index.html', + 'workbox-config.js', + 'package.json', + 'package-lock.json', + 'node_modules/**/*', + ], - // Define runtime caching rules. - "runtimeCaching": [{ - // Match any request that ends with .png, .jpg, .jpeg, .webp, .ico or .svg - "urlPattern": /\.(?:png|jpg|jpeg|webp|ico|svg)$/, + // Define runtime caching rules. + "runtimeCaching": [{ + // Match any request that ends with .png, .jpg, .jpeg, .webp, .ico or .svg + "urlPattern": /\.(?:png|jpg|jpeg|webp|ico|svg)$/, - // Apply a cache-first strategy. - "handler": 'CacheFirst', + // Apply a cache-first strategy. + "handler": 'CacheFirst', - "options": { - // Use a custom cache name. - "cacheName": 'images', + "options": { + // Use a custom cache name. + "cacheName": 'images', - // Only cache 10 images. - "expiration": { - "maxEntries": 10, - }, - }, - }], + // Only cache 10 images. + "expiration": { + "maxEntries": 10, + }, + }, + }], }; \ No newline at end of file