# -*- coding: utf-8 -*-
# =============================================================================
# Ural Shortened Url Testing Function
# =============================================================================
#
# Function testing whether the given url is probably a shortened url or not.
#
import re

from ural.classes.hostname_trie_set import HostnameTrieSet
from ural.is_homepage import is_homepage
from ural.utils import safe_urlsplit

DOMAIN_STARTS_L_RE = re.compile(r"^/[0-9a-zA-Z]{3,}/?$")

# Some domains taken from: https://github.com/timleland/url-shorteners
SHORTENER_DOMAINS = [
    "0rz.tw",
    "1-url.net",
    "1001.tl",
    "126.am",
    "1link.in",
    "1tk.us",
    "1un.fr",
    "1url.com",
    "1url.cz",
    "1wb2.net",
    "2.gp",
    "2.ht",
    "20m.es",
    "23o.net",
    "2ad.in",
    "2big.at",
    "2doc.net",
    "2fear.com",
    "2kgam.es",
    "2long.cc",
    "2no.co",
    "2pl.us",
    "2tu.us",
    "2ty.in",
    "2u.xf.cz",
    "2ya.com",
    "3.ly",
    "307.to",
    "3ds.com",
    "3ra.be",
    "3x.si",
    "4i.ae",
    "4ms.me",
    "4sq.com",
    "4url.cc",
    "4view.me",
    "53eig.ht",
    "5em.cz",
    "5url.net",
    "5z8.info",
    "6fr.ru",
    "6g6.eu",
    "6url.com",
    "7.ly",
    "76.gd",
    "77.ai",
    "7fth.cc",
    "7li.in",
    "7ny.tv",
    "7vd.cn",
    "8u.cz",
    "944.la",
    "98.to",
    "9m.no",
    "9qr.de",
    "a.co",
    "a.gg",
    "a.msn.com",
    "a.nf",
    "a.sgdf.fr",
    "a0.fr",
    "a2a.me",
    "a42.fr",
    "aa.cx",
    "ab.co",
    "abbr.sk",
    "abbrr.com",
    "abc7.la",
    "abcn.ws",
    "abcurl.net",
    "abe.ma",
    "abnb.me",
    "aca.re",
    "acani.me",
    "acmi.land",
    "acortar.link",
    "act.gp",
    "acver.fr",
    "ad-med.cz",
    "ad.vu",
    "ad5.eu",
    "ad7.biz",
    "adb.ug",
    "adec.co",
    "adf.ly",
    "adfa.st",
    "adfly.fr",
    "adfoc.us",
    "adjix.com",
    "adli.pw",
    "admy.link",
    "adn.fm",
    "adv.li",
    "afx.cc",
    "ajb.me",
    "aje.io",
    "ajn.me",
    "aka.gr",
    "aka.ms",
    "al.ly",
    "album.ink",
    "alil.in",
    "altav.eu",
    "altereco.media",
    "alturl.com",
    "amn.st",
    "amp.gs",
    "amz.run",
    "amzn.asia",
    "amzn.eu",
    "amzn.to",
    "any.gs",
    "apne.ws",
    "apo-opa.info",
    "app.link",
    "apple.co",
    "aqva.pl",
    "ar.gy",
    "arab.news",
    "arcg.is",
    "ares.tl",
    "arst.ch",
    "assnat.fr",
    "asso.in",
    "atmlb.com",
    "atres.red",
    "atu.ca",
    "au.ms",
    "audiof.com",
    "audmns.com",
    "ava.st",
    "awr.as",
    "ayt.fr",
    "azali.fr",
    "azc.cc",
    "b00.fr",
    "b23.ru",
    "b23.tv",
    "b2l.me",
    "b54.in",
    "bacn.me",
    "baid.us",
    "barca.link",
    "bars.tl",
    "bbc.in",
    "bc.vc",
    "bcool.bz",
    "bddy.me",
    "bee4.biz",
    "beth.games",
    "bigaston.link",
    "bim.im",
    "binged.it",
    "bit.do",
    "bit.ly",
    "bitchute.xyz",
    "bitly.com",
    "bitly.ws",
    "bitw.in",
    "bityl.co",
    "bizj.us",
    "bkite.com",
    "blap.net",
    "blbrd.cm",
    "ble.pl",
    "blgs.co",
    "blip.tv",
    "blizz.ly",
    "bloat.me",
    "bmsp.in",
    "bnc.lt",
    "bnent.eu",
    "bnpp.lk",
    "boi.re",
    "bote.me",
    "bougn.at",
    "boxd.it",
    "br4.in",
    "bravo.ly",
    "bre.is",
    "brk.to",
    "brzu.net",
    "bsa.ly",
    "budurl.com",
    "buff.ly",
    "buk.me",
    "bul.lu",
    "burnurl.com",
    "bxl.me",
    "bzh.me",
    "c-o.in",
    "c.bnf.fr",
    "c11.kr",
    "c3po.link",
    "cachor.ro",
    "cam4.fr",
    "can.al",
    "canurl.com",
    "capfr.link",
    "captur.in",
    "catchylink.com",
    "cbs.so",
    "cbsn.ws",
    "cbug.cc",
    "cc.cc",
    "cciparisidf.fr",
    "ccj.im",
    "ccompt.es",
    "cd.leg.br",
    "cf.ly",
    "cf2.me",
    "cf6.co",
    "chck.me",
    "chilp.it",
    "chl.li,",
    "chng.it",
    "chocobp.com",
    "chrk.tv",
    "chzb.gr",
    "cirk.me",
    "cjb.net",
    "cl.lk",
    "cl.ly",
    "clar.in",
    "clck.ru",
    "cldp.ly",
    "cleanuri.com",
    "cli.gs",
    "cliccami.info",
    "clickmeter.com",
    "clickmetertracking.com",
    "clickthru.ca",
    "clikk.in",
    "clop.in",
    "cmpdnt.cc",
    "cn86.org",
    "cna.asia",
    "cnb.cx",
    "cnet.co",
    "cnhv.co",
    "cnn.it",
    "coinurl.com",
    "colibris.link",
    "conta.cc",
    "cor.sr",
    "cort.as",
    "cos.lv",
    "cot.ag",
    "couic.fr",
    "cpu.pm",
    "cr.tl",
    "crdrv.co",
    "crks.me",
    "crwd.fr",
    "cstu.io",
    "ctt.ec",
    "ctvr.us",
    "cudder.it",
    "cur.lv",
    "curl.im",
    "cut.ci",
    "cut.pe",
    "cut.sk",
    "cutt.eu",
    "cutt.ly",
    "cutt.us",
    "cutu.me",
    "cuturl.com",
    "cybr.fr",
    "cyonix.to",
    "d75.eu",
    "daa.pl",
    "dai.ly",
    "dailysign.al",
    "dainik-b.in",
    "dart.ws",
    "db.tt",
    "dbd.game",
    "dd.ma",
    "ddp.net",
    "ddsevilla.info",
    "decenturl.com",
    "del.ly",
    "dell.to",
    "dfl8.me",
    "dft.ba",
    "dgl.li",
    "di.sn",
    "digbig.com",
    "digg.com",
    "digimind.co",
    "digt.al",
    "disq.us",
    "dlbs.fr",
    "dld.bz",
    "dlvr.it",
    "dncgastrnt.co",
    "do.my",
    "docdro.id",
    "doiop.com",
    "dolp.cc",
    "doopin.net",
    "dopen.us",
    "dopice.sk",
    "dozz.es",
    "droid.ws",
    "dsmrq.es",
    "dv.gd",
    "dvelo.me",
    "dwarfurl.com",
    "dy.fi",
    "dy.si",
    "dyo.gs",
    "e.vg",
    "e37.eu",
    "earthquak.es",
    "easyuri.com",
    "easyurl.com",
    "easyurl.net",
    "ebx.sh",
    "econ.st",
    "ecra.se",
    "ed.gr",
    "edcollector.fr",
    "eef.li",
    "eepurl.com",
    "efs.link",
    "egtks.com",
    "eiie.io",
    "eldbt.com",
    "ellemag.co",
    "elpais.uy",
    "elperiodi.co",
    "ely.re",
    "emojilink.me",
    "energy-citi.es",
    "eng.mg",
    "engt.co",
    "eonli.ne",
    "ept.ms",
    "eptwitter.eu",
    "equid.la",
    "erax.cz",
    "erw.cz",
    "es.pn",
    "eset.la",
    "esyurl.com",
    "etcse.fr",
    "etlink.fr",
    "etoro.tw",
    "etsy.me",
    "europa.eu",
    "eweri.com",
    "ewerl.com",
    "ex9.co",
    "ezurl.cc",
    "f1.com",
    "f24.my",
    "fa.b",
    "fa.by",
    "fal.cn",
    "fanpa.ge",
    "fav.me",
    "fb.me",
    "fb.watch",
    "fbshare.me",
    "fcld.ly",
    "fdip.fr",
    "feedproxy.google.com",
    "ff.im",
    "fff.re",
    "fff.to",
    "fff.wf",
    "fhurl.com",
    "filz.fr",
    "fire.to",
    "firsturl.de",
    "firsturl.net",
    "flashsco.re",
    "flic.kr",
    "flip.it",
    "fliz.ly",
    "flq.us",
    "fly2.ws",
    "fnk.es",
    "foe.hn",
    "folu.me",
    "fon.gs",
    "fr.rog.gg",
    "fr24.com",
    "frama.link",
    "freak.to",
    "freze.it",
    "from.ubs",
    "fur.ly",
    "fuseurl.com",
    "fuzzy.to",
    "fw.to",
    "fwd4.me",
    "fwib.net",
    "fxn.ws",
    "g.co",
    "g.pe",
    "g.ro.lt",
    "g00.me",
    "g2g.to",
    "gal.xyz",
    "gcn.eu",
    "gd.lu",
    "geni.us",
    "gerd.fm",
    "gf.me",
    "gg.gg",
    "git.io",
    "giv.gg",
    "gizmo.do",
    "gl.am",
    "glo.bo",
    "gloss.bz",
    "glplive.org",
    "gma.abc",
    "go.9nl.com",
    "go.asse.fr",
    "go.cegeka.com",
    "go.ign.com",
    "go.letelegramme.fr",
    "go.nasa.gov",
    "go.one.org",
    "go.shr.lc",
    "go.tass.ru",
    "go.usa.gov",
    "go2.me",
    "go2cut.com",
    "gofund.me",
    "goha.bs",
    "goo-gl.me",
    "goo.gl",
    "goo.gle",
    "goo.lu",
    "good.ly",
    "goodsmile.link",
    "goog.le",
    "goshrink.com",
    "got.cr",
    "gotrim.me",
    "gowat.ch",
    "gplnk.com",
    "gq.mn",
    "grabify.link",
    "grem.io",
    "gri.ms",
    "guiama.is",
    "gurl.es",
    "h-c.info",
    "hadej.co",
    "han.gl",
    "hbsd.shop",
    "hc.hockey",
    "hec.su",
    "hellotxt.com",
    "heral.do",
    "hex.io",
    "hide.my",
    "hiderefer.com",
    "hill.cm",
    "hjkl.fr",
    "hmm.ph",
    "hmstr.biz",
    "hndcp.fr",
    "hollywood.li",
    "hops.me",
    "hover.com",
    "href.in",
    "href.li",
    "hrvd.me",
    "hsblinks.com",
    "hsnob.co",
    "ht.ly",
    "htl.li",
    "httpslink.com",
    "htxt.it",
    "hubs.la",
    "hubs.li",
    "hubs.ly",
    "huff.to",
    "hugeurl.com",
    "hulu.com",
    "hurl.it",
    "hurl.me",
    "hurl.ws",
    "hyperurl.co",
    "i-2.co",
    "i99.cz",
    "iaddict.co",
    "ibit.ly",
    "ibm.co",
    "icanhaz.com",
    "icit.fr",
    "ick.li",
    "icks.ro",
    "idek.net",
    "iea.li",
    "ift.tt",
    "ihe.art",
    "ihr.fm",
    "iiiii.in",
    "iky.fr",
    "ilix.in",
    "imdb.to",
    "indeedhi.re",
    "info.ms",
    "infob.ae",
    "infomi.gr",
    "ino.to",
    "inq.news",
    "inreply.to",
    "instagr.am",
    "interc.pt",
    "intg.ink",
    "invst.ly",
    "io.webhelp.com",
    "is.gd",
    "iscool.net",
    "isra.li",
    "isra.liiterasi.net",
    "isw.pub",
    "iterasi.net",
    "itm.im",
    "its.my",
    "ity.im",
    "ix.lt",
    "ix.sk",
    "j.gs",
    "j.mp",
    "ja.ma",
    "jb.gg",
    "jdem.cz",
    "jieb.be",
    "jijr.com",
    "jmp2.net",
    "jp22.net",
    "jpeg.ly",
    "jqw.de",
    "just.as",
    "juve.it",
    "jwatch.us",
    "kas.pr",
    "kask.us",
    "kbn.im",
    "kd2.org",
    "kfd.pl",
    "kgeek.co",
    "kissa.be",
    "kl.am",
    "klck.me",
    "kloo.me",
    "korta.nu",
    "kr3w.de",
    "krat.si",
    "kratsi.cz",
    "krod.cz",
    "krunchd.com",
    "kuc.cz",
    "kutt.it",
    "kxb.me",
    "l-fff.co",
    "l-k.be",
    "l.gg",
    "l.linklyhq.com",
    "l8r.it",
    "l9.fr",
    "l9k.net",
    "la4.cl",
    "labur.eus",
    "lat.ms",
    "lavoz.gal",
    "lawl.es",
    "lbrs.ca",
    "lc-s.co",
    "lc.cx",
    "lcut.in",
    "letop10.",
    "lety.io",
    "lew.ag",
    "lext.so",
    "lgbtq.to",
    "libero.it",
    "lick.my",
    "lien.li",
    "lien.pl",
    "lienfy.com",
    "lifehac.kr",
    "liip.to",
    "liltext.com",
    "lin.cr",
    "lin.ee",
    "lin.io",
    "link.emakinainflux.com",
    "link.infini.fr",
    "link.medium.com",
    "linkbee.com",
    "linkbun.ch",
    "linkn.co",
    "linkto.cm",
    "listani.me",
    "liurl.cn",
    "llu.ch",
    "ln-s.net",
    "ln-s.ru",
    "lnk.bvh.fyi",
    "lnk.co",
    "lnk.gd",
    "lnk.in",
    "lnk.ly",
    "lnk.ms",
    "lnk.sk",
    "lnkd.in",
    "lnked.in",
    "lnki.nl",
    "lnkiy.com,",
    "lnkr.fm",
    "lnks.fr",
    "lnkurl.com",
    "lnky.fr",
    "lnky.jp",
    "lnp.sn",
    "lnr.app",
    "loom.ly",
    "loopt.us",
    "lp.ca",
    "lp25.fr",
    "lru.jp",
    "lrzn.es",
    "lsdl.es",
    "lstu.fr",
    "lsul.su",
    "lt.tl",
    "lttr.ai",
    "lurl.no",
    "lvvk.com",
    "lynk.my",
    "lyonna.is",
    "m-et-d.link",
    "m1p.fr",
    "m3mi.com",
    "macte.ch",
    "maddy.news",
    "mailchi.mp",
    "make.my",
    "mash.to",
    "maza.rs",
    "mb4.me",
    "mbe.io",
    "mcaf.ee",
    "mck.co",
    "mdl29.net",
    "mdn.tv",
    "mdpt.fr",
    "merky.de",
    "metamark.net",
    "mic.fr",
    "michel.in",
    "micro.mn",
    "migre.me",
    "mile.io",
    "minilien.com",
    "miniurl.be",
    "miniurl.com",
    "minu.me",
    "minurl.fr",
    "mke.me",
    "mla.bs",
    "mmt.fans",
    "moby.to",
    "mol.im",
    "mon.actu.io",
    "monurl.ca",
    "moourl.com",
    "more.sh",
    "mrte.ch",
    "msft.it",
    "msft.social",
    "msi.gm",
    "mtr.cool",
    "mut.lu",
    "my.sociabble.com",
    "my.wolters-kluwer.fr",
    "myjob.scot",
    "myloc.me",
    "myumi.ch",
    "myurl.in",
    "n.pr",
    "n9.cl",
    "nac.ca",
    "nar.city",
    "natgeo.com",
    "naver.me",
    "nbc.co",
    "nbcnews.to",
    "nblo.gs",
    "ne1.net",
    "net.ms",
    "net46.net",
    "nico.ms",
    "nicou.ch",
    "nie.mn",
    "nig.gr",
    "ninten.do",
    "niny.io",
    "njx.me",
    "nn.nf",
    "non.li",
    "not.my",
    "notlong.com",
    "nov.io",
    "nowth.is",
    "nq.st",
    "nsfw.in",
    "ntdo.be",
    "ntdo.fr",
    "nutshellurl.com",
    "nvda.ws",
    "nvth.fr",
    "nxy.in",
    "nyer.cm",
    "nym.ag",
    "nyti.ms",
    "o-x.fr",
    "oc1.us",
    "ocul.us",
    "oe.cd",
    "ogcn.fr",
    "okok.fr",
    "olj.me",
    "olplus.fr",
    "om.ly",
    "omf.gd",
    "omoikane.net",
    "on.cnn.com",
    "on.ft.com",
    "on.mktw.net",
    "on.msnbc.com",
    "on.unesco.org",
    "onelink.me",
    "onforb.es",
    "options-po.li",
    "oran.ge",
    "orlo.uk",
    "orz.se",
    "ottsens.com",
    "ou.af",
    "ou.gd",
    "oua.be",
    "ouo.io",
    "ouvaton.link",
    "ow.ly",
    "owl.li",
    "p.pw",
    "p3t.co",
    "p4k.in",
    "para.pt",
    "parky.tv",
    "past.is",
    "paypal.me",
    "pbi.bz",
    "pd.am",
    "pdca.st",
    "pdh.co",
    "pens.pe",
    "peta.vg",
    "petafr.vg",
    "ph.dog",
    "ph.ly",
    "pic.gd",
    "pich.in",
    "picta.fr",
    "pin.it",
    "pin.st",
    "ping.fm",
    "piurl.com",
    "pkmn.news",
    "play.st",
    "playst.cc",
    "pli.gs",
    "plots.fr",
    "plstrw.rs",
    "pnt.me",
    "po.st",
    "pod.fo",
    "politi.co",
    "poprl.com",
    "pos.li",
    "post.ly",
    "posted.at",
    "posty.pe",
    "pp.gg",
    "ppfr.it",
    "ppst.me",
    "ppt.cc",
    "ppt.li",
    "prejit.cz",
    "prez.ly",
    "prf.hn",
    "prn.to",
    "profile.to",
    "propub.li",
    "psta.rs",
    "ptab.it",
    "ptiturl.com",
    "ptm.ro",
    "pub.vitrue.com",
    "pubg.info",
    "pulse.ly",
    "pw2.ro",
    "pwc.to",
    "pwne.ws",
    "py6.ru",
    "q.gs",
    "qbn.ru",
    "qdlink.co",
    "qicute.com",
    "qlnk.net",
    "qob.uz",
    "qqc.co",
    "qr.net",
    "qrco.de",
    "qrtag.fr",
    "qte.me",
    "qu.tc",
    "quip-art.com",
    "qxp.cz",
    "qxp.sk",
    "qy.fi",
    "r.im",
    "rb.gy",
    "rb6.co",
    "rb6.me",
    "rc.ca",
    "rcknr.io",
    "rdo.to",
    "rdz.me",
    "read.bi",
    "readerlinks.com",
    "readthis.ca",
    "reallytinyurl.com",
    "rebelne.ws",
    "rebrand.ly",
    "rebrandlydomain.com",
    "redir.ec",
    "redir.fr",
    "redirects.ca",
    "redirx.com",
    "redu.it",
    "ref.so",
    "reise.lc",
    "rel.ink",
    "relink.fr",
    "reso.ly",
    "retwt.me",
    "reut.rs",
    "rfi.my",
    "rflsnk.link",
    "rfr.bz",
    "ri.ms",
    "rickroll.it",
    "riot.com",
    "riz.cz",
    "riz.gd",
    "rl.gg",
    "rng.rs",
    "roc.gg",
    "rod.gs",
    "roflc.at",
    "rog.gg",
    "rs-thales.com",
    "rsmonkey.com",
    "rt.nu",
    "rt.se",
    "rt.tc",
    "rtrv.in",
    "ru.ly",
    "rubyurl.com",
    "rurl.org",
    "rww.tw",
    "s-url.fr",
    "s.42l.fr",
    "s.bulk.ly",
    "s.click.aliexpress.com",
    "s.id",
    "s.swissin.fo",
    "s.team",
    "s4c.in",
    "s7y.us",
    "sabqp.co",
    "safe.mn",
    "sagyap.tk",
    "sameurl.com",
    "sbee.link",
    "sc.mp",
    "schrts.co",
    "sci3nc.es",
    "scim.ag",
    "sco.lt",
    "scq.io",
    "scuf.co",
    "sdu.sk",
    "sdut.us",
    "seeme.at",
    "segidio.it",
    "segue.se",
    "sg.fr",
    "sh.st",
    "shar.as",
    "shar.es",
    "sharee.me",
    "sharein.com",
    "sharetabs.com",
    "shdw.me",
    "shink.de",
    "shope.ee",
    "shorl.com",
    "short.cc",
    "short.ie",
    "short.nr",
    "short.pk",
    "short.to",
    "shorte.st",
    "shortlink.store",
    "shortlinks.co.uk",
    "shortna.me",
    "shorturl.at",
    "shorturl.com",
    "shoturl.us",
    "shout.to",
    "show.my",
    "shrinkee.com",
    "shrinkify.com",
    "shrinkr.com",
    "shrinkster.com",
    "shrinkurl.in",
    "shrt.fr",
    "shrt.in",
    "shrt.st",
    "shrtco.de",
    "shrten.com",
    "shrunkin.com",
    "shw.me",
    "shy.si",
    "sicax.net",
    "simurl.com",
    "sina.lt",
    "sk.gy",
    "sk.mu",
    "skfb.ly",
    "sking.fr",
    "skr.sk",
    "skroc.pl",
    "slate.me",
    "smallr.com",
    "smarturl.it",
    "smll.co",
    "smpl.is",
    "smsh.me",
    "smurl.name",
    "sn.cf",
    "sn.im",
    "sn.vc",
    "snipr.com",
    "snipurl.com",
    "snkrne.ws",
    "snsw.us",
    "snurl.com",
    "so.arte",
    "soc.cr",
    "soc.fm",
    "social.ora.cl",
    "socy.es",
    "sohub.io",
    "soo.gd",
    "sovrn.co",
    "sp2.ro",
    "spacekaren.sucks",
    "spedr.com",
    "spkl.io",
    "spn.sr",
    "spoti.fi",
    "spr.ly",
    "sptfy.com",
    "sq6.ru",
    "sqex.link",
    "sqex.to",
    "sqrl.it",
    "srnk.net",
    "srs.li",
    "ssd.fr",
    "ssl.gs",
    "starturl.com",
    "strms.net",
    "sturly.com",
    "su.pr",
    "sumof.us",
    "supr.cl",
    "sur.om.fr",
    "surl.co.uk",
    "surl.hu",
    "surl.me",
    "sux.cz",
    "svlint.org",
    "swki.me",
    "swll.to",
    "sy.pe",
    "sz.de",
    "t.cn",
    "t.co",
    "t.lh.com",
    "t.ly",
    "t.me",
    "t1p.de",
    "t2m.io",
    "ta.gd",
    "tabzi.com",
    "tau.pe",
    "tbd.ly",
    "tblink.co",
    "tcrn.ch",
    "tdjt.cz",
    "tek.io",
    "tex.nz",
    "tgr.me",
    "tgr.ph",
    "theatln.tc",
    "theins.ru",
    "thesa.us",
    "thesco.re",
    "thinfi.com",
    "thls.co",
    "thr.cm",
    "thrdl.es",
    "ti.me",
    "tidd.ly",
    "tighturl.com",
    "tin.li",
    "tini.cc",
    "tiniuri.com",
    "tiny.cc",
    "tiny.lt",
    "tiny.ly",
    "tiny.ms",
    "tiny.one",
    "tiny.pl",
    "tiny123.com",
    "tinyarro.ws",
    "tinyl.io",
    "tinylf.com",
    "tinylink.in",
    "tinytw.it",
    "tinyuri.ca",
    "tinyurl.com",
    "tinyurl.hu",
    "tinyvid.io",
    "tixsu.com",
    "tk.",
    "tl.gd",
    "tldr.sk",
    "tldrify.com",
    "tllg.net",
    "tlmdo.co",
    "tmblr.co",
    "tmi.me",
    "tmz.me",
    "tnij.org",
    "tnvge.co",
    "tnw.to",
    "tny.com",
    "tny.cz",
    "tny.im",
    "to.ly",
    "to8.cc",
    "togoto.us",
    "tohle.de",
    "toi.in",
    "totalenergi.es",
    "totc.us",
    "toysr.us",
    "tpm.ly",
    "tpmr.com",
    "tr.ee",
    "tr.im",
    "tr.my",
    "tr5.in",
    "tra.kz",
    "traceurl.com",
    "trbr.io",
    "trck.me",
    "trib.al",
    "trick.ly",
    "trkr.ws",
    "trunc.it",
    "tsumeart.co",
    "tun.in",
    "tuppu.net",
    "turo.us",
    "tv3.video",
    "tv5m.tv",
    "tweetburner.com",
    "twet.fr",
    "twhub.com",
    "twi.im",
    "twib.in",
    "twirl.at",
    "twit.ac",
    "twitclicks.com",
    "twitterpan.com",
    "twitterurl.net",
    "twitterurl.org",
    "twitthis.com",
    "twiturl.de",
    "twlr.me",
    "twurl.cc",
    "twurl.nl",
    "u.afp.com",
    "u.mavrev.com",
    "u.nu",
    "u.to",
    "u2l.fr",
    "u6e.de",
    "u76.org",
    "ub0.cc",
    "ubb.link",
    "ubi.li",
    "ubxm.fr",
    "uby.es",
    "ucam.me",
    "ufcqc.link",
    "ug.cz",
    "ulmt.in",
    "ulu.lu",
    "unf.pa",
    "unh.cr",
    "uni.cf",
    "unlc.us",
    "untp.beer",
    "unwo.men",
    "updating.me",
    "upzat.com",
    "ur1.ca",
    "url.az",
    "url.co.uk",
    "url.ie",
    "url.inrae.fr",
    "url.kr",
    "url2.fr",
    "url360.me",
    "url4.eu",
    "url5.org",
    "urlao.com",
    "urlborg.com",
    "urlbrief.com",
    "urlcover.com",
    "urlcut.com",
    "urlenco.de",
    "urlhawk.com",
    "urli.nl",
    "urlin.it",
    "urlkiss.com",
    "urlkr.com",
    "urlot.com",
    "urlpire.com",
    "urlr.me",
    "urls.fr",
    "urls.im",
    "urlshorteningservicefortwitter.com",
    "urlx.ie",
    "urlx.org",
    "urlz.fr",
    "urlz.host",
    "urlzen.com",
    "urub.us",
    "usat.ly",
    "use.my",
    "uslsc.cr",
    "utfg.sk",
    "v.gd",
    "v.ht",
    "v5.gd",
    "vaaa.fr",
    "valv.im",
    "vaza.me",
    "vb.ly",
    "vbet.biz",
    "vbly.us",
    "vd55.com",
    "vdn.lv",
    "verd.in",
    "vgn.am",
    "vgn.me",
    "viid.me",
    "virl.com",
    "vl.am",
    "vm.lc",
    "vm.tiktok.com",
    "vni.fr",
    "vntyfr.com",
    "vogue.cm",
    "vov.li",
    "vsll.eu",
    "vt802.us",
    "vu.fr",
    "vult.re",
    "vur.me",
    "vv.vg",
    "w-j.co",
    "w.lpnt.fr",
    "w.tt",
    "w.wiki",
    "w1p.fr",
    "w3d.to",
    "w3t.org",
    "w55.de",
    "wa.link",
    "wa.me",
    "waa.ai",
    "wapo.st",
    "wapurl.co.uk",
    "wb1.eu",
    "wclink.co",
    "wdwnt.news",
    "we.tl",
    "web99.eu",
    "wed.li",
    "weez.li",
    "wef.ch",
    "weverse.onelink.me",
    "wh3.io",
    "whln.eu",
    "wideo.fr",
    "wipi.es",
    "wn.nr",
    "workfor.us",
    "wow.link",
    "wp.me",
    "wrfr.me",
    "write.as",
    "wrld.bg",
    "wt.link",
    "wtc.la",
    "wu.cz",
    "ww7.fr",
    "www.sharee.me",
    "www.tmz.me",
    "wwy.me",
    "x.co",
    "x.nu",
    "x.se",
    "x.vu",
    "x10.mx",
    "x2c.eu",
    "x2c.eumx",
    "xaddr.com",
    "xav.cc",
    "xbx.lv",
    "xeeurl.com",
    "xfru.it",
    "xgd.in",
    "xhtxs.cn",
    "xib.me",
    "xl8.eu",
    "xoe.cz",
    "xq.ms",
    "xr.com",
    "xrb.link",
    "xrl.in",
    "xrl.us",
    "xt3.me",
    "xua.me",
    "xub.me",
    "xurl.es",
    "xurl.jp",
    "xurls.co",
    "xzb.cc",
    "y.ahoo.it",
    "y2u.be",
    "yagoa.fr",
    "yagoa.me",
    "yatuc.com",
    "yau.sh",
    "ye.pe",
    "yeca.eu",
    "yect.com",
    "yep.it",
    "yfrog.com",
    "yhoo.it",
    "yiyd.com",
    "yogh.me",
    "yon.ir",
    "youfap.me",
    "youtu.be",
    "ysear.ch",
    "yuarel.com",
    "yweb.com",
    "yyv.co",
    "z0p.de",
    "z9.fr",
    "zapit.nu",
    "zcu.io",
    "zeek.ir",
    "zi.ma",
    "zi.mu",
    "zi.pe",
    "zip.net",
    "zipmyurl.com",
    "zkr.cz",
    "zkrat.me",
    "zkrt.cz",
    "zoodl.com",
    "zpag.es",
    "zpr.io",
    "zsms.net",
    "zti.me",
    "zubb.it",
    "zud.me",
    "zurl.io",
    "zurl.ws",
    "zws.im",
    "zxq.net",
    "zyva.org",
    "zz.gd",
    "zzang.kr",
    "zzb.bz",
    "›.ws",
    "✩.ws",
    "✿.ws",
    "❥.ws",
    "➔.ws",
    "➞.ws",
    "➡.ws",
    "➨.ws",
    "➯.ws",
    "➹.ws",
    "➽.ws",
    "🍊.ws",
    "🏹.to",
    "😻🍕.ws",
]

# NOTE: we use a trie to perform efficient queries and so we don't
# need to test every domain/subdomain linearly
SHORTENER_DOMAINS_TRIE = HostnameTrieSet()

for domain in SHORTENER_DOMAINS:
    SHORTENER_DOMAINS_TRIE.add(domain)


def is_l_shortened_domain(url):
    parsed = safe_urlsplit(url)

    return parsed.hostname.startswith("l.") and re.search(
        DOMAIN_STARTS_L_RE, parsed.path
    )


def is_shortened_url(url):
    parsed = safe_urlsplit(url)

    # NOTE: shortener domain homepages are not shortened urls per se
    if is_homepage(parsed):
        return False

    # Shortener domains starting with 'l.'
    if is_l_shortened_domain(parsed):
        return True

    return SHORTENER_DOMAINS_TRIE.match(parsed)
