├── package.json ├── app.js ├── public └── index.html └── urls.json /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "url_lengthener", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "express": "^4.18.2", 14 | "querystring": "^0.2.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const fs = require('fs'); 4 | const crypto = require('crypto'); 5 | const app = express(); 6 | const port = 3000; 7 | 8 | let urlData = {}; 9 | try { 10 | const jsonData = fs.readFileSync('urls.json', 'utf8'); 11 | urlData = JSON.parse(jsonData); 12 | } catch (err) { 13 | console.error('Failed to read JSON file:', err); 14 | } 15 | 16 | app.use(bodyParser.json()); 17 | app.use(express.static('public')); 18 | 19 | app.post('/lengthen', (req, res) => { 20 | const { url } = req.body; 21 | const longUrl = `${generateRandomString(10000)}`; 22 | 23 | urlData[longUrl] = url; 24 | saveUrlData(); 25 | 26 | res.json({ url: url, shortUrl: longUrl }); 27 | }); 28 | 29 | app.get('*', (req, res) => { 30 | const randomString = req.originalUrl.substring(1); 31 | const originalUrl = urlData[randomString]; 32 | 33 | if (originalUrl) { 34 | res.redirect(originalUrl); 35 | } else { 36 | res.status(404).send('Not Found'); 37 | } 38 | }); 39 | 40 | app.listen(port, () => { 41 | console.log(`Server running at http://localhost:${port}`); 42 | }); 43 | 44 | function generateRandomString(length) { 45 | return crypto.randomBytes(Math.ceil(length / 2)) 46 | .toString('hex') 47 | .slice(0, length); 48 | } 49 | 50 | function saveUrlData() { 51 | fs.writeFileSync('urls.json', JSON.stringify(urlData), 'utf8'); 52 | } 53 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | URL Lengthener 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 |

Enter any short URL and Lets lengthen it! Because.. because.. idk man I'm probably high.

20 | 21 |
22 |
23 | 24 | 25 |
26 |

27 |
28 | 29 | 30 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /urls.json: -------------------------------------------------------------------------------- 1 | {"c3e3a8425105d6def0cdce853fdf38bcae12d73056a6dce6f041f7859726f8956fead5926b09e44babe2d920275c8c1f5e04ea59ae2cb04e9cfcb0de51eea1c510fcc06bdf5dc131dcdd4cf48acbed44a9d08ca44c9281aefb96fa3233cb34f7e13e65b5ad2e246554a8eb057b093980d1fcbad38cc3adf0eba58867628d8669f79db21ccb694f41f6e91590537694b60315a3ad4b60a75d567133fc122bcab36f38a7edafefb6c0f96ebafb18afd6edd133cb38968733188b7e3f6163c6a779bcfebc9a514958821b171128d19c6d9a223d516c16eebef036107a6d0af5416cfc1518966422d8c5e74161a1367872631b672d18b7734de1b1421ed62b0620fb07888ed3dc908d4e7cc3c0bb61edae43e2f9ac4877d764f50d2d16447441310587b5a36ba67944f86b806b4dd13479e160c8e5f3d4e618cceaf8131b473ef9f63f39ff59ba6a1bef9eb472d2dfcdd93db0a0b9f607c153e659ed33c6697aedabc6abbfbfbc6cb0d613c32fcd3a756bd3e03c12d485a391bbd160c6054ebdec7a5a8d39758015d85a0af35fd3ab605e2e4fd577762b1dd0a25c6f15ecde20391dfb94cc0ac1b14f7d6a3b7452139a0d0e6b0d03b837169d532b09ef8b0ee9566ed5d0130f520d4a01c82a6115e419a2674659a65dbd90542988f2fba6dd0cb0d6a9954dcc189f77d5ebce8e9475933ea272d976639210f3f5db470526040623e3a7461153abc021a4bed1e0f3ba6ab9d6e3cbaacb5fa33c8e63477817fc16a2d0db3eb8891a90122b941c2a2c1195a739fdbdee4a1bb94c0f1b32e5c2a515925f48539f748ca69b21b0830d851bc3a260c1055ab6e219f33968cba22a5963476c90e02ea50b1ce3cfb44e5f925a58da3e6424574dacc5bf13018ffd806467499302a8f969b21479748e9fc2fb64380c26a20b9b463ad788f10fb0cb08dc7e6bd14e4d60d1b1bea347f7373633fb7b4efcb44e6e280a65a80172f87ff41c4bd358ea48ed9e8ffc6aa8861618ed27533fdd1db1f0448cbcf9b1320efb0a7abe9a24d4d95b80037906401e80c99bd123900be70eda38df10bfd4e6ba505ba8a4585372751fbb1493f0856ded33cce9fca3d9ffb18981731c2372a5244acf3f47dac53ebbdc88be7bcbdb5bbdad7f101914af0e45235234638762c26baa6bb98e40876d78d0b83cedee0b43ddfc1a61eb4207ff65919bf06ecc5baebdf2c1250e8b709413d95c15719292f88bf9d10e13089baf66a1a54ce3519c39e44c7ada008c8ba8b43f295299869e1d9900cb7c78753bf260128308936964c28889b42850d09c87efce402e7c172adfa993bf54d99246c172041b999f8af7b35c81e5eb5bf7270642eb3526cd3abeabeaf3c6c5c92a76e4623449c2224a004aa1be9a2300dcd015ae6c71010edd39c2f4ff68338221ac603e4ea4fc89eaa6aebf19a0503d54fffee4a88f4368877dcc657331ed2b520a39f3faa70560f87648799dc9b617652ea41ec933a17de2c4c0ee57dd09ef87e119f4387d71b70977bab2952c5b8fb5c581f82f167572bc91d6b741fe0c2b0e936ef2b98190b81e7cb7d9220a4f6b703b824bbbf7a1f93288ddbee2b2bb3fdd614de3bcea4711d08f496cb3dc8ede086c9337f731e2a4d94dbb001c1d7b543953dbf962c58509d3a4f1e747688cc27a3c0848ee63c6c5c290a5955311e60883fe5daabe4daa270b60ac837110dae94ba865e0407e30189d75d724693d4a0976422fc77a52a544877e7b7ac5e2058e4921c56839584561883176d08e226e780adaa09f581f66d0a3843bdde7951ee364849b56dba8ff077785c1215520121383c6d8eac07e5c8eb06850228b1e54c784960e6ce698a5381374342d59626a4def786c266f080721d38894da940efc0961058a5960c1d6ca4ffc2ddaa190409382cfdb15d9a1a1947fcd8bbcbf3400446adab090cc02b3bdbfef8d05c12851213bc3db5d107b2c98c2f41d9def78450c9a7aa49584dec1d0b21323c380a2fda48d26b49132aca0e70348ce458045807c0adb035d16c9bf25711e170b6f1ce45e2a52eb94261fec079ad0719285ecd287210f7580d80f89d4e1d1fa429ecde46c58964f0218c999bdb54739d7323d87d297e58f6b3ecfc3ed5b095d0d5864190eae1362fe7f9fef814cf8e5ecd162b015c9162d0e971e3df82500f4b7ba18c5d11b0cd0b54714c21e734501a4c68e217e128f518b271d5fee8cb729fc587f5db5090ccfab3ee0f81e43c1bdccdc426bcb4617a056bbcf61a5909e35abcfb30aad7a8c6bae1195f33f72f7bebc8eed1885ffa56947b9354b112de241a63402429b5df684e00a24badf59af1314b0b51a202ffb4a8833c9c9cd8f7dac53f0d595c9d6ea268c8624e3e88afa0a75662e308aa9b4665f435471c52c4895f37e954ee6ed6f6a1817d0ef26ce5d93d190ba3efff1790f54008242cf6b6f098dc0ed2d5e3ae656e55b517da46f841f3c091a74b05a1b8134c316e9da0ba7e78ffd016d5f9839d4344cb1713f340c14e5202c03c74e5aefc9a1207a3a53a44035e6483b3c0e2806357b2806d49e0c4e7ba8cfda632aef8154c891a3579b6ed609f3c89c34ecb1a30da8abe89f5c73fd5d0483dcbbaf912f4353002783398ba0e18d8f16f5c550a1bc7fc9d6bdb80b934177c7ab24c88b89fff82baab4e90ada59211919ff065081c75fffb058673c271b985b870788226b9fa7716b39962643f2d325febfabbc205c22120dd83a57d8ae6209b6ad58510ca908c8658f8d4ba90ff5b7596d36d7ba6dc6de72a42ade194f6a82f4f4c0b954d4e92a53402f2fbc0df8b31efda84abb34cafdf2f4a42e3597ca512121f41712ce62013803b66d38c22e63a3094c4daa3d7ae82e0c3c6ed593c65d46764d5bb09978b5558a85a78ddeb2dfd266f0a094bca5ca0f91a628f18e3c747dd25c50803492dbcedad9522845d39bc243e98bd89a1474b4a9d7ab2f6887df5424c32281b676e659ccb527be22a4fcdcd4d97121d192170070bd8a6eb8ea4ef2a2b32e39f0e0913c21d5c63f2709a441af31eb2a9d492575e0ae49ce8eb5f7e7d79f6742a819c7b09bd87cda202d8f4d22c01501de60a4c1fbf466e81ca818dc2d738d3dbdc03000fb92d0df781b777c2c0831260f250dbf0b2910847d0cc1e010cc1a11c3f4128c20b163cd7c74c27093dc7a1904e714d037e7711a4b0263a4cafba84d7acea720810ee88b5ceef5605e8a73469f854d0996594a7d16be9e332e356446c7ebf99ddfa663098a7ffaa5a2bd79d81436a57bfb31f4042f62b0bd44e7784d1bd2aa4f015ba38faaccf86932b1d201d54a6c64f603702ea2cfb67fdf6b1af2097ff618f62e33c5ffabd782939835586a1b96a8a1a3274cce9414274f121d6858c763d0bec1b0c591da2eee8f252cc57f38e4647cec23c9c90551ecd54b1cd07c26d1d05684b980b23914c7197fe9851483e87af8536c68845bc411bd57a93e4b160c30e736dbace7c62a8fa37b12f057a4c644f0f3dac4638d2f845ec7c2a24f7fd627f1bc9df43dd78675c053d64087d0e4a415e17617a3c02bba1346a17c3e6c71c5f66ecb590d4ed720964655064fa72a9e2b58cbc5523b39f40f2e9b2a3ccd2b49d0196c21834c372797a20606e38e0357702a887a89a732ad3fa5e693037fcb40ad0590432702652dbc62daa87f94891913b075b83f97bbaab901ab98ecebb091780ba51bbda94f1759a901a6bb88a2f9e4d36a11005eda9888cc2f23c14adb42e40ad3de978799c4148eddfacd4e2dd6023d11ab88393ba4ead210a58fd2647299d694bc20904953ecf5bfdb54c6fdc130f7dd039a735a3513c0ef4617a81f1ed7513946fcb35290ac0f22ef25feffc9476a6b0019e2290513de251608dc71c1fc52bdd0cd41269d1bfccd532fec09780ecc817a6676a39feadc0d5b5c796f649fb151ab15d02fdb095678ea25e50139866086bb1a50577123817044d6d28204b8401de4fc527e85e2c771f7a68790f10949ba08937df87c78d48ce8857a1d4b2d7073ea19fe42d19f0eba72fc75d4d45bb3cec0edcd04e337fd7268d01a172aed6f880517d351831d7c3327c005d8d2c6c7861d9fba9afc9b64a3c9c99749b2c9d5b96d67aae51e9bce622a2278c467c52642db92da1414b58fa14dc2a2bf047a68f7851fbfb5e4677f81cb3a201ef8cc22239f4e7399023cdff3c958a37c653298b28b133b4a267590b14495d3f3bc6017e89d24ab0df339547c96de65be911ab1b91cb71d4d260fbe6cbd3c52b3771618eac174721dfaca70a07744e7fb30ca15d5f80e0a47d14ff7851157350499ec56e59a408311f555dd0abceef49e1953980891ba7146704f9caed757e884e2aeabe1322735997866b7a830e05ef8f4dab895f7afe84866207cbebb214c610b26f769eb08f7cda546f2b6038e0b3298f00f707ed1909b2ce49c86cd0e41fa910f74954364ba4f3c31ecf62c3db64418d4bb5417496b2dd9fe12bf809bfbce7643646dbebcfa1181ca4a67c9d4184606c3fae28e4c7bb47912eaef369bcc0012b5a956664eafbeeebd753537f86a352c0ce37a03048173701f8b28f69e3054f6e585e8c523df5d74bd6fd2ba32eda3090722a61122f00dcb0f43f9794bc5b3fdf007d8ccd8313c0e5c71fd8906d7cf29cd27c578b65e2d511dfd0b8ed30ea46bf756b28dc4bef1c4fec5c2818faa37c4754fc0ec7e63a170bc88717f480052989c57e428c458b8d421efe5a9cad8c079679032b2dcff3c1d04b7233ab0831126e68a924bacd871c245fc29d1d787a2c9907f8dfacee5f27257b5e0769d2d4689a0b302150c02e7b52b61f431c137d4d39e33b1ce760d1a459d7e1335eb19558995408f389631fa025b13914d035a2ec44cd64c6cf4ef6951969f38ace0caeef9f8ef0799980910c531d4bfb52f9665dcba90d1b6580de410804c0a35ccfc433ec633cf8642bb1af74dc479a31289c68afaa5e78642774987e6795d7e575d543c07a349d54b77baf61da8f2dc3a517e0223526246965fd573f7bca3b70def0522d3c4d733e49294b4f754fa718e46b14c12eee5272fc47918d6de4e87b5f37753e528ee720b8e289637099dcffe4e225ee3d1b0e54ba4204453a4d5e236e507caebdb20ed46dbc9ed9657bbbbc77bf2dd1a3182dbca023ff8b0bdc678361e5b03afe944ddb4194f3256f06a03b24f3d00d9c32dba795b16b29c0d19be6d76d952b376c352cfdc72fc61743a1c7a02684a87a863d57fd3f7769e5dd5c801f1f80aa0e4ec2135b08018896c436e43871adc353921bc1847707015ae508ec85cb29e74f84b23d7a3339fed7bc963561fb3af8b552ffdefb6e4a9b974c3c8e9b1cdd3eb5a829d30ba5274889c2965a7ca6ad1dee787f1ad90d58c154c5bc2c16ccfa34f673385240e86f57d89d17e3422d9a3c4f7f34d287bf9b639b63a3742c754ea8e567fd17119edeafaa80acb20a14c04822d55fc8bf93b61de6e70192659ba3d28d7963378a87e23f19cdce59d15a7b3cefd5c8686b7273a16db4b5867ed0f1dee0dc26f4414abf4be07859944e9671db7895fd79d2898c81da3f9f97228b96dd633bf3c2bed6c1b0ba511364feb6e218f9cd6d378cb5b4de585a743a0f67169d250f964bb792b4066aca6a23594826ac6f51f10ffc7e10e8a2bb7321e5dfd3e37c9ba7b1e559cc51b43e12afd6b30a335383517534a79bbdde63d1958c462d620b44aa4b35a91a5e3f21a807586f51363bffe87bf6701200e2fff787b5cee7f594fb2a93190f09a609039daffb6a3404755b7873e91381a57579d807d3cc65bac55119b211700d85435883384252d2586b9d662e39e5d608f9a5361e87b4b4df90422e14775b3c91d97de1d123f4a4d80f7718f27237ef106f8d829c0c4050808f4237a35ecccdf9e18b1cda21bc4d61ee104eb7b4c6fe3000f936316ece3c63373c21ab5933deb3cabbdffded312cf5a0e8a8c0b34dd7475d2d8cb307559fd829143c3b753e02364417de9733b6a05c465b73ce845fa29268e17f8f0cd1c99e6a6f81d312a6744a1049203849aeef6807f63c70e7544d0c70c9e6825d64a9a1d3e81d6fd607a903cc1e78a22a67c258626c059dd03b72aaa8adab04ab3e3b4b2446676d3bdb7e5fcccc9b8d1829c5047ada3a2cdba8a77bcf5d56df69d3855aa120bc84ca96a83a0019a9ed013d857026d265296c0c774cb0427ea87865b75351352afbba3bbdeca83d3e2754d6b69a8fb8887c6fa7c32c10b18721e0a6fa5e411780e5ba81402bf80491dd7c8c3c58372d0531d4157f8bc4ce9e62975b1af03b2399f3a8838e65e88d7880b0a80ef8276a6ab2da2210e2444678955c8c6ab8e0cd8a362028808403733c648cc235189fc5715df9d62af56d3e5a9405c7a45148390e6c1cfe97fd09e66da0fe60917e4965bb9b35f0968d0f9c9b235cc51992ca3903ae741e2c9e73d2e83857a88d583deab02c937992294c48d2a7ff45a236b78d6576be062a902de48bd1d8dc76709ce56384d03b38673d1f48df66969fc0880b88d19275ccdf7e6d1519d44d22dc53c190d316986aaba694e8e056f22e1eed99980d3680ae2f907499980defe2565957817ef48dbfe38942b093212c18cb8be64e19b610a5b7c2521e7c3dfaaf2ab6722ba991c244656f56e6b3d3903f2290627f8769aea667d40ccaf9fe7b1347ebc0b3b471688fbed4574945967115ce103740681455d8da34284e4b1c9e8cb1b64628a2bb70c7ca13164eb7523ee22c59935479a6a58a8df929b98efeadbf0637e265c6757b46b46586a19485fd516a5644d7a85cfff815ed93abf37d930fd68d53b86e2d04f7e0dc737eae6cd149f8dfa029445c26715c52b386a9451fba0cbceb027cffd39728e4af1a8b74a486abfee71cbd9509393fd71767c218b2327d2ca22d453b1d0c632bc04d45e4dddcfea8d7b647cf4ae715048c8b876bb307fd1d1fcbd520cea15cdaf8dd249f464eb193f8a6f4a58279bcdb34a6c9187ab4d4d3e421bed9ea8fd18626826b0206368a91335cf4197a0eef786530d4ecf3be4a7e7b7":"https://www.google.com/","d011b4a8a571f2ed2475e01e10e3d44fca1c73950cfaa6a0c160aa318142e3be460b2fb872bab28d59a4f5f1205e0b0540dae60864fe3a479e36797312b34e63b1fa57ba15fa0733a750fed3a1d35cc0b87869430619723ccb0a56e7278e900953ab490fe5ab723e3199e55fad80d633c7b24b80c98b5116203b0e828fc33d4f94bf9090e732f59fdc0eca7341ecfc8e6e696e24bb405b9579bbc0bc84db0e6c15f41e00379aafef32e5b732cf8479c09040a722e15c784b17694f42c52aada20ab295205cfbdcc86d1d05ddf59e984fa0d222024e0a4961e28fd5e3dd1f01a380e86a22344bca8f76051b6b1ef0513436466301760b65b96346e45947e050665485a2056050b844e81e88f5e65f10018578c81c493c57f5aef59be3eed329f584b371acbb8774d296f8eed90e9887c0de6e7e01e03c3c4276e1c6fe90f9baa8f2b204276285af7da65e7178c92e5f092f8898afc791262ef4c4c53b8f5acb3d10cf28cdcc921ec6250ddfc492f2035630b8b341a65c41c65806e420afcbca36b7f15f2937385d2caaf8d68267506f364a4b74de0e796b643d72634afb1fa954c1f2f6a36ded872bf441d0f8c9f7c64dac1beb26e6fa5cf19fdaa741ac15b7638eb8da09b494a20e977e385dc6d0bafa353d0dba3a3ddad0654271b737b1c5221bc12c1c381d68b1f672ff08ed6505b51c645c2f7386808f94fc554917b3e516c98cce13102c9aa196ba398be5590392de99c13e27dc7b80e68e040468e88bc7ccb75890c407ff8785bb2aa1583b6ee8e6aa3d8dd321d0a9434b31eaadd3522d865e27cc0220702ce2cda624e003096cbad6481694f3e68961a7a8d8615a4b2e356c765619a9b8331630f0483774f6a51209c877ac2fa1cd9a995d55138dddd5d550c0df5951dbc06b825235d2aaf3b075cedd102ca3babb429d1554e10878ae46ae72b97aa015b069aab0a9218163d84c4f857bc868e8dc7cdb786aa0bd5711a09be3b6162cc319fa92fc7fac5b76b43dc1063d9b85ce8c8f845f1499e31a09f67e69539da33ac993523d041eab8003ec66df0df69a048df3fcd0f55aa4a4888df5c9a166229db3a68f37d5c875f099b1ee533d3d71408d42eaeab5ac5f4b16bfc0258a06fde21045ba2babf3859cf3b010d647c03a8b303e0c1035d16ffac3f1a3b27349976e61e94690f86340a3fb0b1ed16a458c0d856671faf074cd4ed1412c56171b56240bb9069b0a3368678aef89c932fdf7762e6a0a926e5df83585b6df296de3c159bc8e5a9663283858fe1c91da20716504ba9636a8ee80403576293dadc3c7bb75e7a56ed3f6a59c91d6046ed19abcdf3d496878bc1564ed240f4b28c678c845a359975d96038fe8171937623fabf82763f2c23c575b987d10655e16587bfd01780eba1ce73cc75988caacb22fed3d0b5dc1893513c8e43c8c9c1b0ce89587883ef400a08c7814a9dff94446e732c2035ab4b809685f1905047370b0c3a2279d451cbadab94e9264af13856b95e7f14bb1d42ad8f25799c91b806b59c52a1ce2b788e1270ce10be287f37746e76e792efb7b1bec87c34c0cd1f7cde7a5c3683a2c3e13b3e68e70283a54c87fa239ecd2921f889c7cd2c527ef6475e077d54c5066d5256505baf9d3462322f492115d3436b2d8d42190bb0e09190deef4a73cee726791951c778df3ec20c1f73e86f94a31f198d5a0fb745c9534c04d5a657d8ab4c9e2e0f1f58eb0fb03efb6c8523515f5477cc2a30b8701806d6966b1b0e0074c9a1c814c46a035a303129f6bfc3621a0d50e47877a940f6db92769b2977fcf320de241d059a8b2365abc4ffbe7309a77441a15057f0dc9c3d2b313683ae99fa939733a677251cf3b52a0aa75ba31fa062b7e451f09c4507885a16c2d25f5f7e508a251661a6ab1b448ba18ef048e9f5dbba9eaf87ceaef7cd6fb63ffba520ac04fd4f4805cb7f757fbd719ecafc28e42c97fcdf0355a0aeea37de204020d51aede66f0b4a3c8fe108dba62ca73d7c02c1ced32e0a6de300a515185745553e4ba87fee432c34596a0068f7508f109d9ae596d09dbdef7e5bff3d41108a567314dde10d6c3589422b10f5e28abd3773873c55158bcc6f48a87ae2852f3857fc90e9743899a4c5125bae3468799d21b695aa951df811316d7056f3bd76b43d35884f2f2f4fc1ecc7faab41672216440a88b14e4e14fc07c454995e7c2fea3a648e4907a5a763dc412e8f5235fcf8709676bf2739b7cdf740d5b88229e58b27b2bd024641a6ae6165c377f032d834a72fa1f481c27bdfaa31b3493f0181d908df231c14e513fbf61dc01ca36e7f8bb87dd1f2ee0112938ee56a44460297ec96630c4eb61af3f8b55420625fcb8ef82fbf91447e04b69efe4cf10d3cc5926cac8608caf6486c79cb31dc261afff2022f5b929e8d6d2fbcc0f1bd5a96dfb97625525c472211155825baf7e18c0fa59b534ab57c8914764c3d9c13578634240f0d096780c2179eb8a6bedd006afbf2f9927174e89e07e48622ffd7bbe16365931d18d1c4244fb582a3b296e6a7065816dc9d6cc1f37307f1e28956d4aa072e88548a4a2453ae14e6f0829a4dba885e3e350ad90496f23f3deb541858ff8883356eb1a0f01bc00d1fc3d1b3aa3a8e4d5e5b429698746d2ae36231f0da4ab6326ec2076db2121d2a4278d05afab21b3454be4fd11f9a3ef35ad6f85ad2778fdcf0347afb753a49d69b5ce3062f8ec4f06ba67b121375a08febfed869c41a9f0889d413842af26041827be525323b5594aec2ac303a4a833bb6db5322f2b8db05ac881e050dfffe74eba85f5dcdfd36f9fb4579e481e2c29e4a4d6bc3a2a3fb534c3f16472344267cd8f1e646a3ae793ad3890e4eb8fef7b0aa359223448fa997280aa70ab7a0a3a195856339797b87332bddbfd4bc9096f80c534eac68f6b9f6e2c5792ecbcded41d7dde075ac95a13399319887de51a8cc5e042f8461660822658b6f4372b96f5a8428a4ff6e85d101ad2d8a953b3828a0fbba066fe2721709cfe8c6e180bd7a9caa0c70941c97ea1974f580c02087318cc44eb86dbd22e9ddc0888c53269ee7634ed392038104e54cc9e514f9be16b5a98175f1e2866638a542d8d18e20d8cdc255c48a59d0f4c2afbed11a286c1d94d4abd9a4fb517db857193263206810f71fa25b867f10f42df3308bdab803fbd5d600e180cff0182a4e640f3d807573164a88013e8d4710c7e5d376c264f79ac358f7beb5aa46ff7a596a2399b8ad70c851c13f088d53072e2445ffa320df651959324adbc2a742f5ac867691ad6c9529cdc55a5be6e470b5871d958a86ef064f3382c147e4045585889199ed2fa5f1dd86f7784b4ab324a0c97bb0722ac750d0c9a5deadd091924764ba57d8912bb313706ac0c8211d8a0340a7e1386eff48da9c5ac77e28f55616e251a0b6b07608d06729b6b059428d20e4bf3d7246ab528404b89a67bfca7d7d15e37f5afd68e292bb36f8b87c2db40270896c85183c2a0d9abd62cf181f648aa0df72e307edc2bd5285fe62c0b09d4775f164612497c208b1d9e7fcdc4d6dd38f115b6a0961fa6888f6ed5b6af269d5203768706c46937058f8f6c903c49a4cae9ba0b171973b231ec947654b915bcd2f99db2eaef3f16e5e5c696d84c06fd6f3e38921ee5990bef8c46ecb05089e3b4c265dd6060f9dbea9f43a86312c93ac0de6b7334eb00f7cf26c735a6273ca27d28c570b66d0479f7a1c37dfab9d2c2842e5143ad640dfc08218ea7c9589236aea745095e3c4a838fe3eacd954f15012789210ce917086c1b7ecfb5db2615b003b1ba8a381308e201d968dcc9e88e9515bbe1ed718a40a9e5f546d1d4164ea5ee0f1b00d52fbabf93947810507a11ba562746653c2a6a833fba2fd90b537520f5c44eb0df1a50c24ed6bfb0e09e10a7817a7fafe4e431a00c7d347d7160b95e50b54ace29d919e7fa14a576165ec396ef7a976efb65b9743b960cce66431b5302df1a064238dd5f53f2a422d49b44d53c154b00ac16f9b49ca0ceb0a63f11978d560712082a50767f644cd4db287202d82ced3c64bee34ffd8c56b1fdd3a8b96365b5ac24c4666ebe33d22c74844384f643bf9958408479c08639dc038b07465bd920ee1b29f6a5a24a6e822df2d978fa9f2daf71dd9e456b9d420e5766531745e9fd8cd29c31e96aeb44183bc13f9eebe92296d3cc86814782dad36907c58d8378839602d9a54924fa88cc178fae3e8b02d57267c12c3e8b305b039f8cf89a6b573700b05813c49797f7ca4e16d4549a192f67b93f8f60af20e2a823db7b286c342c032411f349c8d83610a9d72ef04e8f7d8e55754858dbab031bb9996d7989bddedf6005699a1aba2b26495dedc048c1409d01cc52c5f770af50262381b5f8fcc3b8c997ebd3b1a62cf0838dcdf4124f7eff365cfffbd56213dab07ca2bedf6b3020998ff21aff7a3601a8d0321039d69a16223590a19ec056d3fd74c02f717aeb297e5da2c78cb78f52ad487c633828c534912d75f2e09e951f4611ad02d7dd590f0374ed52cca5f09ae7eba7c7b4e3d23fc5ef399ec7c898f727118be5057607e2fd90d0b707e7cfe66ff5afcc497904d2cfe9e5429d58801f26903fd2219632273919d630a01c08dc073da7597e2119dedd27810bfd3f270b534a19eaa940a2d812247c7836dc0798ebd8392a612c13b26fa0e0870be61cb13eb9430d095b9257fd202194367c1e757580b008d1a3a37b5a46561ffc5ff98805f226a78e730f40c52425607a712e984b8ca585877193eac9190957bb65ca343a5bd5440e6235b7816c4e444fe0c3fbb1623dbab276cd785cb9dcb0738c32b2872848b41a72bb659c81bfd3933cffa3f5a761e893b9955bf691b7f0d0b8b0dd6d4deb4a05441de153c02708555180caeeaa84f2daf548ce9f559e866c932a45e1ed74a99d2b6a9e869c88ba4bf92ba2a8204020d2751cb23440d548b7d03ef1d274f6b4b076a7bc050334e97d66ac3717400b4afc1bf58a39d1e926f108b1678cb8d17f4f1a450a421cd7f702109245797b45f3f391f591a58453e439ac867336c2628e088b4db4f92b80d2e3aa3b47131fbf7d54eef680d852d82ce42dfd33360b52e16d362ecef7cbc68083bd8b11ca40d5d1d20a904b1b7880179f38594ffa96c09a88a65d814403e6c6f0e559a58698e76d733790da53269e75c56f6b8f094b4cac51d5e33fe83ff3cc9323c22996d0027c593a3a2f8990b5bbb865867f3d97897eeea1a6f9aee49fbfea035424f14ff7771b0f0179219feda4735f2aae8c88ed127db9e8d846f78b915d750b91dc6dff416cc699cb54591199562fa5069fc52c99b9ab844e701e4cd8e6d5b89d728dbc235301e7e5c342c72bfceb51378472a4aba08fa8c38ae9559e4f2ece0f2602468aa4a9b43fd43a799541d8f7ae1b341fb1ed73ae34e33dcb5c3ff3fdf08a7e396d6fb077ec0ce654eb71e1cbfc39ae6832bef3b914b66793ee874d874070619879b9543f545f1cec343bb1e9e19b7ac5ec2b95144ac0269307a7af26f89e154b70d783bc0e9000c2e7e6a2c45622b7006c9fb7fda736eb69fb762fbfd3a6ec299ac9fa6108b5b974055034d4e5c8b07c958a9e7fb2bad4c069866b6442e25f1348fb5c07808e279fda4201cf8cb6474e7f2f344638d090931fd9af716bf9abf74d6ee3fa6375e7ac08a500a9ad26773a748d29c549bf522838eaadb93762239bb2625c11ec5fa7e52badfbb9ec574065cdf6dba503e5f6da4f6e6dabebdddb4af479e457328af498d15463c675ff1a2b4133065a332dee1c2c9f858c5a2c0557b368417885081867bef1916c800953b6a8087717cb44169905650ea2543fa703209e687deae5faa91262203bacac2a8f33df793464fa932ed1764757b8230ecc929e9403d0f2afdeefce78a960f21ad019e70953aa813cae125893523b6662ff5b6644a45dfdcaa997cd378740950f083f74149ecfac4f90b39a51cfc2c2a1eb3e5335ba192cfb5366cdf17535fcf03d2dc661ad2af5573cb42fbab06d3eba712db553d1f8a6815f9ffe0e63e61520304182ec048f89b3e197ab00ab20bd6320111394520ae31d8a6431dc9254dfde8e83c14f3be6fe6852278ecc0d9c1a0083af040d947150dabc26fef481eecd71b8d2c1268ca3cbb82db84d3c0898d9d4163c21695677b990505d97485945e80abef914909e328c00380792b19518bc2fbd4c12fbcefb855338a15f73cc89a741e0e3f44f695107df629326878582918fa7fa095de6a9c9558720b7b99100ac9a28500d299028e000d9d59864e4bc7637a3c4d45bde07c1196585f4b80ba9677d679958b5dd09626c187e748de14b878424622022079e14bd7b93a7fa501d3fe72def93d592b9622e9912d900cd867499c5d891e3a75b185deeac734c0f4d2c41b56d0e0a96dc6420ef166806e59836cfbc51ec7dfd4af209a0f454b94f3cbc240286a43f6040969de26674b741ec5bd4259f41bb39e3b3197dbeb9bebe6f59e5d908dde21b0e09a290ce462e130d8621db4b7ef13ae31ca3f3ad6b6b6c799430809e252c4c60a46c7751e1f6c2b9a39e046192fa708c417c67be71443a1a34540e991e623952deac8ff4ce811e9ed9a41383ccbe8e93c4978927db09d3a99c65a2a2ce6e0b4b08937576fbf304557d83425e2db93cbc913ba82e8ebd93bfa0456262dddc74a35283dce8c91739195c4ef227f46b1e82cba5f6972516256d431afde58770996b66f831376a7c7b2da98c0c28b191d76685c24d4289bd1312d81689f7f2ee89467102b4f35e7826f232c49d3c491b8f1e126dc28f4a3c84959f429594229cf6efff1bd1f4c8e8687ed5bec8df13e6956eed86454261b4ae298ee0839a246435e000840718015db2f44841f6986d96da3b595484926f3c8a316e8cf2a847b1452c942d3bc5fbaad659f940510dc9de926dd68f92e2204af93d74679b318fe8904871be0323557ed91b5e30569af12e230c1b0c31a6c40c8dec947445f0ddae91a8c3fa3dcdcdd670968220994ea912c1a61fc8b4":"https://google.com"} --------------------------------------------------------------------------------