commit e1d7d78aed4c8c608f110e1b5dd88544e1e3dcf8 Author: Martin Donnelly Date: Mon Sep 16 17:06:11 2024 +0100 Init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7c31c27 --- /dev/null +++ b/.gitignore @@ -0,0 +1,102 @@ +### Go template +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + +### GoLand template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b8e382e --- /dev/null +++ b/Makefile @@ -0,0 +1,40 @@ +PROJECT = go-pb-nurl + +VERSION=`git describe --tags` +BUILD=`date +%FT%T%z` + + +ECR_REPO = git.caliban.io/martin + +APP_IMAGE = $(ECR_REPO)/$(PROJECT):$(VERSION) + +NO_CACHE = true + +LDFLAGS=-ldflags "-w -s -X main.Version=${VERSION} -X main.Build=${BUILD}" + + +.PHONY: build +build: + #CC=/usr/local/musl/bin/musl-gcc go build --ldflags '-linkmode external -extldflags "-static"' server.go + GCO_ENABLED=0 GOOS=linux go build ${LDFLAGS} -o ${PROJECT} main.go + # go build ${LDFLAGS} -o ${PROJECT} server.go + +# docker build ./docker/. -t $(APP_IMAGE) --build-arg VERSION=$(VERSION) --no-cache=$(NO_CACHE) --compress=true + # docker build --platform linux/amd64 --no-cache -force-rm --tag ${APP_IMAGE} --file ./docker/Dockerfile . + + +#push docker image to registry +.PHONY: push +push: build + docker push $(APP_IMAGE) + + +#push docker image to registry +.PHONY: run +run: build + docker run $(APP_IMAGE) + +ver: + @echo '$(VERSION)' + #echo $ERSION +.PHONY: ver \ No newline at end of file diff --git a/base58/base58.go b/base58/base58.go new file mode 100644 index 0000000..ab2d5d1 --- /dev/null +++ b/base58/base58.go @@ -0,0 +1,53 @@ +package base58 + +import ( + "math" + "slices" +) + +var ( + byteabet = []byte("bMJZSrnxEyq8kN3UYQL5oXwV7BCFRtvpmDf1shAuHzKicTjeG29Pg4adW6") + base = len(byteabet) +) + +func Encode(num int) string { + encoded := "" + + worknum := num + + for worknum > 0 { + remainder := worknum % base + + worknum = worknum / base + + encoded = string(byteabet[remainder]) + encoded + + } + + return encoded +} + +func Decode(encoded string) int { + + decoded := 0 + + workEncoded := encoded + + for len(workEncoded) > 0 { + + index := workEncoded[0:1] + + power := len(workEncoded) - 1 + + idx := slices.IndexFunc(byteabet, func(c byte) bool { + return c == index[0] + }) + + decoded += idx * int(math.Pow(float64(base), float64(power))) + + workEncoded = workEncoded[1:] + + } + + return decoded +} diff --git a/data.json b/data.json new file mode 100644 index 0000000..81e63e7 --- /dev/null +++ b/data.json @@ -0,0 +1,1395 @@ +[ + { + "visits": 15, + "__v": 0, + "long_url": "www.google.com", + "created_at": "2017-08-05T20:29:39.541Z", + "_id": 1000 + }, + { + "visits": 1, + "__v": 0, + "long_url": "google.com", + "created_at": "2017-08-05T20:53:06.602Z", + "_id": 1001 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.reddit.com/", + "created_at": "2017-08-05T21:00:17.169Z", + "_id": 1002 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.google.com", + "created_at": "2017-08-05T21:01:06.028Z", + "_id": 1003 + }, + { + "visits": 0, + "__v": 0, + "long_url": "http://www.google.com", + "created_at": "2017-08-05T22:33:04.483Z", + "_id": 1004 + }, + { + "visits": 0, + "__v": 0, + "long_url": "http://www.journeycheck.com/firstscotrail", + "created_at": "2017-08-05T23:57:17.501Z", + "_id": 1005 + }, + { + "visits": 0, + "__v": 0, + "long_url": "http://www.theaa.com/traffic-news/glasgow%20uk/", + "created_at": "2017-08-05T23:57:32.059Z", + "_id": 1006 + }, + { + "visits": 0, + "__v": 0, + "long_url": "http://www.accuweather.com/ukie/index-forecast.asp?postalcode=G82%201RG", + "created_at": "2017-08-05T23:58:11.488Z", + "_id": 1007 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=glasgow,%20uk&wuSelect=WEATHER", + "created_at": "2017-08-05T23:58:42.707Z", + "_id": 1008 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://explorer.litecoin.net/address/LcvPdRiawZahxmqiuZRbjnWoh4vGXvbasY", + "created_at": "2017-08-07T10:50:14.082Z", + "_id": 1009 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.youtube.com/watch?v=3MMMe1drnZY", + "created_at": "2017-08-07T14:59:24.322Z", + "_id": 1010 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://blockexplorer.com/address/18sLVW5Aswp2KWLr4hMFZsuSPtvAauFiif", + "created_at": "2017-08-17T13:36:57.562Z", + "_id": 1011 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.com/Flair-Hair-Black-Bottle-Opener/dp/B002MVLOBO?th=1", + "created_at": "2017-08-23T19:45:30.577Z", + "_id": 1012 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.com/Teforia-Leaf-Tea-Infuser-White/dp/B071L78KJB", + "created_at": "2017-08-23T19:48:28.607Z", + "_id": 1013 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Kilner-Lunchbox-Salad-Dressing-Transparent/dp/B01FZ5ZAJK", + "created_at": "2017-08-24T09:34:43.996Z", + "_id": 1014 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://stackoverflow.com/questions/8332333/node-js-setting-up-environment-specific-configs-to-be-used-with-everyauth", + "created_at": "2017-09-05T13:15:07.228Z", + "_id": 1015 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.youtube.com/watch?v=HCGHb0OVz1s", + "created_at": "2017-09-05T14:58:09.784Z", + "_id": 1016 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.windy.com/55.944/-4.570?rain,46.012,-27.026,4,m:fepaf1y", + "created_at": "2017-09-12T12:28:00.650Z", + "_id": 1017 + }, + { + "visits": 3, + "__v": 0, + "long_url": "", + "created_at": "2017-09-29T13:32:57.727Z", + "_id": 1018 + }, + { + "visits": 10, + "__v": 0, + "long_url": "https://tools.wmflabs.org/geohack/geohack.php?pagename=Glasgow¶ms=55_51_28.8_N_4_15_32.4_W_region:GB_type:city", + "created_at": "2017-10-02T21:50:14.622Z", + "_id": 1019 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.amazon.co.uk/dp/B01CYMB7RQ/ref=asc_df_B01CYMB7RQ46573316/?tag=googshopuk-21&creative=22110&creativeASIN=B01CYMB7RQ&linkCode=df0&hvadid=208095731238&hvpos=1o13&hvnetw=g&hvrand=14567822979560016693&hvpone=&hvptwo=&hvqmt=&hvdev=m&hvdvcmdl=&hvlocint=1006886&hvlocphy=9046964&hvtargid=pla-335923145900", + "created_at": "2017-10-06T06:56:41.369Z", + "_id": 1020 + }, + { + "visits": 2, + "__v": 0, + "long_url": "http://pda.jcheck.com/scotrail/route?from=glasgow+queen+street&to=dumbarton+east&searchType=searchInput&action=Search", + "created_at": "2017-10-12T16:30:16.914Z", + "_id": 1021 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.acer.com/ac/en/GB/content/support-product/5930?b=1", + "created_at": "2017-10-26T11:48:22.300Z", + "_id": 1022 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Fly-London-Nosm-Boots-Expresso/dp/B007JRTHBK/ref=sr_1_29?m=A3P5ROKL5A1OLE&s=shoes&ie=UTF8&qid=1509736755&sr=1-29&nodeID=1769788031&psd=1&refinements=p_lbr_brands_browse-bin%3AFly+London%2Cp_6%3AA3P5ROKL5A1OLE", + "created_at": "2017-11-03T19:19:46.008Z", + "_id": 1023 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://pda.jcheck.com/scotrail/route?from=partick&to=dumbarton+east&searchType=searchInput&action=Search", + "created_at": "2017-11-06T17:47:29.701Z", + "_id": 1024 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.nexusmods.com/nomanssky/mods/363/?", + "created_at": "2017-11-16T20:04:40.839Z", + "_id": 1025 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.apkmirror.com/apk/developed-with-google/android-samba-client/android-samba-client-1-1-release/android-samba-client-1-1-android-apk-download/", + "created_at": "2017-11-30T17:45:20.112Z", + "_id": 1026 + }, + { + "visits": 2, + "__v": 0, + "long_url": "vj", + "created_at": "2017-12-13T14:46:42.053Z", + "_id": 1027 + }, + { + "visits": 0, + "__v": 0, + "long_url": "http://nurl.co/Qz", + "created_at": "2017-12-13T14:46:59.610Z", + "_id": 1028 + }, + { + "visits": 0, + "__v": 0, + "long_url": "www", + "created_at": "2017-12-13T14:47:09.554Z", + "_id": 1029 + }, + { + "visits": 3, + "__v": 0, + "long_url": "www.264sihu.com", + "created_at": "2017-12-13T14:47:27.812Z", + "_id": 1030 + }, + { + "visits": 6, + "__v": 0, + "long_url": "https://traintimes.silvrtree.co.uk/", + "created_at": "2017-12-19T12:27:58.987Z", + "_id": 1031 + }, + { + "visits": 1, + "__v": 0, + "long_url": "Unrl", + "created_at": "2018-02-25T17:59:15.637Z", + "_id": 1032 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://acountlockeddetectt.ga/", + "created_at": "2018-03-08T14:16:00.691Z", + "_id": 1033 + }, + { + "visits": 8, + "__v": 0, + "long_url": "http://acountlockeddetectt.ga/sayang", + "created_at": "2018-03-08T14:16:20.198Z", + "_id": 1034 + }, + { + "visits": 2, + "__v": 0, + "long_url": "acountlockeddetectt.ga/,", + "created_at": "2018-03-09T07:23:53.135Z", + "_id": 1035 + }, + { + "visits": 118, + "__v": 0, + "long_url": "http://acountlockeddetectt.ga/,", + "created_at": "2018-03-09T07:24:14.668Z", + "_id": 1036 + }, + { + "visits": 0, + "__v": 0, + "long_url": "wefefqwfqwfqw", + "created_at": "2018-04-01T17:07:30.457Z", + "_id": 1039 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/ATPWONZ-52Pcs-Hollow-Cutter-Leather/dp/B0773JX25G/ref=sr_1_11?ie=UTF8&qid=1520799616&sr=8-11&keywords=Clay+Cutter", + "created_at": "2018-03-11T20:21:49.079Z", + "_id": 1037 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Alcohol-Moonshine-Spirits-Brewing-Distiller/dp/B0161UWD20/ref=pd_bxgy_79_img_2?_encoding=UTF8&psc=1&refRID=Q2N2ETWB7D2W2TTDG4QV", + "created_at": "2018-03-13T13:12:30.366Z", + "_id": 1038 + }, + { + "visits": 0, + "__v": 0, + "long_url": "wetwetwet", + "created_at": "2018-04-01T17:07:33.394Z", + "_id": 1040 + }, + { + "visits": 2, + "__v": 0, + "long_url": "http://uk.businessinsider.com/san-francisco-millennium-tower-condo-sold-for-million-under-asking-2018-4?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+typepad%2Falleyinsider%2Fsilicon_alley_insider+%28Silicon+Alley+Insider%29&r=US&IR=T", + "created_at": "2018-04-03T14:26:16.254Z", + "_id": 1041 + }, + { + "visits": 7, + "__v": 0, + "long_url": "http://solvessssproblemsss.sytes.net/,", + "created_at": "2018-06-16T05:45:08.330Z", + "_id": 1042 + }, + { + "visits": 4, + "__v": 0, + "long_url": "solvessssproblemsss.sytes.net/,", + "created_at": "2018-06-16T05:53:10.194Z", + "_id": 1043 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://web.archive.org/web/20090430090315/http://rurl.org:80/", + "created_at": "2018-06-19T15:43:34.207Z", + "_id": 1044 + }, + { + "visits": 3, + "__v": 0, + "long_url": "http://uk.businessinsider.com/250-million-mansion-in-bel-air-comes-with-crazy-perks-2017-1?utm_source=feedburner&%3Butm_medium=referral&utm_medium=feed&utm_campaign=Feed%3A+businessinsider+%28Business+Insider%29&r=US&IR=T", + "created_at": "2018-06-26T20:26:42.289Z", + "_id": 1045 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.facebook.com/groups/1624910374437247/permalink/2054434434818170/?comment_id=2054516168143330&comment_tracking=%7B%22tn%22%3A%22R%22%7D", + "created_at": "2018-07-08T23:21:17.475Z", + "_id": 1046 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/15-Acrylic-10mm-Tiny-Skull-Cabochon-Flat-Back-Decoration-Embellishment-Deco-Cute-/361913674840", + "created_at": "2018-07-21T16:18:34.107Z", + "_id": 1047 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://m.ebay.co.uk/itm/14pcs-Nautical-Sea-Theme-Set-Flatback-Resin-Cabochons-Embellishment-Craft-Kit/392080229980?hash=item5b49cd865c%3Am%3AmTdQEv7JKFs4pSpGwbWNGNQ&var=661027611790&_nkw=cabochon+sea+embellishments&_from=R40&rt=nc", + "created_at": "2018-07-21T16:22:26.287Z", + "_id": 1048 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://g.redditmedia.com/DOEY2HISr83A8PpSMsKKpmHYaiL2Wunw16_PgHD3r50.gif?fm=mp4&mp4-fragmented=false&s=d9c3bafa3efa861ba0066502a638890d", + "created_at": "2018-08-07T09:34:59.654Z", + "_id": 1049 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.com/Pony-Up-Daddy-Saddle-Princess/dp/B01KUH558O", + "created_at": "2018-08-24T19:51:49.802Z", + "_id": 1050 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Smiffys-Horse-Hat-Mane-Brown/dp/B00AZGFDNI/ref=wl_mb_wl_huc_mrai_1_dp?ie=UTF8&pd_rd_i=B00AZGFDNI&pd_rd_r=9XSJ0D2RBXYY430W445B&pd_rd_w=8J3wW&pd_rd_wg=R8wWa", + "created_at": "2018-08-24T20:03:14.550Z", + "_id": 1051 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Genius-nicer-dicer-fusion-16-piece/dp/B01N5PYU43/ref=pd_sbs_201_5?_encoding=UTF8&pd_rd_i=B01N5PYU43&pd_rd_r=edb3945b-c047-11e8-a337-3faa212eb1c9&pd_rd_w=4sZzD&pd_rd_wg=niwLS&pf_rd_i=desktop-dp-sims&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_p=85d62760-2a0e-407d-aa36-f3c03afc01c3&pf_rd_r=N6AB2Q0ZZZZ88XMT3XPW&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=N6AB2Q0ZZZZ88XMT3XPW", + "created_at": "2018-09-25T08:13:41.658Z", + "_id": 1052 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://example.com", + "created_at": "2018-12-06T17:34:22.139Z", + "_id": 1053 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.groupon.co.uk/deals/green-chilli-cafe-4?p=9&nlp=&CID=UK&uu=3d0739c4-ccb2-44c9-9874-49d39de1996e&tx=0&utm_source=merchandising&utm_medium=email&sid=511c007b-f800-47fe-b768-237edfb31700_0_20181227&t_division=glasgow&date=20182712&sender=rm&s=body&c=image&d=deal-page", + "created_at": "2018-12-27T17:13:23.010Z", + "_id": 1054 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.groupon.co.uk/deals/the-number-1-bead-shop-glasgow-6?p=16&nlp=&CID=UK&uu=3d0739c4-ccb2-44c9-9874-49d39de1996e&tx=0&utm_source=merchandising&utm_medium=email&sid=511c007b-f800-47fe-b768-237edfb31700_0_20181227&t_division=glasgow&date=20182712&sender=rm&s=body&c=image&d=deal-page", + "created_at": "2018-12-27T17:14:20.946Z", + "_id": 1055 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://search-test-foo-ihvdhrocdi6tle7qbdytf2pvfq.eu-west-1.es.amazonaws.com/_plugin/kibana/app/kibana#/discover?_g=(filters:!(),refreshInterval:('$$hashKey':'object:785',display:'10%20seconds',pause:!f,section:1,value:10000),time:(from:now-5h,mode:relative,to:now))&_a=(columns:!(_source),filters:!(),index:'8aa81d70-1b39-11e9-93f0-4532a56175f9',interval:auto,query:(language:lucene,query:%22prd-dir-pfeint%22),sort:!(timestamp,desc))", + "created_at": "2019-04-02T09:52:04.776Z", + "_id": 1056 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.google.com/maps/dir//Doune+Castle,+Castle+Hill,+Doune+FK16+6EA/@56.1835923,-4.0603162,15z/data=!4m8!4m7!1m0!1m5!1m1!1s0x48888bd24de4fcbf:0x5599d30a61b7fb39!2m2!1d-4.0499462!2d56.1851961", + "created_at": "2019-05-22T14:19:09.632Z", + "_id": 1057 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.lidl.co.uk/en/p/diy/powerfix-profi-metal-shelving-unit/p27863", + "created_at": "2019-12-05T20:00:32.746Z", + "_id": 1058 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://open.spotify.com/playlist/7lE3XcDdMvkM4aVJVNoE3q?si=HHy83YR8RuG6tgFqJjsIxw#_=_", + "created_at": "2020-04-17T10:23:54.684Z", + "_id": 1059 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.sslforfree.com/", + "created_at": "2020-04-17T14:00:57.665Z", + "_id": 1060 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://expressjs.com/en/starter/static-files.html", + "created_at": "2020-04-17T14:26:22.082Z", + "_id": 1061 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.google.com/", + "created_at": "2020-04-17T18:22:38.904Z", + "_id": 1062 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://svelte.dev/", + "created_at": "2020-04-17T18:24:23.858Z", + "_id": 1063 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.gov.scot/news/social-distancing-regulations-strengthened/", + "created_at": "2020-04-21T19:20:39.065Z", + "_id": 1064 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://open.spotify.com/playlist/37i9dQZF1DZ06evO1XzSz4?si=oMlUIPXbS9mWxVMP7NSFPQ", + "created_at": "2020-04-22T13:22:14.188Z", + "_id": 1065 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://open.spotify.com/playlist/37i9dQZF1DZ06evO0As8NY?si=NQkFuDloRky6fM_qBT_uQQ", + "created_at": "2020-04-22T13:30:40.684Z", + "_id": 1066 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://shop.cracked.com/sales/the-all-in-one-adobe-creative-cloud-suite-certification-bundle?utm_source=cracked.com&utm_medium=referral&utm_campaign=the-all-in-one-adobe-creative-cloud-suite-certification-bundle&utm_term=scsf-385299&utm_content=a0x1P000004NRnm&scsonar=1", + "created_at": "2020-04-28T15:55:56.832Z", + "_id": 1067 + }, + { + "visits": 12, + "__v": 0, + "long_url": "https://jasonslade.com/", + "created_at": "2020-04-28T16:05:01.127Z", + "_id": 1068 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://output.jsbin.com/bocebom", + "created_at": "2020-05-30T18:46:09.893Z", + "_id": 1069 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.belfasttelegraph.co.uk/news/uk/ff430/38503477.ece/AUTOCROP/w800/bpanews_f54b406e-9ef5-4183-b63b-162d8cd5333a_embedded245022225", + "created_at": "2020-07-03T14:41:46.412Z", + "_id": 1070 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://cdn.images.express.co.uk/img/dynamic/139/590x/secondary/Jacob-Rees-Mogg-children-1982608.webp?r=1564496520861", + "created_at": "2020-07-03T14:48:39.880Z", + "_id": 1071 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.lenovo.com/gb/en/desktops-and-all-in-ones/thinkcentre/m-series-tiny/ThinkCentre-M75q-1/p/11TC1MTM73Q", + "created_at": "2020-07-07T09:59:15.099Z", + "_id": 1072 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.techblunt.com/fix-neterr_cert_authority_invalid-chrome-error/", + "created_at": "2020-07-22T14:39:44.244Z", + "_id": 1073 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/AzH9J698eezep5y", + "created_at": "2020-08-04T22:41:07.651Z", + "_id": 1074 + }, + { + "visits": 9, + "__v": 0, + "long_url": "https://www.howtogeek.com/345504/how-to-open-heic-files-on-windows-or-convert-them-to-jpeg/", + "created_at": "2020-08-26T09:27:02.505Z", + "_id": 1075 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.playmobil.co.uk/advent-calendar---santas-workshop/9264.html", + "created_at": "2020-09-23T17:55:38.496Z", + "_id": 1076 + }, + { + "visits": 6, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/4b5kFfHmTXb55Z6/download", + "created_at": "2020-10-13T14:48:34.859Z", + "_id": 1077 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://github.com/blueseerERP/blueseer/releases/download/blueseer.sqlite.linux.v43.deb/blueseer.sqlite.linux.v43.deb", + "created_at": "2020-12-07T13:29:39.115Z", + "_id": 1078 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://i.ebayimg.com/images/g/csEAAOSwwJ5dt1aK/s-l1600.jpg", + "created_at": "2021-01-25T10:32:41.664Z", + "_id": 1079 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://martind-mime:Ruby.Miner.709@bitbucket.org/martind-mime/aiber-buildbot/raw/0805fd0373ce3452e8f2fa397bbb419c92fcd6f4/server-config.sh", + "created_at": "2021-02-15T16:23:54.138Z", + "_id": 1080 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.raymond.cc/blog/keep-application-running-by-automatically-rerun-when-closed/", + "created_at": "2021-02-16T11:18:23.560Z", + "_id": 1081 + }, + { + "visits": 15, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/XPYMDzHYXYdTBZG/download", + "created_at": "2021-02-17T12:44:30.437Z", + "_id": 1082 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://nurl.co/", + "created_at": "2021-02-25T16:31:30.571Z", + "_id": 1083 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://drive.google.com/file/d/1VxiaxB05boo--N_OBZk9PQGG2JTW_rxG/view?usp=sharing", + "created_at": "2021-03-04T12:05:09.919Z", + "_id": 1084 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/3Npf7MgWSpz5qNG/download", + "created_at": "2021-05-07T15:43:16.678Z", + "_id": 1085 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/EnRFajB9DQwxq8Q", + "created_at": "2021-05-16T08:33:19.428Z", + "_id": 1086 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://eastsutherlandrescueassociation.org.uk", + "created_at": "2021-05-19T10:04:54.500Z", + "_id": 1087 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/cZdMKAcnPp5CZDr/download", + "created_at": "2021-06-05T22:12:38.291Z", + "_id": 1088 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://photos.google.com/share/AF1QipNQPUvAUa5EeSZPOzkavS9kvboAAFY-Wif7qLqgkBhVvTb9WVXLfeg_laKyoX-Bng/photo/AF1QipO1foAKhqEdajelJo2zOAYxPDJXdpmsAcGwXSM4?key=Zi1IVDdpZjBZRVhCMEtKb1lJdnJRMnlsOVptTlVR", + "created_at": "2021-07-02T15:11:45.929Z", + "_id": 1089 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://photos.app.goo.gl/W8dKyitBSXdm5WRk6", + "created_at": "2021-07-02T15:15:07.256Z", + "_id": 1090 + }, + { + "visits": 7, + "__v": 0, + "long_url": "https://presstories.com/2021/09/26/september-30-2021-is-the-day-the-internet-is-disabled-for-millions-of-smartphones-and-computers/", + "created_at": "2021-09-30T09:13:25.173Z", + "_id": 1091 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/cooke-lewis-apollonia-satin-stainless-steel-1-5-bowl-sink-drainer/5059340118420_BQ.prd", + "created_at": "2021-11-14T17:00:42.155Z", + "_id": 1092 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-caraway-white-base-cabinet-w-1000mm/3663602637479_BQ.prd", + "created_at": "2021-11-14T17:05:25.117Z", + "_id": 1093 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-caraway-white-base-cabinet-w-800mm/3663602637462_BQ.prd", + "created_at": "2021-11-14T17:05:50.054Z", + "_id": 1094 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-caraway-white-base-cabinet-w-600mm/3663602637455_BQ.prd", + "created_at": "2021-11-14T17:06:10.417Z", + "_id": 1095 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-caraway-white-base-cabinet-w-300mm/3663602637417_BQ.prd", + "created_at": "2021-11-14T17:06:42.358Z", + "_id": 1096 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-caraway-white-oven-housing-base-cabinet-w-600mm/3663602637554_BQ.prd", + "created_at": "2021-11-14T17:07:24.109Z", + "_id": 1097 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-pebre-matt-anthracite-soft-close-lh-pull-out-storage-h-698mm-w-720mm/3663602480198_BQ.prd", + "created_at": "2021-11-14T17:08:13.097Z", + "_id": 1098 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-soto-soft-close-deep-drawer-box-w-564mm/3663602479277_BQ.prd", + "created_at": "2021-11-14T17:09:44.569Z", + "_id": 1099 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-soto-soft-close-drawer-box-w-564mm/3663602479161_BQ.prd", + "created_at": "2021-11-14T17:10:11.295Z", + "_id": 1100 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-soto-soft-close-drawer-box-w-264mm/3663602479130_BQ.prd", + "created_at": "2021-11-14T17:10:36.778Z", + "_id": 1101 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.diy.com/departments/goodhome-soto-internal-drawer-front-w-600mm/3663602479222_BQ.prd", + "created_at": "2021-11-14T17:10:59.192Z", + "_id": 1102 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://open.spotify.com/playlist/43XgEUOlo6qAONKGJgWh6a?si=28350cb04799489b&nd=1", + "created_at": "2021-12-02T11:14:37.432Z", + "_id": 1103 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://photos.app.goo.gl/wypTnYwPBKxmYwr78", + "created_at": "2021-12-03T12:10:08.765Z", + "_id": 1104 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.dell.com/community/XPS/XPS-13-9370-which-USB-C-ports-can-I-plug-the-A-C-adapter-into/td-p/7301259", + "created_at": "2022-01-14T11:12:58.633Z", + "_id": 1105 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.youtube.com/watch?v=HIPNVm6lNfM", + "created_at": "2022-02-25T23:23:27.513Z", + "_id": 1106 + }, + { + "visits": 27, + "__v": 0, + "long_url": "https://cloud.xira.co.uk/index.php/s/DLCMw3MkwQbsG7g/download", + "created_at": "2022-03-07T15:38:36.757Z", + "_id": 1107 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.thenewcivilrightsmovement.com/wp-content/uploads/2022/04/california-secretary-of-state-candidate-claims-to-have-empath-powers-proving-trump-won-rs-4.jpg", + "created_at": "2022-04-22T16:02:06.510Z", + "_id": 1108 + }, + { + "visits": 7, + "__v": 0, + "long_url": "http://cloud.xira.co.uk/index.php/s/By4N9nHiCGoernk/download/server_install.sh", + "created_at": "2022-05-31T14:01:09.376Z", + "_id": 1109 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.google.com/maps/@43.3087063,5.3665552,3a,75y,92.05h,96.04t/data=!3m6!1e1!3m4!1spP_gHbEJvj0s45y0Bqr0-w!2e0!7i16384!8i8192", + "created_at": "2022-06-16T12:39:57.151Z", + "_id": 1110 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.gov.uk/guidance/coronavirus-covid-19-test-kit-give-feedback-or-report-harm", + "created_at": "2022-07-17T08:57:26.819Z", + "_id": 1111 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.youtube.com/watch?v=Ty9ojWfJJEA", + "created_at": "2022-11-25T12:45:18.999Z", + "_id": 1112 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://www.youtube.com/watch?v=Ty9ojWfJJEA", + "created_at": "2022-11-25T12:45:19.069Z", + "_id": 1113 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://live.sortedfood.com/big-christmas-bash-17th-dec-8pm", + "created_at": "2022-12-17T18:30:50.802Z", + "_id": 1114 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://support.apple.com/kb/DL1837?viewlocale=en_US&locale=en_US", + "created_at": "2022-12-30T10:00:24.733Z", + "_id": 1115 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://my.splashtop.com/team_deployment/download/4K24ASXATAHA", + "created_at": "2023-01-04T11:22:03.978Z", + "_id": 1116 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://browser.geekbench.com/v4/cpu/16716444", + "created_at": "2023-02-17T17:04:59.652Z", + "_id": 1117 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://doors.live/t?id=8142c135-8153-4ea2-8c07-f2666557195d", + "created_at": "2023-02-27T19:44:01.870Z", + "_id": 1118 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/ZWJTYRKPzZCY7YN", + "created_at": "2023-03-03T12:25:15.048Z", + "_id": 1119 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://unix.stackexchange.com/questions/63410/rsync-skip-files-for-which-i-dont-have-permissions", + "created_at": "2023-03-03T23:59:02.152Z", + "_id": 1120 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.hilton.com/en/book/reservation/rooms/?ctyhocn=BHXMETW&arrivalDate=2023-11-10&departureDate=2023-11-13&groupCode=FSFFR&room1NumAdults=1&bm-verify=AAQAAAAG_____xuTfy9oVBc-NHTruiHjoPmh4My8kw5Wc1O5VFBwQDtC0Ev9tN-F2vRKrbjv6SlsqTdx0Qltt00irraYBCv5qrLLRYEg49cnOmawAVcIJOVZkgHfHgNB31P-NIZV6WhLVQgvwOmYAs-E1rDAZ6uEAUIsfzzvrdWOuiMGhJ4oiUNBxCf8q9KVWtNBSB-GoGGcTU0eZ9oLRRe2hNzTJ8mR9quN2edPT8_Pdt9KzrlQfi87oDhZHZElFPJHeG9Bh3_NerjGUglMx4-6n5gUIco2X09y-quM3jTWJoZOjqt3XV837g8oLyF3OUUPSlWoPw-LmSRXOxPWwa87pn5iVobKJXDJGy0UWKjMR3MWUV5noGnS51qnZlN9OywmQM0uQ4OHOIagQAuP6_OucVwYZRZsKjG8wx8LQgG-WpucuXjOT0jneEaXywbZz6AqyXMa3eZm74wxbpAOL50jUrJw7Fyz9qxzm5hxgBbSBeejBFpVFubj4w", + "created_at": "2023-03-07T08:58:48.620Z", + "_id": 1121 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.americangreetings.com/detail/ecards/birthday/michael-bolton-fun-birthday-song-ecard-personalize-lyrics/pn/prod3465608", + "created_at": "2023-03-09T13:02:45.952Z", + "_id": 1122 + }, + { + "visits": 7, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/W2xyZpH6JG93oYA/download/hbalan.mkv", + "created_at": "2023-03-09T13:16:50.799Z", + "_id": 1123 + }, + { + "visits": 20, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/aWEdnz9DfCkTgNA/download/server_install.sh", + "created_at": "2023-03-29T08:20:46.925Z", + "_id": 1124 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.co.uk/PACK-Paving-Drainage-Grass-Protector/dp/B00EAJ5KKC/ref=asc_df_B00EAJ5KKC?tag=bingshoppinga-21&linkCode=df0&hvadid=79920808416432&hvnetw=o&hvqmt=e&hvbmt=be&hvdev=c&hvlocint=&hvlocphy=&hvtargid=pla-4583520384050565&psc=1", + "created_at": "2023-04-04T08:24:26.649Z", + "_id": 1125 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://pastebin.caliban.io/+xIivb.txt", + "created_at": "2023-04-08T08:54:56.836Z", + "_id": 1126 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.youtube.com/watch?v=3-UCsM02rKk", + "created_at": "2023-04-21T12:57:55.271Z", + "_id": 1127 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://www.amazon.co.uk/HomeHarmony%C2%AE-Storage-Bedside-Organizer-Adjustable/dp/B09XHYKNDZ/ref=sr_1_20?crid=23FGJY8XYSVWK&keywords=slim%2Bdrawer%2Bunit&qid=1681562118&sprefix=slim%2Bdrawer%2Bunit%2Caps%2C99&sr=8-20&th=1", + "created_at": "2023-04-23T10:11:28.381Z", + "_id": 1128 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/8dNcLSoXRMyKLf4", + "created_at": "2023-04-23T11:06:31.941Z", + "_id": 1129 + }, + { + "visits": 9, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Motorola-Edge-30-Neo-Magnetic-Gold/dp/B0BH8GT16F/ref=sr_1_53?crid=1OL335WBXIIU6&keywords=motorola%2Bedge%2B30%2Bneo%2Bcase&qid=1681838765&sprefix=motorola%2Bedge%2B30%2Bneo%2Bcase%2Caps%2C131&sr=8-53&th=1", + "created_at": "2023-04-24T17:48:03.071Z", + "_id": 1130 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.amazon.co.uk/AOKUMA-Motorola-Moto-Edge-Neo/dp/B0BG1CNFFN/ref=sr_1_3?crid=188UOLA3V6DHQ&keywords=motorola+edge+30+neo+screen+protector&qid=1682357705&sprefix=motorola+edge+30+neo+scree%2Caps%2C108&sr=8-3", + "created_at": "2023-04-24T17:53:37.253Z", + "_id": 1131 + }, + { + "visits": 23, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/f5X7nTEf3fkWp9L/download/generic_install.sh", + "created_at": "2023-05-25T08:54:23.574Z", + "_id": 1132 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/394643930943?hash=item5be29c7f3f:g:yQcAAOSwdkZkb1PR&amdata=enc%3AAQAIAAAA0EpOdh55oxBOUCYW9fSDd3vFBVN6JDbjc0R5OxmwwFoP1dpIN5mb%2BNf3ESY25xnCIrzpBwSe0jfM9b576sRMOavP8bJFD1f08Sy5IfOq0FBo8%2B0bD0GqkbvEZJqb4737MQjji%2F6sWDP0lz2fWzcYrJwqr7PwOZ8bff1BhfKOO9LW7g8JlYhnMdoqhiap7tT75vhXDxfijJiWNz7g8RxSewr1f7lj4m5hUL5k1isay9%2FY3twNQv15u2p89JGQhEUdYY%2FtC8O%2BwfuJzjuabsWfJ6w%3D%7Ctkp%3ABk9SR6r5ou-KYg", + "created_at": "2023-05-26T07:58:14.479Z", + "_id": 1133 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/304945993768?hash=item4700329828:g:sn4AAOSwDwdkaK8R&amdata=enc%3AAQAIAAAA0B%2Bo2BwzvgZmcL9a9Q1%2FXSVtS7%2BIFpNSDWYw9QTk8fx5XUJGUjPPhxyJHDeDBbbvj4eMcUNMoVZcrr4w1anmIm%2FwZCebWXl1XVp%2BimVel0mQklxD1UMV34D1DtYd2wno1ghR2NFKkyrF1UVgx8wM%2B6r6q%2BWQobRhllOxXYnmh8Pj%2FGuACJSAXOiP0KQVDifkZrGjDCmOh9ZI1mrjodFjmsFfQWu8M2UAdAFRSzP2Fz1mC%2BflhCcSGYW5TQmeLWvw71Oe6frV1HVjpxQZN5aHiCQ%3D%7Ctkp%3ABk9SR-yKm-2JYg", + "created_at": "2023-05-26T17:46:54.291Z", + "_id": 1134 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://www.amazon.co.uk/AOPO-Containers-Reusable-Preservation-Organization/dp/B0BD8Y1PYQ/ref=sr_1_31?crid=1G3R96CJD1S3F&keywords=food%2Bstorage%2Bairtight%2Bseal%2Btrays%2Bassorted&qid=1685362134&sprefix=food%2Bstorage%2Bairtigth%2Bseal%2Btrays%2Bassorted%2Caps%2C100&sr=8-31&th=1", + "created_at": "2023-05-30T20:16:12.656Z", + "_id": 1135 + }, + { + "visits": 6, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/354816472997?hash=item529cb5b7a5:g:HZwAAOSwqttkdPMK&amdata=enc%3AAQAIAAAA0CmfCbwkijxNzCgxb%2B2VlvQMmJSaMdm1BHo8Y0%2B%2F5vTyoQbqBkei5SlJHtfEHhTrWjkV6kA0pefxqcHaFfVzTgQZBkH%2BzrYDOVklijI9ub9gHqB8BgYdx5jGhOBxPHUeMWZqXgl7W8Ykg7Lk6d9x3aINdD9OyZMu8rndsp4JL6mkixnEVdrNnZw%2Bfv1lQhI42XX5SsU5cUdBNWpBzhPWS1Wl5QXL7Y1PxhSmIEmfC9ma8H%2FlmnDABYvbncfvT98HTiij6FbbiccrcDu%2F%2FfKe77s%3D%7Ctkp%3ABk9SR_yrj7GOYg", + "created_at": "2023-06-05T16:12:11.023Z", + "_id": 1136 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/304933100747?hash=item46ff6ddccb:g:-FIAAOSwUghkXMGB&amdata=enc%3AAQAIAAAA8Mkx7Te1rq9rbIWS1dYjaxzmzM4D9J5pDO7ueVoBVHGpfvcA9MG3bPOSkI3tQKN9IAhhhslYj61itlO4MMm8JsB4DMDW5VQo0l8ZPlFX6iAN4pA2PBtPwBDGQ5ehSVTqeHwYt80NeW2NiYw7umlgUJ6mPBDAyN18U5OX6vprhht%2F6Y4GuB0z%2B%2FZ0ID1DBab9hXZCcmcyPqvtPcMe8%2BGNcATJbwSKqjdju0DvoyFBA70EII2VuauCM4M5%2F6TNvUXfci3fNpN5NlDveHyESAQ%2F%2BaBZgkBf2zGLcPXLVvFJSxlNmMPCCpl4dI%2BPT42ARnvYyA%3D%3D%7Ctkp%3ABk9SR56Hn4SNYg", + "created_at": "2023-06-05T16:12:45.259Z", + "_id": 1137 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.instagram.com%2Freel%2FCs3pbLjJgV5%2F%3Figshid%3DMzRlODBiNWFlZA%253D%253D%26fbclid%3DIwAR2cQCx0vzAbYRp752l9mXzCi_CEZU7O1xtxAo3Q9dPofi50LqzYvklMK5A&h=AT0cywxkDgrbMxZOongVB63BTm0kPeBKxfCTd2cVhfwtXz-LSplnlWw2NFHSutpg4eeX1X1bysTPLVaaJ-kP8PluRyiO9k_C4VMLkbvKa-hGXtTRjJJqOzcD-M28phB0dA&__tn__=-UK-R&c[0]=AT1aunbap6G9YhtvKb9KPzmtRnZ4Qc_ljecTmw2-clXkyNJAtzj48Q75Hxkcx5b2Ovvkkgus2iOE_hzD8t24C8UKp1ukqOyMXe4asyZyQHLEKZ-jicb2bqtLMBQhFzbluyr5lroWAxgvS4r5D3bO-IrzCs5-__RueUmnf8V0iuaUXk1DBx2vjnDSIRzOI1RTwOkw5AKMEB-PVyw765o9JHiIQcMXqIwdp6V3cAkFjqXUR_wjuD_0LR9d", + "created_at": "2023-06-07T07:23:38.516Z", + "_id": 1138 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.debenhams.com/search/facet/categoryTaxonomy/T-Shirts/size/XXL?text=mantaray&sort=price-asc", + "created_at": "2023-08-11T14:26:19.482Z", + "_id": 1142 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.nexusmods.com/site/mods/631", + "created_at": "2023-10-22T12:32:33.116Z", + "_id": 1148 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Biunixin-Submersible-Sterilizer-Disinfection-Aquarium/dp/B086LJ4S73/ref=sr_1_25?crid=1IQ45LLYFUC58&keywords=waterproof%2BUV%2Blight%2Baquarium%2Blight&qid=1686504508&sprefix=waterproof%2Buv%2Blight%2Baquarium%2Blight%2Caps%2C110&sr=8-25&th=1", + "created_at": "2023-06-11T17:36:23.383Z", + "_id": 1139 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Security-Outdoor-270%C2%BAWide-Waterproof-Powered/dp/B083BS5ZDN/ref=sr_1_5?crid=2ET8ED08IWJPF&keywords=waterproof+submerge+UV+light+solar&qid=1686504394&sprefix=waterproof+submerge+uv+light+solar%2Caps%2C90&sr=8-5", + "created_at": "2023-06-11T17:36:59.217Z", + "_id": 1140 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/394661433927?hash=item5be3a79247:g:CJwAAOSwbVZkfMKk&amdata=enc%3AAQAIAAAA8Ogkz1G2SZBAZfNADB1sXIo5LxnoWPaZauyJEkOVPlZOlRGwSTxfvRGSdMjoM5ulUn1hibQ5i7GCAy2P2Qr9RjbF0JKsz0gN5WN%2FP1OyY8qk96kG40x3utW2YHeE%2FTC4yBGlr6v%2F4QPzBcY1UWNRE%2BRc22MK2%2Bz%2FmJ67d1swRwd6IicNfpzK2bad0i0dVBDoib8vk%2B4VG837dYU3mh3lgB139FGS86%2FeHBWplV54nlVsP1baCfGgSo3dmrgUG56YUl3oDEER68yLlbs6hUtNrETyHTDGdmGmfdY7an5V2T6vfX8irCItEDhVoWBW138uXA%3D%3D%7Ctkp%3ABk9SR46N3_mZYg", + "created_at": "2023-06-18T17:52:55.128Z", + "_id": 1141 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://www.debenhams.com/product/mantaray-textured-multi-stripe-notch-neck-tee_mdd07998?colour=blue", + "created_at": "2023-08-11T14:26:44.097Z", + "_id": 1143 + }, + { + "visits": 6, + "__v": 0, + "long_url": "https://web.archive.org/web/20220626153541/https://fanfusionuk.com/index.php/earpfusionuk/", + "created_at": "2023-08-12T15:37:33.054Z", + "_id": 1144 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://cloud.caliban.io/index.php/s/j7cMXMGLTwsiPQj/download/installer.sh", + "created_at": "2023-09-06T13:30:45.714Z", + "_id": 1145 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://bitbucket.org/mimetonyross/devops/downloads/server_install.sh", + "created_at": "2023-10-11T15:23:54.518Z", + "_id": 1146 + }, + { + "visits": 3, + "__v": 0, + "long_url": "http://www.mirrorservice.org/sites/cdimage.ubuntu.com/cdimage/xubuntu/releases/22.04/release/", + "created_at": "2023-10-17T08:17:09.661Z", + "_id": 1147 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://files.aiber.dev/f/d03ce2cc655a40ca9577/?dl=1", + "created_at": "2023-10-23T09:57:35.253Z", + "_id": 1149 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/DXK-Swimming-Mirrored-Protection-Bridgefor/dp/B083TXN75D/ref=sxin_16_pa_sp_search_thematic_sspa?content-id=amzn1.sym.381a8b2b-c260-43ab-89a0-4b68bc0bb8f7%3Aamzn1.sym.381a8b2b-c260-43ab-89a0-4b68bc0bb8f7&crid=1G6IS4P757SZB&cv_ct_cx=blue%2Bgoggles&keywords=blue%2Bgoggles&pd_rd_i=B083TXN75D&pd_rd_r=d2680c17-8db4-400a-8574-4ce8715bf06a&pd_rd_w=3aZqs&pd_rd_wg=gUxKN&pf_rd_p=381a8b2b-c260-43ab-89a0-4b68bc0bb8f7&pf_rd_r=NHKEFR9W1SCC1BBGCHT0&qid=1699118286&sbo=RZvfv%2F%2FHxDF%2BO5021pAnSA%3D%3D&sprefix=blue%2Bgoggl%2Caps%2C296&sr=1-146-348cbd3d-5326-49d0-9a61-a07d46fb35bd-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9zZWFyY2hfdGhlbWF0aWM&th=1", + "created_at": "2023-11-04T17:32:49.526Z", + "_id": 1150 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://nmcheck.gnome.org/check_network_status.txt", + "created_at": "2023-11-05T00:17:05.274Z", + "_id": 1151 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://chat.google.com/dm/nyTsbgAAAAE/3j6dtYOrZY8/3j6dtYOrZY8", + "created_at": "2023-11-09T22:07:21.422Z", + "_id": 1152 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://github.com/rbishop/dotfiles", + "created_at": "2023-11-14T20:38:42.474Z", + "_id": 1153 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://uk.frankgreen.com/collections/reusable-cups", + "created_at": "2023-12-12T15:46:43.811Z", + "_id": 1154 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://wordpress-157866-0.cloudclusters.net/wp-admin/sopol/", + "created_at": "2023-12-15T16:48:33.764Z", + "_id": 1155 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://wordpress-157866-0.cloudclusters.net/wp-admin/splsaudi/", + "created_at": "2023-12-16T14:58:19.281Z", + "_id": 1156 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/284656243353?hash=item4246d59299:g:PvgAAOSwcQZiDRJb&amdata=enc%3AAQAIAAAA0B0Q9VkkHrjYAAA7frjNxJ1Eps1Dti7FEen3874%2BHvToKYkqmBcOswfiXfr2RA6CNx%2F%2BkLGX5wXoW9zD0OCBCT7F08VPe7A3e3F5E%2B%2BmDVPaAMsKTrxeWAztpeKDTA%2F9Zc8JVV9vyJ8qXAP%2BzdozQEzKLd7TAZ1cVSThYoXDSJZWgwj1DctzdwHDWXaZiq1K7aNrOTh%2Fi8cHvV5aVjWd2pNcE6lIpCUzBEjhTzCI0k%2F2WJSI4ounld%2BOLEHlMibKjnu0iAmabq1bsDgJii4holI%3D%7Ctkp%3ABk9SR6SrvciVYw", + "created_at": "2023-12-27T18:41:31.588Z", + "_id": 1157 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Miunana-Clothes-Accessories-Sweater-Fashion/dp/B0B5QSTFC5?ref_=ast_sto_dp", + "created_at": "2024-01-01T20:28:57.151Z", + "_id": 1158 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/STORMGUARD-02SR6630914LWO-Internal-Draught-Excluder-Light/dp/B01CR7TLJO/ref=sr_1_50?crid=2C8O91WK4MCI9&keywords=stormguard%2Bunder%2Bdoor%2Bseal&qid=1704376804&sprefix=stormguard%2Bunder%2Bdoor%2Bseal%2Caps%2C145&sr=8-50&th=1", + "created_at": "2024-01-04T14:02:23.148Z", + "_id": 1159 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/VASAGLE-Storage-Organiser-Cloakroom-LBS200T16/dp/B0C7V77SGN?ref_=ast_sto_dp&th=1", + "created_at": "2024-01-04T14:11:24.023Z", + "_id": 1160 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.mixcloud.com/djpaulette-paulettegoesbang/", + "created_at": "2024-01-18T23:38:09.620Z", + "_id": 1161 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://pixeldrain.com/u/9kZvnTMs", + "created_at": "2024-01-20T22:55:32.317Z", + "_id": 1162 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Walfos-Silicone-Trivets-Pots-Pans/dp/B09L5VZY4C?ref_=ast_sto_dp&th=1", + "created_at": "2024-01-21T16:22:14.391Z", + "_id": 1163 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Tongboke-Necklace-Earrings-Compartments-Organization/dp/B0CLVC1C4H/ref=sr_1_98_sspa?crid=1TJI6SCW96F12&keywords=charm%2Bbracelet%2Bjewellery%2Bbox&qid=1706294723&sprefix=charm%2Bbracelet%2Bjewellery%2Bbox%2Caps%2C81&sr=8-98-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9tdGY&th=1", + "created_at": "2024-01-26T18:57:46.573Z", + "_id": 1164 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://imgur.com/gallery/Ke6WQyM", + "created_at": "2024-01-29T22:12:30.375Z", + "_id": 1165 + }, + { + "visits": 22, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Funko-76672/dp/B0C5Z9NGZ6/ref=sxin_34_hcs-la-eu-tqprod?content-id=amzn1.sym.3352d273-775b-4853-b97b-53b436a94d9e%3Aamzn1.sym.3352d273-775b-4853-b97b-53b436a94d9e&crid=1HGE8M9FSUEJQ&cv_ct_cx=funko+pop+diamond&keywords=funko+pop+diamond&pd_rd_i=B0C5Z9NGZ6&pd_rd_r=c1e4866b-6f20-4c70-9af9-1a2255c0f6b2&pd_rd_w=LsVeK&pd_rd_wg=Mxosk&pf_rd_p=3352d273-775b-4853-b97b-53b436a94d9e&pf_rd_r=DEW8ETRK6NPK1P64F1KG&qid=1706642739&sbo=RZvfv%2F%2FHxDF%2BO5021pAnSA%3D%3D&sprefix=funko+pop+diamond%2Caps%2C92&sr=1-2-ca1238e8-4946-4218-b362-7c3431ea8df6", + "created_at": "2024-01-30T19:27:27.469Z", + "_id": 1166 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://pixeldrain.com/u/6Q5f1fCZ", + "created_at": "2024-02-02T16:25:06.856Z", + "_id": 1167 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.zoopla.co.uk/for-sale/details/66683399/?search_identifier=7639884fba77d98e66eaf98bbd3d7ec008a8233dc4132d2238f0f0dc2cda522b", + "created_at": "2024-02-21T23:15:49.943Z", + "_id": 1168 + }, + { + "visits": 6, + "__v": 0, + "long_url": "https://www.cv-library.co.uk/job/221119726/Senior-Civil-Technician?s=104217&jbe_link_clicked=html_alert-1_one-day-results_expanded_job-6_full-details&utm_source=system&utm_medium=email&candidate_apply_only=MjcwMjExODQ6MTcwOTI4NzE0NjrW0_GqwMevSj1T3g5Gft8eLdSC0OtppA6Y0OgwymKvtA&utm_campaign=First_JBE&utm_content=eee5a338-8b6a-4bed-9ec4-b9d8b6f3bd15&utm_term=expanded-job-6", + "created_at": "2024-02-23T10:06:53.596Z", + "_id": 1169 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://dasfasdgasdg.com/", + "created_at": "2024-03-12T21:07:38.573Z", + "_id": 1170 + }, + { + "visits": 0, + "__v": 0, + "long_url": "https://fitnessprogramer.com/exercise/scott-press/", + "created_at": "2024-04-08T11:05:20.728Z", + "_id": 1171 + }, + { + "visits": 5, + "__v": 0, + "long_url": "https://www.facebook.com/groups/830789737328951/?multi_permalinks=1734019650339284&hoisted_section_header_type=recently_seen&__cft__[0]=AZXkl9eiHZwH2kbGrHULUEzvh_8Yw1TQZ3Xv24ky86kyEKuKG8pr6OQdSQXxWlw735mKVebs3aEWeaAuEewQghBCbjPBATu_uIhlOLii5jS-oNs1otVPcKpMAjp_c4hjVUCloQnkqou4D2dmKqXrnmmLrnYQmfjCJ3SgpQxWCdhnxXnM2BdgD5S4O0k2BONyMgisSYC25qUzJgXmd-RAW7EeyhNYneayOPFwFkmiZHNkNQ&__tn__=%2CO%2CP-R", + "created_at": "2024-04-27T20:04:39.833Z", + "_id": 1172 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://voca.ro/1g9dhzauNp7V", + "created_at": "2024-05-07T15:40:45.905Z", + "_id": 1173 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://voca.ro/1gPgEYIwMLgF", + "created_at": "2024-05-07T16:08:00.814Z", + "_id": 1174 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://browser.geekbench.com/v6/cpu/6095709", + "created_at": "2024-05-14T14:35:03.009Z", + "_id": 1175 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://browser.geekbench.com/v6/cpu/6096251", + "created_at": "2024-05-14T15:13:18.943Z", + "_id": 1176 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://track.dpdlocal.co.uk/parcels/15976946448308*20588", + "created_at": "2024-05-14T15:32:17.008Z", + "_id": 1177 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://browser.geekbench.com/v6/cpu/6116525", + "created_at": "2024-05-15T20:02:24.643Z", + "_id": 1178 + }, + { + "visits": 1, + "__v": 0, + "long_url": "http://as-hls-ww-live.akamaized.net/pool_904/live/ww/bbc_radio_five_live/bbc_radio_five_live.isml/bbc_radio_five_live-audio%3d48000.norewind.m3u8", + "created_at": "2024-05-22T11:46:59.543Z", + "_id": 1179 + }, + { + "visits": 25, + "__v": 0, + "long_url": "https://www.ebay.co.uk/itm/145780050727?itmmeta=01HYGMGMZXV6T75MX3XTN4258E&hash=item21f12b0b27:g:J4MAAOSwFRRlzi15&itmprp=enc%3AAQAJAAAA0OOalE%2BjUYicDIOpSswzXO%2BltnNwryBP4Zi3OE5no66OAJfI0sbYabT%2Fc%2BDETcqrg7ozEpqhbnh3tEUL05rFa81pVFHw84uwwZe6WM2RYxF%2B8ba8OHGC2fc2eGrbW7XZRZkz5EQMnEuTRBRVzkFdTIkpESqy2jBBzASDhuLGmANJr%2BrbWdKIxRyZ4r78fyKz6j9chZkSA5A9uQbU3S%2BTwXlA%2FEwklmGtBdLN055P53PHN4OETiVsOZIZwf53EXEDUC8Sj%2BrPmukXqx7n%2FsYmzA4%3D%7Ctkp%3ABk9SR4TQwpT0Yw", + "created_at": "2024-05-22T17:12:21.048Z", + "_id": 1180 + }, + { + "visits": 124, + "__v": 0, + "long_url": "https://iptv-org.github.io/iptv/countries/uk.m3u", + "created_at": "2024-05-23T20:48:01.429Z", + "_id": 1181 + }, + { + "visits": 122, + "__v": 0, + "long_url": "https://iptv-org.github.io/iptv/countries/us.m3u", + "created_at": "2024-05-23T21:03:09.245Z", + "_id": 1182 + }, + { + "visits": 9, + "__v": 0, + "long_url": "https://www.amazon.co.uk/UK-GROW-Pebbles-hydroponic-Substrate/dp/B0B9Y9SXBJ/ref=sr_1_7?crid=XTU2PLPE962R&dib=eyJ2IjoiMSJ9.DCuLOuWjlO8Z0uX4KpLa1vL9ao8ZPvyqbgAzJNpQsvm_1TseLO8VtjAv2RohMi-AQA-mipTKMK29JzhWH9TwyJ_yMZXwjhaDYQCsJ0N1ZXHUwBBfViaInbno_hpOKIXd-vPboBNMwZX-9YDOoleHViZDiMrW57M-zfszWv1If4nOrIIbuxkVJfm6dOOo6MuOY5DkxbmHlqD6DwAdngil93dzmPN7zbYuXpqjhM00sn4Yb_v7dabhHib5EC1_fA_xYtWfSSZ1ogEapGmK5fIfEqu5QVR5dzkdqq6VNziGnXQ.aZ3dKzDNFOYk8rFFb0SXfhuw7ZFxugeTXLP_z4tzjak&dib_tag=se&keywords=clay%2Bpebbles&qid=1716656345&sprefix=clay%2Bpe%2Caps%2C93&sr=8-7&th=1", + "created_at": "2024-05-25T20:11:13.557Z", + "_id": 1183 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://www.amazon.co.uk/iklestar-stackable-Detachable-Organiser-Practical/dp/B0CH4MVT17/ref=sr_1_4_sspa?crid=2VWD01G8OLTR3&dib=eyJ2IjoiMSJ9.vLscRxJuepuo_WzScR5OchjdS37CPHEFU_FgfneabCctWXgPp4z9w0GOkRddEzPMKmvgNwQXUJ-Dg5avFMPEghR8TJnIAcwUetHg9WlHF5ZGB2vnd71qE18uRFFwTxlvLb_ykjdp_Toa0WIQMPa0NdE4OlxAJStqZxYMM-_SrEQ3YiOQL1lUZ0gW-G1ofQoUqM3fEP9fy1W7cQ9M77VNp09wCoLATWB0gMGKT-fV43aG4Xs5Fm2sp7dW5OsaTExMstwLUC4StitjGi9Je_uW_egpHV5_YfdRa7r4XjgGXQc.G-bxksyNlFHgdep13W9_MfJwMS-BQ744rOBOyo0cTek&dib_tag=se&keywords=reusable%2Bbottle%2Borganiser&qid=1716669614&sprefix=reusable%2Bbottle%2Borginiser%2Caps%2C86&sr=8-4-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&th=1", + "created_at": "2024-05-25T21:08:08.857Z", + "_id": 1184 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.civilservicejobs.service.gov.uk/csr/index.cgi?SID=cGFnZWFjdGlvbj12aWV3dmFjYnlqb2JsaXN0JnVzZXJzZWFyY2hjb250ZXh0PTgzMjU2NjM2Jm93bmVyPTUwNzAwMDAmam9ibGlzdF92aWV3X3ZhYz0xOTExMTEyJnNlYXJjaHNvcnQ9Z2VvZGlzdGFuY2UmcGFnZWNsYXNzPUpvYnMmc2VhcmNocGFnZT0xJm93bmVydHlwZT1mYWlyJnJlcXNpZz0xNzE3NjAyMzY3LTc1ZWUxYjIyZjc0Nzc5ZmNkZTI2MDdiMTMxOTcxNTdhY2M2ZWM1YmE=", + "created_at": "2024-06-05T15:51:34.047Z", + "_id": 1185 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.saltyoldgeek.com/posts/ollama-llama3-openwebui/", + "created_at": "2024-06-07T10:06:17.804Z", + "_id": 1186 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://dev.to/berk/running-ollama-and-open-webui-self-hosted-4ih5", + "created_at": "2024-06-07T11:12:09.470Z", + "_id": 1187 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://web.archive.org/web/20170704102514/https://play.google.com/store/apps/details?id=org.urbian.android.tools.vintagecam", + "created_at": "2024-06-22T16:47:05.996Z", + "_id": 1188 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Exploding-Minions-Card-Game-Family-Friendly/dp/B091F4DYQN/ref=sr_1_5?crid=27TBZ6XCT5T3Q&dib=eyJ2IjoiMSJ9.UAJIButjfWG_jYm-5RLXWBUTa_PH_NDZSgb2XbDkBxCulbxUMUTJuW2xqM_g7COLmj-Gu2rOkl37EYKgUEo2hm-bxcvyIFCEBXhL1rVLR8Oj9mrHhMIYZhX75Z_dzFEnvr58AaDVSXWJdcTr_QDYZ-ilxdCwp2vExfQ2gqMorNVUU9ZkNOXuNrBDYT48SZ_qnKIrYjxiciG1uo1OKYjN3IkPQj2JoqWVysGYVHZwOvUQ_K5OWA1aMMx-OfopQRpWD-EHhbkrsYuSf68m2KO5LaOrcIFJ0Y2qqicx_Xujps4.Og6pJ1ntg1GvJjyjle9geDKcHhOIqHLfCsaB9Xar0rw&dib_tag=se&keywords=exploding%2Bminions&qid=1721240497&sprefix=exploding%2Bminions%2Caps%2C156&sr=8-5&th=1", + "created_at": "2024-07-17T18:22:23.942Z", + "_id": 1189 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/GHOSTS-Archives-bestseller-companion-television/dp/1526669900/ref=sr_1_4?crid=1G5YAQV1QMUTE&dib=eyJ2IjoiMSJ9.gUyjSVa7g2HrtEyQ1tKyS7_Oc7KvWrspD9msR4LhwtTtmMjd3duhZ46Xh7pqSEU2VQ_8-slLpCH-qT-2Gkeu4ymIGgl_2ekaMGxlEuhJLPQL_Qcy8roNWgkw8YoFp3bK1nFKD4cN31p1e5y4vtDbfj1TL_EwyBsB26xyO9pwh0fMzLECDf5x5WnRTTzO1n113ABflnBKQw5f5POS2U_5P7WNi_aF9p5VFxh-ULm3u20.pV9OQmE5pkRF66AdBj2Pf2s3ZAt5fz4dVfvsYoH0L9g&dib_tag=se&keywords=ghosts+book&qid=1721241017&sprefix=ghosts%2Caps%2C144&sr=8-4", + "created_at": "2024-07-17T18:31:27.562Z", + "_id": 1190 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Despicable-Minions-Transformation-Transform-Training/dp/B0CCX4FP6J/ref=sr_1_15?crid=2KB6XVQV91QH6&dib=eyJ2IjoiMSJ9.dVIfBmoepILsuCxh-YMS5YNiGDbBqfqlcrvA_ZAnHPXFLEA4hYcSDzFiGXvLVgBPdF2cNrFYxnulv6xHoTWy93QzBkCs3dumOdM34N425EE_MPFYXPYzDasOnwAc2uG2m9vB6n20GDprj0Rcu1Bne58Fm0QEZfsHCCPuwX3Uv3MCyTwb0vq54GmSWrcZRguatBNCX3N0iq9zay4C4b97w2YuDGlpih8CpzLTxBGaCX8.jF1yf-VS5WlTdxHTPfR-wE2SnP9bnoOQhjDgf2eSxYo&dib_tag=se&keywords=despicable+me+minions&qid=1721239711&sprefix=despicable+me+minions%2Caps%2C159&sr=8-15", + "created_at": "2024-07-17T18:44:35.592Z", + "_id": 1191 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Zombaes-Forever-Abandoned-Customisable-Accessories/dp/B0BRQY47FZ/ref=sr_1_1?crid=NLKSILI30BQQ&dib=eyJ2IjoiMSJ9.drQtJBjbCCaGTL5187BbEGq_WzHIuSgO3bl_aFWUoucv1UYsrwrfh0Ic8WhaUAoRGg0imiv9bDpNE5F9Ln6dpadtr2idZXPSrnHDRCP-_haEDw02z2RvTAIlU-zoL-K1nPWMQ2fYso8RUFt_xaACS-KPfaD1uGRrutCBmHz--CO1ViJtV8QJw5EuE4L8B09fix7QhI8TB58BXL013qMX4-K7Ru8WLBBgCIDB15BcTho.4b3HHX8O43TGd63oDxANOGc1rEytHbvLrIJh9hPTWeQ&dib_tag=se&keywords=zombaes&qid=1721241804&sprefix=zombaes%2Caps%2C206&sr=8-1", + "created_at": "2024-07-17T18:50:54.779Z", + "_id": 1192 + }, + { + "visits": 4, + "__v": 0, + "long_url": "https://f.caliban.io/f/b86e5574f382411289f1/?dl=1", + "created_at": "2024-07-27T16:31:31.425Z", + "_id": 1193 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Kikuo-Drawstring-Multi-Functional-Resistance-Accessories/dp/B09K53HRDT/ref=sr_1_4?crid=RCFOREM0N9Z0&dib=eyJ2IjoiMSJ9.mLGlvz0mhoGQ7Au-d8iLguGloWK4NLhka6ca-p8muDVXZuqykJNvjT6_GR1FImF7J60hOZuvdAVnhzObF0E67Wcx31vTusOQ9umKU01TvI9eNbZ_IB_y53OJEsZedYdlljRn41tRY7xHgcDyIkyBxOL85IC1gHQetzAQi6XCdAsq0SkEMFhBTJBo5xQwuUueQH0E0PgkureY2WAyFgM0ZXVtU4xJpiw7BRfbQxxq-2urpeXzSHkatawS1M1KNv-y_YLH1dyEq1fycXHX0rbUr4z13yBcr6rOmowYTNGKnIU.4JgCOhvdqy9AKLeh_TgOFT4LE3lJetkiV6kgaj85URE&dib_tag=se&keywords=kikuo+twist+workout+exercise+plate&qid=1722272392&sprefix=kikuo+twist+workout+exercise+plate%2Caps%2C74&sr=8-4", + "created_at": "2024-07-29T17:02:06.629Z", + "_id": 1194 + }, + { + "visits": 2, + "__v": 0, + "long_url": "https://www.amazon.co.uk/Dirtbusters-Ultrasonic-Cleaning-Solution-Jewellery/dp/B017Z56F6U/ref=sr_1_6?crid=YFWBDN27FHYE&dib=eyJ2IjoiMSJ9.pYEQbwpP5TaF25gBfMbQC-t-5HDiTQcMryN05F-pyvtyPItpvJ86ppbNzsP2Q4RNKLEWWPkuk3ZcSDzNowVuRs25qXtcQJEEySmWpZlyPlDVFJ4soYfGXnB-RFmBNVfuO8k5uy1SPpkVpr3wcxTsznv-KgFmjPT87L85j1vsp_FEUL9aU7Wd7p5okd9Q7HGN_a2Yy2c4tLkqRdgOU0uOaqxzfEU88AlSNTgOYD-4z11OBywNzdIIOL2WN0kli2XsnTa1_Io0QXxVW8-FUWJLcNo9g4MUS7q26ydInI0FAAw.Wn8CB2N81Kpiihj-LYspPRJbbU7xMI4OhFyE14kn-pc&dib_tag=se&keywords=sonic%2Bjewellery%2Bcleaner%2Bsolution&qid=1722272567&sprefix=sonic%2Bjewellery%2Bcleaner%2Bsoulution%2Caps%2C83&sr=8-6&th=1", + "created_at": "2024-07-29T17:04:12.835Z", + "_id": 1195 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://www.cineworld.co.uk/static/en/uk/offers-and-promotions/deadpool-and-wolverine-merch", + "created_at": "2024-07-31T17:04:40.193Z", + "_id": 1196 + }, + { + "visits": 1, + "__v": 0, + "long_url": "https://www.odeon.co.uk/offers-and-competitions/deadpool-and-wolverine-collectors-combo/", + "created_at": "2024-07-31T17:05:02.342Z", + "_id": 1197 + }, + { + "visits": 3, + "__v": 0, + "long_url": "https://funkoeurope.com/products/jack-sparrow-pirates-of-the-caribbean?nosto_source=cmp&nosto=1900055919", + "created_at": "2024-07-31T17:24:03.798Z", + "_id": 1198 + } +] diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..85e1eb8 --- /dev/null +++ b/go.mod @@ -0,0 +1,80 @@ +module nurl + +go 1.22.4 + +require github.com/pocketbase/pocketbase v0.22.20 + +require ( + github.com/AlecAivazis/survey/v2 v2.3.7 // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/aws/aws-sdk-go-v2 v1.30.4 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect + github.com/aws/aws-sdk-go-v2/config v1.27.31 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.30 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 // indirect + github.com/aws/smithy-go v1.20.4 // indirect + github.com/disintegration/imaging v1.6.2 // indirect + github.com/domodwyer/mailyak/v3 v3.6.2 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/fatih/color v1.17.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.5 // indirect + github.com/ganigeorgiev/fexpr v0.4.1 // indirect + github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect + github.com/goccy/go-json v0.10.3 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-sqlite3 v1.14.22 // indirect + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/pocketbase/dbx v1.10.1 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/spf13/cast v1.7.0 // indirect + github.com/spf13/cobra v1.8.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + go.opencensus.io v0.24.0 // indirect + gocloud.dev v0.39.0 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/image v0.19.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/oauth2 v0.22.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/term v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect + golang.org/x/time v0.6.0 // indirect + golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 // indirect + google.golang.org/api v0.194.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect + google.golang.org/grpc v1.65.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect + modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a // indirect + modernc.org/libc v1.55.3 // indirect + modernc.org/mathutil v1.6.0 // indirect + modernc.org/memory v1.8.0 // indirect + modernc.org/sqlite v1.32.0 // indirect + modernc.org/strutil v1.2.0 // indirect + modernc.org/token v1.1.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..597249b --- /dev/null +++ b/go.sum @@ -0,0 +1,360 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= +cloud.google.com/go/auth v0.9.1 h1:+pMtLEV2k0AXKvs/tGZojuj6QaioxfUjOpMsG5Gtx+w= +cloud.google.com/go/auth v0.9.1/go.mod h1:Sw8ocT5mhhXxFklyhT12Eiy0ed6tTrPMCJjSI8KhYLk= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= +cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4= +cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus= +cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= +cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= +github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= +github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= +github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.30.4 h1:frhcagrVNrzmT95RJImMHgabt99vkXGslubDaDagTk8= +github.com/aws/aws-sdk-go-v2 v1.30.4/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= +github.com/aws/aws-sdk-go-v2/config v1.27.31 h1:kxBoRsjhT3pq0cKthgj6RU6bXTm/2SgdoUMyrVw0rAI= +github.com/aws/aws-sdk-go-v2/config v1.27.31/go.mod h1:z04nZdSWFPaDwK3DdJOG2r+scLQzMYuJeW0CujEm9FM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.30 h1:aau/oYFtibVovr2rDt8FHlU17BTicFEMAi29V1U+L5Q= +github.com/aws/aws-sdk-go-v2/credentials v1.17.30/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15 h1:ijB7hr56MngOiELJe0C5aQRaBQ11LveNgWFyG02AUto= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15/go.mod h1:0QEmQSSWMVfiAk93l1/ayR9DQ9+jwni7gHS2NARZXB0= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16/go.mod h1:7ZfEPZxkW42Afq4uQB8H2E2e6ebh6mXTueEpYzjCzcs= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18/go.mod h1:Br6+bxfG33Dk3ynmkhsW2Z/t9D4+lRqdLDNCKi85w0U= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 h1:mx2ucgtv+MWzJesJY9Ig/8AFHgoE5FwLXwUVgW/FGdI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= +github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= +github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI= +github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= +github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= +github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCOBXMn8= +github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= +github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= +github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k= +github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= +github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI= +github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= +github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 h1:FwuzbVh87iLiUQj1+uQUsuw9x5t9m5n5g7rG7o4svW4= +github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61/go.mod h1:paQfF1YtHe+GrGg5fOgjsjoCX/UKDr9bc1DoWpZfns8= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= +github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pocketbase/dbx v1.10.1 h1:cw+vsyfCJD8YObOVeqb93YErnlxwYMkNZ4rwN0G0AaA= +github.com/pocketbase/dbx v1.10.1/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= +github.com/pocketbase/pocketbase v0.22.20 h1:yUkhO5bTPWlzD4ZK6EQlS4R3AcHKDlBD+DxxU2BR83I= +github.com/pocketbase/pocketbase v0.22.20/go.mod h1:Cw5E4uoGhKItBIE2lJL3NfmiUr9Syk2xaNJ2G7Dssow= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= +go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= +go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +gocloud.dev v0.39.0 h1:EYABYGhAalPUaMrbSKOr5lejxoxvXj99nE8XFtsDgds= +gocloud.dev v0.39.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= +golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 h1:LLhsEBxRTBLuKlQxFBYUOU8xyFgXv6cOTp2HASDlsDk= +golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +google.golang.org/api v0.194.0 h1:dztZKG9HgtIpbI35FhfuSNR/zmaMVdxNlntHj1sIS4s= +google.golang.org/api v0.194.0/go.mod h1:AgvUFdojGANh3vI+P7EVnxj3AISHllxGCJSFmggmnd0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142 h1:oLiyxGgE+rt22duwci1+TG7bg2/L1LQsXwfjPlmuJA0= +google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142/go.mod h1:G11eXq53iI5Q+kyNOmCvnzBaxEA2Q/Ik5Tj7nqBE8j4= +google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 h1:+/tmTy5zAieooKIXfzDm9KiA3Bv6JBwriRN9LY+yayk= +google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988/go.mod h1:4+X6GvPs+25wZKbQq9qyAXrwIRExv7w0Ea6MgZLZiDM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= +modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.19.2 h1:lwQZgvboKD0jBwdaeVCTouxhxAyN6iawF3STraAal8Y= +modernc.org/ccgo/v4 v4.19.2/go.mod h1:ysS3mxiMV38XGRTTcgo0DQTeTmAO4oCmJl1nX9VFI3s= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= +modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a h1:CfbpOLEo2IwNzJdMvE8aiRbPMxoTpgAJeyePh0SmO8M= +modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U= +modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w= +modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= +modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= +modernc.org/sqlite v1.32.0 h1:6BM4uGza7bWypsw4fdLRsLxut6bHe4c58VeqjRgST8s= +modernc.org/sqlite v1.32.0/go.mod h1:UqoylwmTb9F+IqXERT8bW9zzOWN8qwAIcLdzeBZs4hA= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/import/importer.go b/import/importer.go new file mode 100644 index 0000000..7e2351e --- /dev/null +++ b/import/importer.go @@ -0,0 +1,47 @@ +package _import + +import ( + "encoding/json" + "io" + "log" + "os" + "time" +) + +type Data struct { + Visits int64 `json:"visits"` + LongUrl string `json:"long_url"` + CreatedAt time.Time `json:"created_at,omitempty"` + Id int64 `json:"_id"` +} + +func DoImport() []Data { + + jsonFile, err := os.Open("./data.json") + // if we os.Open returns an error then handle it + if err != nil { + log.Fatalln(err) + } + log.Println("Successfully Opened data.json") + // defer the closing of our jsonFile so that we can parse it later on + defer jsonFile.Close() + + byteValue, _ := io.ReadAll(jsonFile) + + data := []Data{} + + json.Unmarshal(byteValue, &data) + + /* for _, v := range data { + + log.Println("v", v) + errr := postImport(app, v) + + if errr != nil { + log.Fatalln(errr) + } + + } + */ + return data +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..791ce61 --- /dev/null +++ b/main.go @@ -0,0 +1,334 @@ +package main + +import ( + "encoding/json" + "errors" + "github.com/labstack/echo/v5" + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase" + "github.com/pocketbase/pocketbase/apis" + "github.com/pocketbase/pocketbase/core" + "github.com/pocketbase/pocketbase/models" + "log" + "net/http" + "nurl/base58" + _import "nurl/import" + "os" + "time" +) + +var ( + Version string + Build string + Webhost = "https://nurl.co/" +) + +type Count struct { + Count int `json:"count" db:"count"` +} + +type UrlRequest struct { + Url string `json:"url"` +} + +type Data struct { + Visits int64 `json:"visits" db:"visits"` + LongUrl string `json:"long_url" db:"long_url"` + CreatedAt time.Time `json:"created_at,omitempty" db:"created_at"` + Id int64 `json:"_id" db:"_id"` +} + +type ShortUrl struct { + ShortUrl string `json:"shortUrl"` +} + +func main() { + log.Printf("GO-PB-NURL v%+v build %+v\n\n", Version, Build) + + app := pocketbase.New() + + app.OnRecordBeforeCreateRequest("urls").Add(func(e *core.RecordCreateEvent) error { + log.Println("OnRecordBeforeCreate") + + count := Count{} + err := app.Dao().DB().NewQuery("select count(*) as count from urls").One(&count) + if err != nil { + log.Println(err) + + } + + log.Println("count:", count.Count) + count.Count++ + + e.Record.Set("_id", count.Count) + + log.Println("Record", e.Record) + + return nil + }) + + app.OnAfterBootstrap().Add(func(e *core.BootstrapEvent) error { + // log.Println(e.App) + + return nil + + collection, err := e.App.Dao().FindCollectionByNameOrId("urls") + if err != nil { + log.Println(err) + return err + } + + data := _import.DoImport() + + // log.Println("Import", data) + + for _, v := range data { + + log.Println("v", v) + record := models.NewRecord(collection) + + record.Set("long_url", v.LongUrl) + record.Set("visits", v.Visits) + record.Set("_id", v.Id) + record.Set("created_at", v.CreatedAt) + + log.Println(record) + + if err := app.Dao().SaveRecord(record); err != nil { + log.Println("ERROR!! postshort save NewRecord") + log.Println(err) + + return err + } + + } + + return nil + }) + + // serves static files from the provided public dir (if exists) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + e.Router.GET("/*", apis.StaticDirectoryHandler(os.DirFS("./pb_public"), false)) + e.Router.GET("/build/*", apis.StaticDirectoryHandler(os.DirFS("./pb_public/build"), false)) + + e.Router.GET("/api/v1/list", func(c echo.Context) error { + + apis.ActivityLogger(app) + + getList() + + return nil + + }) + + e.Router.POST("/api/v1/shorten", func(c echo.Context) error { + + apis.ActivityLogger(app) + + postShort(c, app) + + return nil + }) + + e.Router.GET("/:encoded", func(c echo.Context) error { + + apis.ActivityLogger(app) + + getEncoded(c, app) + + return nil + + }) + + e.Router.GET("/!/hb", func(c echo.Context) error { + + apis.ActivityLogger(app) + + return c.NoContent(200) + + }) + + return nil + }) + + if err := app.Start(); err != nil { + log.Fatal(err) + } else { + log.Println("Nurl is running...") + + } + +} + +func getList() { + log.Println("Getting list") +} + +func getIdByUrl(url string, app *pocketbase.PocketBase) (int64, error) { + + recordData := &Data{} + + log.Println("look for:", url) + + dberr := app.Dao().DB().Select("_id").From("urls").Where(dbx.NewExp("long_url is {:url}", dbx.Params{"url": url})).One(&recordData) + + log.Println(recordData) + + if dberr == nil { + log.Println("Url found", recordData.Id) + + return recordData.Id, nil + } else { + return -1, dberr + } +} + +func saveUrl(url string, app *pocketbase.PocketBase) (string, error) { + count := Count{} + err := app.Dao().DB().NewQuery("select count(*) as count from urls").One(&count) + if err != nil { + log.Println(err) + + } + + count.Count += 2000 // Base everything from 2000 now + count.Count++ + + collection, err := app.Dao().FindCollectionByNameOrId("urls") + if err != nil { + log.Println(err) + return "", err + } + + record := models.NewRecord(collection) + + record.Set("long_url", url) + record.Set("visits", 0) + record.Set("_id", count.Count) + record.Set("created_at", time.Now()) + + if err := app.Dao().SaveRecord(record); err != nil { + log.Println("ERROR!! postshort save NewRecord") + log.Println(err) + + return "", err + } + + shortCode := base58.Encode(count.Count) + log.Println("Return", shortCode) + return shortCode, nil +} + +func postShort(c echo.Context, app *pocketbase.PocketBase) error { + log.Println("Posting short") + + j := GetJSONRawBody(c) + + url := j.Url + + log.Println("url", url) + + if url == "" { + return c.JSON(http.StatusBadRequest, "url is null") + } + + id, err := getIdByUrl(url, app) + + if err != nil { + log.Println("post getIdByUrl error", err) + } else { + log.Println("id:", id) + + if id != -1 { + + shortUrl := ShortUrl{} + + shortUrl.ShortUrl = Webhost + base58.Encode(int(id)) + + return c.JSON(http.StatusOK, shortUrl) + } + + } + + // todo: check that the url doesn't already exist in the db and return it if it does + // todo: breakout working in other functions. ie: getUrl:done, saveUrl:done + + shortCode, err := saveUrl(url, app) + + if err != nil { + log.Println("post saveUrl error", err) + } else { + log.Println("shortCode:", shortCode) + + if shortCode != "" { + + shortUrl := ShortUrl{} + + shortUrl.ShortUrl = Webhost + shortCode + + return c.JSON(http.StatusOK, shortUrl) + } + + } + + return c.NoContent(200) + +} + +func getEncoded(c echo.Context, app *pocketbase.PocketBase) error { + log.Println("Getting encoded") + + Encoded := c.PathParam("encoded") + + log.Println("encoded: ", Encoded) + + if Encoded == "" || len(Encoded) == 0 || len(Encoded) > 3 { + return c.NoContent(404) + } + + Decoded := base58.Decode(Encoded) + + log.Println("decoded: ", Decoded) + + url, err := findById(Decoded, app) + + if err != nil { + return c.NoContent(404) + } + + return c.Redirect(301, url) +} + +func findById(id int, app *pocketbase.PocketBase) (string, error) { + record, recErr := app.Dao().FindRecordsByExpr("urls", dbx.NewExp("_id = {:id}", dbx.Params{"id": id})) + + if recErr != nil { + log.Println(recErr) + return "", recErr + } + + if len(record) != 0 { + log.Println("-- record", record[0]) + rec := record[0] + + longUrl := rec.GetString("long_url") + + return longUrl, nil + } + + return "", errors.New("record not found") +} + +func GetJSONRawBody(c echo.Context) UrlRequest { + + urlBody := UrlRequest{} + err := json.NewDecoder(c.Request().Body).Decode(&urlBody) + + if err != nil { + + log.Println("empty json body") + return urlBody + } + + return urlBody +} diff --git a/pb_data/data.db b/pb_data/data.db new file mode 100644 index 0000000..80db92c Binary files /dev/null and b/pb_data/data.db differ diff --git a/pb_data/logs.db b/pb_data/logs.db new file mode 100644 index 0000000..f4ad477 Binary files /dev/null and b/pb_data/logs.db differ diff --git a/pb_public/build/bundle.css b/pb_public/build/bundle.css new file mode 100644 index 0000000..47ffb83 --- /dev/null +++ b/pb_public/build/bundle.css @@ -0,0 +1,3 @@ +@import "//fonts.googleapis.com/css2?family=Roboto+Condensed&family=Roboto+Slab&display=swap";html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{-webkit-tap-highlight-color:rgba(0, 0, 0, 0)}body{font-family:Arial, Verdana, Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0, 0, 0, 0.87);background-color:#FFF}a{color:#2196F3;text-decoration:none}a:hover,a:focus{text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ul,ol{margin-top:0;margin-bottom:10px}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0, 0, 0, 0.12)}strong{font-weight:700}abbr[title]{cursor:help;-webkit-text-decoration-color:#2196F3;text-decoration-color:#2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media(orientation: landscape) and (max-height: 480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media(min-width: 480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0, 0, 0, 0.87);background-color:#FFF;transition:all 0.2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin:6px 0;border:none;border-radius:2px;cursor:pointer;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;font-family:inherit;letter-spacing:0.03em;position:relative;overflow:hidden}.mui-btn:hover,.mui-btn:focus,.mui-btn:active{color:rgba(0, 0, 0, 0.87);background-color:white}.mui-btn[disabled]:hover,.mui-btn[disabled]:focus,.mui-btn[disabled]:active{color:rgba(0, 0, 0, 0.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0, 0, 0, 0.87);background-color:transparent}.mui-btn.mui-btn--flat:hover,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:active{color:rgba(0, 0, 0, 0.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:hover,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:active{color:rgba(0, 0, 0, 0.87);background-color:transparent}.mui-btn:hover,.mui-btn:focus,.mui-btn:active{outline:0;text-decoration:none;color:rgba(0, 0, 0, 0.87)}.mui-btn:hover,.mui-btn:focus{box-shadow:0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2)}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.mui-btn:hover,.mui-btn:focus{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2)}}@supports (-ms-ime-align: auto){.mui-btn:hover,.mui-btn:focus{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2)}}.mui-btn:active:hover{box-shadow:0 0px 4px rgba(0, 0, 0, 0.12), 1px 3px 4px rgba(0, 0, 0, 0.2)}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.mui-btn:active:hover{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 4px rgba(0, 0, 0, 0.12), 1px 3px 4px rgba(0, 0, 0, 0.2)}}@supports (-ms-ime-align: auto){.mui-btn:active:hover{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 4px rgba(0, 0, 0, 0.12), 1px 3px 4px rgba(0, 0, 0, 0.2)}}.mui-btn:disabled,.mui-btn.mui--is-disabled{cursor:not-allowed;pointer-events:none;opacity:0.60;box-shadow:none}.mui-btn + .mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:hover,.mui-btn--flat:focus,.mui-btn--flat:active,.mui-btn--flat:active:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--raised,.mui-btn--fab{box-shadow:0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2)}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.mui-btn--raised,.mui-btn--fab{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2)}}@supports (-ms-ime-align: auto){.mui-btn--raised,.mui-btn--fab{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2)}}.mui-btn--raised:active,.mui-btn--fab:active{box-shadow:0 0px 4px rgba(0, 0, 0, 0.12), 1px 3px 4px rgba(0, 0, 0, 0.2)}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.mui-btn--raised:active,.mui-btn--fab:active{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 4px rgba(0, 0, 0, 0.12), 1px 3px 4px rgba(0, 0, 0, 0.2)}}@supports (-ms-ime-align: auto){.mui-btn--raised:active,.mui-btn--fab:active{box-shadow:0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 4px rgba(0, 0, 0, 0.12), 1px 3px 4px rgba(0, 0, 0, 0.2)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:hover,.mui-btn--primary:focus,.mui-btn--primary:active{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:hover,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:active{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:hover,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:active{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:hover,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:active{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:hover,.mui-btn--dark:focus,.mui-btn--dark:active{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:hover,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:active{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:hover,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:active{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:hover,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:active{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:hover,.mui-btn--danger:focus,.mui-btn--danger:active{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:hover,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:active{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:hover,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:active{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:hover,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:active{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:hover,.mui-btn--accent:focus,.mui-btn--accent:active{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:hover,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:active{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:hover,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:active{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:hover,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:active{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-radio,.mui-checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-radio > label,.mui-checkbox > label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.mui-radio input:disabled,.mui-checkbox input:disabled{cursor:not-allowed}.mui-radio input:focus,.mui-checkbox input:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.mui-radio > label > input[type="radio"],.mui-radio--inline > label > input[type="radio"],.mui-checkbox > label > input[type="checkbox"],.mui-checkbox--inline > label > input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px}.mui-radio + .mui-radio,.mui-checkbox + .mui-checkbox{margin-top:-5px}.mui-radio--inline,.mui-checkbox--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.mui-radio--inline > input[type="radio"],.mui-radio--inline > input[type="checkbox"],.mui-radio--inline > label > input[type="radio"],.mui-radio--inline > label > input[type="checkbox"],.mui-checkbox--inline > input[type="radio"],.mui-checkbox--inline > input[type="checkbox"],.mui-checkbox--inline > label > input[type="radio"],.mui-checkbox--inline > label > input[type="checkbox"]{margin:4px 0 0;line-height:normal}.mui-radio--inline + .mui-radio--inline,.mui-checkbox--inline + .mui-checkbox--inline{margin-top:0;margin-left:10px}.mui-container{box-sizing:border-box;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:before,.mui-container:after{content:" ";display:table}.mui-container:after{clear:both}@media(min-width: 544px){.mui-container{max-width:570px}}@media(min-width: 768px){.mui-container{max-width:740px}}@media(min-width: 992px){.mui-container{max-width:960px}}@media(min-width: 1200px){.mui-container{max-width:1170px}}.mui-container-fluid{box-sizing:border-box;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:before,.mui-container-fluid:after{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0, 0, 0, 0.12)}.mui--divider-top{border-top:1px solid rgba(0, 0, 0, 0.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0, 0, 0, 0.12)}.mui--divider-left{border-left:1px solid rgba(0, 0, 0, 0.12)}.mui--divider-right{border-right:1px solid rgba(0, 0, 0, 0.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle="dropdown"]{outline:0}.mui-dropdown__menu{position:absolute;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.mui-dropdown__menu{border-top:1px solid rgba(0, 0, 0, 0.12);border-left:1px solid rgba(0, 0, 0, 0.12)}}@supports (-ms-ime-align: auto){.mui-dropdown__menu{border-top:1px solid rgba(0, 0, 0, 0.12);border-left:1px solid rgba(0, 0, 0, 0.12)}}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu > li > a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.429;color:rgba(0, 0, 0, 0.87);text-decoration:none;white-space:nowrap}.mui-dropdown__menu > li > a:hover,.mui-dropdown__menu > li > a:focus{text-decoration:none;color:rgba(0, 0, 0, 0.87);background-color:#EEEEEE}.mui-dropdown__menu > .mui--is-disabled > a,.mui-dropdown__menu > .mui--is-disabled > a:hover,.mui-dropdown__menu > .mui--is-disabled > a:focus{color:#EEEEEE}.mui-dropdown__menu > .mui--is-disabled > a:hover,.mui-dropdown__menu > .mui--is-disabled > a:focus{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}.mui-dropdown--up > .mui-dropdown__menu{margin:0 0 2px}.mui-dropdown--right > .mui-dropdown__menu{margin:0 0 0 2px}.mui-dropdown--left > .mui-dropdown__menu{margin:0 2px 0 0}.mui-form legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0, 0, 0, 0.87);line-height:inherit;border:0}.mui-form fieldset{border:0;padding:0;margin:0 0 20px 0}@media(min-width: 544px){.mui-form--inline .mui-textfield{display:inline-block;vertical-align:bottom;margin-bottom:0}.mui-form--inline .mui-radio,.mui-form--inline .mui-checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline .mui-radio > label,.mui-form--inline .mui-checkbox > label{padding-left:0}.mui-form--inline .mui-radio > label > input[type="radio"],.mui-form--inline .mui-checkbox > label > input[type="checkbox"]{position:relative;margin-left:0}.mui-form--inline .mui-select{display:inline-block;vertical-align:bottom;margin-bottom:0}.mui-form--inline .mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:before,.mui-row:after{content:" ";display:table}.mui-row:after{clear:both}.mui-col-xs-1,.mui-col-sm-1,.mui-col-md-1,.mui-col-lg-1,.mui-col-xs-2,.mui-col-sm-2,.mui-col-md-2,.mui-col-lg-2,.mui-col-xs-3,.mui-col-sm-3,.mui-col-md-3,.mui-col-lg-3,.mui-col-xs-4,.mui-col-sm-4,.mui-col-md-4,.mui-col-lg-4,.mui-col-xs-5,.mui-col-sm-5,.mui-col-md-5,.mui-col-lg-5,.mui-col-xs-6,.mui-col-sm-6,.mui-col-md-6,.mui-col-lg-6,.mui-col-xs-7,.mui-col-sm-7,.mui-col-md-7,.mui-col-lg-7,.mui-col-xs-8,.mui-col-sm-8,.mui-col-md-8,.mui-col-lg-8,.mui-col-xs-9,.mui-col-sm-9,.mui-col-md-9,.mui-col-lg-9,.mui-col-xs-10,.mui-col-sm-10,.mui-col-md-10,.mui-col-lg-10,.mui-col-xs-11,.mui-col-sm-11,.mui-col-md-11,.mui-col-lg-11,.mui-col-xs-12,.mui-col-sm-12,.mui-col-md-12,.mui-col-lg-12{box-sizing:border-box;min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0%}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media(min-width: 544px){.mui-col-sm-1,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0%}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media(min-width: 768px){.mui-col-md-1,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0%}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media(min-width: 992px){.mui-col-lg-1,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0%}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media(min-width: 1200px){.mui-col-xl-1,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0%}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12)}.mui-panel:before,.mui-panel:after{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12)}}@supports (-ms-ime-align: auto){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus > select{height:calc(32px + 1px);margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select > select{display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:none;border:none;border-bottom:1px solid rgba(0, 0, 0, 0.26);border-radius:0px;box-shadow:none;background-color:transparent;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==");background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0, 0, 0, 0.87);font-size:16px;font-family:inherit;line-height:inherit;padding:0 25px 0 0}.mui-select > select::-ms-expand{display:none}.mui-select > select:focus{outline:0;height:calc(32px + 1px);margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select > select:disabled{color:rgba(0, 0, 0, 0.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select > select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.mui-select > select:focus::-ms-value{background:none;color:rgba(0, 0, 0, 0.87)}.mui-select > select.mui--text-placeholder{color:rgba(0, 0, 0, 0.26)}.mui-select > label{position:absolute;top:0;display:block;width:100%;color:rgba(0, 0, 0, 0.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-select:focus > label,.mui-select > select:focus ~ label{color:#2196F3}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;box-sizing:border-box;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.mui-select__menu{border-left:1px solid rgba(0, 0, 0, 0.12);border-top:1px solid rgba(0, 0, 0, 0.12)}}@supports (-ms-ime-align: auto){.mui-select__menu{border-left:1px solid rgba(0, 0, 0, 0.12);border-top:1px solid rgba(0, 0, 0, 0.12)}}.mui-select__menu > div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu > div.mui--is-selected{background-color:#EEEEEE}.mui-select__menu > div.mui--is-disabled{color:rgba(0, 0, 0, 0.38);cursor:not-allowed}.mui-select__menu > div:not(.mui-optgroup__label):not(.mui--is-disabled):hover{background-color:#E0E0E0}.mui-optgroup__option{text-indent:1em}.mui-optgroup__label{color:rgba(0, 0, 0, 0.54);font-size:0.9em}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table > thead > tr > th,.mui-table > tbody > tr > th,.mui-table > tfoot > tr > th{text-align:left}.mui-table > thead > tr > th,.mui-table > thead > tr > td,.mui-table > tbody > tr > th,.mui-table > tbody > tr > td,.mui-table > tfoot > tr > th,.mui-table > tfoot > tr > td{padding:10px;line-height:1.429}.mui-table > thead > tr > th{border-bottom:2px solid rgba(0, 0, 0, 0.12);font-weight:700}.mui-table > tbody + tbody{border-top:2px solid rgba(0, 0, 0, 0.12)}.mui-table.mui-table--bordered > tbody > tr > td{border-bottom:1px solid rgba(0, 0, 0, 0.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar > li{display:inline-block}.mui-tabs__bar > li > a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0, 0, 0, 0.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar > li > a:hover{text-decoration:none}.mui-tabs__bar > li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar > li.mui--is-active > a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified > li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified > li > a{text-align:center;padding-left:0px;padding-right:0px}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield > label{position:absolute;top:0;display:block;width:100%;color:rgba(0, 0, 0, 0.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield > textarea{padding-top:5px}.mui-textfield > input:focus ~ label,.mui-textfield > textarea:focus ~ label{color:#2196F3}.mui-textfield--float-label > label{position:absolute;transform:translate(0px, 15px);font-size:16px;line-height:32px;color:rgba(0, 0, 0, 0.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label > input:-webkit-autofill ~ label,.mui-textfield--float-label > textarea:-webkit-autofill ~ label{transform:translate(0px, 0px);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label > input:focus ~ label,.mui-textfield--float-label > textarea:focus ~ label{transform:translate(0px, 0px);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label > input:not(:focus).mui--is-not-empty ~ label,.mui-textfield--float-label > input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label,.mui-textfield--float-label > input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label,.mui-textfield--float-label > textarea:not(:focus).mui--is-not-empty ~ label,.mui-textfield--float-label > textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label,.mui-textfield--float-label > textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label{color:rgba(0, 0, 0, 0.54);font-size:12px;line-height:15px;transform:translate(0px, 0px);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0px}.mui-textfield--wrap-label:not(.mui-textfield--float-label) > label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield > input,.mui-textfield > textarea{box-sizing:border-box;display:block;background-color:transparent;color:rgba(0, 0, 0, 0.87);border:none;border-bottom:1px solid rgba(0, 0, 0, 0.26);outline:none;width:100%;padding:0;box-shadow:none;border-radius:0px;font-size:16px;font-family:inherit;line-height:inherit;background-image:none}.mui-textfield > input:focus,.mui-textfield > textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield > input:-moz-read-only,.mui-textfield > textarea:-moz-read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield > input:disabled,.mui-textfield > input:read-only,.mui-textfield > textarea:disabled,.mui-textfield > textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield > input::-webkit-input-placeholder,.mui-textfield > textarea::-webkit-input-placeholder{color:rgba(0, 0, 0, 0.26);opacity:1}.mui-textfield > input::-moz-placeholder,.mui-textfield > textarea::-moz-placeholder{color:rgba(0, 0, 0, 0.26);opacity:1}.mui-textfield > input:-ms-input-placeholder,.mui-textfield > textarea:-ms-input-placeholder{color:rgba(0, 0, 0, 0.26);opacity:1}.mui-textfield > input::-ms-input-placeholder,.mui-textfield > textarea::-ms-input-placeholder{color:rgba(0, 0, 0, 0.26);opacity:1}.mui-textfield > input::placeholder,.mui-textfield > textarea::placeholder{color:rgba(0, 0, 0, 0.26);opacity:1}.mui-textfield > input{height:32px}.mui-textfield > input:focus{height:calc(32px + 1px);margin-bottom:-1px}.mui-textfield > textarea{min-height:64px}.mui-textfield > textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield > input:focus{height:calc(32px + 1px);margin-bottom:-1px}.mui-textfield > input:invalid:not(:focus):not(:required),.mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-touched,.mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > textarea:invalid:not(:focus):not(:required),.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-touched,.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > input:not(:focus).mui--is-invalid:not(:required),.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-touched,.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-touched,.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield > input:invalid:not(:focus):not(:required),.mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-touched,.mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > input:not(:focus).mui--is-invalid:not(:required),.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-touched,.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty){height:calc(32px + 1px);margin-bottom:-1px}.mui-textfield.mui-textfield--float-label > input:invalid:not(:focus):not(:required) ~ label,.mui-textfield.mui-textfield--float-label > input:invalid:not(:focus):required.mui--is-not-empty ~ label,.mui-textfield.mui-textfield--float-label > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label,.mui-textfield.mui-textfield--float-label > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label,.mui-textfield.mui-textfield--float-label > textarea:invalid:not(:focus):not(:required) ~ label,.mui-textfield.mui-textfield--float-label > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label,.mui-textfield.mui-textfield--float-label > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label,.mui-textfield.mui-textfield--float-label > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):not(:required) ~ label,.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-empty.mui--is-touched ~ label,.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-not-empty ~ label,.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):not(:required) ~ label,.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-touched ~ label,.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label{color:#F44336}.mui-textfield.mui-textfield--float-label > .mui--is-invalid.mui--is-not-empty:not(:focus) ~ label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label) > .mui--is-invalid:not(:focus) ~ label{color:#F44336}.mui--no-transition{transition:none !important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin:0 0 0 2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui-caret.mui-caret--up{transform:rotate(180deg);margin:0 0 2px 2px}.mui-caret.mui-caret--right{transform:rotate(-90deg);margin:0 0 2px 2px}.mui-caret.mui-caret--left{transform:rotate(90deg);margin:0 2px 2px 0}.mui--text-left{text-align:left !important}.mui--text-right{text-align:right !important}.mui--text-center{text-align:center !important}.mui--text-justify{text-align:justify !important}.mui--text-nowrap{white-space:nowrap !important}.mui--align-baseline{vertical-align:baseline !important}.mui--align-top{vertical-align:top !important}.mui--align-middle{vertical-align:middle !important}.mui--align-bottom{vertical-align:bottom !important}.mui--text-dark{color:rgba(0, 0, 0, 0.87)}.mui--text-dark-secondary{color:rgba(0, 0, 0, 0.54)}.mui--text-dark-hint{color:rgba(0, 0, 0, 0.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255, 255, 255, 0.7)}.mui--text-light-hint{color:rgba(255, 255, 255, 0.3)}.mui--text-accent{color:rgba(255, 64, 129, 0.87)}.mui--text-accent-secondary{color:rgba(255, 64, 129, 0.54)}.mui--text-accent-hint{color:rgba(255, 64, 129, 0.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui--text-placeholder{color:rgba(0, 0, 0, 0.26)}.mui--bg-primary{background-color:#2196F3}.mui--bg-primary-dark{background-color:#1976D2}.mui--bg-primary-light{background-color:#BBDEFB}.mui--bg-accent{background-color:#FF4081}.mui--bg-accent-dark{background-color:#F50057}.mui--bg-accent-light{background-color:#FF80AB}.mui--bg-danger{background-color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline > li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)}.mui--z2{box-shadow:0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23)}.mui--z3{box-shadow:0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)}.mui--z4{box-shadow:0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22)}.mui--z5{box-shadow:0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22)}.mui--clearfix:before,.mui--clearfix:after{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right !important}.mui--pull-left{float:left !important}.mui--hide{display:none !important}.mui--show{display:block !important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden !important}.mui--overflow-hidden-x{overflow-x:hidden !important}.mui--overflow-hidden-y{overflow-y:hidden !important}.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block{display:none !important}@media(max-width: 543px){.mui-visible-xs{display:block !important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row !important}th.mui-visible-xs,td.mui-visible-xs{display:table-cell !important}.mui--visible-xs-block{display:block !important}.mui--visible-xs-inline{display:inline !important}.mui--visible-xs-inline-block{display:inline-block !important}}@media(min-width: 544px) and (max-width: 767px){.mui-visible-sm{display:block !important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row !important}th.mui-visible-sm,td.mui-visible-sm{display:table-cell !important}.mui--visible-sm-block{display:block !important}.mui--visible-sm-inline{display:inline !important}.mui--visible-sm-inline-block{display:inline-block !important}}@media(min-width: 768px) and (max-width: 991px){.mui-visible-md{display:block !important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row !important}th.mui-visible-md,td.mui-visible-md{display:table-cell !important}.mui--visible-md-block{display:block !important}.mui--visible-md-inline{display:inline !important}.mui--visible-md-inline-block{display:inline-block !important}}@media(min-width: 992px) and (max-width: 1199px){.mui-visible-lg{display:block !important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row !important}th.mui-visible-lg,td.mui-visible-lg{display:table-cell !important}.mui--visible-lg-block{display:block !important}.mui--visible-lg-inline{display:inline !important}.mui--visible-lg-inline-block{display:inline-block !important}}@media(min-width: 1200px){.mui-visible-xl{display:block !important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row !important}th.mui-visible-xl,td.mui-visible-xl{display:table-cell !important}.mui--visible-xl-block{display:block !important}.mui--visible-xl-inline{display:inline !important}.mui--visible-xl-inline-block{display:inline-block !important}}@media(max-width: 543px){.mui--hidden-xs{display:none !important}}@media(min-width: 544px) and (max-width: 767px){.mui--hidden-sm{display:none !important}}@media(min-width: 768px) and (max-width: 991px){.mui--hidden-md{display:none !important}}@media(min-width: 992px) and (max-width: 1199px){.mui--hidden-lg{display:none !important}}@media(min-width: 1200px){.mui--hidden-xl{display:none !important}}.mui-scrlock--showbar-y{overflow-y:scroll !important}.mui-scrlock--showbar-x{overflow-x:scroll !important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0, 0, 0, 0.2);overflow:auto}.mui-btn__ripple-container{position:absolute;top:0;left:0;display:block;height:100%;width:100%;overflow:hidden;z-index:0;pointer-events:none}.mui-ripple{position:absolute;top:0;left:0;border-radius:50%;opacity:0;pointer-events:none;transform:scale(0.0001, 0.0001)}.mui-ripple.mui--is-animating{transform:none;transition:transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.3s cubic-bezier(0, 0, 0.2, 1)}.mui-ripple.mui--is-visible{opacity:0.3}.mui-btn .mui-ripple{background-color:#a6a6a6}.mui-btn--primary .mui-ripple{background-color:#FFF}.mui-btn--dark .mui-ripple{background-color:#FFF}.mui-btn--danger .mui-ripple{background-color:#FFF}.mui-btn--accent .mui-ripple{background-color:#FFF}.mui-btn--flat .mui-ripple{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}.btn:focus,.btn-shorten:focus{outline:0 !important}html,body{height:100%;background-color:#FFC107}body,main{color:#4A148C;text-align:center;font-family:'Roboto Slab', sans-serif}.btn-shorten{color:#ffffff;border:none;font-family:'Roboto Condensed', sans-serif}.btn-shorten:hover,.btn-shorten:focus,.btn-shorten:active,.btn-shorten.active{color:#ffffff;background-color:#FA8900;border:none}.site-wrapper{display:table;width:100%;height:100%;min-height:100%}.site-wrapper-inner{display:table-cell;vertical-align:top}.main-container{margin-right:auto;margin-left:auto;margin-top:80px}.inner{padding:30px}.inner h4{padding-bottom:30px}.glyphicon-link{font-size:2em}.inner h1{margin-top:5px}#link{padding-top:15px}#link a{color:#FF4081;font-size:1.5em;margin-right:20px}@media(min-width: 768px){.main-container{width:100%}}@media(min-width: 992px){.main-container{width:700px}}body,html{font-family:"Roboto", "Arial", sans-serif;font-weight:normal;font-style:normal}h1{font-family:"Roboto Slab", monospace;font-weight:700;font-style:normal}h2,h3,h4{font-family:"Ubuntu", sans-serif;font-weight:500;font-style:normal} + +/*# sourceMappingURL=bundle.css.map */ \ No newline at end of file diff --git a/pb_public/build/bundle.js b/pb_public/build/bundle.js new file mode 100644 index 0000000..26277dd --- /dev/null +++ b/pb_public/build/bundle.js @@ -0,0 +1 @@ +var app=function(){"use strict";function e(){}function t(e){return e()}function n(){return Object.create(null)}function r(e){e.forEach(t)}function o(e){return"function"==typeof e}function i(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}function a(e,t){e.appendChild(t)}function s(e,t,n){e.insertBefore(t,n||null)}function u(e){e.parentNode.removeChild(e)}function c(e){return document.createElement(e)}function f(e){return document.createTextNode(e)}function l(){return f(" ")}function d(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}function p(e,t,n){null==n?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function h(e,t){(null!=t||e.value)&&(e.value=t)}let m;function g(e){m=e}const y=[],v=[],b=[],w=[],x=Promise.resolve();let E=!1;function S(e){b.push(e)}let C=!1;const $=new Set;function R(){if(!C){C=!0;do{for(let e=0;e{const r=n.length?n[0]:t;return y.ctx&&f(y.ctx[e],y.ctx[e]=r)&&(y.bound[e]&&y.bound[e](r),v&&N(i,e)),t}):[],y.update(),v=!0,r(y.before_update),y.fragment=!!c&&c(y.ctx),a.target){if(a.hydrate){const e=function(e){return Array.from(e.childNodes)}(a.target);y.fragment&&y.fragment.l(e),e.forEach(u)}else y.fragment&&y.fragment.c();a.intro&&((b=i.$$.fragment)&&b.i&&(A.delete(b),b.i(w))),function(e,n,i){const{fragment:a,on_mount:s,on_destroy:u,after_update:c}=e.$$;a&&a.m(n,i),S(()=>{const n=s.map(t).filter(o);u?u.push(...n):r(n),e.$$.on_mount=[]}),c.forEach(S)}(i,a.target,a.anchor),R()}var b,w;g(p)}var T=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;u[o]="set-cookie"===o?(u[o]?u[o]:[]).concat([a]):u[o]?u[o]+", "+a:a}})),u):u):null,f={data:e.responseType&&"text"!==e.responseType?i.response:i.responseText,status:i.status,statusText:i.statusText,headers:c,config:e,request:i};!function(e,t,n){var r=n.config.validateStatus;!r||r(n.status)?e(n):t(J("Request failed with status code "+n.status,n.config,null,n.request,n))}(t,n,f),i=null}},i.onabort=function(){i&&(n(J("Request aborted",e,"ECONNABORTED",i)),i=null)},i.onerror=function(){n(J("Network Error",e,null,i)),i=null},i.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(J(t,e,"ECONNABORTED",i)),i=null},P.isStandardBrowserEnv()){var l=G,d=(e.withCredentials||K(f))&&e.xsrfCookieName?l.read(e.xsrfCookieName):void 0;d&&(o[e.xsrfHeaderName]=d)}if("setRequestHeader"in i&&P.forEach(o,(function(e,t){void 0===r&&"content-type"===t.toLowerCase()?delete o[t]:i.setRequestHeader(t,e)})),P.isUndefined(e.withCredentials)||(i.withCredentials=!!e.withCredentials),e.responseType)try{i.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&i.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&i.upload&&i.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){i&&(i.abort(),n(e),i=null)})),void 0===r&&(r=null),i.send(r)}))},W={"Content-Type":"application/x-www-form-urlencoded"};function Y(e,t){!P.isUndefined(e)&&P.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var Z,ee={adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(Z=Q),Z),transformRequest:[function(e,t){return X(t,"Accept"),X(t,"Content-Type"),P.isFormData(e)||P.isArrayBuffer(e)||P.isBuffer(e)||P.isStream(e)||P.isFile(e)||P.isBlob(e)?e:P.isArrayBufferView(e)?e.buffer:P.isURLSearchParams(e)?(Y(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):P.isObject(e)?(Y(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};ee.headers={common:{Accept:"application/json, text/plain, */*"}},P.forEach(["delete","get","head"],(function(e){ee.headers[e]={}})),P.forEach(["post","put","patch"],(function(e){ee.headers[e]=P.merge(W)}));var te=ee;function ne(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var re=function(e){return ne(e),e.headers=e.headers||{},e.data=M(e.data,e.headers,e.transformRequest),e.headers=P.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),P.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||te.adapter)(e).then((function(t){return ne(e),t.data=M(t.data,t.headers,e.transformResponse),t}),(function(t){return I(t)||(ne(e),t&&t.response&&(t.response.data=M(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},oe=function(e,t){t=t||{};var n={},r=["url","method","params","data"],o=["headers","auth","proxy"],i=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];P.forEach(r,(function(e){void 0!==t[e]&&(n[e]=t[e])})),P.forEach(o,(function(r){P.isObject(t[r])?n[r]=P.deepMerge(e[r],t[r]):void 0!==t[r]?n[r]=t[r]:P.isObject(e[r])?n[r]=P.deepMerge(e[r]):void 0!==e[r]&&(n[r]=e[r])})),P.forEach(i,(function(r){void 0!==t[r]?n[r]=t[r]:void 0!==e[r]&&(n[r]=e[r])}));var a=r.concat(o).concat(i),s=Object.keys(t).filter((function(e){return-1===a.indexOf(e)}));return P.forEach(s,(function(r){void 0!==t[r]?n[r]=t[r]:void 0!==e[r]&&(n[r]=e[r])})),n};function ie(e){this.defaults=e,this.interceptors={request:new z,response:new z}}ie.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=oe(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[re,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));t.length;)n=n.then(t.shift(),t.shift());return n},ie.prototype.getUri=function(e){return e=oe(this.defaults,e),F(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},P.forEach(["delete","get","head","options"],(function(e){ie.prototype[e]=function(t,n){return this.request(P.merge(n||{},{method:e,url:t}))}})),P.forEach(["post","put","patch"],(function(e){ie.prototype[e]=function(t,n,r){return this.request(P.merge(r||{},{method:e,url:t,data:n}))}}));var ae=ie;function se(e){this.message=e}se.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},se.prototype.__CANCEL__=!0;var ue=se;function ce(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new ue(e),t(n.reason))}))}ce.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},ce.source=function(){var e;return{token:new ce((function(t){e=t})),cancel:e}};var fe=ce;function le(e){var t=new ae(e),n=T(ae.prototype.request,t);return P.extend(n,ae.prototype,t),P.extend(n,t),n}var de=le(te);de.Axios=ae,de.create=function(e){return le(oe(de.defaults,e))},de.Cancel=ue,de.CancelToken=fe,de.isCancel=I,de.all=function(e){return Promise.all(e)},de.spread=function(e){return function(t){return e.apply(null,t)}};var pe=de,he=de;pe.default=he;var me=pe;function ge(e){let t,n,r,o;return{c(){t=c("div"),n=c("div"),r=c("a"),o=f(e[1]),p(r,"class","result"),p(r,"href",e[1]),p(n,"class","mui-col-lg-12"),p(n,"id","link"),p(t,"class","mui-row")},m(e,i){s(e,t,i),a(t,n),a(n,r),a(r,o)},p(e,t){2&t&&function(e,t){t=""+t,e.data!==t&&(e.data=t)}(o,e[1]),2&t&&p(r,"href",e[1])},d(e){e&&u(t)}}}function ye(t){let n,o,i,m,g,y,v,b,w,x,E,S,C,$,R,j=t[1].length>0&&ge(t);return{c(){n=c("main"),o=c("div"),i=c("div"),i.textContent="nURL",m=l(),g=c("div"),g.textContent="nurl.co",y=l(),v=c("div"),b=c("div"),w=c("input"),x=l(),E=c("button"),S=f("SHORTEN"),$=l(),j&&j.c(),p(i,"class","mui--text-display3"),p(g,"class","mui--text-subhead"),p(w,"id","url-field"),p(w,"placeholder","Paste a link..."),p(w,"type","url"),p(b,"class","mui-textfield"),p(E,"class","mui-btn mui-btn--raised mui-btn--accent btn-shorten"),p(E,"id","btn-shorten"),p(E,"type","button"),E.disabled=C=!t[2],p(v,"class","mui-panel"),p(o,"class","mui-container-fluid")},m(e,u,c){s(e,n,u),a(n,o),a(o,i),a(o,m),a(o,g),a(o,y),a(o,v),a(v,b),a(b,w),h(w,t[0]),a(v,x),a(v,E),a(E,S),a(v,$),j&&j.m(v,null),c&&r(R),R=[d(w,"input",t[5]),d(E,"click",t[3])]},p(e,[t]){1&t&&h(w,e[0]),4&t&&C!==(C=!e[2])&&(E.disabled=C),e[1].length>0?j?j.p(e,t):(j=ge(e),j.c(),j.m(v,null)):j&&(j.d(1),j=null)},i:e,o:e,d(e){e&&u(n),j&&j.d(),r(R)}}}let ve=/([a-z]{1,2}tps?):\/\/((?:(?!(?:\/|#|\?|&)).)+)(?:(\/(?:(?:(?:(?!(?:#|\?|&)).)+\/))?))?(?:((?:(?!(?:\.|$|\?|#)).)+))?(?:(\.(?:(?!(?:\?|$|#)).)+))?(?:(\?(?:(?!(?:$|#)).)+))?(?:(#.+))?/i;function be(e,t,n){let r,o="",i="";async function a(e){await me.post("/api/v1/shorten",e).then(e=>{200===e.status&&(console.log(">> shortUrl",e.data.shortUrl),n(1,i=e.data.shortUrl))}).catch(e=>{console.error(e)})}return e.$$.update=()=>{1&e.$$.dirty&&n(0,o=o.trim()),1&e.$$.dirty&&n(2,r=ve.test(o))},[o,i,r,async function(){console.log("Shorten...");const e={url:o};await a(e)},a,function(){o=this.value,n(0,o)}]}return new class extends class{$destroy(){!function(e,t){const n=e.$$;null!==n.fragment&&(r(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}(this,1),this.$destroy=e}$on(e,t){const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1)}}$set(){}}{constructor(e){super(),O(this,e,be,ye,i,{})}}({target:document.body,props:{}})}(); diff --git a/pb_public/favicon.png b/pb_public/favicon.png new file mode 100644 index 0000000..3fe7a0a Binary files /dev/null and b/pb_public/favicon.png differ diff --git a/pb_public/global.css b/pb_public/global.css new file mode 100644 index 0000000..ec905f5 --- /dev/null +++ b/pb_public/global.css @@ -0,0 +1,66 @@ +html, body { + position: relative; + width: 100%; + height: 100%; +} + +body { + color: #333; + margin: 0; + padding: 8px; + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +a { + color: rgb(0,100,200); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:visited { + color: rgb(0,80,160); +} + +label { + display: block; +} + +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + padding: 0.4em; + margin: 0 0 0.5em 0; + box-sizing: border-box; + border: 1px solid #ccc; + border-radius: 2px; +} + +input:disabled { + color: #ccc; +} + +input[type="range"] { + height: 0; +} + +button { + color: #333; + background-color: #f4f4f4; + outline: none; +} + +button:disabled { + color: #999; +} + +button:not(:disabled):active { + background-color: #ddd; +} + +button:focus { + border-color: #666; +} diff --git a/pb_public/index.html b/pb_public/index.html new file mode 100644 index 0000000..19648f7 --- /dev/null +++ b/pb_public/index.html @@ -0,0 +1,18 @@ + + + + + + + nUrl + + + + + + + + + + +