diff --git a/.editorconfig b/.editorconfig index 9a4e730..030cb83 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,6 @@ trim_trailing_whitespace = true indent_style = space indent_size = 2 -[*.{es,js,jsm,jsx,ts}] +[*.js] indent_style = tab -indent_size = 1 tab_width = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7db26f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +background.bundle.js +content-script.bundle.js diff --git a/background.js b/background.js index 067bf8c..2e41a78 100644 --- a/background.js +++ b/background.js @@ -1,8 +1,15 @@ -if (typeof ('chrome') === 'undefined') { - var chrome = browser; -} - -var browser = browser || chrome; +import { chrome, browser } from './globals'; +import trackerData from './whotracksme.json'; +import { + cleanStorage, + saveCookies, + saveHTML, + saveInDB, + saveInputFields, + saveInputFieldsCache, + savetpList, + savetpURLFP, +} from './database'; function log(message) { if (debug) { @@ -34,7 +41,7 @@ function cookie_parser(header, fp, tp) { a[b[0]] = b[1]; } // const cookie_map_key = b[0] + ":" + b[1]; - cookie_map_key = b[1]; + const cookie_map_key = b[1]; if (!cookie_map.hasOwnProperty(cookie_map_key)) { cookie_map[cookie_map_key] = {}; } @@ -93,7 +100,8 @@ function getJsonFromUrl(tp_url, tp_host, fp) { } // Let's get the intersection between query_map and cookie_map -STOP_WORDS = ['true', 'false', 'undefined']; +// Let's find values that can be used for tracking. +const STOP_WORDS = ['true', 'false', 'undefined', '2019', '19-']; function intersection(o1, o2) { return Object.keys(o1).concat(Object.keys(o2)).sort().reduce(function (r, a, i, aa) { @@ -110,9 +118,6 @@ function cookie_synching() { return intersection(query_param_map, cookie_map); } -// Let's find values that can be used for tracking. -STOP_WORDS = ['true', 'false', 'undefined', '2019', '19-']; - function values_used_for_tracking() { const values_for_tracking = new Set(); Object.keys(cookie_map).forEach(e => { @@ -161,7 +166,6 @@ function company_wise_profile() { const debug = true; /// Comes from whitracks.me. We need to improve the mechanisms to update the lists. -const trackerData = { "Index Exchange": { "hosts": ["casalemedia.com", "indexww.com"], "id": "index_exchange_", "parent": "Index Exchange, Inc. " }, "CDNvideo": { "hosts": ["cdnvideo.com"], "id": "cdnvideo.com", "parent": "CDNvideo" }, "Amazon Instant Video": { "hosts": ["aiv-cdn.net"], "id": "amazon_video", "parent": "Amazon" }, "ShopAuskunft.de": { "hosts": ["shopauskunft.de"], "id": "shopauskunft.de", "parent": "Unknown" }, "MicroAd": { "hosts": ["microad.co.jp", "microad.jp", "microad.net"], "id": "microad", "parent": "Unknown" }, "Impact Radius": { "hosts": ["7eer.net", "d3cxv97fi8q177.cloudfront.net", "evyy.net", "impactradius-event.com", "impactradius-tag.com", "impactradius.com", "ojrq.net", "r7ls.net"], "id": "impact_radius", "parent": "Impact Radius" }, "AdTriba": { "hosts": ["adtriba.com"], "id": "adtriba.com", "parent": "Unknown" }, "adnetworkperformance.com": { "hosts": ["adnetworkperformance.com"], "id": "adnetworkperformance.com", "parent": "Unknown" }, "Urban Airship": { "hosts": ["urbanairship.com"], "id": "urban_airship", "parent": "Urban Airship, Inc." }, "DeepIntent": { "hosts": ["deepintent.com"], "id": "deepintent.com", "parent": "Unknown" }, "ACRWEB": { "hosts": ["ziyu.net"], "id": "acrweb", "parent": "ACRWEB" }, "Kinja": { "hosts": ["kinja.com"], "id": "kinja.com", "parent": "Gizmodo Media Group" }, "Adguard": { "hosts": ["adguard.com"], "id": "adguard", "parent": "Unknown" }, "smartlink.cool": { "hosts": ["smartlink.cool"], "id": "smartlink.cool", "parent": "Unknown" }, "Roblox": { "hosts": ["rbxcdn.com"], "id": "roblox", "parent": "Unknown" }, "StreamRail": { "hosts": ["streamrail.com", "streamrail.net"], "id": "streamrail.com", "parent": "ironSource" }, "24\u0421\u041c\u0418": { "hosts": ["24smi.net", "24smi.org"], "id": "24smi", "parent": "Unknown" }, "Sellpoints": { "hosts": ["sellpoint.net", "sellpoints.com"], "id": "sellpoints", "parent": "ConversionPoint Technologies Inc." }, "econda Cross Sell": { "hosts": ["crosssell.info"], "id": "crosssell.info", "parent": "Econda" }, "LifeStreet Media": { "hosts": ["lfstmedia.com"], "id": "lifestreet_media", "parent": "LifeStreet Corporation" }, "Ownpage": { "hosts": ["ownpage.fr"], "id": "ownpage", "parent": "Unknown" }, "AdSniper": { "hosts": ["adsniper.ru"], "id": "adsniper.ru", "parent": "Unknown" }, "Visual IQ": { "hosts": ["myvisualiq.net"], "id": "visual_iq", "parent": "VisualIQ" }, "Yahoo! Japan": { "hosts": ["storage-yahoo.jp", "yahoo.co.jp", "yahooapis.jp", "yimg.jp", "yjtag.jp"], "id": "yahoo_japan", "parent": "Unknown" }, "DataTables": { "hosts": ["datatables.net"], "id": "datatables", "parent": "Unknown" }, "Acquia": { "hosts": ["acquia.com"], "id": "acquia.com", "parent": "Unknown" }, "adtr02.com": { "hosts": ["adtr02.com"], "id": "adtr02.com", "parent": "Unknown" }, "IAB Consent": { "hosts": ["consensu.org"], "id": "iab_consent", "parent": "IAB" }, "cpx.to": { "hosts": ["cpx.to"], "id": "cpx.to", "parent": "Unknown" }, "CoNative": { "hosts": ["conative.de"], "id": "conative.de", "parent": "Unknown" }, "Meetrics": { "hosts": ["meetrics.net", "mxcdn.net", "research.de.com"], "id": "meetrics", "parent": "Meetrics GmbH" }, "United Internet Media GmbH": { "hosts": ["tifbs.net", "ui-portal.de", "uimserv.net"], "id": "united_internet_media_gmbh", "parent": "United Internet AG" }, "bRealTime": { "hosts": ["brealtime.com"], "id": "brealtime", "parent": "Unknown" }, "Greentube Internet Entertainment Solutions": { "hosts": ["greentube.com", "gt-cdn.net"], "id": "greentube.com", "parent": "Unknown" }, "Zendesk": { "hosts": ["zendesk.com"], "id": "zendesk", "parent": "Zendesk" }, "Vergic": { "hosts": ["vergic.com"], "id": "vergic.com", "parent": "Unknown" }, "Beachfront Media": { "hosts": ["bfmio.com"], "id": "beachfront", "parent": "Unknown" }, "adverServe": { "hosts": ["adverserve.net"], "id": "adverserve", "parent": "adverServe" }, "Pusher": { "hosts": ["pusher.com", "pusherapp.com"], "id": "pusher.com", "parent": "Unknown" }, "stailamedia.com": { "hosts": ["stailamedia.com"], "id": "stailamedia_com", "parent": "Unknown" }, "Shopgate": { "hosts": ["shopgate.com"], "id": "shopgate.com", "parent": "Unknown" }, "Yandex.API": { "hosts": ["yandex.st"], "id": "yandex.api", "parent": "Yandex" }, "Google AdServices": { "hosts": ["googleadservices.com"], "id": "google_adservices", "parent": "Google" }, "pushno.com": { "hosts": ["pushno.com"], "id": "pushno.com", "parent": "Unknown" }, "TubeMogul": { "hosts": ["tubemogul.com"], "id": "tubemogul", "parent": "TubeMogul" }, "Piano": { "hosts": ["npttech.com", "tinypass.com"], "id": "tinypass", "parent": "Piano (Previously Tinypass)" }, "Dailymotion": { "hosts": ["dailymotion.com", "dailymotionbus.com", "dm-event.net", "dmcdn.net"], "id": "dailymotion", "parent": "Vivendi" }, "overheat": { "hosts": ["overheat.it"], "id": "overheat.it", "parent": "Unknown" }, "RichRelevance": { "hosts": ["ics0.com", "richrelevance.com"], "id": "richrelevance", "parent": "RichRelevance" }, "Adomik": { "hosts": ["adomik.com"], "id": "adomik", "parent": "Unknown" }, "Tovarro": { "hosts": ["tovarro.com"], "id": "tovarro.com", "parent": "Unknown" }, "undercomputer.com": { "hosts": ["undercomputer.com"], "id": "undercomputer.com", "parent": "Unknown" }, "mobtrks.com": { "hosts": ["mobtrks.com"], "id": "mobtrks.com", "parent": "Unknown" }, "cdnwidget.com": { "hosts": ["cdnwidget.com"], "id": "cdnwidget.com", "parent": "Unknown" }, "algovid.com": { "hosts": ["algovid.com"], "id": "algovid.com", "parent": "Unknown" }, "Yieldify": { "hosts": ["yieldify.com"], "id": "yieldify", "parent": "Yieldify" }, "enreach": { "hosts": ["adtlgc.com"], "id": "enreach", "parent": "Unknown" }, "Scroll": { "hosts": ["scroll.com"], "id": "scroll", "parent": "Scroll" }, "RawGit": { "hosts": ["rawgit.com"], "id": "rawgit", "parent": "Unknown" }, "Wetter.com": { "hosts": ["wetter.com", "wettercomassets.com"], "id": "wetter_com", "parent": "Unknown" }, "Visualstudio.com": { "hosts": ["visualstudio.com"], "id": "visualstudio.com", "parent": "Microsoft" }, "Pingdom": { "hosts": ["pingdom.net"], "id": "pingdom", "parent": "Pingdom" }, "makesource.cool": { "hosts": ["makesource.cool"], "id": "makesource.cool", "parent": "Unknown" }, "puserving.com": { "hosts": ["puserving.com"], "id": "puserving.com", "parent": "Unknown" }, "NEORY ": { "hosts": ["ad-srv.net", "contentspread.net", "neory-tm.com", "simptrack.com"], "id": "neory_", "parent": "NEORY GmbH" }, "1DMP": { "hosts": ["1dmp.io"], "id": "1dmp.io", "parent": "Unknown" }, "Salesforce Live Agent": { "hosts": ["liveagentforsalesforce.com", "salesforceliveagent.com"], "id": "salesforce_live_agent", "parent": "Salesforce" }, "Giraff.io": { "hosts": ["giraff.io"], "id": "giraff.io", "parent": "Unknown" }, "propvideo.net": { "hosts": ["propvideo.net"], "id": "propvideo_net", "parent": "Unknown" }, "Eperflex": { "hosts": ["email-reflex.com"], "id": "eperflex", "parent": "Unknown" }, "Azure CDN": { "hosts": ["azureedge.net"], "id": "azureedge.net", "parent": "Microsoft" }, "Accengage": { "hosts": ["accengage.net"], "id": "accengage", "parent": "Accengage" }, "Fastly": { "hosts": ["fastly.net", "fastlylb.net"], "id": "fastlylb.net", "parent": "Fastly" }, "Typekit by Adobe": { "hosts": ["typekit.com", "typekit.net"], "id": "typekit_by_adobe", "parent": "Adobe" }, "Segment": { "hosts": ["d2dq2ahtl5zl1z.cloudfront.net", "d47xnnr8b1rki.cloudfront.net", "segment.com", "segment.io"], "id": "segment", "parent": "Segment" }, "TradeTracker": { "hosts": ["tradetracker.net"], "id": "tradetracker", "parent": "TradeTracker" }, "Naver CDN": { "hosts": ["pstatic.net"], "id": "pstatic.net", "parent": "NAVER Corp" }, "Taobao": { "hosts": ["alipcsec.com"], "id": "taobao", "parent": "Alibaba" }, "Yieldr": { "hosts": ["254a.com"], "id": "yieldr", "parent": "Unknown" }, "Gamedistribution.com": { "hosts": ["gamedistribution.com"], "id": "gamedistribution.com", "parent": "Unknown" }, "Statcounter": { "hosts": ["statcounter.com"], "id": "statcounter", "parent": "StatCounter" }, "AddToAny": { "hosts": ["addtoany.com"], "id": "lockerz_share", "parent": "LightInTheBox.com" }, "CreateJS": { "hosts": ["createjs.com"], "id": "createjs", "parent": "Unknown" }, "Mopinion": { "hosts": ["mopinion.com"], "id": "mopinion.com", "parent": "Mopinion" }, "VisualDNA": { "hosts": ["vdna-assets.com", "visualdna.com"], "id": "visualdna", "parent": "Harris Insights & Analytics" }, "Bild.de": { "hosts": ["bildstatic.de"], "id": "bild", "parent": "Unknown" }, "Lenua System": { "hosts": ["lenua.de"], "id": "lenua.de", "parent": "Synatix" }, "SAS": { "hosts": ["aimatch.com", "sas.com"], "id": "sas", "parent": "SAS" }, "Rollbar": { "hosts": ["d37gvrvc0wt4s1.cloudfront.net"], "id": "rollbar", "parent": "Rollbar" }, "Cond\u00e9 Nast Digital": { "hosts": ["condenast.com"], "id": "condenastdigital.com", "parent": "Cond\u00e9 Nast " }, "St-Hatena": { "hosts": ["hatena.ne.jp", "st-hatena.com"], "id": "st-hatena", "parent": "Hatena Co., Ltd." }, "Vizury": { "hosts": ["vizury.com"], "id": "vizury", "parent": "Vizury" }, "apicit.net": { "hosts": ["apicit.net"], "id": "apicit.net", "parent": "Unknown" }, "MRP": { "hosts": ["mrpdata.com", "mrpdata.net"], "id": "mrpdata", "parent": "Fifth Story" }, "redtube.com": { "hosts": ["rdtcdn.com", "redtube.com"], "id": "redtube.com", "parent": "Unknown" }, "MediaMath": { "hosts": ["mathads.com", "mathtag.com"], "id": "mediamath", "parent": "MediaMath, Inc." }, "WWWPromoter": { "hosts": ["wwwpromoter.com"], "id": "wwwpromoter", "parent": "wwwPromoter" }, "bulkhentai.com": { "hosts": ["bulkhentai.com"], "id": "bulkhentai.com", "parent": "Unknown" }, "Indeed": { "hosts": ["indeed.com"], "id": "indeed", "parent": "Indeed" }, "RevenueHits": { "hosts": ["clksite.com", "imageshack.host"], "id": "revenue_hits", "parent": "Intango" }, "Monster Advertising": { "hosts": ["monster.com"], "id": "monster_advertising", "parent": "Monster Worldwide" }, "Yandex.Direct": { "hosts": ["an.yandex.ru", "awaps.yandex.ru"], "id": "yandex_direct", "parent": "Yandex" }, "Demandbase": { "hosts": ["company-target.com", "demandbase.com"], "id": "demandbase", "parent": "Unknown" }, "Curse": { "hosts": ["curse.com"], "id": "curse.com", "parent": "Amazon" }, "Los Angeles Times": { "hosts": ["latimes.com"], "id": "latimes", "parent": "Los Angeles Times" }, "Webgains": { "hosts": ["webgains.com"], "id": "webgains", "parent": "Unknown" }, "Adnologies": { "hosts": ["heias.com"], "id": "adnologies", "parent": "ADNOLOGIES GmbH" }, "Nexage": { "hosts": ["nexage.com"], "id": "nexage", "parent": "Verizon" }, "Taboola": { "hosts": ["basebanner.com", "taboola.com", "taboolasyndication.com"], "id": "taboola", "parent": "Taboola" }, "Storify": { "hosts": ["storify.com"], "id": "storify", "parent": "Unknown" }, "Samba TV": { "hosts": ["samba.tv"], "id": "samba.tv", "parent": "Free Stream Media Corp. dba Samba TV" }, "TrialPay": { "hosts": ["rialpay.com", "tp-cdn.com"], "id": "tp-cdn.com", "parent": "Unknown" }, "CapitalData": { "hosts": ["kdata.fr"], "id": "capitaldata", "parent": "HighCo" }, "westlotto.com": { "hosts": ["westlotto.com"], "id": "westlotto_com", "parent": "Unknown" }, "CBS Interactive": { "hosts": ["cbsinteractive.com"], "id": "cbsi.com", "parent": "CBS Interactive" }, "NBC News": { "hosts": ["s-nbcnews.com"], "id": "nbc_news", "parent": "Unknown" }, "LiveTex": { "hosts": ["livetex.ru"], "id": "livetex.ru", "parent": "Unknown" }, "Sociomantic": { "hosts": ["sociomantic.com"], "id": "sociomantic", "parent": "Sociomantic Labs GmbH" }, "VKontakte": { "hosts": ["userapi.com", "vk.com", "vkontakte.ru"], "id": "vkontakte_widgets", "parent": "Megafon" }, "Audience Square": { "hosts": ["audiencesquare.com"], "id": "audiencesquare.com", "parent": "Unknown" }, "DigiTrust": { "hosts": ["digitru.st"], "id": "digitrust", "parent": "IAB" }, "Vk.com": { "hosts": ["cdn-vk.com", "vk-analytics.com", "vkuservideo.net"], "id": "vk.com", "parent": "Megafon" }, "Google Photos": { "hosts": ["ggpht.com"], "id": "google_photos", "parent": "Google" }, "Traffic Fabrik": { "hosts": ["trafficfabrik.com"], "id": "trafficfabrik.com", "parent": "Unknown" }, "glganltcs.space": { "hosts": ["glganltcs.space"], "id": "glganltcs.space", "parent": "Unknown" }, "G+J e|MS": { "hosts": ["emsservice.de"], "id": "gujems", "parent": "Gruner + Jahr AG" }, "Hola Player": { "hosts": ["h-cdn.com"], "id": "hola_player", "parent": "Hola CDN" }, "Jetlore": { "hosts": ["jetlore.com"], "id": "jetlore", "parent": "Jetlore" }, "TrafficForce": { "hosts": ["trafficforce.com"], "id": "trafficforce", "parent": "TrafficForce" }, "Perform Group": { "hosts": ["performgroup.com"], "id": "perform_group", "parent": "Perform Media Services Ltd" }, "Omniture (Adobe Analytics)": { "hosts": ["2o7.net", "du8783wkf05yr.cloudfront.net", "hitbox.com", "imageg.net", "omtrdc.net"], "id": "omniture__adobe_analytics_", "parent": "Adobe" }, "Rakuten LinkShare": { "hosts": ["linksynergy.com"], "id": "linksynergy.com", "parent": "Rakuten Marketing LLC" }, "Ora.TV": { "hosts": ["ora.tv"], "id": "ora.tv", "parent": "Ora.TV" }, "HomeAway": { "hosts": ["homeaway.com"], "id": "homeaway", "parent": "Unknown" }, "toplist.cz": { "hosts": ["toplist.cz"], "id": "toplist.cz", "parent": "Unknown" }, "ViralGains": { "hosts": ["viralgains.com"], "id": "viralgains", "parent": "Unknown" }, "Freedom Mortgage": { "hosts": ["freedom.com"], "id": "freedom_mortgage", "parent": "Freedom Mortgage" }, "K\u00e4ufersiegel": { "hosts": ["kaeufersiegel.de"], "id": "kaeufersiegel.de", "parent": "Unknown" }, "Adelphic": { "hosts": ["ipredictive.com"], "id": "adelphic", "parent": "Adelphic LLC" }, "nosto": { "hosts": ["nosto.com"], "id": "nosto.com", "parent": "Unknown" }, "BBC": { "hosts": ["bbci.co.uk"], "id": "bbci", "parent": "Unknown" }, "SumoMe": { "hosts": ["sumo.com", "sumome.com"], "id": "sumome", "parent": "SumoMe" }, "Acuity Ads": { "hosts": ["acuityplatform.com"], "id": "acuity_ads", "parent": "Acuityads Inc." }, "akamoihd.net": { "hosts": ["akamoihd.net"], "id": "akamoihd.net", "parent": "Unknown" }, "zog.link": { "hosts": ["zog.link"], "id": "zog.link", "parent": "Unknown" }, "adbetnet": { "hosts": ["adbetclickin.pink", "adbetnet.com"], "id": "adbetclickin.pink", "parent": "Unknown" }, "Optanaon by OneTrust": { "hosts": ["cookielaw.org"], "id": "optanaon", "parent": "Unknown" }, "PubNub": { "hosts": ["pubnub.com"], "id": "pubnub.com", "parent": "Unknown" }, "eluxer.net": { "hosts": ["eluxer.net"], "id": "eluxer_net", "parent": "Unknown" }, "Github Pages": { "hosts": ["github.io"], "id": "github_pages", "parent": "GitHub, Inc." }, "Videology": { "hosts": ["tidaltv.com"], "id": "videology", "parent": "Videology Ltd." }, "easylist.club": { "hosts": ["easylist.club"], "id": "easylist_club", "parent": "Unknown" }, "ipify": { "hosts": ["ipify.org"], "id": "ipify", "parent": "Unknown" }, "Kissmetrics": { "hosts": ["kissmetrics.com"], "id": "kissmetrics.com", "parent": "Unknown" }, "ScoreCard Research": { "hosts": ["comscore.com", "scorecardresearch.com", "scoreresearch.com", "scrsrch.com", "securestudies.com"], "id": "scorecard_research_beacon", "parent": "comScore, Inc." }, "adtng.com": { "hosts": ["adtng.com"], "id": "adtng.com", "parent": "Unknown" }, "BlueConic": { "hosts": ["blueconic.net"], "id": "blueconic.net", "parent": "Unknown" }, "Nekudo": { "hosts": ["nekudo.com"], "id": "nekudo.com", "parent": "Nekudo" }, "Apester": { "hosts": ["apester.com"], "id": "apester", "parent": "Apester Ltd" }, "blogimg.jp": { "hosts": ["blogimg.jp"], "id": "blogimg.jp", "parent": "LINE Corporation" }, "Keen IO": { "hosts": ["dc8na2hxrj29i.cloudfront.net", "keen.io"], "id": "keen_io", "parent": "Keen IO" }, "stayfriends.de": { "hosts": ["stayfriends.de"], "id": "stayfriends.de", "parent": "Unknown" }, "Hubvisor": { "hosts": ["hubvisor.io"], "id": "hubvisor.io", "parent": "Unknown" }, "Nativo": { "hosts": ["ntv.io", "postrelease.com"], "id": "nativo", "parent": "Nativo, Inc." }, "TripAdvisor": { "hosts": ["jscache.com", "tacdn.com", "tamgrt.com", "tripadvisor.co.uk", "tripadvisor.com", "tripadvisor.de"], "id": "tripadvisor", "parent": "IAC (InterActiveCorp)" }, "Bannerflow": { "hosts": ["bannerflow.com"], "id": "bannerflow.com", "parent": "Bannerflow AB" }, "Zimbio": { "hosts": ["zimbio.com"], "id": "zimbio.com", "parent": "Unknown" }, "ShareThrough": { "hosts": ["shareth.ru", "sharethrough.com"], "id": "sharethrough", "parent": "Sharethrough, Inc" }, "freegeoip.net": { "hosts": ["freegeoip.net"], "id": "freegeoip_net", "parent": "Unknown" }, "Beeswax": { "hosts": ["bidr.io"], "id": "beeswax", "parent": "BeeswaxIO Corporation" }, "ADventori": { "hosts": ["adventori.com"], "id": "adventori", "parent": "ADventori SAS" }, "DANtrack": { "hosts": ["dantrack.net"], "id": "dantrack.net", "parent": "Dentsu Aegis Network" }, "Clearbit": { "hosts": ["clearbit.com"], "id": "clearbit.com", "parent": "Clearbit" }, "Eloqua": { "hosts": ["eloqua.com", "en25.com"], "id": "eloqua", "parent": "Oracle" }, "Stripe": { "hosts": ["stripe.com", "stripe.network"], "id": "stripe.com", "parent": "Unknown" }, "Smarter Travel Media": { "hosts": ["smartertravel.com", "travelsmarter.net"], "id": "smarter_travel", "parent": "IAC (InterActiveCorp)" }, "Tumblr Analytics": { "hosts": ["sre-perim.com", "txmblr.com"], "id": "tumblr_analytics", "parent": "Verizon" }, "Hurra Tracker": { "hosts": ["hurra.com"], "id": "hurra_tracker", "parent": "Hurra Communications" }, "Blogfoster": { "hosts": ["blogfoster.com"], "id": "blogfoster.com", "parent": "Blogfoster GmbH" }, "ClearPier": { "hosts": ["pulseradius.com"], "id": "clear_pier", "parent": "ClearPier" }, "MyFonts": { "hosts": ["myfonts.net"], "id": "myfonts_counter", "parent": "MyFonts" }, "GfK": { "hosts": ["sensic.net"], "id": "gfk", "parent": "GfK Group" }, "Zopim": { "hosts": ["zopim.com"], "id": "zopim", "parent": "Zopim" }, "bodelen.com": { "hosts": ["bodelen.com"], "id": "bodelen.com", "parent": "Unknown" }, "Weborama": { "hosts": ["adrcdn.com", "adrcntr.com", "weborama.com", "weborama.fr"], "id": "weborama", "parent": "WEBORAMA" }, "gfycat": { "hosts": ["gfycat.com"], "id": "gfycat.com", "parent": "Unknown" }, "Boxever": { "hosts": ["boxever.com"], "id": "boxever", "parent": "Boxever" }, "Bemobile": { "hosts": ["bemobile.ua"], "id": "bemobile.ua", "parent": "Bemobile" }, "SoMo Audience": { "hosts": ["mobileadtrading.com"], "id": "somoaudience", "parent": "SoMo Audience" }, "1&1 Internet": { "hosts": ["1and1.com", "1und1.de", "uicdn.com", "website-start.de"], "id": "1und1", "parent": "Unknown" }, "SLI Systems": { "hosts": ["sli-system.com"], "id": "resultspage.com", "parent": "SLI Systems" }, "Falk Technologies": { "hosts": ["angsrvr.com"], "id": "falk_technologies", "parent": "Unknown" }, "Nano Interactive": { "hosts": ["audiencemanager.de"], "id": "nano_interactive", "parent": "Nano Interactive GmbH" }, "Snowplow": { "hosts": ["d346whrrklhco7.cloudfront.net", "d78fikflryjgj.cloudfront.net", "dc8xl0ndzn2cb.cloudfront.net", "playwire.com", "snplow.net"], "id": "snowplow", "parent": "Snowplow" }, "Fyber": { "hosts": ["fyber.com"], "id": "fyber", "parent": "Fyber " }, "ReadSpeaker": { "hosts": ["readspeaker.com"], "id": "readspeaker.com", "parent": "Unknown" }, "SociaPlus": { "hosts": ["sociaplus.com"], "id": "sociaplus.com", "parent": "Unknown" }, "Interyield": { "hosts": ["ps7894.com"], "id": "interyield", "parent": "Advertise.com" }, "ZeusClicks": { "hosts": ["zeusclicks.com"], "id": "zeusclicks", "parent": "Unknown" }, "Consumable": { "hosts": ["serverbid.com"], "id": "consumable", "parent": "GiftConnect" }, "Google Appspot": { "hosts": ["appspot.com"], "id": "google_appspot", "parent": "Google" }, "ContentSquare": { "hosts": ["contentsquare.net"], "id": "contentsquare.net", "parent": "Unknown" }, "licensebuttons.net": { "hosts": ["licensebuttons.net"], "id": "licensebuttons.net", "parent": "Unknown" }, "redblue": { "hosts": ["redblue.de"], "id": "redblue_de", "parent": "Unknown" }, "SmartClip": { "hosts": ["smartclip.net"], "id": "smartclip", "parent": "smartclip Holding AG" }, "xHamster": { "hosts": ["xhamster.com", "xhamsterlive.com", "xhamsterpremium.com", "xhcdn.com"], "id": "xhamster", "parent": "Unknown" }, "aldi-international.com": { "hosts": ["aldi-international.com"], "id": "aldi-international.com", "parent": "Unknown" }, "Bigpoint": { "hosts": ["bigpoint-payment.com", "bigpoint.com", "bigpoint.net", "bpcdn.net", "bpsecure.com"], "id": "bigpoint", "parent": "Unknown" }, "Yandex Metrika": { "hosts": ["mc.yandex.ru"], "id": "yandex_metrika", "parent": "Yandex" }, "Usabilla": { "hosts": ["usabilla.com"], "id": "usabilla", "parent": "Usabilla" }, "Kontextr": { "hosts": ["ktxtr.com"], "id": "kontextr", "parent": "Kontext" }, "Livesport Media": { "hosts": ["livesportmedia.eu"], "id": "livesportmedia.eu", "parent": "Unknown" }, "xvideos.com": { "hosts": ["xvideos-cdn.com", "xvideos.com"], "id": "xvideos_com", "parent": "Unknown" }, "modulepush.com": { "hosts": ["modulepush.com"], "id": "modulepush.com", "parent": "Unknown" }, "Mouseflow": { "hosts": ["mouseflow.com"], "id": "mouseflow", "parent": "Mouseflow" }, "Netmining": { "hosts": ["netmining.com", "netmng.com"], "id": "netmining", "parent": "Netmining" }, "Oracle RightNow": { "hosts": ["rightnowtech.com", "rnengage.com"], "id": "oracle_rightnow", "parent": "Oracle" }, "intelliAd": { "hosts": ["intelliad.com", "intelliad.de"], "id": "intelliad", "parent": "intelliAd" }, "TORO": { "hosts": ["toro-tags.com", "toroadvertising.com", "toroadvertisingmedia.com"], "id": "toro", "parent": "TORO Advertising" }, "[24]7": { "hosts": ["247-inc.net", "d1af033869koo7.cloudfront.net"], "id": "24_7", "parent": "Unknown" }, "Crazy Egg": { "hosts": ["cetrk.com", "crazyegg.com", "dnn506yrbagrg.cloudfront.net"], "id": "crazy_egg", "parent": "Crazy Egg" }, "Shopify Stats": { "hosts": ["shopify.com"], "id": "shopify_stats", "parent": "Shopify" }, "GroovinAds": { "hosts": ["groovinads.com"], "id": "groovinads", "parent": "GroovinAds" }, "Effective Measure": { "hosts": ["effectivemeasure.net"], "id": "effective_measure", "parent": "Effective Measure" }, "Zendesk CDN": { "hosts": ["zdassets.com"], "id": "zdassets.com", "parent": "Zendesk" }, "ad4mat": { "hosts": ["ad4mat.ar", "ad4mat.at", "ad4mat.be", "ad4mat.bg", "ad4mat.br", "ad4mat.ch", "ad4mat.co.uk", "ad4mat.cz", "ad4mat.de", "ad4mat.dk", "ad4mat.es", "ad4mat.fi", "ad4mat.fr", "ad4mat.gr", "ad4mat.hu", "ad4mat.it", "ad4mat.mx", "ad4mat.net", "ad4mat.nl", "ad4mat.no", "ad4mat.pl", "ad4mat.ro", "ad4mat.ru", "ad4mat.se", "ad4mat.tr"], "id": "ad4mat", "parent": "ad4mat" }, "PopAds": { "hosts": ["popads.net", "popadscdn.net"], "id": "popads", "parent": "PopAds" }, "AdOcean": { "hosts": ["adocean.pl"], "id": "adocean", "parent": "AdOcean" }, "Media Innovation Group": { "hosts": ["mookie1.com"], "id": "media_innovation_group", "parent": "Media Innovation Group" }, "coll2onf.com": { "hosts": ["coll2onf.com"], "id": "coll2onf.com", "parent": "Unknown" }, "healte.de": { "hosts": ["healte.de"], "id": "healte.de", "parent": "Unknown" }, "Rockerbox": { "hosts": ["getrockerbox.com"], "id": "rockerbox", "parent": "Rockerbox" }, "clcknads.pro": { "hosts": ["clcknads.pro"], "id": "clcknads.pro", "parent": "Unknown" }, "Routenplaner Karten": { "hosts": ["routenplaner-karten.com"], "id": "routenplaner-karten.com", "parent": "Unknown" }, "DataCaciques": { "hosts": ["datacaciques.com"], "id": "datacaciques.com", "parent": "Unknown" }, "SessionCam": { "hosts": ["d2oh4tlt9mrke9.cloudfront.net", "sessioncam.com"], "id": "sessioncam", "parent": "SessionCam" }, "Mapbox": { "hosts": ["mapbox.com"], "id": "mapbox", "parent": "Unknown" }, "Fidelity Media": { "hosts": ["fidelity-media.com"], "id": "fidelity_media", "parent": "Fidelity Media" }, "algolia": { "hosts": ["algolia.com", "algolia.net"], "id": "algolia.net", "parent": "Unknown" }, "khzbeucrltin.com": { "hosts": ["khzbeucrltin.com"], "id": "khzbeucrltin.com", "parent": "Unknown" }, "bluenewsupdate.info": { "hosts": ["bluenewsupdate.info"], "id": "bluenewsupdate.info", "parent": "Unknown" }, "Ligatus": { "hosts": ["content-recommendation.net", "ligadx.com", "ligatus.com", "ligatus.de", "veeseo.com"], "id": "ligatus", "parent": "Gruner + Jahr AG" }, "sheego.de": { "hosts": ["sheego.de"], "id": "sheego.de", "parent": "Unknown" }, "Perimeterx": { "hosts": ["perimeterx.net"], "id": "perimeterx.net", "parent": "Unknown" }, "Datalogix": { "hosts": ["inextaction.net", "nexac.com"], "id": "datalogix", "parent": "Oracle" }, "webclose.net": { "hosts": ["webclose.net"], "id": "webclose.net", "parent": "Unknown" }, "WiredMinds": { "hosts": ["wiredminds.com", "wiredminds.de"], "id": "wiredminds", "parent": "WiredMinds" }, "Salesforce": { "hosts": ["force.com", "salesforce.com"], "id": "salesforce.com", "parent": "Salesforce" }, "Kampyle": { "hosts": ["kampyle.com"], "id": "kampyle", "parent": "Medallia Inc. " }, "Datonics": { "hosts": ["pro-market.net"], "id": "datonics", "parent": "Unknown" }, "Google Shopping": { "hosts": ["googlecommerce.com"], "id": "google_trusted_stores", "parent": "Google" }, "howtank": { "hosts": ["howtank.com"], "id": "howtank.com", "parent": "Unknown" }, "Awin1": { "hosts": ["awin.com"], "id": "awin1.com", "parent": "Awin" }, "Vi": { "hosts": ["digitaltarget.ru"], "id": "vi", "parent": "Vi" }, "Krux Digital": { "hosts": ["krxd.net"], "id": "krux_digital", "parent": "Salesforce" }, "superfastcdn.com": { "hosts": ["superfastcdn.com"], "id": "superfastcdn.com", "parent": "Unknown" }, "bongacams.com": { "hosts": ["bongacams.com"], "id": "bongacams.com", "parent": "Unknown" }, "etracker": { "hosts": ["etracker.com", "etracker.de", "sedotracker.com"], "id": "etracker", "parent": "etracker GmbH" }, "luckypushh.com": { "hosts": ["luckypushh.com"], "id": "luckypushh.com", "parent": "Unknown" }, "Branch": { "hosts": ["app.link", "branch.io"], "id": "branch_metrics", "parent": "Branch Metrics Inc" }, "Evergage": { "hosts": ["evergage.com"], "id": "evergage.com", "parent": "Unknown" }, "SoundCloud": { "hosts": ["sndcdn.com", "soundcloud.com"], "id": "soundcloud", "parent": "SoundCloud" }, "Bidswitch": { "hosts": ["bidswitch.net", "exe.bid"], "id": "bidswitch", "parent": "BIDSWITCH GmbH" }, "Brightcove": { "hosts": ["brightcove.com"], "id": "brightcove", "parent": "Brightcove" }, "AT Internet": { "hosts": ["ati-host.net", "aticdn.net", "xiti.com"], "id": "at_internet", "parent": "AT Internet" }, "Hyvyd GmbH": { "hosts": ["hyvyd.com"], "id": "hyvyd", "parent": "Unknown" }, "m-pathy": { "hosts": ["m-pathy.com"], "id": "m-pathy", "parent": "m-pathy" }, "iPerceptions": { "hosts": ["iperceptions.com"], "id": "iperceptions", "parent": "iPerceptions" }, "Rakuten Global Market": { "hosts": ["rakuten.co.jp"], "id": "rakuten_globalmarket", "parent": "Rakuten Marketing LLC" }, "InfoLinks": { "hosts": ["infolinks.com", "intextscript.com"], "id": "infolinks", "parent": "Infolinks" }, "Bidtellect": { "hosts": ["bttrack.com"], "id": "bidtellect", "parent": "Bidtellect, Inc" }, "Wikia CDN": { "hosts": ["nocookie.net"], "id": "wikia_cdn", "parent": "Wikia" }, "Orange France": { "hosts": ["wanadoo.fr"], "id": "orange_france", "parent": "Orange France" }, "Loggly": { "hosts": ["loggly.com"], "id": "loggly", "parent": "Loggly" }, "Snapchat For Business": { "hosts": ["sc-static.net", "snapchat.com"], "id": "snapchat", "parent": "Unknown" }, "Brandmetrics.com": { "hosts": ["brandmetrics.com"], "id": "brandmetrics.com", "parent": "Unknown" }, "Chatango": { "hosts": ["chatango.com"], "id": "chatango", "parent": "Chatango" }, "Curse CDN": { "hosts": ["cursecdn.com"], "id": "cursecdn.com", "parent": "Amazon" }, "BigCommerce": { "hosts": ["bigcommerce.com"], "id": "bigcommerce.com", "parent": "BigCommerce" }, "Bebi Media": { "hosts": ["bebi.com"], "id": "bebi", "parent": "Unknown" }, "RadiumOne": { "hosts": ["gwallet.com", "r1-cdn.net"], "id": "radiumone", "parent": "RhythmOne, LLC" }, "Map and Route": { "hosts": ["mapandroute.de"], "id": "mapandroute.de", "parent": "Unknown" }, "Auditorius": { "hosts": ["audtd.com"], "id": "audtd.com", "parent": "Unknown" }, "Instart Logic": { "hosts": ["sdad.guru"], "id": "instart_logic", "parent": "Instart Logic Inc." }, "Vicomi": { "hosts": ["vicomi.com"], "id": "vicomi.com", "parent": "Unknown" }, "Amazon CloudFront": { "hosts": ["cloudfront.net"], "id": "amazon_cloudfront", "parent": "Amazon" }, "borrango.com": { "hosts": ["borrango.com"], "id": "borrango.com", "parent": "Unknown" }, "vooxe.com": { "hosts": ["vooxe.com"], "id": "vooxe.com", "parent": "Unknown" }, "CloudMedia": { "hosts": ["cloud-media.fr"], "id": "cloud-media.fr", "parent": "Unknown" }, "Facebook": { "hosts": ["facebook.com", "facebook.net"], "id": "facebook", "parent": "Facebook" }, "Sailthru Horizon": { "hosts": ["sail-horizon.com", "sail-personalize.com", "sailthru.com"], "id": "sailthru_horizon", "parent": "Sailthru" }, "Ooyala": { "hosts": ["ooyala.com"], "id": "ooyala.com", "parent": "Telstra" }, "AdRecover": { "hosts": ["adrecover.com"], "id": "adrecover", "parent": "AdPushUp, Inc." }, "HookLogic": { "hosts": ["hlserve.com"], "id": "hooklogic", "parent": "Criteo S.A." }, "Naver": { "hosts": ["naver.com", "naver.net"], "id": "naver.com", "parent": "NAVER Corp" }, "Reed Business Information": { "hosts": ["reedbusiness.net"], "id": "reed_business_information", "parent": "Andera Partners" }, "Wordpress Ads": { "hosts": ["pubmine.com"], "id": "wordpress_ads", "parent": "Automattic" }, "Stack Exchange": { "hosts": ["sstatic.net"], "id": "sstatic.net", "parent": "Unknown" }, "Digiteka": { "hosts": ["digiteka.net", "ultimedia.com"], "id": "digiteka", "parent": "DIGITEKA Technologies" }, "ComboTag": { "hosts": ["combotag.com"], "id": "combotag", "parent": "Unknown" }, "fortlachanhecksof.info": { "hosts": ["fortlachanhecksof.info"], "id": "fortlachanhecksof.info", "parent": "Unknown" }, "The Reach Group": { "hosts": ["deepthought.online", "reachgroup.com", "redintelligence.net"], "id": "the_reach_group", "parent": "The Reach Group GmbH" }, "Twiago": { "hosts": ["twiago.com"], "id": "twiago", "parent": "twiago GmbH" }, "adality GmbH": { "hosts": ["adrtx.net"], "id": "adality_gmbh", "parent": "Arvato Bertelsmann" }, "Avail": { "hosts": ["avail.net"], "id": "avail", "parent": "Avail" }, "Insider": { "hosts": ["useinsider.com"], "id": "insider", "parent": "Insider" }, "Unruly Media": { "hosts": ["unrulymedia.com"], "id": "unruly_media", "parent": "Unruly Group Ltd" }, "Nanigans": { "hosts": ["nanigans.com"], "id": "nanigans", "parent": "Nanigans" }, "Gruner + Jahr": { "hosts": ["guj.de"], "id": "guj.de", "parent": "Gruner + Jahr AG" }, "MediaNova CDN": { "hosts": ["mncdn.com"], "id": "mncdn.com", "parent": "Unknown" }, "Expedia": { "hosts": ["expedia.com", "trvl-px.com"], "id": "expedia", "parent": "IAC (InterActiveCorp)" }, "Active Agent": { "hosts": ["active-agent.com"], "id": "active_agent", "parent": "Active Agent AG" }, "Traffective": { "hosts": ["cdntrf.com", "traffective.com"], "id": "traffective", "parent": "Unknown" }, "perfdrive.com": { "hosts": ["perfdrive.com"], "id": "perfdrive.com", "parent": "Unknown" }, "Delve Networks": { "hosts": ["delvenetworks.com"], "id": "delve_networks", "parent": "Limelight Networks" }, "TrackJS": { "hosts": ["d2zah9y47r7bi2.cloudfront.net", "dl1d2m8ri9v3j.cloudfront.net", "trackjs.com"], "id": "trackjs", "parent": "TrackJS" }, "Didomi": { "hosts": ["privacy-center.org"], "id": "didomi", "parent": "Didomi" }, "adNET.de": { "hosts": ["adnet.biz", "adnet.de"], "id": "adnet.de", "parent": "adNET.de" }, "7tv.de": { "hosts": ["7tv.de"], "id": "7tv.de", "parent": "Unknown" }, "Maru-EDU": { "hosts": ["edigitalsurvey.com"], "id": "maru-edu", "parent": "MaruEdr" }, "poirreleast.club": { "hosts": ["poirreleast.club"], "id": "poirreleast.club", "parent": "Unknown" }, "srvtrck.com": { "hosts": ["srvtrck.com"], "id": "srvtrck.com", "parent": "Unknown" }, "Adalyser": { "hosts": ["adalyser.com"], "id": "adalyser.com", "parent": "OneSoon Ltd" }, "Kiosked": { "hosts": ["kiosked.com"], "id": "kiosked", "parent": "Kiosked" }, "Vox": { "hosts": ["vox-cdn.com"], "id": "vox", "parent": "Vox Media" }, "ad-delivery.net": { "hosts": ["ad-delivery.net"], "id": "ad-delivery.net", "parent": "Unknown" }, "Cedexis Radar": { "hosts": ["cedexis-radar.net", "cedexis-test.com", "cedexis.com", "cedexis.fastlylb.net", "cedexis.net"], "id": "cedexis_radar", "parent": "Cedexis" }, "redGalaxy CDN": { "hosts": ["atendesoftware.pl"], "id": "redcdn.pl", "parent": "Atende Software Sp. z o.o." }, "Adtheorent": { "hosts": ["adentifi.com"], "id": "adtheorent", "parent": "AdTheorent, Inc" }, "tomnewsupdate.info": { "hosts": ["tomnewsupdate.info"], "id": "tomnewsupdate.info", "parent": "Unknown" }, "Urban Media GmbH": { "hosts": ["urban-media.com"], "id": "urban-media.com", "parent": "Unknown" }, "fontawesome.com": { "hosts": ["fontawesome.com"], "id": "fontawesome_com", "parent": "Unknown" }, "ADmantX": { "hosts": ["admantx.com"], "id": "admantx.com", "parent": "Expert System, SpA" }, "iGoDigital": { "hosts": ["igodigital.com"], "id": "igodigital", "parent": "iGoDigital" }, "Etsy CDN": { "hosts": ["etsystatic.com"], "id": "etsystatic", "parent": "Etsy, Inc." }, "TripleLift": { "hosts": ["3lift.com", "d3iwjrnl4m67rd.cloudfront.net", "triplelift.com"], "id": "triplelift", "parent": "TripleLift, Inc." }, "OnThe.io": { "hosts": ["onthe.io"], "id": "onthe.io", "parent": "onthe.io" }, "VG Wort": { "hosts": ["vgwort.de"], "id": "vg_wort", "parent": "VG Wort" }, "Ippen Digital": { "hosts": ["id-news.net", "idcdn.de"], "id": "id-news.net", "parent": "Unknown" }, "Vibrant Ads": { "hosts": ["intellitxt.com"], "id": "vibrant_ads", "parent": "Vibrant Media Limited" }, "Footprint DNS": { "hosts": ["footprintdns.com"], "id": "footprintdns.com", "parent": "Microsoft" }, "Refined Labs": { "hosts": ["refinedads.com"], "id": "refined_labs", "parent": "Refined Labs" }, "vacaneedasap.com": { "hosts": ["vacaneedasap.com"], "id": "vacaneedasap.com", "parent": "Unknown" }, "newsupdatedir.info": { "hosts": ["newsupdatedir.info"], "id": "newsupdatedir.info", "parent": "Unknown" }, "nerfherdersolo.com": { "hosts": ["nerfherdersolo.com"], "id": "nerfherdersolo_com", "parent": "Unknown" }, "Wix": { "hosts": ["parastorage.com", "wix.com"], "id": "wix.com", "parent": "Unknown" }, "Adtrue": { "hosts": ["adtrue.com"], "id": "adtrue", "parent": "AdTrue" }, "Smartlook": { "hosts": ["getsmartlook.com", "smartlook.com"], "id": "smartlook", "parent": "SmartLook" }, "Wix Media Platform": { "hosts": ["wixmp.com"], "id": "wixmp", "parent": "Wix" }, "LiveChat": { "hosts": ["livechatinc.com", "livechatinc.net"], "id": "livechat", "parent": "LiveChat" }, "Schibsted Media Group": { "hosts": ["schibsted.com", "schibsted.io"], "id": "schibsted", "parent": "Schibsted ASA" }, "Embedly": { "hosts": ["embed.ly", "embedly.com"], "id": "embed.ly", "parent": "Medium" }, "wnzmauurgol.com": { "hosts": ["wnzmauurgol.com"], "id": "wnzmauurgol.com", "parent": "Unknown" }, "IXI Digital": { "hosts": ["ixiaa.com"], "id": "ixi_digital", "parent": "IXI Services" }, "ADTECH": { "hosts": ["adtech.de", "adtechus.com"], "id": "adtech", "parent": "Verizon" }, "1plusX": { "hosts": ["opecloud.com"], "id": "1plusx", "parent": "1plusX AG" }, "Next Tuesday GmbH": { "hosts": ["nt.vc"], "id": "nt.vc", "parent": "Unknown" }, "Adzerk": { "hosts": ["adzerk.net"], "id": "adzerk", "parent": "Adzerk" }, "solads.media": { "hosts": ["solads.media"], "id": "solads.media", "parent": "Unknown" }, "SkimLinks": { "hosts": ["redirectingat.com", "skimlinks.com", "skimresources.com"], "id": "skimlinks", "parent": "SkimLinks" }, "CCM Benchmark": { "hosts": ["ccmbg.com"], "id": "ccm_benchmark", "parent": "Unknown" }, "i-mobile": { "hosts": ["i-mobile.co.jp"], "id": "i-mobile", "parent": "i-mobile" }, "Engagio": { "hosts": ["engagio.com"], "id": "engagio", "parent": "Engagio" }, "Switch Concepts": { "hosts": ["myswitchads.com", "switchadhub.com", "switchads.com", "switchafrica.com"], "id": "switch_concepts", "parent": "Switch Concepts Limited" }, "OpenStat": { "hosts": ["openstat.net"], "id": "openstat", "parent": "Unknown" }, "OnFocus": { "hosts": ["fogl1onf.com", "onfocus.io"], "id": "onfocus.io", "parent": "OnFocus" }, "Jumptap": { "hosts": ["jumptap.com"], "id": "jumptap", "parent": "Millenial Media (Jumptap)" }, "loadercdn.com": { "hosts": ["loadercdn.com"], "id": "loadercdn.com", "parent": "Unknown" }, "belboon GmbH": { "hosts": ["belboon.de"], "id": "belboon_gmbh", "parent": "Unknown" }, "webclicks24.com": { "hosts": ["webclicks24.com"], "id": "webclicks24_com", "parent": "Unknown" }, "Orange": { "hosts": ["orange.fr", "orangeads.fr"], "id": "orange", "parent": "Orange Mobile" }, "BugHerd": { "hosts": ["bugherd.com"], "id": "bugherd.com", "parent": "Macropod Software Pty Ltd" }, "Google Analytics": { "hosts": ["google-analytics.com"], "id": "google_analytics", "parent": "Google" }, "GroupM Server": { "hosts": ["gmads.net", "grmtech.net"], "id": "groupm_server", "parent": "GroupM" }, "Autoscout24": { "hosts": ["autoscout24.com", "autoscout24.net"], "id": "autoscout24.com", "parent": "Scout 24" }, "Zencoder": { "hosts": ["zencdn.net"], "id": "zencoder", "parent": "Zencoder" }, "umebiggestern.club": { "hosts": ["umebiggestern.club"], "id": "umebiggestern.club", "parent": "Unknown" }, "Disqus": { "hosts": ["disqus.com", "disquscdn.com"], "id": "disqus", "parent": "Disqus" }, "Quantcount": { "hosts": ["quantcount.com"], "id": "quantcount", "parent": "Quantcast International Limited" }, "Chute": { "hosts": ["api.getchute.com", "media.chute.io"], "id": "chute", "parent": "ESW Capital" }, "Forter": { "hosts": ["forter.com"], "id": "forter", "parent": "Unknown" }, "Gravatar": { "hosts": ["gravatar.com"], "id": "gravatar", "parent": "Automattic" }, "jsDelivr": { "hosts": ["jsdelivr.net"], "id": "jsdelivr", "parent": "Unknown" }, "Google Servers": { "hosts": ["1e100cdn.net"], "id": "google_servers", "parent": "Google" }, "flixcdn.com": { "hosts": ["flixcdn.com"], "id": "flixcdn.com", "parent": "Unknown" }, "MoPub": { "hosts": ["mopub.com"], "id": "mopub", "parent": "Twitter" }, "LiveRamp": { "hosts": ["pippio.com", "rapleaf.com", "rlcdn.com"], "id": "liveramp", "parent": "Acxiom" }, "Wipe Analytics": { "hosts": ["wipe.de"], "id": "web_wipe_anlaytics", "parent": "TenSquare" }, "Internet BillBoard": { "hosts": ["bbelements.com", "goadservices.com", "ibillboard.com"], "id": "internet_billboard", "parent": "Internet BillBoard a.s." }, "Leadin": { "hosts": ["hsleadflows.net"], "id": "hsleadflows.net", "parent": "HubSpot" }, "Adnium": { "hosts": ["adnium.com"], "id": "adnium.com", "parent": "Unknown" }, "vtracy.de": { "hosts": ["vtracy.de"], "id": "vtracy.de", "parent": "Unknown" }, "OneTrust": { "hosts": ["onetrust.com"], "id": "onetrust", "parent": "OneTrust" }, "SiteImprove Analytics": { "hosts": ["siteimproveanalytics.com"], "id": "siteimprove_analytics", "parent": "Siteimprove" }, "Fiksu": { "hosts": ["fiksu.com"], "id": "fiksu", "parent": "Noosphere" }, "POWr": { "hosts": ["powr.io"], "id": "powr.io", "parent": "POWr" }, "WikiMedia": { "hosts": ["wikimedia.org", "wikipedia.org", "wikiquote.org"], "id": "wikimedia.org", "parent": "Wikimedia Foundation" }, "Plista": { "hosts": ["plista.com"], "id": "plista", "parent": "plista GmbH" }, "Adobe Login": { "hosts": ["adobelogin.com"], "id": "adobe_login", "parent": "Adobe" }, "Turn Inc.": { "hosts": ["turn.com"], "id": "turn_inc.", "parent": "Singtel" }, "AdGear": { "hosts": ["adgear.com", "adgrx.com"], "id": "adgear", "parent": "Samsung" }, "Intermarkets": { "hosts": ["intermarkets.net"], "id": "intermarkets.net", "parent": "Unknown" }, "Kalooga": { "hosts": ["kaloo.ga"], "id": "kaloo.ga", "parent": "Unknown" }, "DMG Media": { "hosts": ["and.co.uk"], "id": "dmg_media", "parent": "Daily Mail and General Trust plc" }, "Booking.com": { "hosts": ["booking.com", "bstatic.com"], "id": "booking.com", "parent": "Unknown" }, "Travel Audience": { "hosts": ["travelaudience.com"], "id": "travel_audience", "parent": "Unknown" }, "Jivox": { "hosts": ["jivox.com"], "id": "jivox", "parent": "Jivox Corp" }, "ad-blocker.org": { "hosts": ["ad-blocker.org"], "id": "ad-blocker.org", "parent": "Unknown" }, "Braze": { "hosts": ["appboycdn.com"], "id": "braze", "parent": "Braze, Inc." }, "makeappdev.xyz": { "hosts": ["makeappdev.xyz"], "id": "makeappdev.xyz", "parent": "Unknown" }, "exoticads": { "hosts": ["exoticads.com"], "id": "exoticads.com", "parent": "Unknown" }, "Stride": { "hosts": ["cdn.stridespark.com", "tracking.stridespark.com"], "id": "stride", "parent": "Stride Software, Inc." }, "Visual Website Optimizer": { "hosts": ["d5phz18u4wuww.cloudfront.net", "visualwebsiteoptimizer.com", "wingify.com"], "id": "visual_website_optimizer", "parent": "Wingify" }, "Le Monde.fr": { "hosts": ["lemde.fr"], "id": "le_monde.fr", "parent": "Le Monde.fr" }, "AdBrain": { "hosts": ["adbrn.com"], "id": "adbrain", "parent": "Unknown" }, "Magnetic": { "hosts": ["d3ezl4ajpp2zy8.cloudfront.net", "domdex.com", "domdex.net"], "id": "magnetic", "parent": "Magnetic" }, "Truste Consent": { "hosts": ["consent.truste.com"], "id": "truste_consent", "parent": "TrustArc" }, "OG Hub": { "hosts": ["oghub.io"], "id": "oghub.io", "parent": "Unknown" }, "Art19": { "hosts": ["art19.com"], "id": "art19", "parent": "Art19" }, "StackAdapt": { "hosts": ["stackadapt.com"], "id": "stackadapt", "parent": "StackAdapt" }, "BrandWire": { "hosts": ["brandwire.tv"], "id": "brandwire.tv", "parent": "Unknown" }, "Tamedia": { "hosts": ["tamedia.ch"], "id": "tamedia.ch", "parent": "Unknown" }, "Segmento": { "hosts": ["rutarget.ru"], "id": "segmento", "parent": "Unknown" }, "RTB House": { "hosts": ["creativecdn.com"], "id": "rtb_house", "parent": "RTB House S.A." }, "GrandSlamMedia": { "hosts": ["trw12.com", "tuberewards.com"], "id": "grandslammedia", "parent": "Grand Slam Media" }, "Navegg DMP": { "hosts": ["navdmp.com"], "id": "navegg_dmp", "parent": "Navegg" }, "Wayfair": { "hosts": ["wayfair.com"], "id": "wayfair_com", "parent": "Unknown" }, "Kaltura": { "hosts": ["kaltura.com"], "id": "kaltura", "parent": "Kaltura" }, "Evidon": { "hosts": ["betrad.com", "evidon.com"], "id": "evidon", "parent": "Unknown" }, "RevContent": { "hosts": ["revcontent.com"], "id": "revcontent", "parent": "Revcontent, LLC" }, "Dropbox": { "hosts": ["dropbox.com", "dropboxstatic.com"], "id": "dropbox.com", "parent": "Unknown" }, "zmctrack.net": { "hosts": ["zmctrack.net"], "id": "zmctrack.net", "parent": "Unknown" }, "Kupona": { "hosts": ["d31bfnnwekbny6.cloudfront.net", "kpcustomer.de", "q-sis.de"], "id": "kupona", "parent": "ACTU/CCI" }, "upravel.com": { "hosts": ["upravel.com"], "id": "upravel.com", "parent": "Unknown" }, "SendPulse": { "hosts": ["sendpulse.com"], "id": "sendpulse.com", "parent": "Unknown" }, "HERE (formerly Navteq Media Solutions)": { "hosts": ["here.com"], "id": "here__formerly_navteq_media_solutions_", "parent": "Unknown" }, "Bunchbox": { "hosts": ["bunchbox.co"], "id": "bunchbox", "parent": "Bunchbox" }, "Bonial Connect": { "hosts": ["bonial.com", "bonialconnect.com", "bonialserviceswidget.de"], "id": "bonial", "parent": "Unknown" }, "web.de": { "hosts": ["web.de", "webde.de"], "id": "web.de", "parent": "Unknown" }, "Browser Update": { "hosts": ["browser-update.org"], "id": "browser_update", "parent": "Browser-Update" }, "Affec.tv": { "hosts": ["affectv.com"], "id": "affec.tv", "parent": "Affectv Ltd" }, "Are You a Human": { "hosts": ["areyouahuman.com"], "id": "are_you_a_human", "parent": "distil networks" }, "Batch Media": { "hosts": ["t4ft.de"], "id": "batch_media", "parent": "ProSiebenSat.1 Media" }, "Amazon Payments": { "hosts": ["amazonpay.com", "payments-amazon.com"], "id": "amazon_payments", "parent": "Amazon" }, "Snap Engage": { "hosts": ["snapengage.com"], "id": "snap_engage", "parent": "Snap Engage" }, "Opinary": { "hosts": ["opinary.com"], "id": "opinary", "parent": "Unknown" }, "HubSpot": { "hosts": ["hs-analytics.net", "hs-scripts.com", "hubapi.com", "hubspot.com"], "id": "hubspot", "parent": "HubSpot" }, "BlogHer": { "hosts": ["blogher.com", "blogherads.com"], "id": "blogher", "parent": "Penske Media Corporation " }, "Supership": { "hosts": ["socdm.com"], "id": "supership", "parent": "Unknown" }, "btncdn.com": { "hosts": ["btncdn.com"], "id": "btncdn.com", "parent": "Unknown" }, "Crimtan": { "hosts": ["ctasnet.com", "ctnsnet.com", "ctpsnet.com"], "id": "crimtan", "parent": "Crimtan Holdings Limited" }, "Spongecell": { "hosts": ["spongecell.com"], "id": "spongecell", "parent": "Spongecell" }, "Yotpo": { "hosts": ["yotpo.com"], "id": "yotpo", "parent": "Unknown" }, "adstir": { "hosts": ["ad-stir.com"], "id": "adstir", "parent": "United Inc." }, "Findologic": { "hosts": ["findologic.com"], "id": "findologic.com", "parent": "Unknown" }, "mbr targeting": { "hosts": ["m6r.eu"], "id": "mbr_targeting", "parent": "Str\u00f6er SSP GmbH" }, "Tribal Fusion": { "hosts": ["exponential.com", "tribalfusion.com"], "id": "tribal_fusion", "parent": "Exponential Interactive, Inc" }, "ZergNet": { "hosts": ["zergnet.com"], "id": "zergnet", "parent": "ZergNet" }, "zalando.de": { "hosts": ["zalan.do", "zalando.de", "ztat.net"], "id": "zalando_de", "parent": "Zalando" }, "PornHub": { "hosts": ["phncdn.com", "pornhub.com"], "id": "pornhub", "parent": "Pornhub" }, "smi2.ru": { "hosts": ["smi2.net", "smi2.ru", "stat.media"], "id": "smi2.ru", "parent": "Unknown" }, "Playbuzz": { "hosts": ["playbuzz.com"], "id": "playbuzz.com", "parent": "Playbuzz Ltd. " }, "ORC International": { "hosts": ["emxdgt.com"], "id": "orc_international", "parent": "Engine" }, "Errorception": { "hosts": ["d15qhc0lu1ghnk.cloudfront.net", "errorception.com"], "id": "errorception", "parent": "Errorception" }, "ubersetzung-app.com": { "hosts": ["ubersetzung-app.com"], "id": "ubersetzung-app.com", "parent": "Unknown" }, "bumlam.com": { "hosts": ["bumlam.com"], "id": "bumlam.com", "parent": "Unknown" }, "AdMachine": { "hosts": ["adx1.com"], "id": "admachine", "parent": "Unknown" }, "LKQD": { "hosts": ["lkqd.net"], "id": "lkqd", "parent": "Nexstar Digital, LLC." }, "atsfi.de": { "hosts": ["atsfi.de"], "id": "atsfi_de", "parent": "Axel Springer Group" }, "LiveInternet": { "hosts": ["yadro.ru"], "id": "liveinternet", "parent": "LiveInternet" }, "ShortNews.de": { "hosts": ["shortnews.de"], "id": "shortnews", "parent": "Unknown" }, "King.com": { "hosts": ["midasplayer.com", "king.com"], "id": "king_com", "parent": "Activision Blizzard" }, "Blue Triangle": { "hosts": ["btttag.com"], "id": "bluetriangle", "parent": "Unknown" }, "RTBmarkt": { "hosts": ["rvty.net"], "id": "rtblab", "parent": "Unknown" }, "94j7afz2nr.xyz": { "hosts": ["94j7afz2nr.xyz"], "id": "94j7afz2nr.xyz", "parent": "Unknown" }, "Q-Division": { "hosts": ["q-divisioncdn.de"], "id": "q_division", "parent": "Unknown" }, "Trustwave": { "hosts": ["trustwave.com"], "id": "trustwave.com", "parent": "Unknown" }, "Bazaarvoice": { "hosts": ["bazaarvoice.com"], "id": "bazaarvoice", "parent": "Bazaarvoice" }, "ESPN CDN": { "hosts": ["espncdn.com"], "id": "espn_cdn", "parent": "The Walt Disney Company" }, "Sonobi": { "hosts": ["sonobi.com"], "id": "sonobi", "parent": "Sonobi, Inc" }, "zononi.com": { "hosts": ["zononi.com"], "id": "zononi.com", "parent": "Unknown" }, "Klarna": { "hosts": ["klarna.com"], "id": "klarna.com", "parent": "Unknown" }, "Catchpoint": { "hosts": ["3gl.net"], "id": "catchpoint", "parent": "Catchpoint Systems" }, "Google Custom Search Ads": { "hosts": ["adsensecustomsearchads.com"], "id": "google_custom_search", "parent": "Google" }, "Beeline": { "hosts": ["beeline.ru"], "id": "beeline.ru", "parent": "Unknown" }, "ihvmcqojoj.com": { "hosts": ["ihvmcqojoj.com"], "id": "ihvmcqojoj.com", "parent": "Unknown" }, "Freshdesk": { "hosts": ["d36mpcpuzc4ztk.cloudfront.net", "freshdesk.com"], "id": "freshdesk", "parent": "Freshdesk" }, "INFOnline": { "hosts": ["ioam.de", "iocnt.net", "ivwbox.de"], "id": "infonline", "parent": "INFOnline" }, "Mov.ad ": { "hosts": ["movad.de", "movad.net"], "id": "mov.ad_", "parent": "Unknown" }, "Flowplayer": { "hosts": ["flowplayer.org"], "id": "flowplayer", "parent": "FlowPlayer" }, "Apa": { "hosts": ["apa.at"], "id": "apa.at", "parent": "Apa" }, "Monero Miner": { "hosts": ["devappgrant.space"], "id": "monero_miner", "parent": "Unknown" }, "Flashtalking": { "hosts": ["flashtalking.com"], "id": "flashtalking", "parent": "Flashtalking, Inc." }, "1000mercis": { "hosts": ["mmtro.com"], "id": "1000mercis", "parent": "1000mercis" }, "newsupdatewe.info": { "hosts": ["newsupdatewe.info"], "id": "newsupdatewe.info", "parent": "Unknown" }, "Mail.Ru CDN": { "hosts": ["mycdn.me"], "id": "mycdn.me", "parent": "Megafon" }, "SevenOne Media": { "hosts": ["71i.de"], "id": "sevenone_media", "parent": "Unknown" }, "Lucky Orange": { "hosts": ["livestatserver.com", "luckyorange.com", "luckyorange.net"], "id": "lucky_orange", "parent": "Unknown" }, "Flickr": { "hosts": ["flickr.com", "staticflickr.com"], "id": "flickr_badge", "parent": "Verizon" }, "Aggregate Knowledge": { "hosts": ["agkn.com"], "id": "aggregate_knowledge", "parent": "Neustar " }, "Diamoni": { "hosts": ["d3von6il1wr7wo.cloudfront.net", "dianomi.com", "dianomioffers.co.uk"], "id": "dianomi", "parent": "Unknown" }, "Between Digital": { "hosts": ["betweendigital.com"], "id": "betweendigital.com", "parent": "Between Digital" }, "Eulerian Technologies": { "hosts": ["ew3.io"], "id": "eulerian", "parent": "Eulerian Technologies" }, "YouPorn": { "hosts": ["youporn.com", "ypncdn.com"], "id": "youporn", "parent": "Unknown" }, "Roq.ad": { "hosts": ["rqtrk.eu"], "id": "roq.ad", "parent": "Roq.ad GmbH" }, "Bitrix24": { "hosts": ["bitrix.info", "bitrix.ru"], "id": "bitrix", "parent": "Unknown" }, "Opta": { "hosts": ["opta.net"], "id": "opta.net", "parent": "Unknown" }, "Digidip": { "hosts": ["digidip.net"], "id": "digidip", "parent": "Digidip" }, "Qubit Opentag": { "hosts": ["d3c3cq33003psk.cloudfront.net", "qubit.com"], "id": "qubit", "parent": "Unknown" }, "HotLog": { "hosts": ["hotlog.ru"], "id": "hotlog.ru", "parent": "Unknown" }, "Cnetcontent": { "hosts": ["cnetcontent.com"], "id": "cnetcontent.com", "parent": "CBS Interactive" }, "Cross Pixel": { "hosts": ["crosspixel.net", "crsspxl.com"], "id": "crosspixel", "parent": "Unknown" }, "H\u00e4ndlerbund": { "hosts": ["haendlerbund.de"], "id": "haendlerbund.de", "parent": "Unknown" }, "IVC Brasil": { "hosts": ["ivcbrasil.org.br"], "id": "ivcbrasil.org.br", "parent": "Unknown" }, "OWOX": { "hosts": ["owox.com"], "id": "owox.com", "parent": "OWOX Inc." }, "Audience Science": { "hosts": ["revsci.net", "targetingmarketplace.com", "wunderloop.net"], "id": "audience_science", "parent": "AudienceScience" }, "Steel House Media": { "hosts": ["steelhousemedia.com"], "id": "steelhouse", "parent": "Steel House, Inc." }, "YOOCHOOSE": { "hosts": ["yoochoose.net"], "id": "yoochoose.net", "parent": "Unknown" }, "Content.ad": { "hosts": ["content.ad"], "id": "content.ad", "parent": "Content.ad" }, "spotscenered.info": { "hosts": ["spotscenered.info"], "id": "spotscenered.info", "parent": "Unknown" }, "Elastic Ad": { "hosts": ["elasticad.net"], "id": "elastic_ad", "parent": "Elastic Ad" }, "OptimiCDN": { "hosts": ["optimicdn.com"], "id": "optimicdn.com", "parent": "Unknown" }, "Social Miner": { "hosts": ["soclminer.com.br"], "id": "social_miner", "parent": "Unknown" }, "ChartBeat": { "hosts": ["chartbeat.com", "chartbeat.net"], "id": "chartbeat", "parent": "ChartBeat" }, "mirtesen.ru": { "hosts": ["mirtesen.ru"], "id": "mirtesen.ru", "parent": "Unknown" }, "Realperson Chat": { "hosts": ["realperson.de"], "id": "realperson.de", "parent": "Optimise-it" }, "Wikia Beacon": { "hosts": ["wikia-beacon.com"], "id": "wikia_beacon", "parent": "Wikia" }, "Forensiq": { "hosts": ["fqtag.com", "securepaths.com"], "id": "forensiq", "parent": "Impact" }, "Intent Media": { "hosts": ["intentmedia.net"], "id": "intent_media", "parent": "Intent Media, Inc." }, "ClickInText": { "hosts": ["clickintext.net"], "id": "clickintext", "parent": "ClickInText" }, "Stroer Digital Media": { "hosts": ["interactivemedia.net", "stroeerdigitalgroup.de", "stroeerdigitalmedia.de", "stroeerdp.de", "stroeermediabrands.de"], "id": "stroer_digital_media", "parent": "Str\u00f6er SSP GmbH" }, "unpkg": { "hosts": ["unpkg.com"], "id": "unpkg.com", "parent": "Unknown" }, "xfreeservice.com": { "hosts": ["xfreeservice.com"], "id": "xfreeservice.com", "parent": "Unknown" }, "Post Affiliate Pro": { "hosts": ["postaffiliatepro.com"], "id": "post_affiliate_pro", "parent": "QualityUnit" }, "Investing Channel": { "hosts": ["investingchannel.com"], "id": "investingchannel", "parent": "InvestingChannel, Inc." }, "FlowSurf": { "hosts": ["othersearch.info"], "id": "othersearch.info", "parent": "Unknown" }, "Mux, Inc.": { "hosts": ["litix.io"], "id": "mux_inc", "parent": "Mux, Inc." }, "TagMan": { "hosts": ["levexis.com"], "id": "tagman", "parent": "TagMan" }, "BidTheatre": { "hosts": ["bidtheatre.com"], "id": "bidtheatre", "parent": "BidTheatre AB" }, "interedy.info": { "hosts": ["interedy.info"], "id": "interedy.info", "parent": "Unknown" }, "Inbox SDK": { "hosts": ["inboxsdk.com"], "id": "inboxsdk.com", "parent": "Unknown" }, "bigmir.net": { "hosts": ["bigmir.net"], "id": "bigmir.net", "parent": "Unknown" }, "vodafone.de": { "hosts": ["vodafone.de"], "id": "vodafone.de", "parent": "Unknown" }, "Conviva": { "hosts": ["conviva.com"], "id": "conviva", "parent": "Conviva" }, "Narrative I/O": { "hosts": ["narrative.io"], "id": "narrative_io", "parent": "Unknown" }, "Cloudinary": { "hosts": ["cloudinary.com"], "id": "cloudinary", "parent": "Unknown" }, "NetSeer": { "hosts": ["netseer.com"], "id": "netseer", "parent": "NetSeer" }, "Beeketing": { "hosts": ["beeketing.com"], "id": "beeketing.com", "parent": "Beeketing" }, "DoublePimp": { "hosts": ["doublepimp.com", "doublepimpssl.com", "redcourtside.com", "xeontopa.com", "zerezas.com"], "id": "doublepimp", "parent": "DoublePimp" }, "Dstillery": { "hosts": ["m6d.com", "media6degrees.com"], "id": "dstillery", "parent": "Dstillery" }, "Instagram": { "hosts": ["cdninstagram.com", "instagram.com"], "id": "instagram_com", "parent": "Facebook" }, "Umeng": { "hosts": ["cnzz.com", "umeng.com"], "id": "cnzz.com", "parent": "Umeng" }, "Digicert Trust Seal": { "hosts": ["digicert.com"], "id": "digicert_trust_seal", "parent": "Digicert" }, "Shopzilla": { "hosts": ["shopzilla.com"], "id": "shopzilla", "parent": "Symphony Technology Group" }, "SmartStream.TV": { "hosts": ["smartstream.tv"], "id": "smartstream.tv", "parent": "SMARTSTREAM.TV GmbH" }, "Pardot": { "hosts": ["pardot.com"], "id": "pardot", "parent": "Pardot" }, "logsss.com": { "hosts": ["logsss.com"], "id": "logsss.com", "parent": "Unknown" }, "NET-Metrix": { "hosts": ["wemfbox.ch"], "id": "net-metrix", "parent": "NET-Metrix" }, "Underdog Media": { "hosts": ["udmserve.net"], "id": "underdog_media", "parent": "Underdog Media LLC " }, "ICF Technology": { "hosts": ["nsimg.net"], "id": "icf_technology", "parent": "Unknown" }, "Popcash": { "hosts": ["popcash.net"], "id": "popcash", "parent": "PopCash Network" }, "Pluso": { "hosts": ["pluso.ru"], "id": "pluso.ru", "parent": "Unknown" }, "Fastly Insights": { "hosts": ["fastly-insights.com"], "id": "fastly_insights", "parent": "Fastly" }, "UserReport": { "hosts": ["userreport.com"], "id": "userreport", "parent": "UserReport" }, "wp.pl": { "hosts": ["wp.pl", "wpimg.pl"], "id": "wp.pl", "parent": "Unknown" }, "AdClear": { "hosts": ["adclear.net"], "id": "adclear", "parent": "AdClear GmbH" }, "AdDefend": { "hosts": ["yagiay.com"], "id": "addefend", "parent": "Unknown" }, "mein-bmi.com": { "hosts": ["mein-bmi.com"], "id": "mein-bmi.com", "parent": "Unknown" }, "teufel.de": { "hosts": ["teufel.de"], "id": "teufel.de", "parent": "Unknown" }, "UserZoom": { "hosts": ["userzoom.com"], "id": "userzoom.com", "parent": "Unknown" }, "ChannelPilot Solutions": { "hosts": ["cptrack.de"], "id": "channel_pilot_solutions", "parent": "Unknown" }, "Zanox": { "hosts": ["zanox-affiliate.de", "zanox.com", "zanox.ws"], "id": "zanox", "parent": "Unknown" }, "Hybrid.ai": { "hosts": ["hybrid.ai", "targetix.net"], "id": "hybrid.ai", "parent": "Hybrid Adtech GmbH" }, "gmx.net": { "hosts": ["gmx.net", "gmxpro.net"], "id": "gmx_net", "parent": "Unknown" }, "noop.style": { "hosts": ["noop.style"], "id": "noop.style", "parent": "Unknown" }, "MarketGid": { "hosts": ["dt00.net", "dt07.net", "marketgid.com", "mgid.com"], "id": "marketgid", "parent": "MGID Inc." }, "idealo.com": { "hosts": ["idealo.com"], "id": "idealo_com", "parent": "Unknown" }, "BrightRoll": { "hosts": ["btrll.com"], "id": "brightroll", "parent": "Verizon" }, "GroundTruth": { "hosts": ["bidagent.xad.com"], "id": "groundtruth", "parent": "GroundTruth" }, "TrafMag": { "hosts": ["trafmag.com"], "id": "trafmag.com", "parent": "Unknown" }, "nonstop Consulting": { "hosts": ["trkme.net"], "id": "nonstop_consulting", "parent": "United Digital Group (FKA nonstopConsulting)" }, "Pepper": { "hosts": ["pepper.com"], "id": "pepper.com", "parent": "6 Minutes Media GmbH" }, "jimdo.com": { "hosts": ["jimcdn.com", "jimdo.com", "jimstatic.com"], "id": "jimdo.com", "parent": "Unknown" }, "SAP Exchange Media": { "hosts": ["sap-xm.org"], "id": "sap_xm", "parent": "Unknown" }, "madeleine.de": { "hosts": ["madeleine.de"], "id": "madeleine.de", "parent": "Unknown" }, "Factor Eleven": { "hosts": ["f11-ads.com"], "id": "f11-ads.com", "parent": "Unknown" }, "AdUp Technology": { "hosts": ["adup-tech.com"], "id": "adup-tech.com", "parent": "Unknown" }, "AdRoll": { "hosts": ["adroll.com"], "id": "adroll", "parent": "AdRoll Inc" }, "xen-media.com": { "hosts": ["xen-media.com"], "id": "xen-media.com", "parent": "Unknown" }, "Bing Maps": { "hosts": ["virtualearth.net"], "id": "bing_maps", "parent": "Microsoft" }, "Trueffect": { "hosts": ["adlegend.com"], "id": "trueffect", "parent": "Trueffect" }, "stalluva.pro": { "hosts": ["stalluva.pro"], "id": "stalluva.pro", "parent": "Unknown" }, "RUN": { "hosts": ["runadtag.com", "rundsp.com"], "id": "run", "parent": "RUN" }, "DataDome": { "hosts": ["datadome.co"], "id": "datadome", "parent": "DataDome" }, "siblesectiveal.club": { "hosts": ["siblesectiveal.club"], "id": "siblesectiveal.club", "parent": "Unknown" }, "alephd": { "hosts": ["alephd.com"], "id": "alephd.com", "parent": "Verizon" }, "realytics.io": { "hosts": ["realytics.io"], "id": "realytics.io", "parent": "Unknown" }, "eanalyzer.de": { "hosts": ["eanalyzer.de"], "id": "eanalyzer.de", "parent": "Unknown" }, "Facebook CDN": { "hosts": ["fbcdn.net", "fbsbx.com"], "id": "facebook_cdn", "parent": "Facebook" }, "HQ Entertainment Network": { "hosts": ["hqentertainmentnetwork.com", "justservingfiles.net"], "id": "hqentertainmentnetwork.com", "parent": "Unknown" }, "XXXLutz": { "hosts": ["xxxlutz.de"], "id": "xxxlutz", "parent": "XXXLutz KG" }, "nfxTrack": { "hosts": ["netrk.net"], "id": "netrk.net", "parent": "netzeffekt" }, "ciuvo.com": { "hosts": ["ciuvo.com"], "id": "ciuvo.com", "parent": "Unknown" }, "GeoTrust": { "hosts": ["geotrust.com"], "id": "geotrust", "parent": "GeoTrust" }, "Dawanda CDN": { "hosts": ["dawandastatic.com"], "id": "dawandastatic.com", "parent": "Unknown" }, "ixquick": { "hosts": ["ixquick.com"], "id": "ixquick.com", "parent": "StartPage" }, "yapfiles.ru": { "hosts": ["yapfiles.ru"], "id": "yapfiles.ru", "parent": "Unknown" }, "Signal": { "hosts": ["btstatic.com", "signal.co", "thebrighttag.com"], "id": "signal", "parent": "Signal Digital Inc." }, "OnAudience": { "hosts": ["behavioralengine.com", "onaudience.com"], "id": "onaudience", "parent": "Cloud Technologies S.A." }, "Voluum": { "hosts": ["cwkuki.com", "voluumtrk3.com"], "id": "voluum", "parent": "Unknown" }, "Contentpass": { "hosts": ["contentpass.de", "contentpass.net"], "id": "contentpass", "parent": "Unknown" }, "gumgum": { "hosts": ["gumgum.com"], "id": "gumgum", "parent": "GumGum, Inc." }, "Visual Revenue": { "hosts": ["visualrevenue.com"], "id": "visual_revenue", "parent": "Outbrain" }, "Level 3 Communications, Inc.": { "hosts": ["footprint.net"], "id": "level3_communications", "parent": "Level 3 Communications, Inc." }, "Netletix": { "hosts": ["netzathleten-media.de"], "id": "netletix", "parent": "IP Deutschland" }, "Admixer": { "hosts": ["admixer.net"], "id": "admixer.net", "parent": "Unknown" }, "iubenda": { "hosts": ["iubenda.com"], "id": "iubenda.com", "parent": "Unknown" }, "Ividence": { "hosts": ["ivitrack.com"], "id": "ividence", "parent": "SIEN" }, "Microsoft Ajax CDN": { "hosts": ["aspnetcdn.com"], "id": "aspnetcdn", "parent": "Microsoft" }, "Marketo": { "hosts": ["marketo.com", "marketo.net", "mktoresp.com"], "id": "marketo", "parent": "Marketo" }, "Bootstrap CDN": { "hosts": ["bootstrapcdn.com"], "id": "bootstrap", "parent": "BootstrapCDN" }, "Livefyre": { "hosts": ["fyre.co", "livefyre.com"], "id": "livefyre", "parent": "Livefyre" }, "ymzrrizntbhde.com": { "hosts": ["ymzrrizntbhde.com"], "id": "ymzrrizntbhde.com", "parent": "Unknown" }, "Admitad": { "hosts": ["admitad.com"], "id": "admitad.com", "parent": "Admitad" }, "Get Site Control": { "hosts": ["getsitecontrol.com"], "id": "get_site_control", "parent": "GetSiteControl" }, "a3cloud.net": { "hosts": ["a3cloud.net"], "id": "a3cloud_net", "parent": "Unknown" }, "pushnative.com": { "hosts": ["pushnative.com"], "id": "pushnative.com", "parent": "Unknown" }, "Nuance": { "hosts": ["inq.com"], "id": "touchcommerce", "parent": "Unknown" }, "StackPath": { "hosts": ["stackpathdns.com"], "id": "stackpathdns.com", "parent": "Unknown" }, "Sophus3": { "hosts": ["sophus3.com"], "id": "sophus3", "parent": "Sophus3" }, "Kinja Static": { "hosts": ["kinja-img.com", "kinja-static.com"], "id": "kinja_static", "parent": "Gizmodo Media Group" }, "Digital.gov": { "hosts": ["digitalgov.gov"], "id": "digital.gov", "parent": "USA Government" }, "PageFair": { "hosts": ["blockmetrics.com", "pagefair.com", "pagefair.net"], "id": "pagefair", "parent": "PageFair" }, "Purch": { "hosts": ["purch.com", "servebom.com"], "id": "purch", "parent": "Purch Group, Inc." }, "Google Tag Manager": { "hosts": ["googletagmanager.com", "googletagservices.com"], "id": "google_tag_manager", "parent": "Google" }, "nyetm2mkch.com": { "hosts": ["nyetm2mkch.com"], "id": "nyetm2mkch.com", "parent": "Unknown" }, "Amplitude": { "hosts": ["amplitude.com", "d24n15hnbwhuhn.cloudfront.net"], "id": "amplitude", "parent": "Amplitude" }, "Vigo": { "hosts": ["vigo.one", "vigo.ru"], "id": "vigo", "parent": "Vigo" }, "VideoAdX": { "hosts": ["videoadex.com"], "id": "videoadex.com", "parent": "DIGITEKA Technologies" }, "VigLink": { "hosts": ["viglink.com"], "id": "viglink", "parent": "VigLink" }, "datds.net": { "hosts": ["datds.net"], "id": "datds.net", "parent": "Unknown" }, "StartApp": { "hosts": ["startappservice.com"], "id": "startapp", "parent": "Unknown" }, "Bid.Run": { "hosts": ["bid.run"], "id": "bid.run", "parent": "Bid.Run" }, "SnackTV": { "hosts": ["snacktv.de"], "id": "snacktv", "parent": "Unknown" }, "faktor.io": { "hosts": ["faktor.io"], "id": "faktor.io", "parent": "Faktor B.V." }, "Creative Commons": { "hosts": ["creativecommons.org"], "id": "creative_commons", "parent": "Creative Commons Corporation" }, "Pinterest": { "hosts": ["pinimg.com", "pinterest.com"], "id": "pinterest", "parent": "Pinterest" }, "Tag Commander": { "hosts": ["commander1.com", "tagcommander.com"], "id": "tag_commander", "parent": "Tag Commander" }, "afgr2.com": { "hosts": ["afgr2.com"], "id": "afgr2.com", "parent": "Unknown" }, "MailChimp": { "hosts": ["chimpstatic.com", "list-manage.com", "mailchimp.com"], "id": "mailchimp", "parent": "The Rocket Science Group" }, "Spoutable": { "hosts": ["spoutable.com"], "id": "spoutable", "parent": "Unknown" }, "TNS": { "hosts": ["research-int.se", "sesamestats.com", "spring-tns.net", "statistik-gallup.net", "tns-cs.net", "tns-gallup.dk"], "id": "tns", "parent": "WPP" }, "V12 Group": { "hosts": ["v12group.com"], "id": "v12_group", "parent": "Unknown" }, "Recreativ": { "hosts": ["recreativ.ru"], "id": "recreativ", "parent": "Recreativ" }, "Baynote Observer": { "hosts": ["baynote.net"], "id": "baynote_observer", "parent": "Baynote" }, "BlueKai": { "hosts": ["bkrtx.com", "bluekai.com"], "id": "bluekai", "parent": "Oracle" }, "PulsePoint": { "hosts": ["contextweb.com", "pulsepoint.com"], "id": "pulsepoint", "parent": "PulsePoint, Inc." }, "ausgezeichnet.org": { "hosts": ["ausgezeichnet.org"], "id": "ausgezeichnet_org", "parent": "Unknown" }, "Propeller Ads": { "hosts": ["oclaserver.com", "onclasrv.com", "onclickads.net", "onclkds.com", "propellerads.com", "propellerpops.com"], "id": "propeller_ads", "parent": "Propeller Ads" }, "Shutterstock": { "hosts": ["shutterstock.com"], "id": "shutterstock", "parent": "Shutterstock, Inc." }, "Siteimprove": { "hosts": ["siteimprove.com"], "id": "siteimprove", "parent": "Siteimprove" }, "Pushwoosh": { "hosts": ["pushwoosh.com"], "id": "pushwoosh.com", "parent": "Pushwoosh" }, "cdnetworks.net": { "hosts": ["cdnetworks.com", "cdnetworks.net"], "id": "cdnetworks.net", "parent": "Unknown" }, "Vidible": { "hosts": ["vidible.tv"], "id": "vidible", "parent": "Verizon" }, "Fivetran": { "hosts": ["fivetran.com"], "id": "fivetran", "parent": "Fivetran" }, "Zebestof": { "hosts": ["zebestof.com"], "id": "zebestof.com", "parent": "Zebestof" }, "Tapad": { "hosts": ["tapad.com"], "id": "tapad", "parent": "Telenor Group" }, "Shopify Cloud": { "hosts": ["shopifycloud.com"], "id": "shopifycloud.com", "parent": "Shopify" }, "Docler": { "hosts": ["awecr.com", "fwbntw.com"], "id": "docler", "parent": "Docler IP" }, "Yusp": { "hosts": ["gravityrd-services.com"], "id": "yusp", "parent": "Unknown" }, "adworxs.net": { "hosts": ["adworxs.net"], "id": "adworxs.net", "parent": "Unknown" }, "Chip Analytics": { "hosts": ["cxo.name"], "id": "cxo.name", "parent": "Unknown" }, "Po.st": { "hosts": ["po.st"], "id": "po.st", "parent": "RhythmOne, LLC" }, "etahub.com": { "hosts": ["etahub.com"], "id": "etahub.com", "parent": "Unknown" }, "Ringier": { "hosts": ["ringier.ch"], "id": "ringier.ch", "parent": "Ringier AG" }, "Adobe TagManager": { "hosts": ["adobetag.com"], "id": "adobe_tagmanager", "parent": "Adobe" }, "Hi-Media Performance": { "hosts": ["adlink.net", "comclick.com", "hi-mediaserver.com", "himediads.com", "himediadx.com"], "id": "hi-media_performance", "parent": "Hi-media Performance" }, "Eyereturn Marketing": { "hosts": ["eyereturn.com"], "id": "eyereturnmarketing", "parent": "Torstar Corporation " }, "pnamic.com": { "hosts": ["pnamic.com"], "id": "pnamic.com", "parent": "Unknown" }, "defpush.com": { "hosts": ["defpush.com"], "id": "defpush.com", "parent": "Unknown" }, "davebestdeals.com": { "hosts": ["davebestdeals.com"], "id": "davebestdeals.com", "parent": "Unknown" }, "adxprtz.com": { "hosts": ["adxprtz.com"], "id": "adxprtz.com", "parent": "Unknown" }, "EroAdvertising": { "hosts": ["ero-advertising.com", "eroadvertising.com"], "id": "eroadvertising", "parent": "Ero Advertising" }, "Imgur": { "hosts": ["imgur.com"], "id": "imgur", "parent": "Imgur" }, "24-ADS GmbH": { "hosts": ["24-ads.com"], "id": "24-ads.com", "parent": "Unknown" }, "Platform360": { "hosts": ["pfrm.co"], "id": "platform360", "parent": "Unknown" }, "Venatus Media": { "hosts": ["vntsm.com"], "id": "vntsm.com", "parent": "Venatus Media Limited" }, "Heroku": { "hosts": ["herokuapp.com"], "id": "heroku", "parent": "Unknown" }, "Platform161": { "hosts": ["creative-serving.com"], "id": "161media", "parent": "Platform161" }, "usemessages.com": { "hosts": ["usemessages.com"], "id": "usemessages.com", "parent": "Unknown" }, "Adloox": { "hosts": ["adlooxtracking.com"], "id": "adloox", "parent": "Adloox SA" }, "Marvellous Machine": { "hosts": ["marvellousmachine.net"], "id": "marvellous_machine", "parent": "Unknown" }, "Exactag": { "hosts": ["exactag.com"], "id": "exactag", "parent": "Exactag GmbH" }, "4finance.com": { "hosts": ["4finance.com"], "id": "4finance_com", "parent": "Unknown" }, "Highwinds": { "hosts": ["hwcdn.net"], "id": "highwinds", "parent": "Highwinds" }, "LinkedIn": { "hosts": ["bizo.com", "bizographics.com", "licdn.com", "linkedin.com", "lynda.com"], "id": "linkedin", "parent": "Microsoft" }, "Bounce Exchange": { "hosts": ["bounceexchange.com"], "id": "bounce_exchange", "parent": "Bounce Exchange, Inc" }, "Traffic Factory": { "hosts": ["trafficfactory.biz"], "id": "trafficfactory", "parent": "Unknown" }, "AOL CDN": { "hosts": ["aolcdn.com"], "id": "aol_cdn", "parent": "Verizon" }, "Whatbroadcast": { "hosts": ["whatsbroadcast.com"], "id": "whatbroadcast", "parent": "WhatsBroadcast" }, "Alibaba": { "hosts": ["alibaba.com", "alicdn.com"], "id": "alibaba.com", "parent": "Alibaba" }, "eXelate": { "hosts": ["exelator.com"], "id": "exelate", "parent": "Nielsen" }, "vorwerk.de": { "hosts": ["vorwerk.de"], "id": "vorwerk.de", "parent": "Unknown" }, "4Chan": { "hosts": ["4cdn.org"], "id": "4chan", "parent": "Unknown" }, "Tealium": { "hosts": ["llnwd.net", "tealium.com", "tealiumiq.com", "tiqcdn.com"], "id": "tealium", "parent": "Tealium" }, "statsy.net": { "hosts": ["statsy.net"], "id": "statsy.net", "parent": "Unknown" }, "Blau": { "hosts": ["blau.de"], "id": "blau.de", "parent": "Unknown" }, "FraudLogix": { "hosts": ["yabidos.com"], "id": "fraudlogix", "parent": "Unknown" }, "Canvas": { "hosts": ["canvas.net", "canvasnetwork.com", "du11hjcvx0uqb.cloudfront.net"], "id": "canvas", "parent": "Unknown" }, "cdnondemand.org": { "hosts": ["cdnondemand.org"], "id": "cdnondemand.org", "parent": "Unknown" }, "Yieldmo": { "hosts": ["yieldmo.com"], "id": "yieldmo", "parent": "Yieldmo, Inc." }, "Gravity Insights": { "hosts": ["gravity.com", "grvcdn.com"], "id": "gravity_insights", "parent": "Gravity" }, "pushwhy.com": { "hosts": ["pushwhy.com"], "id": "pushwhy.com", "parent": "Unknown" }, "Scoota": { "hosts": ["rockabox.co"], "id": "scoota", "parent": "Rockabox Media Ltd" }, "wdr.de": { "hosts": ["wdr.de"], "id": "wdr.de", "parent": "Unknown" }, "JivoChat": { "hosts": ["jivosite.com"], "id": "jivochat", "parent": "Unknown" }, "BetterTTV": { "hosts": ["betterttv.net"], "id": "betterttv", "parent": "NightDev, LLC" }, "MaxPoint Interactive": { "hosts": ["mxptint.net"], "id": "maxpoint_interactive", "parent": "MaxPoint Interactive" }, "Tyroo": { "hosts": ["tyroodr.com"], "id": "tyroo", "parent": "Tyroo" }, "Baidu Static": { "hosts": ["bdimg.com", "bdstatic.com"], "id": "baidu_static", "parent": "Baidu" }, "Polyfill.io": { "hosts": ["polyfill.io"], "id": "polyfill.io", "parent": "Unknown" }, "Netaffiliation": { "hosts": ["netaffiliation.com"], "id": "metaffiliation.com", "parent": "Kwanko" }, "cdn13.com": { "hosts": ["cdn13.com"], "id": "cdn13.com", "parent": "Unknown" }, "codeonclick.com": { "hosts": ["codeonclick.com"], "id": "codeonclick.com", "parent": "Unknown" }, "CPMStar": { "hosts": ["cpmstar.com"], "id": "cpmstar", "parent": "CPMStar" }, "Sublime Skinz": { "hosts": ["ayads.co"], "id": "sublime_skinz", "parent": "Sublime Skinz" }, "True Anthem": { "hosts": ["tru.am"], "id": "trueanthem", "parent": "trueAnthem" }, "neXeps": { "hosts": ["nexeps.com"], "id": "nexeps.com", "parent": "Unknown" }, "SmartClick": { "hosts": ["smartclick.net"], "id": "smartclick.net", "parent": "Unknown" }, "WP Engine": { "hosts": ["wpengine.com"], "id": "wp_engine", "parent": "WP Engine" }, "Wistia": { "hosts": ["wistia.com", "wistia.net"], "id": "wistia", "parent": "Wistia" }, "Research Now": { "hosts": ["researchnow.com"], "id": "research_now", "parent": "Research Now Group, Inc" }, "asambeauty.com": { "hosts": ["asambeauty.com"], "id": "asambeauty.com", "parent": "Unknown" }, "express.co.uk": { "hosts": ["express.co.uk"], "id": "express.co.uk", "parent": "Unknown" }, "Webfonts by Hoefler&Co": { "hosts": ["typography.com"], "id": "typography.com", "parent": "Unknown" }, "Clicky": { "hosts": ["getclicky.com", "staticstuff.net"], "id": "clicky", "parent": "Clicky" }, "oclasrv.com": { "hosts": ["oclasrv.com"], "id": "oclasrv.com", "parent": "Unknown" }, "loadsource.org": { "hosts": ["loadsource.org"], "id": "loadsource.org", "parent": "Unknown" }, "Loadbee": { "hosts": ["loadbee.com"], "id": "loadbee.com", "parent": "Unknown" }, "boltdns.net": { "hosts": ["boltdns.net"], "id": "boltdns.net", "parent": "Unknown" }, "cdn-net.com": { "hosts": ["cdn-net.com"], "id": "cdn-net.com", "parent": "Unknown" }, "Optimizely": { "hosts": ["optimizely.com"], "id": "optimizely", "parent": "Optimizely" }, "AutopilotHQ": { "hosts": ["api.autopilothq.com"], "id": "autopilothq", "parent": "AutopilotHQ" }, "OwnerIQ": { "hosts": ["owneriq.net"], "id": "owneriq", "parent": "OwnerIQ" }, "Symantec (Norton Secured Seal)": { "hosts": ["norton.com", "symantec.com", "thawte.com", "verisign.com"], "id": "symantec", "parent": "Symantec" }, "myThings": { "hosts": ["mythings.com"], "id": "mythings", "parent": "MyThings " }, "maxonclick.com": { "hosts": ["maxonclick.com"], "id": "maxonclick_com", "parent": "Unknown" }, "AdRiver": { "hosts": ["adriver.ru"], "id": "adriver", "parent": "Ad River" }, "Digital Remedy": { "hosts": ["adready.com"], "id": "digital_remedy", "parent": "Digital Remedy" }, "Tumblr Buttons": { "hosts": ["platform.tumblr.com"], "id": "tumblr_buttons", "parent": "Verizon" }, "Shopping24 internet group": { "hosts": ["s24.com"], "id": "s24_com", "parent": "Unknown" }, "Riskfield": { "hosts": ["riskfield.com"], "id": "riskfield.com", "parent": "Riskfield" }, "Eyeview": { "hosts": ["eyeviewads.com"], "id": "eyeview", "parent": "Eyeview" }, "toponclick.com": { "hosts": ["toponclick.com"], "id": "toponclick_com", "parent": "Unknown" }, "ThreatMetrix": { "hosts": ["online-metrix.net"], "id": "threatmetrix", "parent": "ThreatMetrix" }, "Periscope": { "hosts": ["pscp.tv"], "id": "pscp.tv", "parent": "Periscope" }, "continum.net": { "hosts": ["continum.net"], "id": "continum_net", "parent": "Unknown" }, "Rambler DSP": { "hosts": ["dsp-rambler.ru"], "id": "dsp_rambler", "parent": "A&NN Investments " }, "DynAdmic": { "hosts": ["dyntrk.com"], "id": "dynadmic", "parent": "Unknown" }, "ADARA Analytics": { "hosts": ["yieldoptimizer.com"], "id": "adara_analytics", "parent": "ADARA MEDIA UNLIMITED" }, "Jetpack": { "hosts": ["pixel.wp.com", "stats.wp.com"], "id": "jetpack", "parent": "Automattic" }, "MarkMonitor": { "hosts": ["9c9media.com", "caanalytics.com", "mmstat.com"], "id": "markmonitor", "parent": "MarkMonitor" }, "Skyscanner CDN": { "hosts": ["skyscnr.com"], "id": "skyscnr.com", "parent": "Unknown" }, "stripst.com": { "hosts": ["stripst.com"], "id": "stripst.com", "parent": "Unknown" }, "Platform One": { "hosts": ["impact-ad.jp"], "id": "platformone", "parent": "D.A.Consortium" }, "baur.de": { "hosts": ["baur.de"], "id": "baur.de", "parent": "Unknown" }, "pushame.com": { "hosts": ["pushame.com"], "id": "pushame.com", "parent": "Unknown" }, "tororango.com": { "hosts": ["tororango.com"], "id": "tororango.com", "parent": "Unknown" }, "Conversant": { "hosts": ["fastclick.net", "mediaplex.com", "mplxtms.com"], "id": "conversant", "parent": "Conversant Europe Ltd." }, "Firebase": { "hosts": ["firebaseio.com"], "id": "firebaseio.com", "parent": "Google" }, "Whos.amung.us": { "hosts": ["amung.us"], "id": "whos.amung.us", "parent": "whos.amung.us" }, "Bombora": { "hosts": ["ml314.com"], "id": "bombora", "parent": "Bombora Inc." }, "SpringServe": { "hosts": ["springserve.com"], "id": "springserve", "parent": "SpringServe, LLC" }, "Widespace": { "hosts": ["widespace.com"], "id": "widespace", "parent": "Widespace AB" }, "Mail.Ru Group": { "hosts": ["imgsmail.ru", "mail.ru", "mradx.net", "odnoklassniki.ru", "ok.ru"], "id": "mail.ru_group", "parent": "Megafon" }, "Sojern": { "hosts": ["sojern.com"], "id": "sojern", "parent": "Sojern, Inc." }, "Seznam": { "hosts": ["imedia.cz", "szn.cz"], "id": "seznam", "parent": "Seznam" }, "Privy": { "hosts": ["privy.com"], "id": "privy.com", "parent": "Privy" }, "Tawk": { "hosts": ["tawk.to"], "id": "tawk", "parent": "Tawk" }, "Ask.com": { "hosts": ["ask.com"], "id": "ask.com", "parent": "Unknown" }, "Intent IQ": { "hosts": ["intentiq.com"], "id": "intent_iq", "parent": "Intent IQ" }, "Yahoo!": { "hosts": ["interclick.com", "tumblr.com", "yahoo.com", "yahooapis.com", "yimg.com"], "id": "yahoo", "parent": "Verizon" }, "trsv3.com": { "hosts": ["trsv3.com"], "id": "trsv3.com", "parent": "Unknown" }, "GreatViews": { "hosts": ["greatviews.de"], "id": "greatviews.de", "parent": "Parship" }, "C1 Exchange": { "hosts": ["c1exchange.com"], "id": "c1_exchange", "parent": "C1 Exchange " }, "VoiceFive": { "hosts": ["voicefive.com"], "id": "voicefive", "parent": "comScore, Inc." }, "qq.com": { "hosts": ["qq.com"], "id": "qq.com", "parent": "QQ.com" }, "native ads": { "hosts": ["nativeads.com"], "id": "nativeads.com", "parent": "Unknown" }, "Teads": { "hosts": ["teads.tv"], "id": "teads", "parent": "Teads " }, "dcbap.com": { "hosts": ["dcbap.com"], "id": "dcbap.com", "parent": "Unknown" }, "Oxomi": { "hosts": ["oxomi.com"], "id": "oxomi.com", "parent": "Unknown" }, "Ancestry CDN": { "hosts": ["ancestrycdn.com"], "id": "ancestry_cdn", "parent": "Ancestry" }, "BuySellAds": { "hosts": ["buysellads.com", "servedby-buysellads.com"], "id": "buysellads", "parent": "BuySellAds.com" }, "office365.com": { "hosts": ["office365.com"], "id": "office365.com", "parent": "Microsoft" }, "Digital Analytix": { "hosts": ["nedstat.com", "sitestat.com"], "id": "digital_analytix", "parent": "Adobe" }, "Microsoft Network": { "hosts": ["ads.msn.com", "ads1.msn.com", "adsyndication.msn.com", "bat.r.msn.com", "col.stc.s-msn.com", "flex.msn.com", "msn.com", "s-msn.com"], "id": "msn", "parent": "Microsoft" }, "Atlassian Marketplace": { "hosts": ["d1xfq2052q7thw.cloudfront.net", "marketplace.atlassian.com"], "id": "atlassian_marketplace", "parent": "Atlassian" }, "Infospace Search": { "hosts": ["inspsearchapi.com"], "id": "inspsearchapi.com", "parent": "System1" }, "Reuters media": { "hosts": ["reutersmedia.net"], "id": "reuters_media", "parent": "Unknown" }, "SOASTA mPulse": { "hosts": ["go-mpulse.net", "mpstat.us"], "id": "soasta_mpulse", "parent": "Akamai Technologies" }, "Intercom": { "hosts": ["intercom.io", "intercomassets.com", "intercomcdn.com"], "id": "intercom", "parent": "Intercom" }, "1822direkt.de": { "hosts": ["1822direkt.de"], "id": "1822direkt.de", "parent": "Unknown" }, "BurdaForward": { "hosts": ["bf-ad.net", "bf-tools.net"], "id": "burda", "parent": "Hubert Burda Media" }, "ClickTripz": { "hosts": ["clicktripz.com"], "id": "clicktripz", "parent": "ClickTripz" }, "ad6media": { "hosts": ["ad6.fr", "ad6media.co.uk", "ad6media.com", "ad6media.es", "ad6media.fr"], "id": "ad6media", "parent": "ad6media" }, "Swiftype": { "hosts": ["swiftypecdn.com"], "id": "swiftype", "parent": "Elastic" }, "Advertising Technologies Ltd": { "hosts": ["rtmark.net"], "id": "rtmark.net", "parent": "Big Wall Vision" }, "Sanoma": { "hosts": ["ilsemedia.nl", "sanoma.fi"], "id": "sanoma.fi", "parent": "Unknown" }, "Hotjar": { "hosts": ["hotjar.com"], "id": "hotjar", "parent": "Hotjar" }, "GENIEE": { "hosts": ["gssprt.jp"], "id": "geniee", "parent": "Unknown" }, "Imagefap": { "hosts": ["fap.to"], "id": "fap.to", "parent": "Unknown" }, "go.com": { "hosts": ["go.com"], "id": "go.com", "parent": "The Walt Disney Company" }, "Btttag": { "hosts": ["bluetriangletech.com"], "id": "btttag.com", "parent": "Blue Triangle Technologies Inc" }, "Republer": { "hosts": ["republer.com"], "id": "republer.com", "parent": "Republer" }, "Netbiscuits": { "hosts": ["netbiscuits.net"], "id": "netbiscuits", "parent": "Netbiscuits" }, "Deutsche Bahn": { "hosts": ["bahn.de", "img-bahn.de"], "id": "bahn_de", "parent": "Unknown" }, "pendo": { "hosts": ["pendo.io"], "id": "pendo.io", "parent": "Unknown" }, "Atlas": { "hosts": ["adbureau.net", "atdmt.com", "atlassbx.com"], "id": "atlas", "parent": "Facebook" }, "Experian": { "hosts": ["eccmp.com"], "id": "experian", "parent": "Experian Information Solutions, Inc." }, "The Sun": { "hosts": ["thesun.co.uk"], "id": "the_sun", "parent": "The Sun" }, "epoq": { "hosts": ["epoq.de"], "id": "epoq", "parent": "epoq" }, "Grapeshot": { "hosts": ["grapeshot.co.uk", "gscontxt.net"], "id": "grapeshot", "parent": "Oracle" }, "Ad Alliance": { "hosts": ["adalliance.io"], "id": "adalliance.io", "parent": "Unknown" }, "Digilant": { "hosts": ["wtp101.com"], "id": "digilant", "parent": "Digilant Spain, SLU" }, "Dotomi": { "hosts": ["dotomi.com", "dtmc.com", "dtmpub.com"], "id": "dotomi", "parent": "Conversant Europe Ltd." }, "ExoClick": { "hosts": ["exdynsrv.com", "exoclick.com", "exosrv.com"], "id": "exoclick", "parent": "ExoClick" }, "Quisma": { "hosts": ["qservz.com", "quisma.com"], "id": "quisma", "parent": "Quisma" }, "videoplayerhub.com": { "hosts": ["videoplayerhub.com"], "id": "videoplayerhub.com", "parent": "Unknown" }, "Vendemore": { "hosts": ["vendemore.com"], "id": "vendemore", "parent": "Ratos" }, "New Relic": { "hosts": ["d1ros97qkrwjf5.cloudfront.net", "newrelic.com", "nr-data.net"], "id": "new_relic", "parent": "New Relic" }, "Tradelab": { "hosts": ["tradelab.fr"], "id": "tradelab", "parent": "Tradelab, SAS" }, "Typeform": { "hosts": ["typeform.com"], "id": "typeform", "parent": "Unknown" }, "VIVALU": { "hosts": ["vi-tag.net"], "id": "vivalu", "parent": "Vivalu" }, "Skype": { "hosts": ["skype.com", "skypeassets.com"], "id": "skype", "parent": "Microsoft" }, "pmddby.com": { "hosts": ["pmddby.com"], "id": "pmddby.com", "parent": "Unknown" }, "FeedBurner": { "hosts": ["feedburner.com"], "id": "feedburner.com", "parent": "Google" }, "circIT": { "hosts": ["iqcontentplatform.de"], "id": "circit", "parent": "Unknown" }, "Heatmap": { "hosts": ["heatmap.it"], "id": "heatmap", "parent": "Heatmap" }, "Rocket Fuel": { "hosts": ["rfihub.com", "rfihub.net", "ru4.com", "xplusone.com"], "id": "rocket_fuel", "parent": "Sizmek Technologies, Inc. " }, "Semantiqo": { "hosts": ["semantiqo.com"], "id": "semantiqo.com", "parent": "Unknown" }, "ActStream": { "hosts": ["acestream.net"], "id": "acestream.net", "parent": "Unknown" }, "Amazon CDN": { "hosts": ["images-amazon.com", "media-amazon.com", "ssl-images-amazon.com"], "id": "amazon_cdn", "parent": "Amazon" }, "buzzadexchange.com": { "hosts": ["buzzadexchange.com"], "id": "buzzadexchange.com", "parent": "Unknown" }, "Linkpulse": { "hosts": ["lp4.io"], "id": "linkpulse", "parent": "Linkpulse" }, "highwebmedia.com": { "hosts": ["highwebmedia.com"], "id": "highwebmedia.com", "parent": "Unknown" }, "Metrigo": { "hosts": ["metrigo.com"], "id": "metrigo", "parent": "Metrigo" }, "Arc Publishing": { "hosts": ["arcpublishing.com"], "id": "arcpublishing", "parent": "Unknown" }, "Adotmob": { "hosts": ["adotmob.com"], "id": "adotmob.com", "parent": "A.Mob" }, "OptinMonster": { "hosts": ["mstrlytcs.com", "optmnstr.com", "optmstr.com", "optnmstr.com"], "id": "optinmonster", "parent": "OptinMonster" }, "Acxiom": { "hosts": ["acxiom.com"], "id": "acxiom", "parent": "Acxiom" }, "Shareaholic": { "hosts": ["dtym7iokkjlif.cloudfront.net", "shareaholic.com"], "id": "shareaholic", "parent": "Shareaholic" }, "eshopcomp.com": { "hosts": ["eshopcomp.com"], "id": "eshopcomp.com", "parent": "Unknown" }, "blogsmithmedia.com": { "hosts": ["blogsmithmedia.com"], "id": "blogsmithmedia.com", "parent": "Verizon" }, "pcvark.com": { "hosts": ["pcvark.com"], "id": "pcvark.com", "parent": "Unknown" }, "Bauer Media": { "hosts": ["bauernative.com"], "id": "bauer_media", "parent": "Bauer Media" }, "Amazon Web Services": { "hosts": ["amazonaws.com", "amazonwebservices.com", "awsstatic.com"], "id": "amazon_web_services", "parent": "Amazon" }, "CNBC": { "hosts": ["cnbc.com"], "id": "cnbc", "parent": "NBCUniversal, LLC" }, "Oath, Inc.": { "hosts": ["oath.com"], "id": "oath_inc", "parent": "Verizon" }, "AMP Project": { "hosts": ["ampproject.org"], "id": "ampproject.org", "parent": "Google" }, "News Connect": { "hosts": ["newscgp.com"], "id": "newscgp.com", "parent": "News Corp" }, "Rakuten Display": { "hosts": ["mediaforge.com", "rmtag.com"], "id": "rakuten_display", "parent": "Rakuten Marketing LLC" }, "Olark": { "hosts": ["olark.com"], "id": "olark", "parent": "Olark" }, "Seeding Alliance": { "hosts": ["nativendo.de"], "id": "seeding_alliance", "parent": "Str\u00f6er SSP GmbH" }, "Decibel Insight": { "hosts": ["decibelinsight.net"], "id": "decibel_insight", "parent": "Decibel Insight" }, "Twyn": { "hosts": ["twyn.com"], "id": "twyn", "parent": "Twyn" }, "Cookiebot": { "hosts": ["cookiebot.com"], "id": "cookiebot", "parent": "Unknown" }, "FullStory": { "hosts": ["fullstory.com"], "id": "fullstory", "parent": "fullstory" }, "adworx": { "hosts": ["adworx.at"], "id": "adworx.at", "parent": "Unknown" }, "trbo": { "hosts": ["trbo.com"], "id": "trbo", "parent": "trbo" }, "CrossEngage": { "hosts": ["crossengage.io"], "id": "crossengage", "parent": "CrossEngage" }, "t8cdn.com": { "hosts": ["t8cdn.com"], "id": "t8cdn.com", "parent": "Unknown" }, "Alipay": { "hosts": ["alipay.com"], "id": "alipay.com", "parent": "Alibaba" }, "Gannett Media": { "hosts": ["gannett-cdn.com"], "id": "gannett", "parent": "Unknown" }, "Acint": { "hosts": ["acint.net"], "id": "acint.net", "parent": "Acint" }, "LivePerson": { "hosts": ["liveperson.net", "lpsnmedia.net"], "id": "liveperson", "parent": "LivePerson" }, "GetIntent": { "hosts": ["adhigh.net"], "id": "getintent", "parent": "GetIntent" }, "Clever Push": { "hosts": ["cleverpush.com"], "id": "clever_push", "parent": "Clever Push" }, "Getty Images": { "hosts": ["gettyimages.com"], "id": "gettyimages", "parent": "Unknown" }, "iRobinHood": { "hosts": ["donation-tools.org"], "id": "donationtools", "parent": "Unknown" }, "Profitshare": { "hosts": ["profitshare.ro"], "id": "profitshare", "parent": "Unknown" }, "Performio.cz": { "hosts": ["performax.cz"], "id": "performio", "parent": "Unknown" }, "Pushcrew": { "hosts": ["pushcrew.com"], "id": "pushcrew", "parent": "Pushcrew" }, "Media.net": { "hosts": ["media.net"], "id": "media.net", "parent": "Media.net Advertising FZ-LLC" }, "Kaspersky Labs": { "hosts": ["kaspersky-labs.com"], "id": "kaspersky-labs.com", "parent": "Kaspersky Lab" }, "Yandex AdExchange": { "hosts": ["yandexadexchange.net"], "id": "yandex_adexchange", "parent": "Yandex" }, "Amobee": { "hosts": ["ad.amgdgt.com", "ads.amgdgt.com"], "id": "amobee", "parent": "Singtel" }, "glotgrx.com": { "hosts": ["glotgrx.com"], "id": "glotgrx.com", "parent": "Unknown" }, "Walmart": { "hosts": ["walmart.com"], "id": "walmart", "parent": "Unknown" }, "marshadow.io": { "hosts": ["marshadow.io"], "id": "marshadow.io", "parent": "Unknown" }, "Rambler&Co": { "hosts": ["rambler.ru", "top100.ru"], "id": "rambler", "parent": "A&NN Investments " }, "EQS Group": { "hosts": ["equitystory.com"], "id": "eqs_group", "parent": "EQS Group" }, "Dailymotion Advertising": { "hosts": ["dmxleo.com"], "id": "dailymotion_advertising", "parent": "Vivendi" }, "Fit Analytics": { "hosts": ["fitanalytics.com"], "id": "fit_analytics", "parent": "Fit Analytics" }, "Sentifi": { "hosts": ["sentifi.com"], "id": "sentifi.com", "parent": "Sentifi AG" }, "Mercado-Analytics": { "hosts": ["mercadoclics.com", "mlstatic.com"], "id": "mercado", "parent": "Unknown" }, "McAfee Secure": { "hosts": ["scanalert.com", "ywxi.net"], "id": "mcafee_secure", "parent": "McAfee" }, "Google": { "hosts": ["google.at", "google.be", "google.ca", "google.ch", "google.co.id", "google.co.in", "google.co.jp", "google.co.ma", "google.co.th", "google.co.uk", "google.com", "google.com.ar", "google.com.au", "google.com.br", "google.com.mx", "google.com.tr", "google.com.tw", "google.com.ua", "google.cz", "google.de", "google.dk", "google.dz", "google.es", "google.fi", "google.fr", "google.gr", "google.hu", "google.ie", "google.it", "google.nl", "google.no", "google.pl", "google.pt", "google.ro", "google.rs", "google.ru", "google.se", "google.tn"], "id": "google", "parent": "Google" }, "Foresee": { "hosts": ["foresee.com"], "id": "foresee", "parent": "Answers.com" }, "OTM": { "hosts": ["otm-r.com"], "id": "otm-r.com", "parent": "Unknown" }, "Discord": { "hosts": ["discordapp.com"], "id": "discord", "parent": "Unknown" }, "KataWeb": { "hosts": ["kataweb.it"], "id": "kataweb.it", "parent": "Unknown" }, "Openload": { "hosts": ["oloadcdn.net", "openload.co"], "id": "openload", "parent": "Unknown" }, "Nugg.Ad": { "hosts": ["nuggad.net"], "id": "nugg.ad", "parent": "Nugg.ad" }, "Marin Search Marketer": { "hosts": ["marinsm.com"], "id": "marin_search_marketer", "parent": "Marin Software" }, "hoholikik.club": { "hosts": ["hoholikik.club"], "id": "hoholikik.club", "parent": "Unknown" }, "AdsKeeper": { "hosts": ["adskeeper.co.uk"], "id": "adskeeper", "parent": "Adskeeper" }, "MaxMind": { "hosts": ["maxmind.com"], "id": "maxmind", "parent": "MaxMind" }, "Criteo": { "hosts": ["criteo.com", "criteo.net"], "id": "criteo", "parent": "Criteo S.A." }, "Sekindo": { "hosts": ["sekindo.com"], "id": "sekindo", "parent": "SekiNdo" }, "aftv-serving.bid": { "hosts": ["aftv-serving.bid"], "id": "aftv-serving.bid", "parent": "Unknown" }, "cqq5id8n.com": { "hosts": ["cqq5id8n.com"], "id": "cqq5id8n.com", "parent": "Unknown" }, "DCMN": { "hosts": ["dcmn.com"], "id": "dcmn.com", "parent": "Unknown" }, "Quora": { "hosts": ["quora.com"], "id": "quora.com", "parent": "Unknown" }, "GlobalSign": { "hosts": ["globalsign.com"], "id": "globalsign", "parent": "Unknown" }, "DoubleClick": { "hosts": ["2mdn.net", "doubleclick.net", "invitemedia.com"], "id": "doubleclick", "parent": "Google" }, "ard.de": { "hosts": ["ard.de"], "id": "ard.de", "parent": "Unknown" }, "Semasio": { "hosts": ["semasio.net"], "id": "semasio", "parent": "Semasio GmbH" }, "div.show": { "hosts": ["div.show"], "id": "div.show", "parent": "Unknown" }, "Undertone": { "hosts": ["ads.undertone.com"], "id": "undertone", "parent": "Perion" }, "reEmbed": { "hosts": ["reembed.com"], "id": "reembed.com", "parent": "reEmbed" }, "Vindico Group": { "hosts": ["vindicosuite.com"], "id": "vindico_group", "parent": "Vindico Group" }, "Histats": { "hosts": ["histats.com"], "id": "histats", "parent": "Histats" }, "popIn": { "hosts": ["popin.cc"], "id": "popin.cc", "parent": "Unknown" }, "Innovid": { "hosts": ["innovid.com"], "id": "innovid", "parent": "Innovid" }, "MathJax": { "hosts": ["mathjax.org"], "id": "mathjax.org", "parent": "Unknown" }, "Sina CDN": { "hosts": ["sinaimg.cn"], "id": "sina_cdn", "parent": "Unknown" }, "iPromote": { "hosts": ["ipromote.com"], "id": "ipromote", "parent": "iPromote" }, "Merkle RKG": { "hosts": ["rkdms.com"], "id": "merkle_rkg", "parent": "Dentsu Aegis Network" }, "Tail": { "hosts": ["tailtarget.com"], "id": "tail_target", "parent": "Tail" }, "Advertising.com": { "hosts": ["adsdk.com", "advertising.com", "aol.com", "atwola.com", "pictela.net"], "id": "advertising.com", "parent": "Verizon" }, "eProof": { "hosts": ["eproof.com"], "id": "eproof", "parent": "Unknown" }, "Quantum Metric": { "hosts": ["quantummetric.com"], "id": "quantum_metric", "parent": "Quantum Metric, Inc." }, "DC StormIQ": { "hosts": ["dc-storm.com", "h4k5.com", "stormcontainertag.com", "stormiq.com"], "id": "dc_stormiq", "parent": "DC Storm" }, "Akanoo": { "hosts": ["akanoo.com"], "id": "akanoo", "parent": "Akanoo" }, "Digital Window": { "hosts": ["dwin1.com"], "id": "digital_window", "parent": "Axel Springer Group" }, "Flipboard": { "hosts": ["lflipboard.com"], "id": "flipboard", "parent": "Flipboard" }, "xnxx CDN": { "hosts": ["xnxx-cdn.com"], "id": "xnxx_cdn", "parent": "Unknown" }, "Push.world": { "hosts": ["push.world"], "id": "push.world", "parent": "Push.world" }, "pvclouds.com": { "hosts": ["pvclouds.com"], "id": "pvclouds.com", "parent": "Unknown" }, "Chaordic": { "hosts": ["chaordicsystems.com"], "id": "chaordic", "parent": "Unknown" }, "Ionic": { "hosts": ["ionicframework.com"], "id": "ionicframework.com", "parent": "Unknown" }, "Delta Projects": { "hosts": ["adaction.se", "de17a.com"], "id": "delta_projects", "parent": "Delta Projects AB" }, "Cardlytics": { "hosts": ["cardlytics.com"], "id": "cardlytics", "parent": "Unknown" }, "stripchat.com": { "hosts": ["stripcdn.com", "stripchat.com"], "id": "stripchat.com", "parent": "Unknown" }, "NetRatings SiteCensus": { "hosts": ["glanceguide.com", "imrworldwide.com", "vizu.com"], "id": "netratings_sitecensus", "parent": "Nielsen" }, "Adform": { "hosts": ["adform.net", "adformdsp.net", "seadform.net"], "id": "adform", "parent": "Adform A/S" }, "ATG Ad Tech Group": { "hosts": ["oadts.com"], "id": "atg_group", "parent": "Unknown" }, "AdLabs": { "hosts": ["adlabs.ru", "clickiocdn.com", "luxup.ru", "mixmarket.biz"], "id": "adlabs", "parent": "Unknown" }, "icuazeczpeoohx.com": { "hosts": ["icuazeczpeoohx.com"], "id": "icuazeczpeoohx.com", "parent": "Unknown" }, "nyacampwk.com": { "hosts": ["nyacampwk.com"], "id": "nyacampwk.com", "parent": "Unknown" }, "sparkasse.de": { "hosts": ["sparkasse.de"], "id": "sparkasse.de", "parent": "Unknown" }, "sexypartners.net": { "hosts": ["sexypartners.net"], "id": "sexypartners.net", "parent": "Unknown" }, "Bluelithium": { "hosts": ["adrevolver.com", "bluelithium.com"], "id": "bluelithium", "parent": "Verizon" }, "Visible Measures": { "hosts": ["viewablemedia.net", "visiblemeasures.com"], "id": "visible_measures", "parent": "Visible Measures" }, "The Guardian": { "hosts": ["gu-web.net", "guardianapps.co.uk", "guim.co.uk"], "id": "the_guardian", "parent": "The Guardian" }, "Yandex.Advisor": { "hosts": ["metabar.ru"], "id": "yandex_advisor", "parent": "Yandex" }, "GitHub": { "hosts": ["github.com", "githubassets.com", "githubusercontent.com"], "id": "github", "parent": "GitHub, Inc." }, "RTL Group": { "hosts": ["rtl.de", "static-fra.de", "technical-service.net"], "id": "rtl_group", "parent": "Unknown" }, "lyuoaxruaqdo.com": { "hosts": ["lyuoaxruaqdo.com"], "id": "lyuoaxruaqdo.com", "parent": "Unknown" }, "Bitly": { "hosts": ["bit.ly"], "id": "bitly", "parent": "Unknown" }, "Strossle": { "hosts": ["sprinklecontent.com", "strossle.it"], "id": "strossle", "parent": "Strossle" }, "Scarab Research": { "hosts": ["scarabresearch.com"], "id": "scarabresearch", "parent": "Emarsys" }, "Proper Media": { "hosts": ["proper.io"], "id": "propermedia", "parent": "Proper Media" }, "Quantcast": { "hosts": ["quantcast.com", "quantserve.com"], "id": "quantcast", "parent": "Quantcast International Limited" }, "uuidksinc.net": { "hosts": ["uuidksinc.net"], "id": "uuidksinc.net", "parent": "Unknown" }, "Realytics": { "hosts": ["dcniko1cv0rz.cloudfront.net"], "id": "realytics", "parent": "Realytics" }, "uCoz": { "hosts": ["ucoz.net"], "id": "ucoz.net", "parent": "Unknown" }, "Giphy": { "hosts": ["giphy.com"], "id": "giphy.com", "parent": "Unknown" }, "IPG Mediabrands": { "hosts": ["mbww.com"], "id": "ipg_mediabrands", "parent": "IPG Mediabrands" }, "Adobe Dynamic Tag Management": { "hosts": ["adobedtm.com"], "id": "adobe_dynamic_tag_management", "parent": "Adobe" }, "PowerLinks": { "hosts": ["powerlinks.com"], "id": "powerlinks", "parent": "PowerLinks" }, "office.net": { "hosts": ["office.net"], "id": "office.net", "parent": "Microsoft" }, "cXense": { "hosts": ["cxense.com"], "id": "cxense", "parent": "Cxense ASA" }, "Adify": { "hosts": ["afy11.net"], "id": "adify", "parent": "Cox Enterprises" }, "Spot.IM": { "hosts": ["spot.im"], "id": "spot.im", "parent": "Spot.IM Ltd." }, "Mediarithmics": { "hosts": ["mediarithmics.com"], "id": "mediarithmics.com", "parent": "mediarithmics SAS" }, "Prebid": { "hosts": ["prebid.org"], "id": "prebid", "parent": "Unknown" }, "lenmit.com": { "hosts": ["lenmit.com"], "id": "lenmit.com", "parent": "Unknown" }, "xplosion": { "hosts": ["xplosion.de"], "id": "xplosion", "parent": "xplosion interactive" }, "Webtrends": { "hosts": ["webtrends.com", "webtrendslive.com"], "id": "webtrends", "parent": "Webtrends" }, "imonomy": { "hosts": ["imonomy.com"], "id": "imonomy", "parent": "imonomy" }, "RCS": { "hosts": ["rcsmediagroup.it"], "id": "rcs.it", "parent": "RCS MediaGroup S.p.A. \u0003" }, "ComScore, Inc.": { "hosts": ["zqtk.net"], "id": "comscore", "parent": "comScore, Inc." }, "o2online.de": { "hosts": ["o2online.de"], "id": "o2online.de", "parent": "Unknown" }, "Cackle": { "hosts": ["cackle.me"], "id": "cackle.me", "parent": "Unknown" }, "deviantart.net": { "hosts": ["dapxl.com", "deviantart.net"], "id": "deviantart.net", "parent": "Unknown" }, "OWA": { "hosts": ["oewabox.at"], "id": "owa", "parent": "The Austrian Web Analysis (OWA)" }, "Yieldlab": { "hosts": ["yieldlab.net"], "id": "yieldlab", "parent": "ProSiebenSat.1 Media" }, "Zmags": { "hosts": ["zmags.com"], "id": "zmags", "parent": "The Gores Group" }, "Sortable": { "hosts": ["deployads.com"], "id": "sortable", "parent": "Unknown" }, "TRUSTe Seal": { "hosts": ["privacy-policy.truste.com"], "id": "truste_seal", "parent": "TrustArc" }, "Adjust": { "hosts": ["adjust.com"], "id": "adjust", "parent": "Adjust GmbH" }, "srvvtrk.com": { "hosts": ["srvvtrk.com"], "id": "srvvtrk.com", "parent": "Unknown" }, "StickyAds": { "hosts": ["stickyadstv.com"], "id": "stickyads", "parent": "Comcast" }, "SimilarDeals": { "hosts": ["similardeals.net"], "id": "similardeals.net", "parent": "Unknown" }, "affilinet": { "hosts": ["banner-rotation.com", "webmasterplan.com"], "id": "affilinet", "parent": "Axel Springer Group" }, "Convertro": { "hosts": ["convertro.com", "d1ivexoxmp59q7.cloudfront.net"], "id": "convertro", "parent": "Verizon" }, "De Persgroep": { "hosts": ["persgroep.net"], "id": "persgroep", "parent": "Unknown" }, "Answers Cloud Service": { "hosts": ["answerscloud.com"], "id": "answers_cloud_service", "parent": "Answers.com" }, "Oracle Maxymiser": { "hosts": ["maxymiser.net"], "id": "maxymiser", "parent": "Oracle" }, "The New York Times": { "hosts": ["nyt.com"], "id": "nyt.com", "parent": "The New York Times Company" }, "Vidazoo": { "hosts": ["vidazoo.com"], "id": "vidazoo.com", "parent": "Unknown" }, "Brightcove Player": { "hosts": ["brightcove.net"], "id": "brightcove_player", "parent": "Brightcove" }, "sovrn": { "hosts": ["d3pkae9owd2lcf.cloudfront.net", "lijit.com"], "id": "sovrn", "parent": "Sovrn Holdings Inc" }, "pageanalytics.space": { "hosts": ["pageanalytics.space"], "id": "pageanalytics.space", "parent": "Unknown" }, "office.com": { "hosts": ["office.com"], "id": "office.com", "parent": "Microsoft" }, "Sift Science": { "hosts": ["dtlilztwypawv.cloudfront.net", "siftscience.com"], "id": "sift_science", "parent": "Sift Science" }, "hotdogsandads.com": { "hosts": ["hotdogsandads.com"], "id": "hotdogsandads.com", "parent": "Unknown" }, "Reevoo": { "hosts": ["reevoo.com"], "id": "reevoo.com", "parent": "Reevoo" }, "OpenX": { "hosts": ["odnxs.net", "openx.net", "openx.org", "openxenterprise.com", "servedbyopenx.com"], "id": "openx", "parent": "OpenX Software Ltd." }, "Facebook Messenger": { "hosts": ["messenger.com"], "id": "messenger.com", "parent": "Facebook" }, "AdsBookie": { "hosts": ["adsbookie.com"], "id": "adsbookie", "parent": "Unknown" }, "deichmann.com": { "hosts": ["deichmann.com"], "id": "deichmann.com", "parent": "Unknown" }, "The ADEX": { "hosts": ["theadex.com"], "id": "the_adex", "parent": "ProSiebenSat.1 Media" }, "LiquidM Technology GmbH": { "hosts": ["lqm.io", "lqmcdn.com"], "id": "liquidm_technology_gmbh", "parent": "LiquidM Technology GmbH" }, "AdXpansion": { "hosts": ["adxpansion.com"], "id": "adxpansion", "parent": "AdXpansion" }, "Yieldlove": { "hosts": ["yieldlove-ad-serving.net", "yieldlove.com"], "id": "yieldlove", "parent": "Yieldlove GmbH" }, "Eyeota": { "hosts": ["eyeota.net"], "id": "eyeota", "parent": "Eyeota Ptd Ltd" }, "under-box.com": { "hosts": ["under-box.com"], "id": "under-box.com", "parent": "Unknown" }, "Flattr Button": { "hosts": ["flattr.com"], "id": "flattr_button", "parent": "Flattr" }, "dyncdn.me": { "hosts": ["dyncdn.me"], "id": "dyncdn.me", "parent": "Unknown" }, "Wikia Services": { "hosts": ["wikia-services.com"], "id": "wikia-services.com", "parent": "Wikia" }, "IHS Markit": { "hosts": ["ad.wsod.com"], "id": "ihs_markit", "parent": "IHS" }, "Fluct": { "hosts": ["adingo.jp"], "id": "fluct", "parent": "Unknown" }, "uppr GmbH": { "hosts": ["uppr.de"], "id": "uppr.de", "parent": "Unknown" }, "FastPic": { "hosts": ["fastpic.ru"], "id": "fastpic.ru", "parent": "FastPic" }, "Honey": { "hosts": ["joinhoney.com"], "id": "joinhoney", "parent": "Unknown" }, "SundaySky": { "hosts": ["sundaysky.com"], "id": "sundaysky", "parent": "SundaySky" }, "YuMe": { "hosts": ["yume.com"], "id": "yume", "parent": "Unknown" }, "Connextra": { "hosts": ["connextra.com"], "id": "connextra", "parent": "Connextra" }, "adsnative": { "hosts": ["adsnative.com"], "id": "adsnative", "parent": "AdsNative" }, "CivicScience": { "hosts": ["civicscience.com"], "id": "civicscience.com", "parent": "Unknown" }, "SEMKNOX GmbH": { "hosts": ["semknox.com"], "id": "semknox.com", "parent": "Unknown" }, "SALESmanago": { "hosts": ["salesmanago.com"], "id": "salesmanago.pl", "parent": "SALESmanago" }, "sixt-neuwagen.de": { "hosts": ["sixt-neuwagen.de"], "id": "sixt-neuwagen.de", "parent": "Unknown" }, "Adkontekst": { "hosts": ["netsprint.eu"], "id": "adkontekst.pl", "parent": "Netsprint SA" }, "clearsale": { "hosts": ["clearsale.com.br"], "id": "clearsale", "parent": "Unknown" }, "ScribbleLive": { "hosts": ["scribblelive.com"], "id": "scribblelive", "parent": "Unknown" }, "Adtelligence": { "hosts": ["adtelligence.de"], "id": "adtelligence.de", "parent": "Unknown" }, "Runative": { "hosts": ["un-syndicate.com"], "id": "runative", "parent": "Unknown" }, "SexAdNetwork": { "hosts": ["sexad.net"], "id": "sexadnetwork", "parent": "SexAdNetwork" }, "DataMind": { "hosts": ["datamind.ru"], "id": "datamind.ru", "parent": "Unknown" }, "Omarsys": { "hosts": ["omarsys.com"], "id": "omarsys.com", "parent": "XCaliber" }, "Art.Lebedev": { "hosts": ["artlebedev.ru"], "id": "artlebedev.ru", "parent": "Art.Lebedev Studio" }, "relevant4 GmbH": { "hosts": ["relevant4.com"], "id": "relevant4.com", "parent": "Unknown" }, "Inspectlet": { "hosts": ["inspectlet.com"], "id": "inspectlet", "parent": "Inspectlet" }, "Retail Rocket": { "hosts": ["retailrocket.net", "retailrocket.ru"], "id": "retailrocket.net", "parent": "Unknown" }, "ZypMedia": { "hosts": ["extend.tv"], "id": "zypmedia", "parent": "Unknown" }, "jsuol.com.br": { "hosts": ["jsuol.com.br"], "id": "jsuol.com.br", "parent": "Unknown" }, "UserVoice": { "hosts": ["uservoice.com"], "id": "uservoice", "parent": "UserVoice" }, "txxx.com": { "hosts": ["txxx.com"], "id": "txxx.com", "parent": "Unknown" }, "Prisma Media Digital": { "hosts": ["pmdrecrute.com"], "id": "prismamediadigital.com", "parent": "Prisma Media Digital" }, "Cloudimage.io": { "hosts": ["cloudimg.io"], "id": "cloudimage.io", "parent": "Scaleflex SAS" }, "Inbenta": { "hosts": ["inbenta.com"], "id": "inbenta", "parent": "Inbenta" }, "ClickTale": { "hosts": ["clicktale.com", "clicktale.net", "pantherssl.com"], "id": "clicktale", "parent": "ClickTale" }, "Amazon Associates": { "hosts": ["assoc-amazon.ca", "assoc-amazon.co.uk", "assoc-amazon.com", "assoc-amazon.de", "assoc-amazon.fr", "assoc-amazon.jp"], "id": "amazon_associates", "parent": "Amazon" }, "Amazon Adsystem": { "hosts": ["amazon-adsystem.com"], "id": "amazon_adsystem", "parent": "Amazon" }, "eBay Stats": { "hosts": ["classistatic.de", "ebay-us.com", "ebay.com", "ebay.de", "ebayclassifiedsgroup.com", "ebaycommercenetwork.com", "ebaydesc.com", "ebayimg.com", "ebayrtm.com", "ebaystatic.com"], "id": "ebay", "parent": "eBay" }, "Mediator": { "hosts": ["mediator.media"], "id": "mediator.media", "parent": "My.com B.V." }, "Twitter": { "hosts": ["ads-twitter.com", "t.co", "twimg.com", "twitter.com"], "id": "twitter", "parent": "Twitter" }, "tchibo.de": { "hosts": ["tchibo-content.de", "tchibo.de"], "id": "tchibo_de", "parent": "Unknown" }, "Mindspark": { "hosts": ["imgfarm.com", "mindspark.com", "staticimgfarm.com"], "id": "mindspark", "parent": "IAC (InterActiveCorp)" }, "SpotXchange": { "hosts": ["spotx.tv", "spotxcdn.com", "spotxchange.com"], "id": "spotxchange", "parent": "RTL Group" }, "chefkoch.de": { "hosts": ["chefkoch-cdn.de", "chefkoch.de"], "id": "chefkoch_de", "parent": "Unknown" }, "Perfect Audience": { "hosts": ["perfectaudience.com", "prfct.co"], "id": "perfect_audience", "parent": "Perfect Audience" }, "Metapeople": { "hosts": ["metalyzer.com", "mlsat02.de"], "id": "metapeople", "parent": "Metapeople" }, "runmewivel.com": { "hosts": ["runmewivel.com"], "id": "runmewivel.com", "parent": "Unknown" }, "Early Birds": { "hosts": ["early-birds.fr"], "id": "early_birds", "parent": "Unknown" }, "24metrics Fraudshield": { "hosts": ["fstrk.net"], "id": "fstrk.net", "parent": "24metrics" }, "velocecdn.com": { "hosts": ["velocecdn.com"], "id": "velocecdn.com", "parent": "Unknown" }, "Mediascope": { "hosts": ["tns-counter.ru"], "id": "mediascope", "parent": "Mediascope" }, "Dynamic Yield": { "hosts": ["dynamicyield.com"], "id": "dynamic_yield", "parent": "Unknown" }, "Heap": { "hosts": ["d36lvucg9kzous.cloudfront.net", "heapanalytics.com"], "id": "heap", "parent": "Heap" }, "Polar": { "hosts": ["mediavoice.com"], "id": "polar.me", "parent": "Polar Mobile Group Inc." }, "octapi.net": { "hosts": ["octapi.net"], "id": "octapi.net", "parent": "Unknown" }, "Neustar AdAdvisor": { "hosts": ["adadvisor.net"], "id": "neustar_adadvisor", "parent": "Neustar " }, "Bloomberg CDN": { "hosts": ["bwbx.io"], "id": "bwbx.io", "parent": "Unknown" }, "Tru Optik": { "hosts": ["truoptik.com"], "id": "truoptik", "parent": "Unknown" }, "LINE Apps": { "hosts": ["line-apps.com", "line-scdn.net", "line.me"], "id": "line_apps", "parent": "LINE Corporation" }, "Shopify CDN": { "hosts": ["shopifycdn.com"], "id": "shopifycdn.com", "parent": "Shopify" }, "tensitionschoo.club": { "hosts": ["tensitionschoo.club"], "id": "tensitionschoo.club", "parent": "Unknown" }, "Netflix": { "hosts": ["netflix.com", "nflxext.com", "nflximg.net", "nflxso.net", "nflxvideo.net"], "id": "netflix", "parent": "Unknown" }, "Acceptable Ads Exchange": { "hosts": ["aaxads.com"], "id": "aaxads.com", "parent": "Unknown" }, "Sentry": { "hosts": ["ravenjs.com", "sentry.io"], "id": "sentry", "parent": "Unknown" }, "Webedia": { "hosts": ["goutee.top", "mediaathay.org.uk", "wbdx.fr"], "id": "webedia", "parent": "Fimalac Group" }, "commercialvalue.org": { "hosts": ["commercialvalue.org"], "id": "commercialvalue.org", "parent": "Unknown" }, "CDN77": { "hosts": ["cdn77.com", "cdn77.org"], "id": "cdn77", "parent": "Unknown" }, "Live Intent": { "hosts": ["liadm.com"], "id": "live_intent", "parent": "Liveintent Inc." }, "BloomReach": { "hosts": ["brcdn.com", "brsrvr.com", "brtstats.com"], "id": "bloomreach", "parent": "BloomReach" }, "Gigya": { "hosts": ["gigya.com"], "id": "gigya", "parent": "Gigya" }, "Parsely": { "hosts": ["d1z2jf7jlzjs58.cloudfront.net", "parsely.com"], "id": "parsely", "parent": "Parse.ly" }, "Layer-ADS.net": { "hosts": ["layer-ad.org"], "id": "layer-ad.org", "parent": "Unknown" }, "BeamPulse": { "hosts": ["beampulse.com"], "id": "beampulse.com", "parent": "Unknown" }, "MediaV": { "hosts": ["mediav.com"], "id": "mediav", "parent": "Unknown" }, "Turner": { "hosts": ["turner.com"], "id": "turner", "parent": "Turner" }, "Ninja Access Analysis": { "hosts": ["cho-chin.com", "donburako.com", "hishaku.com", "shinobi.jp"], "id": "ninja_access_analysis", "parent": "Samurai Factory" }, "Treasure Data": { "hosts": ["treasuredata.com"], "id": "treasuredata", "parent": "arm" }, "Contentful GmbH": { "hosts": ["ctfassets.net"], "id": "contentful_gmbh", "parent": "Contentful GmbH" }, "Trusted Shops": { "hosts": ["trustedshops.com"], "id": "trusted_shops", "parent": "Trusted Shops" }, "wywy": { "hosts": ["wywy.com", "wywyuserservice.com"], "id": "wywy.com", "parent": "Unknown" }, "Steepto": { "hosts": ["steepto.com"], "id": "steepto.com", "parent": "Unknown" }, "Certona": { "hosts": ["certona.net", "res-x.com"], "id": "certona", "parent": "Certona (Resonance)" }, "Fox News CDN": { "hosts": ["fncstatic.com"], "id": "foxnews_static", "parent": "Fox News Network, LLC" }, "Userlike": { "hosts": ["dq4irj27fs462.cloudfront.net", "userlike-cdn-widgets.s3-eu-west-1.amazonaws.com", "userlike.com"], "id": "userlike.com", "parent": "Unknown" }, "Distroscale": { "hosts": ["jsrdn.com"], "id": "distroscale", "parent": "Unknown" }, "Optimonk": { "hosts": ["optimonk.com"], "id": "optimonk", "parent": "OptiMonk" }, "Ad Spirit": { "hosts": ["adspirit.de", "adspirit.net"], "id": "ad_spirit", "parent": "AdSpirit GmbH" }, "OneSignal": { "hosts": ["onesignal.com", "os.tc"], "id": "onesignal", "parent": "OneSignal" }, "Intelligent Reach": { "hosts": ["ist-track.com"], "id": "intelligent_reach", "parent": "Intelligent Reach" }, "Statuspage": { "hosts": ["statuspage.io"], "id": "statuspage.io", "parent": "Atlassian" }, "StatHat": { "hosts": ["stathat.com"], "id": "stathat", "parent": "Unknown" }, "o12zs3u2n.com": { "hosts": ["o12zs3u2n.com"], "id": "o12zs3u2n.com", "parent": "Unknown" }, "eXTReMe Tracker": { "hosts": ["extreme-dm.com"], "id": "extreme_tracker", "parent": "Extreme Digital" }, "SpeedCurve": { "hosts": ["speedcurve.com"], "id": "speedcurve", "parent": "Unknown" }, "Storygize": { "hosts": ["storygize.net"], "id": "storygize", "parent": "Unknown" }, "GitHub Apps": { "hosts": ["githubapp.com"], "id": "github_apps", "parent": "GitHub, Inc." }, "Auth0 Inc.": { "hosts": ["auth0.com"], "id": "auth0", "parent": "Auth0 Inc." }, "JuggCash": { "hosts": ["contentabc.com", "mofos.com"], "id": "juggcash", "parent": "JuggCash" }, "Connexity": { "hosts": ["connexity.net", "cxt.ms"], "id": "connexity", "parent": "Connexity" }, "StepStone": { "hosts": ["stepstone.com"], "id": "stepstone.com", "parent": "Unknown" }, "Polldaddy": { "hosts": ["polldaddy.com"], "id": "polldaddy", "parent": "Polldaddy" }, "Seedtag": { "hosts": ["seedtag.com"], "id": "seedtag.com", "parent": "Seedtag Advertising S.L" }, "InnoGames": { "hosts": ["innogames.com", "innogames.de", "innogamescdn.com"], "id": "innogames.de", "parent": "Unknown" }, "Bugsnag": { "hosts": ["bugsnag.com", "d2wy8f7a9ursnm.cloudfront.net"], "id": "bugsnag", "parent": "Bugsnag" }, "Advolution": { "hosts": ["advolution.de"], "id": "advolution", "parent": "Advolution" }, "Sourcepoint": { "hosts": ["decenthat.com", "summerhamster.com"], "id": "sourcepoint", "parent": "Unknown" }, "iAdvize": { "hosts": ["iadvize.com"], "id": "iadvize", "parent": "iAdvize" }, "Burda Digital Systems": { "hosts": ["bstatic.de"], "id": "burda_digital_systems", "parent": "Hubert Burda Media" }, "i-Behavior": { "hosts": ["ib-ibi.com"], "id": "i-behavior", "parent": "KBM Group" }, "Raygun": { "hosts": ["raygun.io"], "id": "raygun", "parent": "Raygun" }, "LiftIgniter": { "hosts": ["petametrics.com"], "id": "petametrics", "parent": "Unknown" }, "ACPM": { "hosts": ["acpm.fr"], "id": "acpm.fr", "parent": "Unknown" }, "IBM Customer Experience": { "hosts": ["cmcore.com", "coremetrics.com"], "id": "ibm_customer_experience", "parent": "IBM" }, "doofinder": { "hosts": ["doofinder.com"], "id": "doofinder.com", "parent": "Unknown" }, "Sumologic": { "hosts": ["sumologic.com"], "id": "sumologic.com", "parent": "Unknown" }, "Twitch CDN": { "hosts": ["jtvnw.net", "ttvnw.net", "twitchcdn.net", "twitchsvc.net"], "id": "twitch_cdn", "parent": "Amazon" }, "esprit.de": { "hosts": ["esprit.de"], "id": "esprit.de", "parent": "Unknown" }, "Improve Digital": { "hosts": ["360yield.com"], "id": "improve_digital", "parent": "Improve Digital International BV" }, "eKomi": { "hosts": ["ekomi.de"], "id": "ekomi", "parent": "eKomi" }, "Mailerlite": { "hosts": ["mailerlite.com"], "id": "mailerlite.com", "parent": "MailerLite" }, "Xing": { "hosts": ["xing-share.com", "xing.com"], "id": "xing", "parent": "XING" }, "Shopping.com": { "hosts": ["shoppingshadow.com"], "id": "shopping_com", "parent": "eBay" }, "Adap.tv": { "hosts": ["adap.tv"], "id": "adap.tv", "parent": "Verizon" }, "Ad Lightning": { "hosts": ["adlightning.com"], "id": "ad_lightning", "parent": "Ad Lightning" }, "Sizmek": { "hosts": ["serving-sys.com"], "id": "sizmek", "parent": "Sizmek Technologies, Inc. " }, "pub.network": { "hosts": ["pub.network"], "id": "pub.network", "parent": "Unknown" }, "EMS Mobile": { "hosts": ["emsmobile.de"], "id": "emsmobile.de", "parent": "Unknown" }, "Tremor Video": { "hosts": ["tremorhub.com", "tremorvideo.com", "videohub.tv"], "id": "tremor_video", "parent": "Unknown" }, "The Weather Company": { "hosts": ["w-x.co", "weather.com", "wfxtriggers.com"], "id": "the_weather_company", "parent": "IBM" }, "Atlassian": { "hosts": ["atl-paas.net", "atlassian.com", "atlassian.net", "d12ramskps3070.cloudfront.net"], "id": "atlassian.net", "parent": "Atlassian" }, "camakaroda.com": { "hosts": ["camakaroda.com"], "id": "camakaroda.com", "parent": "Unknown" }, "Digital Nomads": { "hosts": ["adtag.cc"], "id": "digital_nomads", "parent": "Unknown" }, "Gemius": { "hosts": ["gemius.pl"], "id": "gemius", "parent": "Gemius SA" }, "GDM Digital": { "hosts": ["gdmdigital.com"], "id": "gdm_digital", "parent": "VE Interactive (Formely GDM Digital)" }, "ad:C media": { "hosts": ["adc-serv.net", "adc-srv.net"], "id": "adc_media", "parent": "Unknown" }, "Findizer": { "hosts": ["findizer.fr"], "id": "findizer.fr", "parent": "Unknown" }, "liveadexchanger.com": { "hosts": ["liveadexchanger.com"], "id": "liveadexchanger.com", "parent": "Unknown" }, "Yottaa": { "hosts": ["yottaa.net"], "id": "yottaa", "parent": "Yottaa" }, "Uptolike": { "hosts": ["uptolike.com"], "id": "uptolike.com", "parent": "Unknown" }, "Insight Image": { "hosts": ["iias.eu"], "id": "iias.eu", "parent": "Unknown" }, "Site24x7": { "hosts": ["site24x7rum.com", "site24x7rum.eu"], "id": "site24x7", "parent": "Zoho Corporation" }, "Clickonometrics": { "hosts": ["clickonometrics.pl"], "id": "clickonometrics", "parent": "Clickonometrics" }, "Google Static": { "hosts": ["gstatic.com"], "id": "gstatic", "parent": "Google" }, "Just Premium": { "hosts": ["justpremium.com", "justpremium.nl"], "id": "just_premium", "parent": "Justpremium BV" }, "FreakOut": { "hosts": ["fout.jp"], "id": "fout.jp", "parent": "Unknown" }, "Coinhive": { "hosts": ["authedmine.com", "coinhive.com"], "id": "coinhive", "parent": "Unknown" }, "Usemax": { "hosts": ["usemax.de", "usemaxserver.de"], "id": "usemax", "parent": "usemax advertisement (Emego GmbH)" }, "AdScale": { "hosts": ["adscale.de"], "id": "adscale", "parent": "Str\u00f6er SSP GmbH" }, "Optomaton": { "hosts": ["volvelle.tech"], "id": "optomaton", "parent": "Ve Global" }, "PayPal": { "hosts": ["paypal.com", "paypalobjects.com"], "id": "paypal", "parent": "eBay" }, "zukxd6fkxqn.com": { "hosts": ["zukxd6fkxqn.com"], "id": "zukxd6fkxqn.com", "parent": "Unknown" }, "rtbsuperhub.com": { "hosts": ["rtbsuperhub.com"], "id": "rtbsuperhub.com", "parent": "Unknown" }, "district m": { "hosts": ["districtm.ca", "districtm.io"], "id": "districtm.io", "parent": "district m inc." }, "WonderPush": { "hosts": ["wonderpush.com"], "id": "wonderpush", "parent": "WonderPush" }, "The Movie DB": { "hosts": ["tmdb.org"], "id": "themoviedb", "parent": "The Movie DB" }, "GiantMedia": { "hosts": ["videostat.com"], "id": "giantmedia", "parent": "Adknowledge" }, "Advanced Hosters": { "hosts": ["ahcdn.com", "pix-cdn.org"], "id": "advanced_hosters", "parent": "Unknown" }, "Google Fonts": { "hosts": ["fonts.googleapis.com"], "id": "google_fonts", "parent": "Google" }, "Crimson Hexagon": { "hosts": ["crimsonhexagon.com", "hexagon-analytics.com"], "id": "crimsonhexagon_com", "parent": "Unknown" }, "Twenga Solutions": { "hosts": ["c4tw.net"], "id": "twenga", "parent": "Unknown" }, "Google User Content": { "hosts": ["googleusercontent.com"], "id": "google_users", "parent": "Google" }, "Queue-it": { "hosts": ["queue-it.net"], "id": "queue-it", "parent": "Unknown" }, "ImgIX": { "hosts": ["imgix.net"], "id": "imgix.net", "parent": "Unknown" }, "lentainform.com": { "hosts": ["lentainform.com"], "id": "lentainform.com", "parent": "Unknown" }, "ie8eamus.com": { "hosts": ["ie8eamus.com"], "id": "ie8eamus.com", "parent": "Unknown" }, "Apple": { "hosts": ["apple.com"], "id": "apple", "parent": "Apple" }, "Schnee von Morgen": { "hosts": ["schneevonmorgen.com", "svonm.com"], "id": "schneevonmorgen.com", "parent": "Unknown" }, "ADMIZED": { "hosts": ["admized.com"], "id": "admized", "parent": "Unknown" }, "Monotype Imaging Inc.": { "hosts": ["fonts.com"], "id": "monotype_imaging", "parent": "Unknown" }, "WordPress": { "hosts": ["w.org", "wordpress.com", "wp.com"], "id": "wordpress_stats", "parent": "Automattic" }, "Pladform": { "hosts": ["pladform.com"], "id": "pladform.ru", "parent": "Pladform" }, "TRUSTe Notice": { "hosts": ["choices-or.truste.com", "choices.truste.com"], "id": "truste_notice", "parent": "TrustArc" }, "Airbnb": { "hosts": ["muscache.com", "musthird.com"], "id": "airbnb", "parent": "Unknown" }, "HEIM:SPIEL Medien GmbH": { "hosts": ["weltsport.net", "hstrck.com"], "id": "heimspiel", "parent": "Unknown" }, "Keycdn": { "hosts": ["kxcdn.com"], "id": "kxcdn.com", "parent": "Unknown" }, "Rackspace": { "hosts": ["rackcdn.com"], "id": "rackcdn.com", "parent": "Unknown" }, "Google Syndication": { "hosts": ["googlesyndication.com"], "id": "google_syndication", "parent": "Google" }, "TrafficJunky": { "hosts": ["trafficjunky.net"], "id": "trafficjunky", "parent": "TrafficJunky" }, "hiveDX": { "hosts": ["hivedx.com"], "id": "hivedx.com", "parent": "Unknown" }, "Unister": { "hosts": ["unister-adservices.com", "unister-gmbh.de"], "id": "unister", "parent": "Unister" }, "magnuum.com": { "hosts": ["magnuum.com"], "id": "magnuum.com", "parent": "Unknown" }, "CJ Affiliate": { "hosts": ["afcyhf.com", "anrdoezrs.net", "apmebf.com", "awltovhc.com", "emjcd.com", "ftjcfx.com", "lduhtrp.net", "qksz.net", "tkqlhce.com", "tqlkg.com", "yceml.net"], "id": "commission_junction", "parent": "APN News and Media Ltd" }, "Content Exchange": { "hosts": ["contentexchange.me"], "id": "contentexchange.me", "parent": "I.R.V." }, "Adult Webmaster Empire": { "hosts": ["awempire.com", "dditscdn.com", "livejasmin.com"], "id": "adult_webmaster_empire", "parent": "Adult Webmaster Empire" }, "GP One GmbH": { "hosts": ["skadtec.com"], "id": "skadtec.com", "parent": "Unknown" }, "InsightExpress": { "hosts": ["insightexpressai.com"], "id": "insightexpress", "parent": "Millward Brown" }, "Adglue": { "hosts": ["adsafety.net"], "id": "adglue", "parent": "Admans" }, "freenet.de": { "hosts": ["freenet.de", "freent.de"], "id": "freenet_de", "parent": "Unknown" }, "JuicyAds": { "hosts": ["juicyads.com"], "id": "juicyads", "parent": "JuicyAds" }, "blogspot.com": { "hosts": ["blogblog.com", "blogger.com", "blogspot.com"], "id": "blogspot_com", "parent": "Google" }, "Econda": { "hosts": ["econda-monitor.de"], "id": "econda", "parent": "Econda" }, "Wirecard": { "hosts": ["wirecard.com", "wirecard.de"], "id": "wirecard", "parent": "Unknown" }, "AdFox": { "hosts": ["adfox.ru", "adwolf.ru"], "id": "adfox", "parent": "Yandex" }, "NitroPay": { "hosts": ["nitropay.com"], "id": "nitropay", "parent": "GG Software LLC" }, "Cliplister": { "hosts": ["mycliplister.com"], "id": "mycliplister.com", "parent": "Unknown" }, "worldnaturenet.xyz": { "hosts": ["worldnaturenet.xyz"], "id": "worldnaturenet_xyz", "parent": "Unknown" }, "jQuery": { "hosts": ["cdnjquery.com", "jquery.com"], "id": "jquery", "parent": "JS Foundation" }, "itineraire.info": { "hosts": ["itineraire.info"], "id": "itineraire.info", "parent": "Unknown" }, "TVSquared": { "hosts": ["tvsquared.com"], "id": "tvsquared.com", "parent": "Unknown" }, "Smyte": { "hosts": ["smyte.com"], "id": "smyte", "parent": "Smyte" }, "Lengow": { "hosts": ["lengow.com"], "id": "lengow", "parent": "Lengow" }, "ladsp.com": { "hosts": ["ladsp.com"], "id": "ladsp.com", "parent": "Unknown" }, "Flixmedia": { "hosts": ["flix360.com"], "id": "flixmedia", "parent": "Unknown" }, "Trustpilot": { "hosts": ["trustpilot.com"], "id": "trustpilot", "parent": "Trustpilot" }, "Sovrn Viewability Solutions": { "hosts": ["onscroll.com"], "id": "sovrn_viewability_solutions", "parent": "Sovrn Holdings Inc" }, "National Oceanic and Atmospheric Administration": { "hosts": ["noaa.gov"], "id": "noaa.gov", "parent": "Unknown" }, "AdMeira": { "hosts": ["admeira.ch"], "id": "admeira.ch", "parent": "Unknown" }, "Nakanohito": { "hosts": ["nakanohito.jp"], "id": "nakanohito.jp", "parent": "UserInsight" }, "Admedo": { "hosts": ["adizio.com", "admedo.com"], "id": "admedo_com", "parent": "Admedo Ltd" }, "Remintrex": { "hosts": ["remintrex.com"], "id": "remintrex", "parent": "Unknown" }, "Avocet": { "hosts": ["avocet.io"], "id": "avocet", "parent": "Avocet Systems Limited" }, "Infectious Media": { "hosts": ["impdesk.com", "impressiondesk.com"], "id": "infectious_media", "parent": "Infectious Media" }, "Yieldbot": { "hosts": ["yldbt.com"], "id": "yieldbot", "parent": "Yieldbot" }, "Kenshoo": { "hosts": ["xg4ken.com"], "id": "kenshoo", "parent": "Kenshoo" }, "Ensighten": { "hosts": ["ensighten.com"], "id": "ensighten", "parent": "Ensighten" }, "TradeDesk": { "hosts": ["adsrvr.org"], "id": "tradedesk", "parent": "The Trade Desk" }, "AdvertServe": { "hosts": ["advertserve.com"], "id": "advertserve", "parent": "Unknown" }, "AdTiger": { "hosts": ["adtiger.de"], "id": "adtiger", "parent": "AdTiger" }, "Drawbridge": { "hosts": ["adsymptotic.com"], "id": "drawbridge", "parent": "Drawbridge" }, "Media Impact": { "hosts": ["mediaimpact.de"], "id": "media_impact", "parent": "Media Impact" }, "s3xified.com": { "hosts": ["s3xified.com"], "id": "s3xified.com", "parent": "Unknown" }, "Webtrekk": { "hosts": ["d1r27qvpjiaqj3.cloudfront.net", "mateti.net", "wbtrk.net", "wcfbc.net", "webtrekk-asia.net", "webtrekk.com", "webtrekk.net", "wt-eu02.net", "wt-safetag.com"], "id": "webtrekk", "parent": "Webtrekk" }, "adac.de": { "hosts": ["adac.de"], "id": "adac_de", "parent": "Unknown" }, "Feedbackify": { "hosts": ["feedbackify.com"], "id": "feedbackify", "parent": "Feedbackify" }, "DoubleVerify": { "hosts": ["doubleverify.com"], "id": "doubleverify", "parent": "DoubleVerify Inc.\u200b" }, "cdnsure.com": { "hosts": ["cdnsure.com"], "id": "cdnsure.com", "parent": "Unknown" }, "DMWD": { "hosts": ["ctret.de"], "id": "dmwd", "parent": "Unknown" }, "Integral Ad Science": { "hosts": ["adsafeprotected.com", "iasds01.com"], "id": "integral_ad_science", "parent": "Integral Ad Science, Inc." }, "Vinted": { "hosts": ["vinted.net"], "id": "vinted", "parent": "Unknown" }, "congstar.de": { "hosts": ["congstar.de"], "id": "congstar.de", "parent": "Unknown" }, "Ve Interactive": { "hosts": ["veinteractive.com"], "id": "ve_interactive", "parent": "Ve Interactive" }, "boudja.com": { "hosts": ["boudja.com"], "id": "boudja.com", "parent": "Unknown" }, "generaltracking.de": { "hosts": ["generaltracking.de"], "id": "generaltracking_de", "parent": "Unknown" }, "Nice264": { "hosts": ["nice264.com"], "id": "nice264.com", "parent": "Unknown" }, "Wysistat": { "hosts": ["wysistat.net"], "id": "wysistat.com", "parent": "Wysistat" }, "i10c.net": { "hosts": ["i10c.net"], "id": "i10c.net", "parent": "Unknown" }, "Quartic": { "hosts": ["quarticon.com"], "id": "quartic.pl", "parent": "QuarticOn S.A." }, "Loop11": { "hosts": ["loop11.com"], "id": "loop11", "parent": "360i" }, "AdSpyglass": { "hosts": ["o333o.com"], "id": "adspyglass", "parent": "AdSpyglass" }, "AddThis": { "hosts": ["addthis.com", "addthiscdn.com", "addthisedge.com"], "id": "addthis", "parent": "Oracle" }, "eStat": { "hosts": ["cybermonitor.com", "estat.com"], "id": "estat", "parent": "Mediametrie" }, "Twitch": { "hosts": ["ext-twitch.tv", "twitch.tv"], "id": "twitch.tv", "parent": "Amazon" }, "OMS": { "hosts": ["oms.eu", "omsnative.de"], "id": "oms", "parent": "Unknown" }, "FreeWheel": { "hosts": ["fwmrm.net"], "id": "freewheel", "parent": "Comcast" }, "WURFL": { "hosts": ["wurfl.io"], "id": "wurfl", "parent": "ScientiaMobile" }, "Flocktory": { "hosts": ["flocktory.com"], "id": "flocktory.com", "parent": "Unknown" }, "Alexa Metrics": { "hosts": ["alexametrics.com", "d31qbv1cthcecs.cloudfront.net", "d5nxst8fruw4z.cloudfront.net"], "id": "alexa_metrics", "parent": "Amazon" }, "Microsoft SharePoint": { "hosts": ["sharepointonline.com"], "id": "sharepoint", "parent": "Microsoft" }, "tableteducation.com": { "hosts": ["tableteducation.com"], "id": "tableteducation.com", "parent": "Unknown" }, "Akamai Technologies": { "hosts": ["abmr.net", "akamai.net", "akamaihd.net", "akamaized.net", "akstat.io", "edgekey.net", "edgesuite.net"], "id": "akamai_technologies", "parent": "Akamai Technologies" }, "iSpot.tv": { "hosts": ["ispot.tv"], "id": "ispot.tv", "parent": "Unknown" }, "FileServe": { "hosts": ["fileserve.xyz"], "id": "fileserve", "parent": "FileServe" }, "DataXu": { "hosts": ["w55c.net"], "id": "dataxu", "parent": "Dataxu, Inc. " }, "Glomex": { "hosts": ["glomex.cloud", "glomex.com"], "id": "glomex.com", "parent": "Unknown" }, "Flag Counter": { "hosts": ["flagcounter.com"], "id": "flag_counter", "parent": "Flag Counter" }, "Tisoomi": { "hosts": ["tisoomi-services.com"], "id": "tisoomi", "parent": "Unknown" }, "Omniconvert": { "hosts": ["omniconvert.com"], "id": "omniconvert.com", "parent": "Omniconvert" }, "brillen.de": { "hosts": ["brillen.de"], "id": "brillen.de", "parent": "Unknown" }, "Allo-Pages": { "hosts": ["allo-pages.fr"], "id": "allo-pages.fr", "parent": "Links Lab" }, "Connatix": { "hosts": ["connatix.com"], "id": "connatix.com", "parent": "Connatix Native Exchange Inc." }, "Digioh": { "hosts": ["digioh.com", "lightboxcdn.com"], "id": "digioh", "parent": "Unknown" }, "Blink New Media": { "hosts": ["bnmla.com"], "id": "blink_new_media", "parent": "engage:BDR (Blink New Media)" }, "BounceX": { "hosts": ["bouncex.com", "bouncex.net"], "id": "bouncex", "parent": "Unknown" }, "AppsFlyer": { "hosts": ["appsflyer.com"], "id": "appsflyer", "parent": "AppsFlyer" }, "Pixalate": { "hosts": ["adrta.com"], "id": "pixalate", "parent": "Pixalate, Inc." }, "chaturbate.com": { "hosts": ["chaturbate.com"], "id": "chaturbate.com", "parent": "Unknown" }, "Distil Bot Discovery": { "hosts": ["distiltag.com"], "id": "distil_tag", "parent": "distil networks" }, "LeadPlace": { "hosts": ["leadplace.fr"], "id": "leadplace", "parent": "Leadplace - Temelio" }, "Otto Group": { "hosts": ["otto.de", "ottogroup.media"], "id": "otto.de", "parent": "Unknown" }, "Caltat": { "hosts": ["caltat.com"], "id": "caltat.com", "parent": "Unknown" }, "Pulpix": { "hosts": ["pulpix.com"], "id": "pulpix.com", "parent": "ADYOULIKE SA" }, "Spoteffect": { "hosts": ["spoteffects.net"], "id": "spoteffect", "parent": "Spoteffect" }, "SnigelWeb, Inc.": { "hosts": ["h-bid.com"], "id": "snigelweb", "parent": "SnigelWeb, Inc." }, "Moz": { "hosts": ["moz.com"], "id": "moz", "parent": "Unknown" }, "Reddit": { "hosts": ["redd.it", "reddit-image.s3.amazonaws.com", "reddit.com", "redditmedia.com", "redditstatic.com"], "id": "reddit", "parent": "reddit" }, "Smaato": { "hosts": ["smaato.net"], "id": "smaato", "parent": "Spearhead Integrated Marketing Communication" }, "comprigo": { "hosts": ["comprigo.com"], "id": "comprigo", "parent": "Unknown" }, "foxydeal.com": { "hosts": ["foxydeal.com"], "id": "foxydeal_com", "parent": "Unknown" }, "Psyma": { "hosts": ["psyma.com"], "id": "psyma", "parent": "Psyma" }, "onet": { "hosts": ["ocdn.eu", "onet.pl"], "id": "onet.pl", "parent": "Unknown" }, "SaleCycle": { "hosts": ["d16fk4ms6rqz1v.cloudfront.net", "salecycle.com"], "id": "salecycle", "parent": "SaleCycle" }, "Aemediatraffic": { "hosts": ["aemediatraffic.com", "hprofits.com"], "id": "aemediatraffic", "parent": "Unknown" }, "Admo.TV": { "hosts": ["admo.tv"], "id": "admo.tv", "parent": "Unknown" }, "Adglare": { "hosts": ["adglare.net"], "id": "adglare.net", "parent": "Unknown" }, "Allegro": { "hosts": ["allegroimg.com", "allegrostatic.com", "allegrostatic.pl", "ngacm.com", "ngastatic.com"], "id": "allegro.pl", "parent": "Allegro" }, "TrafficHaus": { "hosts": ["traffichaus.com"], "id": "traffichaus", "parent": "TrafficHaus" }, "AB Tasty": { "hosts": ["abtasty.com", "d1447tq2m68ekg.cloudfront.net"], "id": "ab_tasty", "parent": "AB Tasty" }, "Lotame": { "hosts": ["crwdcntrl.net"], "id": "lotame", "parent": "Lotame Solutions, Inc." }, "MaxCDN": { "hosts": ["maxcdn.com", "netdna-cdn.com", "netdna-ssl.com"], "id": "maxcdn", "parent": "Unknown" }, "Effiliation": { "hosts": ["effiliation.com"], "id": "effiliation", "parent": "Effiliation" }, "Perfect Market": { "hosts": ["perfectmarket.com"], "id": "perfect_market", "parent": "Perfect Market" }, "Simpli.fi": { "hosts": ["simpli.fi"], "id": "simpli.fi", "parent": "Simplifi Holdings Inc." }, "Amazon.com": { "hosts": ["amazon.ca", "amazon.co.jp", "amazon.co.uk", "amazon.com", "amazon.de", "amazon.es", "amazon.fr", "amazon.it", "d3io1k5o0zdpqr.cloudfront.net"], "id": "amazon", "parent": "Amazon" }, "Appcues": { "hosts": ["appcues.com"], "id": "appcues", "parent": "Unknown" }, "DreamLab.pl": { "hosts": ["dreamlab.pl"], "id": "dreamlab.pl", "parent": "Onet.pl SA" }, "kairion": { "hosts": ["kairion.de", "kctag.net"], "id": "kairion.de", "parent": "ProSiebenSat.1 Media" }, "Proxistore": { "hosts": ["proxistore.com"], "id": "proxistore.com", "parent": "Unknown" }, "sitelabweb.com": { "hosts": ["sitelabweb.com"], "id": "sitelabweb.com", "parent": "Unknown" }, "Moat": { "hosts": ["moatads.com", "moatpixel.com"], "id": "moat", "parent": "Oracle" }, "Qualtrics": { "hosts": ["qualtrics.com"], "id": "qualtrics", "parent": "Qualtrics" }, "FLXONE": { "hosts": ["flx1.com", "flxpxl.com"], "id": "flxone", "parent": "FlxOne" }, "AffiMax": { "hosts": ["affimax.de"], "id": "affimax", "parent": "AffiMax" }, "Adscore": { "hosts": ["adsco.re"], "id": "adsco.re", "parent": "Unknown" }, "Next Performance": { "hosts": ["nxtck.com"], "id": "next_performance", "parent": "Nextperf" }, "immobilienscout24.de": { "hosts": ["immobilienscout24.de", "static-immobilienscout24.de"], "id": "immobilienscout24_de", "parent": "Scout 24" }, "ablida": { "hosts": ["ablida.de", "ablida.net"], "id": "ablida", "parent": "Unknown" }, "Sape": { "hosts": ["sape.ru"], "id": "sape.ru", "parent": "Sape Sapient Solution" }, "venturead.com": { "hosts": ["venturead.com"], "id": "venturead.com", "parent": "Unknown" }, "Adyoulike": { "hosts": ["adyoulike.com", "omnitagjs.com"], "id": "adyoulike", "parent": "ADYOULIKE SA" }, "IMDB CDN": { "hosts": ["media-imdb.com"], "id": "media-imdb.com", "parent": "Amazon" }, "Lytics": { "hosts": ["lytics.io"], "id": "lytics", "parent": "Unknown" }, "Relap": { "hosts": ["relap.io"], "id": "relap", "parent": "Unknown" }, "xxxlshop.de": { "hosts": ["xxxlshop.de"], "id": "xxxlshop.de", "parent": "Unknown" }, "OLX": { "hosts": ["olx-st.com", "onap.io"], "id": "olx-st.com", "parent": "Unknown" }, "Videoplaza": { "hosts": ["videoplaza.tv"], "id": "videoplaza", "parent": "Videoplaza" }, "Zemanta": { "hosts": ["zemanta.com"], "id": "zemanta", "parent": "Zemanta, Inc." }, "Vimeo": { "hosts": ["vimeo.com", "vimeocdn.com"], "id": "vimeo", "parent": "IAC (InterActiveCorp)" }, "Rating@Mail.Ru": { "hosts": ["list.ru"], "id": "list.ru", "parent": "Megafon" }, "CQuotient": { "hosts": ["cquotient.com"], "id": "cquotient.com", "parent": "Salesforce" }, "Reflected Networks": { "hosts": ["rncdn3.com"], "id": "rncdn3.com", "parent": "Unknown" }, "Ziff Davis": { "hosts": ["webtest.net", "zdbb.net", "ziffdavis.com", "ziffdavisinternational.com", "ziffprod.com", "ziffstatic.com"], "id": "ziff_davis", "parent": "Ziff Davis LLC" }, "Kiwe.io": { "hosts": ["kiwe.io", "tracc.it"], "id": "tracc.it", "parent": "Unknown" }, "Intimate Merger": { "hosts": ["im-apps.net"], "id": "intimate_merger", "parent": "Intimate Merger" }, "o2.pl": { "hosts": ["o2.pl"], "id": "o2.pl", "parent": "o2.pl" }, "CleverTap": { "hosts": ["wzrkt.com"], "id": "clever_tap", "parent": "CleverTap" }, "Contact Impact": { "hosts": ["adrolays.de", "c-i.as", "df-srv.de"], "id": "contact_impact", "parent": "Axel Springer Group" }, "SiteScout": { "hosts": ["sitescout.com"], "id": "sitescout", "parent": "SiteScout" }, "Smartsupp Chat": { "hosts": ["smartsuppchat.com"], "id": "smartsupp_chat", "parent": "Smartsuppp" }, "United Digital Group": { "hosts": ["nonstoppartner.net"], "id": "united_digital_group", "parent": "Unknown" }, "AdsWizz": { "hosts": ["adswizz.com"], "id": "adswizz", "parent": "Unknown" }, "DimML": { "hosts": ["dimml.io"], "id": "dimml", "parent": "Unknown" }, "Adthink": { "hosts": ["adthink.com", "audienceinsights.net"], "id": "adthink", "parent": "Unknown" }, "Adobe Dynamic Media (Scene7)": { "hosts": ["scene7.com"], "id": "scene7.com", "parent": "Adobe" }, "ymetrica1.com": { "hosts": ["ymetrica1.com"], "id": "ymetrica1.com", "parent": "Unknown" }, "Monetate": { "hosts": ["monetate.net"], "id": "monetate", "parent": "Monetate" }, "Daily Mail": { "hosts": ["dailymail.co.uk"], "id": "dailymail.co.uk", "parent": "Dmn Media" }, "Dynamic 1001 GmbH": { "hosts": ["dyntracker.de", "media01.eu"], "id": "dynamic_1001_gmbh", "parent": "Unknown" }, "iovation": { "hosts": ["iesnare.com", "iovation.com"], "id": "iovation", "parent": "iovation" }, "Bing Ads": { "hosts": ["bing.com", "bing.net"], "id": "bing_ads", "parent": "Microsoft" }, "Yabbi": { "hosts": ["adx.com.ru", "yabbi.me"], "id": "yabbi", "parent": "Unknown" }, "Ancora": { "hosts": ["ancoraplatform.com"], "id": "ancora", "parent": "Ancora" }, "Rythmxchange": { "hosts": ["rhythmxchange.com"], "id": "rythmxchange", "parent": "RhythmOne, LLC" }, "Tube Corporate": { "hosts": ["tubecorporate.com"], "id": "tubecorporate", "parent": "Unknown" }, "Valiton": { "hosts": ["vinsight.de"], "id": "valiton", "parent": "Hubert Burda Media" }, "Squarespace": { "hosts": ["squarespace.com"], "id": "squarespace.com", "parent": "Unknown" }, "emetriq": { "hosts": ["emetriq.de"], "id": "emetriq", "parent": "emetriq GmbH" }, "SMART AdServer": { "hosts": ["sascdn.com", "smartadserver.com", "styria-digital.com", "yoc-adserver.com"], "id": "smart_adserver", "parent": "Smart Adserver" }, "Google APIs": { "hosts": ["googleapis.com"], "id": "googleapis.com", "parent": "Google" }, "Blis": { "hosts": ["blismedia.com"], "id": "blis", "parent": "Blis" }, "Adition": { "hosts": ["adition.com"], "id": "adition", "parent": "ProSiebenSat.1 Media" }, "Microsoft Services": { "hosts": ["azurewebsites.net", "cloudapp.net", "gfx.ms", "live.com", "microsoft.com", "microsoftonline-p.com", "microsoftonline.com", "microsofttranslator.com", "msecnd.net", "msedge.net", "msocdn.com", "onestore.ms", "s-microsoft.com", "trouter.io", "windows.net"], "id": "microsoft", "parent": "Microsoft" }, "amgload.net": { "hosts": ["amgload.net"], "id": "amgload.net", "parent": "Unknown" }, "Spotify": { "hosts": ["scdn.co", "spotify.com"], "id": "spotify", "parent": "Unknown" }, "Outbrain": { "hosts": ["outbrain.com", "outbrainimg.com"], "id": "outbrain", "parent": "Outbrain" }, "Bluecore": { "hosts": ["bluecore.com", "triggeredmail.appspot.com"], "id": "bluecore.com", "parent": "Unknown" }, "Peerius": { "hosts": ["peerius.com"], "id": "peerius", "parent": "Peerius" }, "da-ads.com": { "hosts": ["da-ads.com"], "id": "da-ads.com", "parent": "Unknown" }, "Adblade": { "hosts": ["adblade.com"], "id": "adblade.com", "parent": "Adblade" }, "Adverticum": { "hosts": ["adverticum.net"], "id": "adverticum", "parent": "Adverticum Zrt." }, "FriendFinder Network": { "hosts": ["adultfriendfinder.com", "amigos.com", "board-books.com", "cams.com", "facebookofsex.com", "getiton.com", "nostringsattached.com", "pop6.com", "streamray.com"], "id": "friendfinder_network", "parent": "FriendFinder Networks" }, "YouTube": { "hosts": ["googlevideo.com", "youtube-nocookie.com", "youtube.com", "ytimg.com"], "id": "youtube", "parent": "Google" }, "brightonclick.com": { "hosts": ["brightonclick.com"], "id": "brightonclick.com", "parent": "Unknown" }, "CloudFlare": { "hosts": ["cloudflare.com", "cloudflare.net"], "id": "cloudflare", "parent": "Cloudflare" }, "PubMatic": { "hosts": ["pubmatic.com"], "id": "pubmatic", "parent": "PubMatic, Inc." }, "woopic.com": { "hosts": ["woopic.com"], "id": "woopic.com", "parent": "Unknown" }, "Twitter for Business": { "hosts": ["tellapart.com"], "id": "twitter_for_business", "parent": "Twitter" }, "AirPR": { "hosts": ["airpr.com"], "id": "airpr.com", "parent": "AirPR Inc." }, "basilic.io": { "hosts": ["basilic.io"], "id": "basilic.io", "parent": "Unknown" }, "33Across": { "hosts": ["33across.com"], "id": "33across", "parent": "33Across" }, "Optimatic": { "hosts": ["optimatic.com"], "id": "optimatic", "parent": "Optimatic" }, "Komoona": { "hosts": ["komoona.com"], "id": "komoona", "parent": "Komoona" }, "Mixpanel": { "hosts": ["mixpanel.com", "mxpnl.com", "mxpnl.net"], "id": "mixpanel", "parent": "Mixpanel" }, "BangBros": { "hosts": ["bangdom.com"], "id": "bangdom.com", "parent": "Unknown" }, "adwebster": { "hosts": ["adwebster.com"], "id": "adwebster", "parent": "adwebster" }, "Rubicon": { "hosts": ["dpclk.com", "mobsmith.com", "nearbyad.com", "rubiconproject.com"], "id": "rubicon", "parent": "The Rubicon Project, Limited" }, "Yandex": { "hosts": ["d31j93rd8oukbv.cloudfront.net", "webvisor.org", "yandex.net", "yandex.ru", "yastatic.net"], "id": "yandex", "parent": "Yandex" }, "Kameleoon": { "hosts": ["kameleoon.com", "kameleoon.eu"], "id": "kameleoon", "parent": "Kameleoon" }, "Omniscienta": { "hosts": ["omnidsp.com"], "id": "omniscienta", "parent": "Unknown" }, "Qualaroo": { "hosts": ["qualaroo.com"], "id": "qualaroo", "parent": "Unknown" }, "Zedo": { "hosts": ["zedo.com"], "id": "zedo", "parent": "Zedo" }, "TrustArc": { "hosts": ["trustarc.com", "truste.com"], "id": "trustarc", "parent": "TrustArc" }, "Movable Ink": { "hosts": ["micpn.com"], "id": "movable_ink", "parent": "Unknown" }, "adgoal": { "hosts": ["smartadcheck.de", "smartredirect.de"], "id": "adgoal", "parent": "adgoal" }, "Traffic Stars": { "hosts": ["trafficstars.com", "tsyndicate.com"], "id": "traffic_stars", "parent": "Traffic Stars" }, "M. P. NEWMEDIA": { "hosts": ["mpnrs.com"], "id": "m._p._newmedia", "parent": "Unknown" }, "Admeta": { "hosts": ["admaym.com", "atemda.com"], "id": "admeta", "parent": "AdMeta" }, "Babator": { "hosts": ["babator.com"], "id": "babator.com", "parent": "Unknown" }, "Monotype GmbH": { "hosts": ["fonts.net"], "id": "monotype_gmbh", "parent": "Unknown" }, "AniView": { "hosts": ["aniview.com"], "id": "aniview.com", "parent": "Unknown" }, "Baidu Ads": { "hosts": ["baidu.com", "baidustatic.com"], "id": "baidu_ads", "parent": "Baidu" }, "pizzaandads.com": { "hosts": ["pizzaandads.com"], "id": "pizzaandads_com", "parent": "Unknown" }, "AppNexus": { "hosts": ["adnxs.com", "adnxs.net"], "id": "appnexus", "parent": "AppNexus Inc." }, "R-Advertising": { "hosts": ["ads-digitalkeys.com"], "id": "r_advertising", "parent": "Unknown" }, "OptinProject": { "hosts": ["optincollect.com"], "id": "optinproject.com", "parent": "OptinCollect" }, "baletingo.com": { "hosts": ["baletingo.com"], "id": "baletingo.com", "parent": "Unknown" }, "ria.ru": { "hosts": ["ria.ru"], "id": "ria.ru", "parent": "Unknown" }, "AiData": { "hosts": ["aidata.io"], "id": "aidata.io", "parent": "Unknown" }, "Deutsche Telekom": { "hosts": ["sdp-campaign.de", "t-online.de", "telekom-dienste.de", "telekom.com", "telekom.de", "toi.de"], "id": "t-mobile", "parent": "Unknown" }, "cdnnetwok.xyz": { "hosts": ["cdnnetwok.xyz"], "id": "cdnnetwok_xyz", "parent": "Unknown" }, "Keywee": { "hosts": ["keywee.co"], "id": "keywee", "parent": "Unknown" }, "Netsprint Audience": { "hosts": ["nsaudience.pl"], "id": "netsprint_audience", "parent": "Netsprint SA" }, "Jeuxvideo CDN": { "hosts": ["jvc.gg"], "id": "jvc.gg", "parent": "Unknown" }, "Sirdata": { "hosts": ["sddan.com"], "id": "sirdata", "parent": "Sirdata" }, "Adobe Audience Manager": { "hosts": ["adobe.com", "demdex.net", "everestjs.net", "everesttech.net"], "id": "adobe_audience_manager", "parent": "Adobe" }, "First Impression": { "hosts": ["firstimpression.io"], "id": "first_impression", "parent": "First Impression" }, "remove.video": { "hosts": ["remove.video"], "id": "remove.video", "parent": "Unknown" }, "Dotmetrics": { "hosts": ["dotmetrics.net"], "id": "dotmetrics.net", "parent": "Unknown" }, "Walk Me": { "hosts": ["walkme.com"], "id": "walkme.com", "parent": "Unknown" }, "Medialead": { "hosts": ["medialead.de"], "id": "medialead", "parent": "The Reach Group GmbH" }, "Dynatrace": { "hosts": ["dynatrace.com"], "id": "dynatrace.com", "parent": "Thoma Bravo" }, "StumbleUpon Widgets": { "hosts": ["stumble-upon.com", "stumbleupon.com", "su.pr"], "id": "stumbleupon_widgets", "parent": "StumbleUpon" }, "Sovrn OneTag": { "hosts": ["s-onetag.com"], "id": "sovrn_onetag", "parent": "Sovrn Holdings Inc" }, "Tynt": { "hosts": ["tynt.com"], "id": "tynt", "parent": "33Across" }, "Programattik": { "hosts": ["programattik.com"], "id": "programattik", "parent": "T\u00fcrk Telekom" }, "iotec": { "hosts": ["dsp.io"], "id": "iotec", "parent": "iotec global Ltd." }, "tubecup.org": { "hosts": ["tubecup.org"], "id": "tubecup.org", "parent": "Unknown" }, "Notify": { "hosts": ["adleadevent.com"], "id": "notify", "parent": "Unknown" }, "Facetz.DCA": { "hosts": ["facetz.net"], "id": "facetz.dca", "parent": "DCA (Data-Centric Alliance)" }, "Swisscom": { "hosts": ["swisscom.ch"], "id": "swisscom", "parent": "Unknown" }, "Peer5": { "hosts": ["peer5.com"], "id": "peer5.com", "parent": "Peer5" }, "AppDynamics": { "hosts": ["appdynamics.com", "de8of677fyt0b.cloudfront.net", "eum-appdynamics.com"], "id": "appdynamics", "parent": "AppDynamics" }, "TradeDoubler": { "hosts": ["tradedoubler.com"], "id": "tradedoubler", "parent": "Tradedoubler AB" }, "vidcpm.com": { "hosts": ["vidcpm.com"], "id": "lottex_inc", "parent": "Unknown" }, "ShareThis": { "hosts": ["sharethis.com"], "id": "sharethis", "parent": "ShareThis, Inc." }, "Rhythmone Beacon": { "hosts": ["1rx.io"], "id": "rhythmone_beacon", "parent": "RhythmOne, LLC" }, "Disqus Ads": { "hosts": ["disqusads.com"], "id": "disqus_ads", "parent": "Disqus" }, "piguiqproxy.com": { "hosts": ["piguiqproxy.com"], "id": "piguiqproxy.com", "parent": "Unknown" }, "adRom": { "hosts": ["adrom.net", "txt.eu"], "id": "adrom", "parent": "Unknown" }, "AdPilot": { "hosts": ["adpilot.at", "erne.co"], "id": "adpilot", "parent": "Unknown" }, "GlobalWebIndex": { "hosts": ["globalwebindex.net"], "id": "global_web_index", "parent": "GlobalWebIndex" }, "coll1onf.com": { "hosts": ["coll1onf.com"], "id": "coll1onf.com", "parent": "Unknown" }, "ehi-siegel.de": { "hosts": ["ehi-siegel.de"], "id": "ehi-siegel_de", "parent": "Unknown" }, "tdsrmbl.net": { "hosts": ["tdsrmbl.net"], "id": "tdsrmbl_net", "parent": "Unknown" }, "Permutive": { "hosts": ["permutive.com"], "id": "permutive", "parent": "Permutive, Inc." }, "Cam-Content.com": { "hosts": ["cam-content.com"], "id": "cam-content.com", "parent": "Unknown" }, "Dtscout": { "hosts": ["dtscout.com"], "id": "dtscout.com", "parent": "Unknown" }, "JW Player": { "hosts": ["d21rhj7n383afu.cloudfront.net", "jwpcdn.com", "jwplatform.com", "jwplayer.com", "jwpltx.com", "jwpsrv.com"], "id": "jw_player", "parent": "JW Player" }, "globalnotifier.com": { "hosts": ["globalnotifier.com"], "id": "globalnotifier.com", "parent": "Unknown" }, "Recettes.net": { "hosts": ["recettes.net"], "id": "recettes.net", "parent": "Recettes.net" } }; const trackerDomains = []; const companyTree = {} // Should start company -> domain visited -> url -> HTML. const controlPanelURL = chrome.extension.getURL('templates/control-panel.html'); @@ -195,7 +199,7 @@ Object.keys(trackerData).forEach(e => { // Create a mapping of hostname to company name -company_hostname_mapping = {} +const company_hostname_mapping = {} Object.keys(trackerData).forEach(e => { trackerData[e].hosts.forEach(y => { diff --git a/database.js b/database.js index fc2d76e..d1c973e 100644 --- a/database.js +++ b/database.js @@ -1,3 +1,5 @@ +import Dexie from 'dexie'; + // Wrapper using Dexie.js to use IndexedDB. const updateTime = 1 * 60 * 1000; @@ -54,31 +56,31 @@ function load(obj, key) { }); } -function saveInDB(ref, tp) { +export function saveInDB(ref, tp) { db.reftp.add({ ref: ref, tp: tp }); } -function saveHTML(ref, html) { +export function saveHTML(ref, html) { db.refhtml.add({ ref: ref, html: html }); } -function savetpList(tpurl) { +export function savetpList(tpurl) { db.tpurl.add({ tpurl: tpurl }); } -function saveInputFields(value, sender, details) { +export function saveInputFields(value, sender, details) { db.inputFields.add({ value: value, sender: sender, details: details }); } -function saveInputFieldsCache(value, summary) { +export function saveInputFieldsCache(value, summary) { db.inputFieldsCache.add({ value: value, summary: summary }); } -function savetpURLFP(tpurl, details) { +export function savetpURLFP(tpurl, details) { db.tpURLFP.add({ tpurl: tpurl, details: details }); } -function saveCookies(url, details) { +export function saveCookies(url, details) { dbCookie.cookietable.add({ url: url, details: details }); } @@ -139,11 +141,11 @@ function cleanCookieDB() { }); } -function cleanStorage() { +export function cleanStorage() { // Clean databases and then re-load the extension. Promise.all([cleanLSDB(), cleanCookieDB()]).then(status => { chrome.runtime.reload(); }).catch(console.log); -} \ No newline at end of file +} diff --git a/globals.js b/globals.js new file mode 100644 index 0000000..0f0065e --- /dev/null +++ b/globals.js @@ -0,0 +1,7 @@ +const _chrome = chrome; +const _browser = typeof browser !== 'undefined' ? browser : _chrome; + +export { + _browser as browser, + _chrome as chrome, +}; diff --git a/manifest.json b/manifest.json index 1e62232..295c6ae 100644 --- a/manifest.json +++ b/manifest.json @@ -17,12 +17,12 @@ }, "permissions": [ "http://*/*", "https://*/*","tabs", "activeTab", "webRequest", "webRequestBlocking","unlimitedStorage", "webNavigation", ""], "background": { - "scripts": ["static/js/dexie.js", "database.js", "background.js"] + "scripts": ["background.bundle.js"] }, "content_scripts": [{ "matches" : ["http://*/*", "https://*/*"], "match_about_blank": true, - "js": ["scripts/content-script.js"], + "js": ["content-script.bundle.js"], "all_frames": true, "run_at": "document_end" }], diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5d99619 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7419 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/polyfill": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", + "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", + "dev": true, + "requires": { + "core-js": "^2.5.7", + "regenerator-runtime": "^0.12.0" + } + }, + "@babel/runtime": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", + "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@cliqz-oss/firefox-client": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz", + "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==", + "dev": true, + "requires": { + "colors": "0.5.x", + "js-select": "~0.6.0" + } + }, + "@cliqz-oss/node-firefox-connect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz", + "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==", + "dev": true, + "requires": { + "@cliqz-oss/firefox-client": "0.3.1", + "es6-promise": "^2.0.1" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "12.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.8.tgz", + "integrity": "sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "JSONSelect": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", + "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", + "dev": true + }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "adbkit": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/adbkit/-/adbkit-2.11.0.tgz", + "integrity": "sha512-j2vUhEeZmCiqBP+p77CpPWQTcT20rOmSmRHFUTZUwUpxzeCd3fXop4NAGYztSY9/FNU4bT/qqvYQ4EZKuCXhfA==", + "dev": true, + "requires": { + "adbkit-logcat": "^1.1.0", + "adbkit-monkey": "~1.0.1", + "bluebird": "~2.9.24", + "commander": "^2.3.0", + "debug": "~2.6.3", + "node-forge": "^0.7.1", + "split": "~0.3.3" + } + }, + "adbkit-logcat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz", + "integrity": "sha1-Adf5sM75CTowvLOwB+//MBUIli8=", + "dev": true + }, + "adbkit-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz", + "integrity": "sha1-8pG+cBou/FZ6Y/x6pq/N7TFDC+E=", + "dev": true, + "requires": { + "async": "~0.2.9" + } + }, + "addons-linter": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-1.6.1.tgz", + "integrity": "sha512-3+N8cskdXHpId0dhfsldgbYGXamtgfGywvU4oPVb1M7imG3pHFoK+VcAr/kPk1VeYGkSmBl2LxnwGHcw1ERvmA==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "ajv-merge-patch": "4.1.0", + "chalk": "2.4.2", + "cheerio": "1.0.0-rc.2", + "columnify": "1.5.4", + "common-tags": "1.8.0", + "crx-parser": "0.1.2", + "deepmerge": "3.1.0", + "dispensary": "0.30.0", + "es6-promisify": "6.0.1", + "eslint": "5.13.0", + "eslint-plugin-no-unsafe-innerhtml": "1.0.16", + "eslint-visitor-keys": "1.0.0", + "espree": "5.0.0", + "esprima": "3.1.3", + "first-chunk-stream": "2.0.0", + "fluent-syntax": "0.10.0", + "fsevents": "2.0.1", + "glob": "7.1.3", + "is-mergeable-object": "1.1.0", + "jed": "1.1.1", + "mdn-browser-compat-data": "0.0.66", + "os-locale": "3.1.0", + "pino": "5.11.1", + "po2json": "0.4.5", + "postcss": "7.0.14", + "probe-image-size": "4.0.0", + "regenerator-runtime": "0.13.1", + "relaxed-json": "1.0.1", + "semver": "5.6.0", + "source-map-support": "0.5.10", + "strip-bom-stream": "3.0.0", + "tosource": "1.0.0", + "upath": "1.1.0", + "whatwg-url": "7.0.0", + "xmldom": "0.1.27", + "yargs": "13.1.0", + "yauzl": "2.10.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "es6-promisify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", + "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.1.tgz", + "integrity": "sha512-5KzMIyPLvfdPmvsdlYsHqITrDfK9k7bmvf97HvHSN4810i254ponbxCQ1NukpRWlu6en2MBWzAlhDExEKISwAA==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.1.0.tgz", + "integrity": "sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "dev": true + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "ajv-merge-patch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ajv-merge-patch/-/ajv-merge-patch-4.1.0.tgz", + "integrity": "sha512-0mAYXMSauA8RZ7r+B4+EAOYcZEcO9OK5EiQCR7W7Cv4E44pJj56ZnkKLJ9/PAcOc0dT+LlV9fdDcq2TxVJfOYw==", + "dev": true, + "requires": { + "fast-json-patch": "^2.0.6", + "json-merge-patch": "^0.2.3" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "archiver": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", + "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "dev": true, + "requires": { + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "zip-stream": "^1.2.0" + }, + "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-polyfill": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.16.0.tgz", + "integrity": "sha1-LUUCHfh+JqN0ttTRqcZZZNF/JCI=", + "dev": true, + "requires": { + "babel-runtime": "^6.9.1", + "core-js": "^2.4.0", + "regenerator-runtime": "^0.9.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz", + "integrity": "sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck=", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "bluebird": { + "version": "2.9.34", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "bunyan": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", + "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", + "dev": true, + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.10.6", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + }, + "dependencies": { + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true + } + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compress-commons": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", + "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.1", + "crc32-stream": "^2.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "concurrently": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.1.0.tgz", + "integrity": "sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "date-fns": "^1.23.0", + "lodash": "^4.17.10", + "read-pkg": "^4.0.1", + "rxjs": "^6.3.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^4.5.0", + "tree-kill": "^1.1.0", + "yargs": "^12.0.1" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + } + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crx-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/crx-parser/-/crx-parser-0.1.2.tgz", + "integrity": "sha1-fu7tnt3JXiLBiTguNGJARKiaWm0=", + "dev": true + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "dev": true + }, + "debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.1.0.tgz", + "integrity": "sha512-ZQVKfRVlwRfD150ndzEK8M90ABT+Y/JQKs4Y7U4MXdpuoUkkrr4DwKbVux3YjylA5bUMUj0Nc3pMxPJX6N2QQQ==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepcopy": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-0.6.3.tgz", + "integrity": "sha1-Y0eA8vhlardxr4+oQx7RzO5Vx7A=", + "dev": true + }, + "deepmerge": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.1.0.tgz", + "integrity": "sha512-/TnecbwXEdycfbsM2++O3eGiatEFHjjNciHEwJclM+T5Kd94qD1AP+2elP/Mq0L5b9VZJao5znR01Mz6eX8Seg==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "dexie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-2.0.4.tgz", + "integrity": "sha512-aQ/s1U2wHxwBKRrt2Z/mwFNHMQWhESerFsMYzE+5P5OsIe5o1kgpFMWkzKTtkvkyyEni6mWr/T4HUJuY9xIHLA==" + }, + "dispensary": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.30.0.tgz", + "integrity": "sha512-ZZipc2xaDky03RD3s1UJOM6zgygo2ncEzmjuqpPR6pT7jMo0cxH/FTzGarD3Pw2naAsBOXVGG10Fwxth9OrW0g==", + "dev": true, + "requires": { + "array-from": "~2.1.1", + "async": "~2.6.0", + "natural-compare-lite": "~1.4.0", + "pino": "~5.11.0", + "request": "~2.88.0", + "sha.js": "~2.4.4", + "source-map-support": "~0.5.4", + "yargs": "~12.0.1" + }, + "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + } + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dtrace-provider": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.10.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-promise": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + } + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.13.0.tgz", + "integrity": "sha512-nqD5WQMisciZC5EHZowejLKQjWGuFS5c70fxqSKlnDME+oz9zmE8KTlX+lHSg+/5wsC/kf9Q9eMkC8qS3oM2fg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-plugin-no-unsafe-innerhtml": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsafe-innerhtml/-/eslint-plugin-no-unsafe-innerhtml-1.0.16.tgz", + "integrity": "sha1-fQKHjI6b95FriINtWsEitC8VGTI=", + "dev": true, + "requires": { + "eslint": "^3.7.1" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + } + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "^1.3.0" + } + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-to-promise": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", + "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-patch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.1.0.tgz", + "integrity": "sha512-PipOsAKamRw7+CXtKiieehyjUeDVPJ5J7b2kdJYerEf6TSUQoD2ijpVyZ88KQm5YXziff4h762bz3+vzf56khg==", + "dev": true, + "requires": { + "deep-equal": "^1.0.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-redact": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-1.5.0.tgz", + "integrity": "sha512-Afo61CgUjkzdvOKDHn08qnZ0kwck38AOGcMlvSGzvJbIab6soAP5rdoQayecGCDsD69AiF9vJBXyq31eoEO2tQ==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", + "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "firefox-profile": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-1.2.0.tgz", + "integrity": "sha512-TTEFfPOkyaz4EWx/5ZDQC1mJAe3a+JgVcchpIfD4Tvx1UspwlTJRJxOYA35x/z2iJcxaF6aW2rdh6oj6qwgd2g==", + "dev": true, + "requires": { + "adm-zip": "~0.4.x", + "archiver": "~2.1.0", + "async": "~2.5.0", + "fs-extra": "~4.0.2", + "ini": "~1.3.3", + "jetpack-id": "1.0.0", + "lazystream": "~1.0.0", + "lodash": "~4.17.2", + "minimist": "^1.1.1", + "uuid": "^3.0.0", + "xml2js": "~0.4.4" + }, + "dependencies": { + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "requires": { + "lodash": "^4.14.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "first-chunk-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", + "dev": true + }, + "fluent-syntax": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.10.0.tgz", + "integrity": "sha512-6qRhwQXDTgJjS9DW3IiXZWzUMUPqNPzqh+bZZyUOr6t8xYwkIe+5JONYZuvfvbOUk65paAno0kd8s8kUD2ptNA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.1.tgz", + "integrity": "sha512-p+CXqK/iLvDESUWdn3NA3JVO9HxdfI+iXx8xR3DqWgKZvQNiEVpAyUQo0lmwz8rqksb4xaGerG291xuwwhX2kA==", + "dev": true, + "optional": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "fx-runner": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.10.tgz", + "integrity": "sha512-tXj0lMnSey89Dx7R3Lq+HMUy3ODmOmj5lhRYBgMWNOqbh7Vx8vPUiWMbyJ3HIzGuLnNeXAPH0x/GdFZ7h6h0vQ==", + "dev": true, + "requires": { + "commander": "2.9.0", + "lodash": "4.17.11", + "shell-quote": "1.6.1", + "spawn-sync": "1.0.15", + "when": "3.7.7", + "which": "1.2.4", + "winreg": "0.0.12" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "isexe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "which": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", + "integrity": "sha1-FVf5YIBgTlsRs1meufRbUKnv1yI=", + "dev": true, + "requires": { + "is-absolute": "^0.1.7", + "isexe": "^1.1.1" + } + } + } + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gettext-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.1.0.tgz", + "integrity": "sha1-LFpmONiTk0ubVQN9CtgstwBLJnk=", + "dev": true, + "requires": { + "encoding": "^0.1.11" + } + }, + "git-rev-sync": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-1.9.1.tgz", + "integrity": "sha1-oMLj3TkqvPa3aWLif8dfsyI0Sc4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.11", + "shelljs": "0.7.7" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "shelljs": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz", + "integrity": "sha1-svXHfvlxSPS09uImguELuoZnz/E=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.4.0.tgz", + "integrity": "sha512-O3qJQ+fU/AI1K2y5/RjqefMEQTdJQf6sPTvyRA1bx6D634ADxcu97u6YOUciIeU2OWIuvpUsQs6Wx3Fdi3eFaQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, + "requires": { + "is-relative": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-mergeable-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.0.tgz", + "integrity": "sha512-JfyDDwUdtS4yHCgUpxOyKB9dnfZ0gecufxB0eytX6BmSXSE+8dbxDGt+V7CNRIRJ9sYFV/WQt2KJG6hNob2sBw==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", + "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-reference": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.2.tgz", + "integrity": "sha512-Kn5g8c7XHKejFOpTf2QN9YjiHHKl5xRj+2uAZf9iM2//nkBNi/NNeB5JMoun28nEaUVHyPUzqzhfRlfAirEjXg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, + "is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jed": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", + "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", + "dev": true + }, + "jetpack-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", + "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=", + "dev": true + }, + "js-select": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", + "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", + "dev": true, + "requires": { + "JSONSelect": "0.2.1", + "traverse": "0.4.x" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-merge-patch": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-0.2.3.tgz", + "integrity": "sha1-+ixrWvh9p3uuKWalidUuI+2B/kA=", + "dev": true, + "requires": { + "deep-equal": "^1.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsonwebtoken": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz", + "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==", + "dev": true, + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "xtend": "^4.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", + "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "dev": true, + "requires": { + "pako": "~1.0.2" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "magic-string": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "mdn-browser-compat-data": { + "version": "0.0.66", + "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-0.0.66.tgz", + "integrity": "sha512-Exx+o05KYCltHmY2thfCoufBaHeqbIzqZHQPDtmcC+nkeFG++ONzwddBtgDBAKeI0IFFKqGIbRT1QBRwmk9QKA==", + "dev": true, + "requires": { + "extend": "3.0.2" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "dev": true, + "optional": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true, + "optional": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-forge": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", + "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==", + "dev": true + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "~0.4.0", + "underscore": "~1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + } + } + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pino": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-5.11.1.tgz", + "integrity": "sha512-NIua0mGb9Adknq35ONvQmvh93LCUVUjp2+1q1EcvIkJmpJnSd3E5rHVKlKNjzMXFl/z3fI+QA0xXCjPEKNiLvQ==", + "dev": true, + "requires": { + "fast-redact": "^1.4.2", + "fast-safe-stringify": "^2.0.6", + "flatstr": "^1.0.9", + "pino-std-serializers": "^2.3.0", + "quick-format-unescaped": "^3.0.0", + "sonic-boom": "^0.7.1" + } + }, + "pino-std-serializers": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz", + "integrity": "sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ==", + "dev": true + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "po2json": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/po2json/-/po2json-0.4.5.tgz", + "integrity": "sha1-R7spUtoy1Yob4vJWpZjuvAt0URg=", + "dev": true, + "requires": { + "gettext-parser": "1.1.0", + "nomnom": "1.8.1" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "probe-image-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-4.0.0.tgz", + "integrity": "sha512-nm7RvWUxps+2+jZKNLkd04mNapXNariS6G5WIEVzvAqjx7EUuKcY1Dp3e6oUK7GLwzJ+3gbSbPLFAASHFQrPcQ==", + "dev": true, + "requires": { + "any-promise": "^1.3.0", + "deepmerge": "^2.0.1", + "inherits": "^2.0.3", + "next-tick": "^1.0.0", + "request": "^2.83.0", + "stream-parser": "~0.3.1" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "dev": true + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", + "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "quick-format-unescaped": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.2.tgz", + "integrity": "sha512-FXTaCkwvpIlkdKeGDNgcq07SXWS383noQUuZjvdE1QcTt+eLuqof6/BDiEPqB59FWLie/l91+HtlJSw7iCViSA==", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "relaxed-json": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.1.tgz", + "integrity": "sha1-fI1KovCVcEzQIOMugJm8rhA/C9Q=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "commander": "^2.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, + "resolve": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.15.6.tgz", + "integrity": "sha512-s3Vn3QJQ5YVFfIG4nXoG9VdL1I37IZsft+4ZyeBhxE0df1kCFz9e+4bEAbR4mKH3pvBO9e9xjdxWPhhIp0r9ow==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "^12.0.8", + "acorn": "^6.1.1" + } + }, + "rollup-plugin-commonjs": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.0.tgz", + "integrity": "sha512-B8MoX5GRpj3kW4+YaFO/di2JsZkBxNjVmZ9LWjUoTAjq8N9wc7HObMXPsrvolVV9JXVtYSscflXM14A19dXPNQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.0", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.10.1", + "rollup-pluginutils": "^2.7.0" + } + }, + "rollup-plugin-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz", + "integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.5.0" + } + }, + "rollup-plugin-node-resolve": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.0.3.tgz", + "integrity": "sha512-Mhhmf0x493xgUPEsRELnU1VM+4+WO82knWkAbZ0d2DvZQZJMbhzyQK/hqtpVscoRru1EqlK3TM1kK9ro469wPw==", + "dev": true, + "requires": { + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "sign-addon": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-0.3.1.tgz", + "integrity": "sha512-feaoG7+8IXr9SymOEd8VTZCSlVZArWcBDZ33IIdfXlU5NWWzXdCxCjPDqAkLQplFa7RRZr1S4lSmgMPn80Ze1A==", + "dev": true, + "requires": { + "babel-polyfill": "6.16.0", + "deepcopy": "0.6.3", + "es6-error": "4.0.0", + "es6-promisify": "5.0.0", + "jsonwebtoken": "8.2.1", + "mz": "2.5.0", + "request": "2.87.0", + "source-map-support": "0.4.6", + "stream-to-promise": "2.2.0", + "when": "3.7.7" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "es6-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.0.0.tgz", + "integrity": "sha1-8JTHBB9mJZm7EnINoFnWucf/D0A=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "mz": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.5.0.tgz", + "integrity": "sha1-KFkCXfA9RrV7sxcXSxlkd85kzsE=", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.6.tgz", + "integrity": "sha1-MlUqpktFg5KoXqs7C17mFScWeus=", + "dev": true, + "requires": { + "source-map": "^0.5.3" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + } + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sonic-boom": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.4.tgz", + "integrity": "sha512-8JRAJg0RxZtFLQMxolwETvWd2JSlH3ZGo/Z4xPxMbpqF14xCgVYPVeFCFOR3zyr3pcfG82QDVj6537Sx5ZWdNw==", + "dev": true, + "requires": { + "flatstr": "^1.0.9" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", + "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", + "dev": true, + "requires": { + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", + "dev": true + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "dev": true, + "requires": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dev": true, + "requires": { + "debug": "2" + } + }, + "stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", + "dev": true, + "requires": { + "any-promise": "^1.1.0" + } + }, + "stream-to-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-2.2.0.tgz", + "integrity": "sha1-se2y4cjLESidG1A8CNPyrvUeZQ8=", + "dev": true, + "requires": { + "any-promise": "~1.3.0", + "end-of-stream": "~1.1.0", + "stream-to-array": "~2.3.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", + "integrity": "sha1-6TUyWLqpEIll78QcsO+K3i88+wc=", + "dev": true, + "requires": { + "once": "~1.3.0" + } + }, + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-bom-buf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz", + "integrity": "sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI=", + "dev": true, + "requires": { + "is-utf8": "^0.2.1" + } + }, + "strip-bom-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-3.0.0.tgz", + "integrity": "sha1-lWvMXYRDD2klapDtgjdlzYWOFZw=", + "dev": true, + "requires": { + "first-chunk-stream": "^2.0.0", + "strip-bom-buf": "^1.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz", + "integrity": "sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==", + "dev": true, + "requires": { + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tosource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", + "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "traverse": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", + "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", + "dev": true + }, + "tree-kill": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", + "dev": true + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", + "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "update-notifier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "watchpack": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-ext": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-3.0.0.tgz", + "integrity": "sha512-pUT2YYSnECH/SqKXB0m92HWzAAOt97wJpkSHu7AddyxzclN3R9A2IHq+KUzaXEjiwWzVs/+yUOSpmuwCDouNNg==", + "dev": true, + "requires": { + "@babel/polyfill": "7.2.5", + "@babel/runtime": "7.3.1", + "@cliqz-oss/firefox-client": "0.3.1", + "@cliqz-oss/node-firefox-connect": "1.2.1", + "adbkit": "2.11.0", + "addons-linter": "1.6.1", + "bunyan": "1.8.12", + "camelcase": "4.1.0", + "debounce": "1.1.0", + "decamelize": "2.0.0", + "es6-error": "4.1.1", + "es6-promisify": "5.0.0", + "event-to-promise": "0.8.0", + "firefox-profile": "1.2.0", + "fx-runner": "1.0.10", + "git-rev-sync": "1.9.1", + "mkdirp": "0.5.1", + "multimatch": "2.1.0", + "mz": "2.7.0", + "node-notifier": "5.2.1", + "opn": "5.3.0", + "parse-json": "4.0.0", + "require-uncached": "1.0.3", + "sign-addon": "0.3.1", + "source-map-support": "0.5.3", + "stream-to-promise": "2.2.0", + "strip-json-comments": "2.0.1", + "tmp": "0.0.33", + "update-notifier": "2.3.0", + "watchpack": "1.5.0", + "yargs": "6.6.0", + "zip-dir": "1.0.2" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "when": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", + "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "winreg": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", + "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "zip-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", + "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=", + "dev": true, + "requires": { + "async": "^1.5.2", + "jszip": "^2.4.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "zip-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", + "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "dev": true, + "requires": { + "archiver-utils": "^1.3.0", + "compress-commons": "^1.2.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + } + } +} diff --git a/package.json b/package.json index b05b470..55fe628 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,10 @@ "description": "Local sheriff is a reconnaissance tool in your browser for your data.", "main": "background.js", "scripts": { - "build": "echo TODO" + "build": "rollup --config rollup.config.js", + "watch": "rollup --config rollup.config.js --watch", + "lint": "web-ext lint", + "start": "concurrently 'npm run watch' 'web-ext run --source-dir . --firefox /usr/bin/firefox'" }, "repository": { "type": "git", @@ -24,5 +27,13 @@ "homepage": "https://github.com/cliqz-oss/local-sheriff#readme", "dependencies": { "dexie": "^2.0.4" + }, + "devDependencies": { + "concurrently": "^4.1.0", + "rollup": "^1.15.6", + "rollup-plugin-commonjs": "^10.0.0", + "rollup-plugin-json": "^4.0.0", + "rollup-plugin-node-resolve": "^5.0.3", + "web-ext": "^3.0.0" } } diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..f6e47e7 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,32 @@ +import commonjs from 'rollup-plugin-commonjs'; +import resolve from 'rollup-plugin-node-resolve'; +import json from 'rollup-plugin-json'; + +const plugins = [ + json(), + resolve({ + preferBuiltins: false, + }), + commonjs(), +]; + +export default [ + { + input: './background.js', + output: { + file: 'background.bundle.js', + format: 'iife', + name: 'localSheriff', + }, + plugins, + }, + { + input: './scripts/content-script.js', + output: { + file: 'content-script.bundle.js', + format: 'iife', + name: 'localSheriff', + }, + plugins, + }, +]; diff --git a/static/js/dexie.js b/static/js/dexie.js deleted file mode 100644 index 6cc4589..0000000 --- a/static/js/dexie.js +++ /dev/null @@ -1,4472 +0,0 @@ -/* - * Dexie.js - a minimalistic wrapper for IndexedDB - * =============================================== - * - * By David Fahlander, david.fahlander@gmail.com - * - * Version 2.0.2, Thu Mar 01 2018 - * - * http://dexie.org - * - * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ - */ - -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.Dexie = factory()); -}(this, (function () { 'use strict'; - -var keys = Object.keys; -var isArray = Array.isArray; -var _global = typeof self !== 'undefined' ? self : - typeof window !== 'undefined' ? window : - global; -function extend(obj, extension) { - if (typeof extension !== 'object') - return obj; - keys(extension).forEach(function (key) { - obj[key] = extension[key]; - }); - return obj; -} -var getProto = Object.getPrototypeOf; -var _hasOwn = {}.hasOwnProperty; -function hasOwn(obj, prop) { - return _hasOwn.call(obj, prop); -} -function props(proto, extension) { - if (typeof extension === 'function') - extension = extension(getProto(proto)); - keys(extension).forEach(function (key) { - setProp(proto, key, extension[key]); - }); -} -var defineProperty = Object.defineProperty; -function setProp(obj, prop, functionOrGetSet, options) { - defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ? - { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : - { value: functionOrGetSet, configurable: true, writable: true }, options)); -} -function derive(Child) { - return { - from: function (Parent) { - Child.prototype = Object.create(Parent.prototype); - setProp(Child.prototype, "constructor", Child); - return { - extend: props.bind(null, Child.prototype) - }; - } - }; -} -var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -function getPropertyDescriptor(obj, prop) { - var pd = getOwnPropertyDescriptor(obj, prop), proto; - return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); -} -var _slice = [].slice; -function slice(args, start, end) { - return _slice.call(args, start, end); -} -function override(origFunc, overridedFactory) { - return overridedFactory(origFunc); -} -function assert(b) { - if (!b) - throw new Error("Assertion Failed"); -} -function asap(fn) { - if (_global.setImmediate) - setImmediate(fn); - else - setTimeout(fn, 0); -} - -/** Generate an object (hash map) based on given array. - * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to - * instert on the resulting object for each item in the array. If this function returns a falsy value, the - * current item wont affect the resulting object. - */ -function arrayToObject(array, extractor) { - return array.reduce(function (result, item, i) { - var nameAndValue = extractor(item, i); - if (nameAndValue) - result[nameAndValue[0]] = nameAndValue[1]; - return result; - }, {}); -} -function trycatcher(fn, reject) { - return function () { - try { - fn.apply(this, arguments); - } - catch (e) { - reject(e); - } - }; -} -function tryCatch(fn, onerror, args) { - try { - fn.apply(null, args); - } - catch (ex) { - onerror && onerror(ex); - } -} -function getByKeyPath(obj, keyPath) { - // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path - if (hasOwn(obj, keyPath)) - return obj[keyPath]; // This line is moved from last to first for optimization purpose. - if (!keyPath) - return obj; - if (typeof keyPath !== 'string') { - var rv = []; - for (var i = 0, l = keyPath.length; i < l; ++i) { - var val = getByKeyPath(obj, keyPath[i]); - rv.push(val); - } - return rv; - } - var period = keyPath.indexOf('.'); - if (period !== -1) { - var innerObj = obj[keyPath.substr(0, period)]; - return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1)); - } - return undefined; -} -function setByKeyPath(obj, keyPath, value) { - if (!obj || keyPath === undefined) - return; - if ('isFrozen' in Object && Object.isFrozen(obj)) - return; - if (typeof keyPath !== 'string' && 'length' in keyPath) { - assert(typeof value !== 'string' && 'length' in value); - for (var i = 0, l = keyPath.length; i < l; ++i) { - setByKeyPath(obj, keyPath[i], value[i]); - } - } - else { - var period = keyPath.indexOf('.'); - if (period !== -1) { - var currentKeyPath = keyPath.substr(0, period); - var remainingKeyPath = keyPath.substr(period + 1); - if (remainingKeyPath === "") - if (value === undefined) - delete obj[currentKeyPath]; - else - obj[currentKeyPath] = value; - else { - var innerObj = obj[currentKeyPath]; - if (!innerObj) - innerObj = (obj[currentKeyPath] = {}); - setByKeyPath(innerObj, remainingKeyPath, value); - } - } - else { - if (value === undefined) - delete obj[keyPath]; - else - obj[keyPath] = value; - } - } -} -function delByKeyPath(obj, keyPath) { - if (typeof keyPath === 'string') - setByKeyPath(obj, keyPath, undefined); - else if ('length' in keyPath) - [].map.call(keyPath, function (kp) { - setByKeyPath(obj, kp, undefined); - }); -} -function shallowClone(obj) { - var rv = {}; - for (var m in obj) { - if (hasOwn(obj, m)) - rv[m] = obj[m]; - } - return rv; -} -var concat = [].concat; -function flatten(a) { - return concat.apply([], a); -} -//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm -var intrinsicTypes = "Boolean,String,Date,RegExp,Blob,File,FileList,ArrayBuffer,DataView,Uint8ClampedArray,ImageData,Map,Set" - .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return ["Int", "Uint", "Float"].map(function (t) { return t + num + "Array"; }); }))).filter(function (t) { return _global[t]; }).map(function (t) { return _global[t]; }); -function deepClone(any) { - if (!any || typeof any !== 'object') - return any; - var rv; - if (isArray(any)) { - rv = []; - for (var i = 0, l = any.length; i < l; ++i) { - rv.push(deepClone(any[i])); - } - } - else if (intrinsicTypes.indexOf(any.constructor) >= 0) { - rv = any; - } - else { - rv = any.constructor ? Object.create(any.constructor.prototype) : {}; - for (var prop in any) { - if (hasOwn(any, prop)) { - rv[prop] = deepClone(any[prop]); - } - } - } - return rv; -} -function getObjectDiff(a, b, rv, prfx) { - // Compares objects a and b and produces a diff object. - rv = rv || {}; - prfx = prfx || ''; - keys(a).forEach(function (prop) { - if (!hasOwn(b, prop)) - rv[prfx + prop] = undefined; // Property removed - else { - var ap = a[prop], bp = b[prop]; - if (typeof ap === 'object' && typeof bp === 'object' && - ap && bp && - // Now compare constructors are same (not equal because wont work in Safari) - ('' + ap.constructor) === ('' + bp.constructor)) - // Same type of object but its properties may have changed - getObjectDiff(ap, bp, rv, prfx + prop + "."); - else if (ap !== bp) - rv[prfx + prop] = b[prop]; // Primitive value changed - } - }); - keys(b).forEach(function (prop) { - if (!hasOwn(a, prop)) { - rv[prfx + prop] = b[prop]; // Property added - } - }); - return rv; -} -// If first argument is iterable or array-like, return it as an array -var iteratorSymbol = typeof Symbol !== 'undefined' && Symbol.iterator; -var getIteratorOf = iteratorSymbol ? function (x) { - var i; - return x != null && (i = x[iteratorSymbol]) && i.apply(x); -} : function () { return null; }; -var NO_CHAR_ARRAY = {}; -// Takes one or several arguments and returns an array based on the following criteras: -// * If several arguments provided, return arguments converted to an array in a way that -// still allows javascript engine to optimize the code. -// * If single argument is an array, return a clone of it. -// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special -// case to the two bullets below. -// * If single argument is an iterable, convert it to an array and return the resulting array. -// * If single argument is array-like (has length of type number), convert it to an array. -function getArrayOf(arrayLike) { - var i, a, x, it; - if (arguments.length === 1) { - if (isArray(arrayLike)) - return arrayLike.slice(); - if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') - return [arrayLike]; - if ((it = getIteratorOf(arrayLike))) { - a = []; - while ((x = it.next()), !x.done) - a.push(x.value); - return a; - } - if (arrayLike == null) - return [arrayLike]; - i = arrayLike.length; - if (typeof i === 'number') { - a = new Array(i); - while (i--) - a[i] = arrayLike[i]; - return a; - } - return [arrayLike]; - } - i = arguments.length; - a = new Array(i); - while (i--) - a[i] = arguments[i]; - return a; -} - -// By default, debug will be true only if platform is a web platform and its page is served from localhost. -// When debug = true, error's stacks will contain asyncronic long stacks. -var debug = typeof location !== 'undefined' && - // By default, use debug mode if served from localhost. - /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); -function setDebug(value, filter) { - debug = value; - libraryFilter = filter; -} -var libraryFilter = function () { return true; }; -var NEEDS_THROW_FOR_STACK = !new Error("").stack; -function getErrorWithStack() { - "use strict"; - if (NEEDS_THROW_FOR_STACK) - try { - // Doing something naughty in strict mode here to trigger a specific error - // that can be explicitely ignored in debugger's exception settings. - // If we'd just throw new Error() here, IE's debugger's exception settings - // will just consider it as "exception thrown by javascript code" which is - // something you wouldn't want it to ignore. - getErrorWithStack.arguments; - throw new Error(); // Fallback if above line don't throw. - } - catch (e) { - return e; - } - return new Error(); -} -function prettyStack(exception, numIgnoredFrames) { - var stack = exception.stack; - if (!stack) - return ""; - numIgnoredFrames = (numIgnoredFrames || 0); - if (stack.indexOf(exception.name) === 0) - numIgnoredFrames += (exception.name + exception.message).split('\n').length; - return stack.split('\n') - .slice(numIgnoredFrames) - .filter(libraryFilter) - .map(function (frame) { return "\n" + frame; }) - .join(''); -} -function deprecated(what, fn) { - return function () { - console.warn(what + " is deprecated. See https://github.com/dfahlander/Dexie.js/wiki/Deprecations. " + prettyStack(getErrorWithStack(), 1)); - return fn.apply(this, arguments); - }; -} - -var dexieErrorNames = [ - 'Modify', - 'Bulk', - 'OpenFailed', - 'VersionChange', - 'Schema', - 'Upgrade', - 'InvalidTable', - 'MissingAPI', - 'NoSuchDatabase', - 'InvalidArgument', - 'SubTransaction', - 'Unsupported', - 'Internal', - 'DatabaseClosed', - 'PrematureCommit', - 'ForeignAwait' -]; -var idbDomErrorNames = [ - 'Unknown', - 'Constraint', - 'Data', - 'TransactionInactive', - 'ReadOnly', - 'Version', - 'NotFound', - 'InvalidState', - 'InvalidAccess', - 'Abort', - 'Timeout', - 'QuotaExceeded', - 'Syntax', - 'DataClone' -]; -var errorList = dexieErrorNames.concat(idbDomErrorNames); -var defaultTexts = { - VersionChanged: "Database version changed by other database connection", - DatabaseClosed: "Database has been closed", - Abort: "Transaction aborted", - TransactionInactive: "Transaction has already completed or failed" -}; -// -// DexieError - base class of all out exceptions. -// -function DexieError(name, msg) { - // Reason we don't use ES6 classes is because: - // 1. It bloats transpiled code and increases size of minified code. - // 2. It doesn't give us much in this case. - // 3. It would require sub classes to call super(), which - // is not needed when deriving from Error. - this._e = getErrorWithStack(); - this.name = name; - this.message = msg; -} -derive(DexieError).from(Error).extend({ - stack: { - get: function () { - return this._stack || - (this._stack = this.name + ": " + this.message + prettyStack(this._e, 2)); - } - }, - toString: function () { return this.name + ": " + this.message; } -}); -function getMultiErrorMessage(msg, failures) { - return msg + ". Errors: " + failures - .map(function (f) { return f.toString(); }) - .filter(function (v, i, s) { return s.indexOf(v) === i; }) // Only unique error strings - .join('\n'); -} -// -// ModifyError - thrown in Collection.modify() -// Specific constructor because it contains members failures and failedKeys. -// -function ModifyError(msg, failures, successCount, failedKeys) { - this._e = getErrorWithStack(); - this.failures = failures; - this.failedKeys = failedKeys; - this.successCount = successCount; -} -derive(ModifyError).from(DexieError); -function BulkError(msg, failures) { - this._e = getErrorWithStack(); - this.name = "BulkError"; - this.failures = failures; - this.message = getMultiErrorMessage(msg, failures); -} -derive(BulkError).from(DexieError); -// -// -// Dynamically generate error names and exception classes based -// on the names in errorList. -// -// -// Map of {ErrorName -> ErrorName + "Error"} -var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {}); -// Need an alias for DexieError because we're gonna create subclasses with the same name. -var BaseException = DexieError; -// Map of {ErrorName -> exception constructor} -var exceptions = errorList.reduce(function (obj, name) { - // Let the name be "DexieError" because this name may - // be shown in call stack and when debugging. DexieError is - // the most true name because it derives from DexieError, - // and we cannot change Function.name programatically without - // dynamically create a Function object, which would be considered - // 'eval-evil'. - var fullName = name + "Error"; - function DexieError(msgOrInner, inner) { - this._e = getErrorWithStack(); - this.name = fullName; - if (!msgOrInner) { - this.message = defaultTexts[name] || fullName; - this.inner = null; - } - else if (typeof msgOrInner === 'string') { - this.message = msgOrInner; - this.inner = inner || null; - } - else if (typeof msgOrInner === 'object') { - this.message = msgOrInner.name + " " + msgOrInner.message; - this.inner = msgOrInner; - } - } - derive(DexieError).from(BaseException); - obj[name] = DexieError; - return obj; -}, {}); -// Use ECMASCRIPT standard exceptions where applicable: -exceptions.Syntax = SyntaxError; -exceptions.Type = TypeError; -exceptions.Range = RangeError; -var exceptionMap = idbDomErrorNames.reduce(function (obj, name) { - obj[name + "Error"] = exceptions[name]; - return obj; -}, {}); -function mapError(domError, message) { - if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) - return domError; - var rv = new exceptionMap[domError.name](message || domError.message, domError); - if ("stack" in domError) { - // Derive stack from inner exception if it has a stack - setProp(rv, "stack", { get: function () { - return this.inner.stack; - } }); - } - return rv; -} -var fullNameExceptions = errorList.reduce(function (obj, name) { - if (["Syntax", "Type", "Range"].indexOf(name) === -1) - obj[name + "Error"] = exceptions[name]; - return obj; -}, {}); -fullNameExceptions.ModifyError = ModifyError; -fullNameExceptions.DexieError = DexieError; -fullNameExceptions.BulkError = BulkError; - -function nop() { } -function mirror(val) { return val; } -function pureFunctionChain(f1, f2) { - // Enables chained events that takes ONE argument and returns it to the next function in chain. - // This pattern is used in the hook("reading") event. - if (f1 == null || f1 === mirror) - return f2; - return function (val) { - return f2(f1(val)); - }; -} -function callBoth(on1, on2) { - return function () { - on1.apply(this, arguments); - on2.apply(this, arguments); - }; -} -function hookCreatingChain(f1, f2) { - // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance. - // This pattern is used in the hook("creating") event. - if (f1 === nop) - return f2; - return function () { - var res = f1.apply(this, arguments); - if (res !== undefined) - arguments[0] = res; - var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess - onerror = this.onerror; // In case event listener has set this.onerror - this.onsuccess = null; - this.onerror = null; - var res2 = f2.apply(this, arguments); - if (onsuccess) - this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; - if (onerror) - this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; - return res2 !== undefined ? res2 : res; - }; -} -function hookDeletingChain(f1, f2) { - if (f1 === nop) - return f2; - return function () { - f1.apply(this, arguments); - var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess - onerror = this.onerror; // In case event listener has set this.onerror - this.onsuccess = this.onerror = null; - f2.apply(this, arguments); - if (onsuccess) - this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; - if (onerror) - this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; - }; -} -function hookUpdatingChain(f1, f2) { - if (f1 === nop) - return f2; - return function (modifications) { - var res = f1.apply(this, arguments); - extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain. - var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess - onerror = this.onerror; // In case event listener has set this.onerror - this.onsuccess = null; - this.onerror = null; - var res2 = f2.apply(this, arguments); - if (onsuccess) - this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; - if (onerror) - this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; - return res === undefined ? - (res2 === undefined ? undefined : res2) : - (extend(res, res2)); - }; -} -function reverseStoppableEventChain(f1, f2) { - if (f1 === nop) - return f2; - return function () { - if (f2.apply(this, arguments) === false) - return false; - return f1.apply(this, arguments); - }; -} - -function promisableChain(f1, f2) { - if (f1 === nop) - return f2; - return function () { - var res = f1.apply(this, arguments); - if (res && typeof res.then === 'function') { - var thiz = this, i = arguments.length, args = new Array(i); - while (i--) - args[i] = arguments[i]; - return res.then(function () { - return f2.apply(thiz, args); - }); - } - return f2.apply(this, arguments); - }; -} - -/* - * Copyright (c) 2014-2017 David Fahlander - * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0 - */ -// -// Promise and Zone (PSD) for Dexie library -// -// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by -// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation. -// -// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another -// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use -// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task -// engine that is indexedDB compliant across all browsers. -// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible. -// Also with inspiration from bluebird, asyncronic stacks in debug mode. -// -// Specific non-standard features of this Promise class: -// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as -// native async / await. -// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame -// and below + all promises that those promises creates or awaits. -// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). -// -// David Fahlander, https://github.com/dfahlander -// -// Just a pointer that only this module knows about. -// Used in Promise constructor to emulate a private constructor. -var INTERNAL = {}; -// Async stacks (long stacks) must not grow infinitely. -var LONG_STACKS_CLIP_LIMIT = 100; -var MAX_LONG_STACKS = 20; -var ZONE_ECHO_LIMIT = 7; -var nativePromiseInstanceAndProto = (function () { - try { - // Be able to patch native async functions - return new Function("let F=async ()=>{},p=F();return [p,Object.getPrototypeOf(p),Promise.resolve(),F.constructor];")(); - } - catch (e) { - var P = _global.Promise; - return P ? - [P.resolve(), P.prototype, P.resolve()] : - []; - } -})(); -var resolvedNativePromise = nativePromiseInstanceAndProto[0]; -var nativePromiseProto = nativePromiseInstanceAndProto[1]; -var resolvedGlobalPromise = nativePromiseInstanceAndProto[2]; -var nativePromiseThen = nativePromiseProto && nativePromiseProto.then; -var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; -var AsyncFunction = nativePromiseInstanceAndProto[3]; -var patchGlobalPromise = !!resolvedGlobalPromise; -var stack_being_generated = false; -/* The default function used only for the very first promise in a promise chain. - As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks - emulated in this module. For indexedDB compatibility, this means that every method needs to - execute at least one promise before doing an indexedDB operation. Dexie will always call - db.ready().then() for every operation to make sure the indexedDB event is started in an - indexedDB-compatible emulated micro task loop. -*/ -var schedulePhysicalTick = resolvedGlobalPromise ? - function () { resolvedGlobalPromise.then(physicalTick); } - : - _global.setImmediate ? - // setImmediate supported. Those modern platforms also supports Function.bind(). - setImmediate.bind(null, physicalTick) : - _global.MutationObserver ? - // MutationObserver supported - function () { - var hiddenDiv = document.createElement("div"); - (new MutationObserver(function () { - physicalTick(); - hiddenDiv = null; - })).observe(hiddenDiv, { attributes: true }); - hiddenDiv.setAttribute('i', '1'); - } : - // No support for setImmediate or MutationObserver. No worry, setTimeout is only called - // once time. Every tick that follows will be our emulated micro tick. - // Could have uses setTimeout.bind(null, 0, physicalTick) if it wasnt for that FF13 and below has a bug - function () { setTimeout(physicalTick, 0); }; -// Configurable through Promise.scheduler. -// Don't export because it would be unsafe to let unknown -// code call it unless they do try..catch within their callback. -// This function can be retrieved through getter of Promise.scheduler though, -// but users must not do Promise.scheduler = myFuncThatThrowsException -var asap$1 = function (callback, args) { - microtickQueue.push([callback, args]); - if (needsNewPhysicalTick) { - schedulePhysicalTick(); - needsNewPhysicalTick = false; - } -}; -var isOutsideMicroTick = true; -var needsNewPhysicalTick = true; -var unhandledErrors = []; -var rejectingErrors = []; -var currentFulfiller = null; -var rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions -var globalPSD = { - id: 'global', - global: true, - ref: 0, - unhandleds: [], - onunhandled: globalError, - pgp: false, - env: {}, - finalize: function () { - this.unhandleds.forEach(function (uh) { - try { - globalError(uh[0], uh[1]); - } - catch (e) { } - }); - } -}; -var PSD = globalPSD; -var microtickQueue = []; // Callbacks to call in this or next physical tick. -var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick. -var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick. -function Promise(fn) { - if (typeof this !== 'object') - throw new TypeError('Promises must be constructed via new'); - this._listeners = []; - this.onuncatched = nop; // Deprecate in next major. Not needed. Better to use global error handler. - // A library may set `promise._lib = true;` after promise is created to make resolve() or reject() - // execute the microtask engine implicitely within the call to resolve() or reject(). - // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack - // only contains library code when calling resolve() or reject(). - // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from - // global scope (event handler, timer etc)! - this._lib = false; - // Current async scope - var psd = (this._PSD = PSD); - if (debug) { - this._stackHolder = getErrorWithStack(); - this._prev = null; - this._numPrev = 0; // Number of previous promises (for long stacks) - } - if (typeof fn !== 'function') { - if (fn !== INTERNAL) - throw new TypeError('Not a function'); - // Private constructor (INTERNAL, state, value). - // Used internally by Promise.resolve() and Promise.reject(). - this._state = arguments[1]; - this._value = arguments[2]; - if (this._state === false) - handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError(). - return; - } - this._state = null; // null (=pending), false (=rejected) or true (=resolved) - this._value = null; // error or result - ++psd.ref; // Refcounting current scope - executePromiseTask(this, fn); -} -// Prepare a property descriptor to put onto Promise.prototype.then -var thenProp = { - get: function () { - var psd = PSD, microTaskId = totalEchoes; - function then(onFulfilled, onRejected) { - var _this = this; - var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); - if (possibleAwait) - decrementExpectedAwaits(); - var rv = new Promise(function (resolve, reject) { - propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait), resolve, reject, psd)); - }); - debug && linkToPreviousPromise(rv, this); - return rv; - } - then.prototype = INTERNAL; // For idempotense, see setter below. - return then; - }, - // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then - // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor. - set: function (value) { - setProp(this, 'then', value && value.prototype === INTERNAL ? - thenProp : // Restore to original property descriptor. - { - get: function () { - return value; // Getter returning provided value (behaves like value is just changed) - }, - set: thenProp.set // Keep a setter that is prepared to restore original. - }); - } -}; -props(Promise.prototype, { - then: thenProp, - _then: function (onFulfilled, onRejected) { - // A little tinier version of then() that don't have to create a resulting promise. - propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); - }, - catch: function (onRejected) { - if (arguments.length === 1) - return this.then(null, onRejected); - // First argument is the Error type to catch - var type = arguments[0], handler = arguments[1]; - return typeof type === 'function' ? this.then(null, function (err) { - // Catching errors by its constructor type (similar to java / c++ / c#) - // Sample: promise.catch(TypeError, function (e) { ... }); - return err instanceof type ? handler(err) : PromiseReject(err); - }) - : this.then(null, function (err) { - // Catching errors by the error.name property. Makes sense for indexedDB where error type - // is always DOMError but where e.name tells the actual error type. - // Sample: promise.catch('ConstraintError', function (e) { ... }); - return err && err.name === type ? handler(err) : PromiseReject(err); - }); - }, - finally: function (onFinally) { - return this.then(function (value) { - onFinally(); - return value; - }, function (err) { - onFinally(); - return PromiseReject(err); - }); - }, - stack: { - get: function () { - if (this._stack) - return this._stack; - try { - stack_being_generated = true; - var stacks = getStack(this, [], MAX_LONG_STACKS); - var stack = stacks.join("\nFrom previous: "); - if (this._state !== null) - this._stack = stack; // Stack may be updated on reject. - return stack; - } - finally { - stack_being_generated = false; - } - } - }, - timeout: function (ms, msg) { - var _this = this; - return ms < Infinity ? - new Promise(function (resolve, reject) { - var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms); - _this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); - }) : this; - } -}); -if (typeof Symbol !== 'undefined' && Symbol.toStringTag) - setProp(Promise.prototype, Symbol.toStringTag, 'Promise'); -// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env. -// Environment globals snapshotted on leaving global zone -globalPSD.env = snapShot(); -function Listener(onFulfilled, onRejected, resolve, reject, zone) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.resolve = resolve; - this.reject = reject; - this.psd = zone; -} -// Promise Static Properties -props(Promise, { - all: function () { - var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like. - .map(onPossibleParallellAsync); // Handle parallell async/awaits - return new Promise(function (resolve, reject) { - if (values.length === 0) - resolve([]); - var remaining = values.length; - values.forEach(function (a, i) { return Promise.resolve(a).then(function (x) { - values[i] = x; - if (!--remaining) - resolve(values); - }, reject); }); - }); - }, - resolve: function (value) { - if (value instanceof Promise) - return value; - if (value && typeof value.then === 'function') - return new Promise(function (resolve, reject) { - value.then(resolve, reject); - }); - var rv = new Promise(INTERNAL, true, value); - linkToPreviousPromise(rv, currentFulfiller); - return rv; - }, - reject: PromiseReject, - race: function () { - var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); - return new Promise(function (resolve, reject) { - values.map(function (value) { return Promise.resolve(value).then(resolve, reject); }); - }); - }, - PSD: { - get: function () { return PSD; }, - set: function (value) { return PSD = value; } - }, - //totalEchoes: {get: ()=>totalEchoes}, - //task: {get: ()=>task}, - newPSD: newScope, - usePSD: usePSD, - scheduler: { - get: function () { return asap$1; }, - set: function (value) { asap$1 = value; } - }, - rejectionMapper: { - get: function () { return rejectionMapper; }, - set: function (value) { rejectionMapper = value; } // Map reject failures - }, - follow: function (fn, zoneProps) { - return new Promise(function (resolve, reject) { - return newScope(function (resolve, reject) { - var psd = PSD; - psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize() - psd.onunhandled = reject; // Triggered directly on unhandled promises of this library. - psd.finalize = callBoth(function () { - var _this = this; - // Unhandled standard or 3rd part promises are put in PSD.unhandleds and - // examined upon scope completion while unhandled rejections in this Promise - // will trigger directly through psd.onunhandled - run_at_end_of_this_or_next_physical_tick(function () { - _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]); - }); - }, psd.finalize); - fn(); - }, zoneProps, resolve, reject); - }); - } -}); -/** -* Take a potentially misbehaving resolver function and make sure -* onFulfilled and onRejected are only called once. -* -* Makes no guarantees about asynchrony. -*/ -function executePromiseTask(promise, fn) { - // Promise Resolution Procedure: - // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - try { - fn(function (value) { - if (promise._state !== null) - return; // Already settled - if (value === promise) - throw new TypeError('A promise cannot be resolved with itself.'); - var shouldExecuteTick = promise._lib && beginMicroTickScope(); - if (value && typeof value.then === 'function') { - executePromiseTask(promise, function (resolve, reject) { - value instanceof Promise ? - value._then(resolve, reject) : - value.then(resolve, reject); - }); - } - else { - promise._state = true; - promise._value = value; - propagateAllListeners(promise); - } - if (shouldExecuteTick) - endMicroTickScope(); - }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below - } - catch (ex) { - handleRejection(promise, ex); - } -} -function handleRejection(promise, reason) { - rejectingErrors.push(reason); - if (promise._state !== null) - return; - var shouldExecuteTick = promise._lib && beginMicroTickScope(); - reason = rejectionMapper(reason); - promise._state = false; - promise._value = reason; - debug && reason !== null && typeof reason === 'object' && !reason._promise && tryCatch(function () { - var origProp = getPropertyDescriptor(reason, "stack"); - reason._promise = promise; - setProp(reason, "stack", { - get: function () { - return stack_being_generated ? - origProp && (origProp.get ? - origProp.get.apply(reason) : - origProp.value) : - promise.stack; - } - }); - }); - // Add the failure to a list of possibly uncaught errors - addPossiblyUnhandledError(promise); - propagateAllListeners(promise); - if (shouldExecuteTick) - endMicroTickScope(); -} -function propagateAllListeners(promise) { - //debug && linkToPreviousPromise(promise); - var listeners = promise._listeners; - promise._listeners = []; - for (var i = 0, len = listeners.length; i < len; ++i) { - propagateToListener(promise, listeners[i]); - } - var psd = promise._PSD; - --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize(); - if (numScheduledCalls === 0) { - // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call, - // and that no deferreds where listening to this rejection or success. - // Since there is a risk that our stack can contain application code that may - // do stuff after this code is finished that may generate new calls, we cannot - // call finalizers here. - ++numScheduledCalls; - asap$1(function () { - if (--numScheduledCalls === 0) - finalizePhysicalTick(); // Will detect unhandled errors - }, []); - } -} -function propagateToListener(promise, listener) { - if (promise._state === null) { - promise._listeners.push(listener); - return; - } - var cb = promise._state ? listener.onFulfilled : listener.onRejected; - if (cb === null) { - // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch() - return (promise._state ? listener.resolve : listener.reject)(promise._value); - } - ++listener.psd.ref; - ++numScheduledCalls; - asap$1(callListener, [cb, promise, listener]); -} -function callListener(cb, promise, listener) { - try { - // Set static variable currentFulfiller to the promise that is being fullfilled, - // so that we connect the chain of promises (for long stacks support) - currentFulfiller = promise; - // Call callback and resolve our listener with it's return value. - var ret, value = promise._value; - if (promise._state) { - // cb is onResolved - ret = cb(value); - } - else { - // cb is onRejected - if (rejectingErrors.length) - rejectingErrors = []; - ret = cb(value); - if (rejectingErrors.indexOf(value) === -1) - markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise. - } - listener.resolve(ret); - } - catch (e) { - // Exception thrown in callback. Reject our listener. - listener.reject(e); - } - finally { - // Restore env and currentFulfiller. - currentFulfiller = null; - if (--numScheduledCalls === 0) - finalizePhysicalTick(); - --listener.psd.ref || listener.psd.finalize(); - } -} -function getStack(promise, stacks, limit) { - if (stacks.length === limit) - return stacks; - var stack = ""; - if (promise._state === false) { - var failure = promise._value, errorName, message; - if (failure != null) { - errorName = failure.name || "Error"; - message = failure.message || failure; - stack = prettyStack(failure, 0); - } - else { - errorName = failure; // If error is undefined or null, show that. - message = ""; - } - stacks.push(errorName + (message ? ": " + message : "") + stack); - } - if (debug) { - stack = prettyStack(promise._stackHolder, 2); - if (stack && stacks.indexOf(stack) === -1) - stacks.push(stack); - if (promise._prev) - getStack(promise._prev, stacks, limit); - } - return stacks; -} -function linkToPreviousPromise(promise, prev) { - // Support long stacks by linking to previous completed promise. - var numPrev = prev ? prev._numPrev + 1 : 0; - if (numPrev < LONG_STACKS_CLIP_LIMIT) { - promise._prev = prev; - promise._numPrev = numPrev; - } -} -/* The callback to schedule with setImmediate() or setTimeout(). - It runs a virtual microtick and executes any callback registered in microtickQueue. - */ -function physicalTick() { - beginMicroTickScope() && endMicroTickScope(); -} -function beginMicroTickScope() { - var wasRootExec = isOutsideMicroTick; - isOutsideMicroTick = false; - needsNewPhysicalTick = false; - return wasRootExec; -} -/* Executes micro-ticks without doing try..catch. - This can be possible because we only use this internally and - the registered functions are exception-safe (they do try..catch - internally before calling any external method). If registering - functions in the microtickQueue that are not exception-safe, this - would destroy the framework and make it instable. So we don't export - our asap method. -*/ -function endMicroTickScope() { - var callbacks, i, l; - do { - while (microtickQueue.length > 0) { - callbacks = microtickQueue; - microtickQueue = []; - l = callbacks.length; - for (i = 0; i < l; ++i) { - var item = callbacks[i]; - item[0].apply(null, item[1]); - } - } - } while (microtickQueue.length > 0); - isOutsideMicroTick = true; - needsNewPhysicalTick = true; -} -function finalizePhysicalTick() { - var unhandledErrs = unhandledErrors; - unhandledErrors = []; - unhandledErrs.forEach(function (p) { - p._PSD.onunhandled.call(null, p._value, p); - }); - var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list. - var i = finalizers.length; - while (i) - finalizers[--i](); -} -function run_at_end_of_this_or_next_physical_tick(fn) { - function finalizer() { - fn(); - tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); - } - tickFinalizers.push(finalizer); - ++numScheduledCalls; - asap$1(function () { - if (--numScheduledCalls === 0) - finalizePhysicalTick(); - }, []); -} -function addPossiblyUnhandledError(promise) { - // Only add to unhandledErrors if not already there. The first one to add to this list - // will be upon the first rejection so that the root cause (first promise in the - // rejection chain) is the one listed. - if (!unhandledErrors.some(function (p) { return p._value === promise._value; })) - unhandledErrors.push(promise); -} -function markErrorAsHandled(promise) { - // Called when a reject handled is actually being called. - // Search in unhandledErrors for any promise whos _value is this promise_value (list - // contains only rejected promises, and only one item per error) - var i = unhandledErrors.length; - while (i) - if (unhandledErrors[--i]._value === promise._value) { - // Found a promise that failed with this same error object pointer, - // Remove that since there is a listener that actually takes care of it. - unhandledErrors.splice(i, 1); - return; - } -} -function PromiseReject(reason) { - return new Promise(INTERNAL, false, reason); -} -function wrap(fn, errorCatcher) { - var psd = PSD; - return function () { - var wasRootExec = beginMicroTickScope(), outerScope = PSD; - try { - switchToZone(psd, true); - return fn.apply(this, arguments); - } - catch (e) { - errorCatcher && errorCatcher(e); - } - finally { - switchToZone(outerScope, false); - if (wasRootExec) - endMicroTickScope(); - } - }; -} -// -// variables used for native await support -// -var task = { awaits: 0, echoes: 0, id: 0 }; // The ongoing macro-task when using zone-echoing. -var taskCounter = 0; // ID counter for macro tasks. -var zoneStack = []; // Stack of left zones to restore asynchronically. -var zoneEchoes = 0; // zoneEchoes is a must in order to persist zones between native await expressions. -var totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then. -var zone_id_counter = 0; -function newScope(fn, props$$1, a1, a2) { - var parent = PSD, psd = Object.create(parent); - psd.parent = parent; - psd.ref = 0; - psd.global = false; - psd.id = ++zone_id_counter; - // Prepare for promise patching (done in usePSD): - var globalEnv = globalPSD.env; - psd.env = patchGlobalPromise ? { - Promise: Promise, - PromiseProp: { value: Promise, configurable: true, writable: true }, - all: Promise.all, - race: Promise.race, - resolve: Promise.resolve, - reject: Promise.reject, - nthen: getPatchedPromiseThen(globalEnv.nthen, psd), - gthen: getPatchedPromiseThen(globalEnv.gthen, psd) // global then - } : {}; - if (props$$1) - extend(psd, props$$1); - // unhandleds and onunhandled should not be specifically set here. - // Leave them on parent prototype. - // unhandleds.push(err) will push to parent's prototype - // onunhandled() will call parents onunhandled (with this scope's this-pointer though!) - ++parent.ref; - psd.finalize = function () { - --this.parent.ref || this.parent.finalize(); - }; - var rv = usePSD(psd, fn, a1, a2); - if (psd.ref === 0) - psd.finalize(); - return rv; -} -// Function to call if scopeFunc returns NativePromise -// Also for each NativePromise in the arguments to Promise.all() -function incrementExpectedAwaits() { - if (!task.id) - task.id = ++taskCounter; - ++task.awaits; - task.echoes += ZONE_ECHO_LIMIT; - return task.id; -} -// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called. -// Also call this when a native await calls then method on a promise. In that case, don't supply -// sourceTaskId because we already know it refers to current task. -function decrementExpectedAwaits(sourceTaskId) { - if (!task.awaits || (sourceTaskId && sourceTaskId !== task.id)) - return; - if (--task.awaits === 0) - task.id = 0; - task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0. -} -// Call from Promise.all() and Promise.race() -function onPossibleParallellAsync(possiblePromise) { - if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { - incrementExpectedAwaits(); - return possiblePromise.then(function (x) { - decrementExpectedAwaits(); - return x; - }, function (e) { - decrementExpectedAwaits(); - return rejection(e); - }); - } - return possiblePromise; -} -function zoneEnterEcho(targetZone) { - ++totalEchoes; - if (!task.echoes || --task.echoes === 0) { - task.echoes = task.id = 0; // Cancel zone echoing. - } - zoneStack.push(PSD); - switchToZone(targetZone, true); -} -function zoneLeaveEcho() { - var zone = zoneStack[zoneStack.length - 1]; - zoneStack.pop(); - switchToZone(zone, false); -} -function switchToZone(targetZone, bEnteringZone) { - var currentZone = PSD; - if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { - // Enter or leave zone asynchronically as well, so that tasks initiated during current tick - // will be surrounded by the zone when they are invoked. - enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); - } - if (targetZone === PSD) - return; - PSD = targetZone; // The actual zone switch occurs at this line. - // Snapshot on every leave from global zone. - if (currentZone === globalPSD) - globalPSD.env = snapShot(); - if (patchGlobalPromise) { - // Let's patch the global and native Promises (may be same or may be different) - var GlobalPromise = globalPSD.env.Promise; - // Swich environments (may be PSD-zone or the global zone. Both apply.) - var targetEnv = targetZone.env; - // Change Promise.prototype.then for native and global Promise (they MAY differ on polyfilled environments, but both can be accessed) - // Must be done on each zone change because the patched method contains targetZone in its closure. - nativePromiseProto.then = targetEnv.nthen; - GlobalPromise.prototype.then = targetEnv.gthen; - if (currentZone.global || targetZone.global) { - // Leaving or entering global zone. It's time to patch / restore global Promise. - // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular. - Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); - // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might - // not be accessing global.Promise but a local reference to it) - GlobalPromise.all = targetEnv.all; - GlobalPromise.race = targetEnv.race; - GlobalPromise.resolve = targetEnv.resolve; - GlobalPromise.reject = targetEnv.reject; - } - } -} -function snapShot() { - var GlobalPromise = _global.Promise; - return patchGlobalPromise ? { - Promise: GlobalPromise, - PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), - all: GlobalPromise.all, - race: GlobalPromise.race, - resolve: GlobalPromise.resolve, - reject: GlobalPromise.reject, - nthen: nativePromiseProto.then, - gthen: GlobalPromise.prototype.then - } : {}; -} -function usePSD(psd, fn, a1, a2, a3) { - var outerScope = PSD; - try { - switchToZone(psd, true); - return fn(a1, a2, a3); - } - finally { - switchToZone(outerScope, false); - } -} -function enqueueNativeMicroTask(job) { - // - // Precondition: nativePromiseThen !== undefined - // - nativePromiseThen.call(resolvedNativePromise, job); -} -function nativeAwaitCompatibleWrap(fn, zone, possibleAwait) { - return typeof fn !== 'function' ? fn : function () { - var outerZone = PSD; - if (possibleAwait) - incrementExpectedAwaits(); - switchToZone(zone, true); - try { - return fn.apply(this, arguments); - } - finally { - switchToZone(outerZone, false); - } - }; -} -function getPatchedPromiseThen(origThen, zone) { - return function (onResolved, onRejected) { - return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone, false), nativeAwaitCompatibleWrap(onRejected, zone, false)); - }; -} -var UNHANDLEDREJECTION = "unhandledrejection"; -function globalError(err, promise) { - var rv; - try { - rv = promise.onuncatched(err); - } - catch (e) { } - if (rv !== false) - try { - var event, eventData = { promise: promise, reason: err }; - if (_global.document && document.createEvent) { - event = document.createEvent('Event'); - event.initEvent(UNHANDLEDREJECTION, true, true); - extend(event, eventData); - } - else if (_global.CustomEvent) { - event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData }); - extend(event, eventData); - } - if (event && _global.dispatchEvent) { - dispatchEvent(event); - if (!_global.PromiseRejectionEvent && _global.onunhandledrejection) - // No native support for PromiseRejectionEvent but user has set window.onunhandledrejection. Manually call it. - try { - _global.onunhandledrejection(event); - } - catch (_) { } - } - if (!event.defaultPrevented) { - console.warn("Unhandled rejection: " + (err.stack || err)); - } - } - catch (e) { } -} -var rejection = Promise.reject; - -function Events(ctx) { - var evs = {}; - var rv = function (eventName, subscriber) { - if (subscriber) { - // Subscribe. If additional arguments than just the subscriber was provided, forward them as well. - var i = arguments.length, args = new Array(i - 1); - while (--i) - args[i - 1] = arguments[i]; - evs[eventName].subscribe.apply(null, args); - return ctx; - } - else if (typeof (eventName) === 'string') { - // Return interface allowing to fire or unsubscribe from event - return evs[eventName]; - } - }; - rv.addEventType = add; - for (var i = 1, l = arguments.length; i < l; ++i) { - add(arguments[i]); - } - return rv; - function add(eventName, chainFunction, defaultFunction) { - if (typeof eventName === 'object') - return addConfiguredEvents(eventName); - if (!chainFunction) - chainFunction = reverseStoppableEventChain; - if (!defaultFunction) - defaultFunction = nop; - var context = { - subscribers: [], - fire: defaultFunction, - subscribe: function (cb) { - if (context.subscribers.indexOf(cb) === -1) { - context.subscribers.push(cb); - context.fire = chainFunction(context.fire, cb); - } - }, - unsubscribe: function (cb) { - context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); - context.fire = context.subscribers.reduce(chainFunction, defaultFunction); - } - }; - evs[eventName] = rv[eventName] = context; - return context; - } - function addConfiguredEvents(cfg) { - // events(this, {reading: [functionChain, nop]}); - keys(cfg).forEach(function (eventName) { - var args = cfg[eventName]; - if (isArray(args)) { - add(eventName, cfg[eventName][0], cfg[eventName][1]); - } - else if (args === 'asap') { - // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack - // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten. - var context = add(eventName, mirror, function fire() { - // Optimazation-safe cloning of arguments into args. - var i = arguments.length, args = new Array(i); - while (i--) - args[i] = arguments[i]; - // All each subscriber: - context.subscribers.forEach(function (fn) { - asap(function fireEvent() { - fn.apply(null, args); - }); - }); - }); - } - else - throw new exceptions.InvalidArgument("Invalid event config"); - }); - } -} - -/* - * Dexie.js - a minimalistic wrapper for IndexedDB - * =============================================== - * - * Copyright (c) 2014-2017 David Fahlander - * - * Version 2.0.2, Thu Mar 01 2018 - * - * http://dexie.org - * - * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0 - * - */ -var DEXIE_VERSION = '2.0.2'; -var maxString = String.fromCharCode(65535); -var maxKey = (function () { try { - IDBKeyRange.only([[]]); - return [[]]; -} -catch (e) { - return maxString; -} })(); -var minKey = -Infinity; -var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; -var STRING_EXPECTED = "String expected."; -var connections = []; -var isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent); -var hasIEDeleteObjectStoreBug = isIEOrEdge; -var hangsOnDeleteLargeKeyRange = isIEOrEdge; -var dexieStackFrameFilter = function (frame) { return !/(dexie\.js|dexie\.min\.js)/.test(frame); }; -var dbNamesDB; // Global database for backing Dexie.getDatabaseNames() on browser without indexedDB.webkitGetDatabaseNames() -// Init debug -setDebug(debug, dexieStackFrameFilter); -function Dexie(dbName, options) { - /// Specify only if you wich to control which addons that should run on this instance - var deps = Dexie.dependencies; - var opts = extend({ - // Default Options - addons: Dexie.addons, - autoOpen: true, - indexedDB: deps.indexedDB, - IDBKeyRange: deps.IDBKeyRange // Backend IDBKeyRange api. Default to browser env. - }, options); - var addons = opts.addons, autoOpen = opts.autoOpen, indexedDB = opts.indexedDB, IDBKeyRange = opts.IDBKeyRange; - var globalSchema = this._dbSchema = {}; - var versions = []; - var dbStoreNames = []; - var allTables = {}; - /// - var idbdb = null; // Instance of IDBDatabase - var dbOpenError = null; - var isBeingOpened = false; - var onReadyBeingFired = null; - var openComplete = false; - var READONLY = "readonly", READWRITE = "readwrite"; - var db = this; - var dbReadyResolve, dbReadyPromise = new Promise(function (resolve) { - dbReadyResolve = resolve; - }), cancelOpen, openCanceller = new Promise(function (_, reject) { - cancelOpen = reject; - }); - var autoSchema = true; - var hasNativeGetDatabaseNames = !!getNativeGetDatabaseNamesFn(indexedDB), hasGetAll; - function init() { - // Default subscribers to "versionchange" and "blocked". - // Can be overridden by custom handlers. If custom handlers return false, these default - // behaviours will be prevented. - db.on("versionchange", function (ev) { - // Default behavior for versionchange event is to close database connection. - // Caller can override this behavior by doing db.on("versionchange", function(){ return false; }); - // Let's not block the other window from making it's delete() or open() call. - // NOTE! This event is never fired in IE,Edge or Safari. - if (ev.newVersion > 0) - console.warn("Another connection wants to upgrade database '" + db.name + "'. Closing db now to resume the upgrade."); - else - console.warn("Another connection wants to delete database '" + db.name + "'. Closing db now to resume the delete request."); - db.close(); - // In many web applications, it would be recommended to force window.reload() - // when this event occurs. To do that, subscribe to the versionchange event - // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion) - // The reason for this is that your current web app obviously has old schema code that needs - // to be updated. Another window got a newer version of the app and needs to upgrade DB but - // your window is blocking it unless we close it here. - }); - db.on("blocked", function (ev) { - if (!ev.newVersion || ev.newVersion < ev.oldVersion) - console.warn("Dexie.delete('" + db.name + "') was blocked"); - else - console.warn("Upgrade '" + db.name + "' blocked by other connection holding version " + ev.oldVersion / 10); - }); - } - // - // - // - // ------------------------- Versioning Framework--------------------------- - // - // - // - this.version = function (versionNumber) { - /// - /// - if (idbdb || isBeingOpened) - throw new exceptions.Schema("Cannot add version when database is open"); - this.verno = Math.max(this.verno, versionNumber); - var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0]; - if (versionInstance) - return versionInstance; - versionInstance = new Version(versionNumber); - versions.push(versionInstance); - versions.sort(lowerVersionFirst); - // Disable autoschema mode, as at least one version is specified. - autoSchema = false; - return versionInstance; - }; - function Version(versionNumber) { - this._cfg = { - version: versionNumber, - storesSource: null, - dbschema: {}, - tables: {}, - contentUpgrade: null - }; - this.stores({}); // Derive earlier schemas by default. - } - extend(Version.prototype, { - stores: function (stores) { - /// - /// Defines the schema for a particular version - /// - /// - /// Example:
- /// {users: "id++,first,last,&username,*email",
- /// passwords: "id++,&username"}
- ///
- /// Syntax: {Table: "[primaryKey][++],[&][*]index1,[&][*]index2,..."}

- /// Special characters:
- /// "&" means unique key,
- /// "*" means value is multiEntry,
- /// "++" means auto-increment and only applicable for primary key
- /// - this._cfg.storesSource = this._cfg.storesSource ? extend(this._cfg.storesSource, stores) : stores; - // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax. - var storesSpec = {}; - versions.forEach(function (version) { - extend(storesSpec, version._cfg.storesSource); - }); - var dbschema = (this._cfg.dbschema = {}); - this._parseStoresSpec(storesSpec, dbschema); - // Update the latest schema to this version - // Update API - globalSchema = db._dbSchema = dbschema; - removeTablesApi([allTables, db, Transaction.prototype]); // Keep Transaction.prototype even though it should be depr. - setApiOnPlace([allTables, db, Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); - dbStoreNames = keys(dbschema); - return this; - }, - upgrade: function (upgradeFunction) { - /// Function that performs upgrading actions. - var self = this; - this._cfg.contentUpgrade = upgradeFunction; - return this; - }, - _parseStoresSpec: function (stores, outSchema) { - keys(stores).forEach(function (tableName) { - if (stores[tableName] !== null) { - var instanceTemplate = {}; - var indexes = parseIndexSyntax(stores[tableName]); - var primKey = indexes.shift(); - if (primKey.multi) - throw new exceptions.Schema("Primary key cannot be multi-valued"); - if (primKey.keyPath) - setByKeyPath(instanceTemplate, primKey.keyPath, primKey.auto ? 0 : primKey.keyPath); - indexes.forEach(function (idx) { - if (idx.auto) - throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); - if (!idx.keyPath) - throw new exceptions.Schema("Index must have a name and cannot be an empty string"); - setByKeyPath(instanceTemplate, idx.keyPath, idx.compound ? idx.keyPath.map(function () { return ""; }) : ""); - }); - outSchema[tableName] = new TableSchema(tableName, primKey, indexes, instanceTemplate); - } - }); - } - }); - function runUpgraders(oldVersion, idbtrans, reject) { - var trans = db._createTransaction(READWRITE, dbStoreNames, globalSchema); - trans.create(idbtrans); - trans._completion.catch(reject); - var rejectTransaction = trans._reject.bind(trans); - newScope(function () { - PSD.trans = trans; - if (oldVersion === 0) { - // Create tables: - keys(globalSchema).forEach(function (tableName) { - createTable(idbtrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); - }); - Promise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction); - } - else - updateTablesAndIndexes(oldVersion, trans, idbtrans).catch(rejectTransaction); - }); - } - function updateTablesAndIndexes(oldVersion, trans, idbtrans) { - // Upgrade version to version, step-by-step from oldest to newest version. - // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version) - var queue = []; - var oldVersionStruct = versions.filter(function (version) { return version._cfg.version === oldVersion; })[0]; - if (!oldVersionStruct) - throw new exceptions.Upgrade("Dexie specification of currently installed DB version is missing"); - globalSchema = db._dbSchema = oldVersionStruct._cfg.dbschema; - var anyContentUpgraderHasRun = false; - var versToRun = versions.filter(function (v) { return v._cfg.version > oldVersion; }); - versToRun.forEach(function (version) { - /// - queue.push(function () { - var oldSchema = globalSchema; - var newSchema = version._cfg.dbschema; - adjustToExistingIndexNames(oldSchema, idbtrans); - adjustToExistingIndexNames(newSchema, idbtrans); - globalSchema = db._dbSchema = newSchema; - var diff = getSchemaDiff(oldSchema, newSchema); - // Add tables - diff.add.forEach(function (tuple) { - createTable(idbtrans, tuple[0], tuple[1].primKey, tuple[1].indexes); - }); - // Change tables - diff.change.forEach(function (change) { - if (change.recreate) { - throw new exceptions.Upgrade("Not yet support for changing primary key"); - } - else { - var store = idbtrans.objectStore(change.name); - // Add indexes - change.add.forEach(function (idx) { - addIndex(store, idx); - }); - // Update indexes - change.change.forEach(function (idx) { - store.deleteIndex(idx.name); - addIndex(store, idx); - }); - // Delete indexes - change.del.forEach(function (idxName) { - store.deleteIndex(idxName); - }); - } - }); - if (version._cfg.contentUpgrade) { - anyContentUpgraderHasRun = true; - return Promise.follow(function () { - version._cfg.contentUpgrade(trans); - }); - } - }); - queue.push(function (idbtrans) { - if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) { - var newSchema = version._cfg.dbschema; - // Delete old tables - deleteRemovedTables(newSchema, idbtrans); - } - }); - }); - // Now, create a queue execution engine - function runQueue() { - return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : - Promise.resolve(); - } - return runQueue().then(function () { - createMissingTables(globalSchema, idbtrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version) - }); - } - function getSchemaDiff(oldSchema, newSchema) { - var diff = { - del: [], - add: [], - change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs} - }; - for (var table in oldSchema) { - if (!newSchema[table]) - diff.del.push(table); - } - for (table in newSchema) { - var oldDef = oldSchema[table], newDef = newSchema[table]; - if (!oldDef) { - diff.add.push([table, newDef]); - } - else { - var change = { - name: table, - def: newDef, - recreate: false, - del: [], - add: [], - change: [] - }; - if (oldDef.primKey.src !== newDef.primKey.src) { - // Primary key has changed. Remove and re-add table. - change.recreate = true; - diff.change.push(change); - } - else { - // Same primary key. Just find out what differs: - var oldIndexes = oldDef.idxByName; - var newIndexes = newDef.idxByName; - for (var idxName in oldIndexes) { - if (!newIndexes[idxName]) - change.del.push(idxName); - } - for (idxName in newIndexes) { - var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; - if (!oldIdx) - change.add.push(newIdx); - else if (oldIdx.src !== newIdx.src) - change.change.push(newIdx); - } - if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { - diff.change.push(change); - } - } - } - } - return diff; - } - function createTable(idbtrans, tableName, primKey, indexes) { - /// - var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : { autoIncrement: primKey.auto }); - indexes.forEach(function (idx) { addIndex(store, idx); }); - return store; - } - function createMissingTables(newSchema, idbtrans) { - keys(newSchema).forEach(function (tableName) { - if (!idbtrans.db.objectStoreNames.contains(tableName)) { - createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); - } - }); - } - function deleteRemovedTables(newSchema, idbtrans) { - for (var i = 0; i < idbtrans.db.objectStoreNames.length; ++i) { - var storeName = idbtrans.db.objectStoreNames[i]; - if (newSchema[storeName] == null) { - idbtrans.db.deleteObjectStore(storeName); - } - } - } - function addIndex(store, idx) { - store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); - } - // - // - // Dexie Protected API - // - // - this._allTables = allTables; - this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { - return new Transaction(mode, storeNames, dbschema, parentTransaction); - }; - /* Generate a temporary transaction when db operations are done outside a transaction scope. - */ - function tempTransaction(mode, storeNames, fn) { - if (!openComplete && (!PSD.letThrough)) { - if (!isBeingOpened) { - if (!autoOpen) - return rejection(new exceptions.DatabaseClosed()); - db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway. - } - return dbReadyPromise.then(function () { return tempTransaction(mode, storeNames, fn); }); - } - else { - var trans = db._createTransaction(mode, storeNames, globalSchema); - try { - trans.create(); - } - catch (ex) { - return rejection(ex); - } - return trans._promise(mode, function (resolve, reject) { - return newScope(function () { - PSD.trans = trans; - return fn(resolve, reject, trans); - }); - }).then(function (result) { - // Instead of resolving value directly, wait with resolving it until transaction has completed. - // Otherwise the data would not be in the DB if requesting it in the then() operation. - // Specifically, to ensure that the following expression will work: - // - // db.friends.put({name: "Arne"}).then(function () { - // db.friends.where("name").equals("Arne").count(function(count) { - // assert (count === 1); - // }); - // }); - // - return trans._completion.then(function () { return result; }); - }); /*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major. - trans._reject(err); - return rejection(err); - });*/ - } - } - this._whenReady = function (fn) { - return openComplete || PSD.letThrough ? fn() : new Promise(function (resolve, reject) { - if (!isBeingOpened) { - if (!autoOpen) { - reject(new exceptions.DatabaseClosed()); - return; - } - db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway. - } - dbReadyPromise.then(resolve, reject); - }).then(fn); - }; - // - // - // - // - // Dexie API - // - // - // - this.verno = 0; - this.open = function () { - if (isBeingOpened || idbdb) - return dbReadyPromise.then(function () { return dbOpenError ? rejection(dbOpenError) : db; }); - debug && (openCanceller._stackHolder = getErrorWithStack()); // Let stacks point to when open() was called rather than where new Dexie() was called. - isBeingOpened = true; - dbOpenError = null; - openComplete = false; - // Function pointers to call when the core opening process completes. - var resolveDbReady = dbReadyResolve, - // upgradeTransaction to abort on failure. - upgradeTransaction = null; - return Promise.race([openCanceller, new Promise(function (resolve, reject) { - // Multiply db.verno with 10 will be needed to workaround upgrading bug in IE: - // IE fails when deleting objectStore after reading from it. - // A future version of Dexie.js will stopover an intermediate version to workaround this. - // At that point, we want to be backward compatible. Could have been multiplied with 2, but by using 10, it is easier to map the number to the real version number. - // If no API, throw! - if (!indexedDB) - throw new exceptions.MissingAPI("indexedDB API not found. If using IE10+, make sure to run your code on a server URL " + - "(not locally). If using old Safari versions, make sure to include indexedDB polyfill."); - var req = autoSchema ? indexedDB.open(dbName) : indexedDB.open(dbName, Math.round(db.verno * 10)); - if (!req) - throw new exceptions.MissingAPI("IndexedDB API not available"); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134 - req.onerror = eventRejectHandler(reject); - req.onblocked = wrap(fireOnBlocked); - req.onupgradeneeded = wrap(function (e) { - upgradeTransaction = req.transaction; - if (autoSchema && !db._allowEmptyDB) { - // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases. - // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we - // do not create a new database by accident here. - req.onerror = preventDefault; // Prohibit onabort error from firing before we're done! - upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.) - // Close database and delete it. - req.result.close(); - var delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here! - delreq.onsuccess = delreq.onerror = wrap(function () { - reject(new exceptions.NoSuchDatabase("Database " + dbName + " doesnt exist")); - }); - } - else { - upgradeTransaction.onerror = eventRejectHandler(reject); - var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix. - runUpgraders(oldVer / 10, upgradeTransaction, reject, req); - } - }, reject); - req.onsuccess = wrap(function () { - // Core opening procedure complete. Now let's just record some stuff. - upgradeTransaction = null; - idbdb = req.result; - connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari. - if (autoSchema) - readGlobalSchema(); - else if (idbdb.objectStoreNames.length > 0) { - try { - adjustToExistingIndexNames(globalSchema, idbdb.transaction(safariMultiStoreFix(idbdb.objectStoreNames), READONLY)); - } - catch (e) { - // Safari may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120. - } - } - idbdb.onversionchange = wrap(function (ev) { - db._vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari) - db.on("versionchange").fire(ev); - }); - if (!hasNativeGetDatabaseNames && dbName !== '__dbnames') { - dbNamesDB.dbnames.put({ name: dbName }).catch(nop); - } - resolve(); - }, reject); - })]).then(function () { - // Before finally resolving the dbReadyPromise and this promise, - // call and await all on('ready') subscribers: - // Dexie.vip() makes subscribers able to use the database while being opened. - // This is a must since these subscribers take part of the opening procedure. - onReadyBeingFired = []; - return Promise.resolve(Dexie.vip(db.on.ready.fire)).then(function fireRemainders() { - if (onReadyBeingFired.length > 0) { - // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed. - var remainders = onReadyBeingFired.reduce(promisableChain, nop); - onReadyBeingFired = []; - return Promise.resolve(Dexie.vip(remainders)).then(fireRemainders); - } - }); - }).finally(function () { - onReadyBeingFired = null; - }).then(function () { - // Resolve the db.open() with the db instance. - isBeingOpened = false; - return db; - }).catch(function (err) { - try { - // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit. - upgradeTransaction && upgradeTransaction.abort(); - } - catch (e) { } - isBeingOpened = false; // Set before calling db.close() so that it doesnt reject openCanceller again (leads to unhandled rejection event). - db.close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh. - // A call to db.close() may have made on-ready subscribers fail. Use dbOpenError if set, since err could be a follow-up error on that. - dbOpenError = err; // Record the error. It will be used to reject further promises of db operations. - return rejection(dbOpenError); - }).finally(function () { - openComplete = true; - resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters. - }); - }; - this.close = function () { - var idx = connections.indexOf(db); - if (idx >= 0) - connections.splice(idx, 1); - if (idbdb) { - try { - idbdb.close(); - } - catch (e) { } - idbdb = null; - } - autoOpen = false; - dbOpenError = new exceptions.DatabaseClosed(); - if (isBeingOpened) - cancelOpen(dbOpenError); - // Reset dbReadyPromise promise: - dbReadyPromise = new Promise(function (resolve) { - dbReadyResolve = resolve; - }); - openCanceller = new Promise(function (_, reject) { - cancelOpen = reject; - }); - }; - this.delete = function () { - var hasArguments = arguments.length > 0; - return new Promise(function (resolve, reject) { - if (hasArguments) - throw new exceptions.InvalidArgument("Arguments not allowed in db.delete()"); - if (isBeingOpened) { - dbReadyPromise.then(doDelete); - } - else { - doDelete(); - } - function doDelete() { - db.close(); - var req = indexedDB.deleteDatabase(dbName); - req.onsuccess = wrap(function () { - if (!hasNativeGetDatabaseNames) { - dbNamesDB.dbnames.delete(dbName).catch(nop); - } - resolve(); - }); - req.onerror = eventRejectHandler(reject); - req.onblocked = fireOnBlocked; - } - }); - }; - this.backendDB = function () { - return idbdb; - }; - this.isOpen = function () { - return idbdb !== null; - }; - this.hasBeenClosed = function () { - return dbOpenError && (dbOpenError instanceof exceptions.DatabaseClosed); - }; - this.hasFailed = function () { - return dbOpenError !== null; - }; - this.dynamicallyOpened = function () { - return autoSchema; - }; - // - // Properties - // - this.name = dbName; - // db.tables - an array of all Table instances. - props(this, { - tables: { - get: function () { - /// - return keys(allTables).map(function (name) { return allTables[name]; }); - } - } - }); - // - // Events - // - this.on = Events(this, "populate", "blocked", "versionchange", { ready: [promisableChain, nop] }); - this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) { - return function (subscriber, bSticky) { - Dexie.vip(function () { - if (openComplete) { - // Database already open. Call subscriber asap. - if (!dbOpenError) - Promise.resolve().then(subscriber); - // bSticky: Also subscribe to future open sucesses (after close / reopen) - if (bSticky) - subscribe(subscriber); - } - else if (onReadyBeingFired) { - // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected - onReadyBeingFired.push(subscriber); - if (bSticky) - subscribe(subscriber); - } - else { - // Database not yet open. Subscribe to it. - subscribe(subscriber); - // If bSticky is falsy, make sure to unsubscribe subscriber when fired once. - if (!bSticky) - subscribe(function unsubscribe() { - db.on.ready.unsubscribe(subscriber); - db.on.ready.unsubscribe(unsubscribe); - }); - } - }); - }; - }); - this.transaction = function () { - /// - /// - /// - /// "r" for readonly, or "rw" for readwrite - /// Table instance, Array of Table instances, String or String Array of object stores to include in the transaction - /// Function to execute with transaction - var args = extractTransactionArgs.apply(this, arguments); - return this._transaction.apply(this, args); - }; - function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { - // Let table arguments be all arguments between mode and last argument. - var i = arguments.length; - if (i < 2) - throw new exceptions.InvalidArgument("Too few arguments"); - // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments) - // and clone arguments except the first one into local var 'args'. - var args = new Array(i - 1); - while (--i) - args[i - 1] = arguments[i]; - // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments. - scopeFunc = args.pop(); - var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays. - return [mode, tables, scopeFunc]; - } - this._transaction = function (mode, tables, scopeFunc) { - var parentTransaction = PSD.trans; - // Check if parent transactions is bound to this db instance, and if caller wants to reuse it - if (!parentTransaction || parentTransaction.db !== db || mode.indexOf('!') !== -1) - parentTransaction = null; - var onlyIfCompatible = mode.indexOf('?') !== -1; - mode = mode.replace('!', '').replace('?', ''); // Ok. Will change arguments[0] as well but we wont touch arguments henceforth. - try { - // - // Get storeNames from arguments. Either through given table instances, or through given table names. - // - var storeNames = tables.map(function (table) { - var storeName = table instanceof Table ? table.name : table; - if (typeof storeName !== 'string') - throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); - return storeName; - }); - // - // Resolve mode. Allow shortcuts "r" and "rw". - // - if (mode == "r" || mode == READONLY) - mode = READONLY; - else if (mode == "rw" || mode == READWRITE) - mode = READWRITE; - else - throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); - if (parentTransaction) { - // Basic checks - if (parentTransaction.mode === READONLY && mode === READWRITE) { - if (onlyIfCompatible) { - // Spawn new transaction instead. - parentTransaction = null; - } - else - throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); - } - if (parentTransaction) { - storeNames.forEach(function (storeName) { - if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { - if (onlyIfCompatible) { - // Spawn new transaction instead. - parentTransaction = null; - } - else - throw new exceptions.SubTransaction("Table " + storeName + - " not included in parent transaction."); - } - }); - } - if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { - // '?' mode should not keep using an inactive transaction. - parentTransaction = null; - } - } - } - catch (e) { - return parentTransaction ? - parentTransaction._promise(null, function (_, reject) { reject(e); }) : - rejection(e); - } - // If this is a sub-transaction, lock the parent and then launch the sub-transaction. - return (parentTransaction ? - parentTransaction._promise(mode, enterTransactionScope, "lock") : - PSD.trans ? - // no parent transaction despite PSD.trans exists. Make sure also - // that the zone we create is not a sub-zone of current, because - // Promise.follow() should not wait for it if so. - usePSD(PSD.transless, function () { return db._whenReady(enterTransactionScope); }) : - db._whenReady(enterTransactionScope)); - function enterTransactionScope() { - return Promise.resolve().then(function () { - // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction(). - var transless = PSD.transless || PSD; - // Our transaction. - //return new Promise((resolve, reject) => { - var trans = db._createTransaction(mode, storeNames, globalSchema, parentTransaction); - // Let the transaction instance be part of a Promise-specific data (PSD) value. - var zoneProps = { - trans: trans, - transless: transless - }; - if (parentTransaction) { - // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing) - trans.idbtrans = parentTransaction.idbtrans; - } - else { - trans.create(); // Create the backend transaction so that complete() or error() will trigger even if no operation is made upon it. - } - // Support for native async await. - if (scopeFunc.constructor === AsyncFunction) { - incrementExpectedAwaits(); - } - var returnValue; - var promiseFollowed = Promise.follow(function () { - // Finally, call the scope function with our table and transaction arguments. - returnValue = scopeFunc.call(trans, trans); - if (returnValue) { - if (returnValue.constructor === NativePromise) { - var decrementor = decrementExpectedAwaits.bind(null, null); - returnValue.then(decrementor, decrementor); - } - else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { - // scopeFunc returned an iterator with throw-support. Handle yield as await. - returnValue = awaitIterator(returnValue); - } - } - }, zoneProps); - return (returnValue && typeof returnValue.then === 'function' ? - // Promise returned. User uses promise-style transactions. - Promise.resolve(returnValue).then(function (x) { return trans.active ? - x // Transaction still active. Continue. - : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); }) - // No promise returned. Wait for all outstanding promises before continuing. - : promiseFollowed.then(function () { return returnValue; })).then(function (x) { - // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion: - if (parentTransaction) - trans._resolve(); - // wait for trans._completion - // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves) - return trans._completion.then(function () { return x; }); - }).catch(function (e) { - trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc! - return rejection(e); - }); - }); - } - }; - this.table = function (tableName) { - /// - if (!hasOwn(allTables, tableName)) { - throw new exceptions.InvalidTable("Table " + tableName + " does not exist"); - } - return allTables[tableName]; - }; - // - // - // - // Table Class - // - // - // - function Table(name, tableSchema, optionalTrans) { - /// - this.name = name; - this.schema = tableSchema; - this._tx = optionalTrans; - this.hook = allTables[name] ? allTables[name].hook : Events(null, { - "creating": [hookCreatingChain, nop], - "reading": [pureFunctionChain, mirror], - "updating": [hookUpdatingChain, nop], - "deleting": [hookDeletingChain, nop] - }); - } - function BulkErrorHandlerCatchAll(errorList, done, supportHooks) { - return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(function (e) { - errorList.push(e); - done && done(); - }); - } - function bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook) { - // If hasDeleteHook, keysOrTuples must be an array of tuples: [[key1, value2],[key2,value2],...], - // else keysOrTuples must be just an array of keys: [key1, key2, ...]. - return new Promise(function (resolve, reject) { - var len = keysOrTuples.length, lastItem = len - 1; - if (len === 0) - return resolve(); - if (!hasDeleteHook) { - for (var i = 0; i < len; ++i) { - var req = idbstore.delete(keysOrTuples[i]); - req.onerror = eventRejectHandler(reject); - if (i === lastItem) - req.onsuccess = wrap(function () { return resolve(); }); - } - } - else { - var hookCtx, errorHandler = hookedEventRejectHandler(reject), successHandler = hookedEventSuccessHandler(null); - tryCatch(function () { - for (var i = 0; i < len; ++i) { - hookCtx = { onsuccess: null, onerror: null }; - var tuple = keysOrTuples[i]; - deletingHook.call(hookCtx, tuple[0], tuple[1], trans); - var req = idbstore.delete(tuple[0]); - req._hookCtx = hookCtx; - req.onerror = errorHandler; - if (i === lastItem) - req.onsuccess = hookedEventSuccessHandler(resolve); - else - req.onsuccess = successHandler; - } - }, function (err) { - hookCtx.onerror && hookCtx.onerror(err); - throw err; - }); - } - }); - } - props(Table.prototype, { - // - // Table Protected Methods - // - _trans: function getTransaction(mode, fn, writeLocked) { - var trans = this._tx || PSD.trans; - return trans && trans.db === db ? - trans === PSD.trans ? - trans._promise(mode, fn, writeLocked) : - newScope(function () { return trans._promise(mode, fn, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) : - tempTransaction(mode, [this.name], fn); - }, - _idbstore: function getIDBObjectStore(mode, fn, writeLocked) { - var tableName = this.name; - function supplyIdbStore(resolve, reject, trans) { - if (trans.storeNames.indexOf(tableName) === -1) - throw new exceptions.NotFound("Table" + tableName + " not part of transaction"); - return fn(resolve, reject, trans.idbtrans.objectStore(tableName), trans); - } - return this._trans(mode, supplyIdbStore, writeLocked); - }, - // - // Table Public Methods - // - get: function (keyOrCrit, cb) { - if (keyOrCrit && keyOrCrit.constructor === Object) - return this.where(keyOrCrit).first(cb); - var self = this; - return this._idbstore(READONLY, function (resolve, reject, idbstore) { - var req = idbstore.get(keyOrCrit); - req.onerror = eventRejectHandler(reject); - req.onsuccess = wrap(function () { - resolve(self.hook.reading.fire(req.result)); - }, reject); - }).then(cb); - }, - where: function (indexOrCrit) { - if (typeof indexOrCrit === 'string') - return new WhereClause(this, indexOrCrit); - if (isArray(indexOrCrit)) - return new WhereClause(this, "[" + indexOrCrit.join('+') + "]"); - // indexOrCrit is an object map of {[keyPath]:value} - var keyPaths = keys(indexOrCrit); - if (keyPaths.length === 1) - // Only one critera. This was the easy case: - return this - .where(keyPaths[0]) - .equals(indexOrCrit[keyPaths[0]]); - // Multiple criterias. - // Let's try finding a compound index that matches all keyPaths in - // arbritary order: - var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) { - return ix.compound && - keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; }) && - ix.keyPath.every(function (keyPath) { return keyPaths.indexOf(keyPath) >= 0; }); - })[0]; - if (compoundIndex && maxKey !== maxString) - // Cool! We found such compound index - // and this browser supports compound indexes (maxKey !== maxString)! - return this - .where(compoundIndex.name) - .equals(compoundIndex.keyPath.map(function (kp) { return indexOrCrit[kp]; })); - if (!compoundIndex) - console.warn("The query " + JSON.stringify(indexOrCrit) + " on " + this.name + " would benefit of a " + - ("compound index [" + keyPaths.join('+') + "]")); - // Ok, now let's fallback to finding at least one matching index - // and filter the rest. - var idxByName = this.schema.idxByName; - var simpleIndex = keyPaths.reduce(function (r, keyPath) { return [ - r[0] || idxByName[keyPath], - r[0] || !idxByName[keyPath] ? - combine(r[1], function (x) { return '' + getByKeyPath(x, keyPath) == - '' + indexOrCrit[keyPath]; }) - : r[1] - ]; }, [null, null]); - var idx = simpleIndex[0]; - return idx ? - this.where(idx.name).equals(indexOrCrit[idx.keyPath]) - .filter(simpleIndex[1]) : - compoundIndex ? - this.filter(simpleIndex[1]) : // Has compound but browser bad. Allow filter. - this.where(keyPaths).equals(''); // No index at all. Fail lazily. - }, - count: function (cb) { - return this.toCollection().count(cb); - }, - offset: function (offset) { - return this.toCollection().offset(offset); - }, - limit: function (numRows) { - return this.toCollection().limit(numRows); - }, - reverse: function () { - return this.toCollection().reverse(); - }, - filter: function (filterFunction) { - return this.toCollection().and(filterFunction); - }, - each: function (fn) { - return this.toCollection().each(fn); - }, - toArray: function (cb) { - return this.toCollection().toArray(cb); - }, - orderBy: function (index) { - return new Collection(new WhereClause(this, isArray(index) ? - "[" + index.join('+') + "]" : - index)); - }, - toCollection: function () { - return new Collection(new WhereClause(this)); - }, - mapToClass: function (constructor, structure) { - /// - /// Map table to a javascript constructor function. Objects returned from the database will be instances of this class, making - /// it possible to the instanceOf operator as well as extending the class using constructor.prototype.method = function(){...}. - /// - /// Constructor function representing the class. - /// Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also - /// know what type each member has. Example: {name: String, emailAddresses: [String], password} - this.schema.mappedClass = constructor; - var instanceTemplate = Object.create(constructor.prototype); - if (structure) { - // structure and instanceTemplate is for IDE code competion only while constructor.prototype is for actual inheritance. - applyStructure(instanceTemplate, structure); - } - this.schema.instanceTemplate = instanceTemplate; - // Now, subscribe to the when("reading") event to make all objects that come out from this table inherit from given class - // no matter which method to use for reading (Table.get() or Table.where(...)... ) - var readHook = function (obj) { - if (!obj) - return obj; // No valid object. (Value is null). Return as is. - // Create a new object that derives from constructor: - var res = Object.create(constructor.prototype); - // Clone members: - for (var m in obj) - if (hasOwn(obj, m)) - try { - res[m] = obj[m]; - } - catch (_) { } - return res; - }; - if (this.schema.readHook) { - this.hook.reading.unsubscribe(this.schema.readHook); - } - this.schema.readHook = readHook; - this.hook("reading", readHook); - return constructor; - }, - defineClass: function (structure) { - /// - /// Define all members of the class that represents the table. This will help code completion of when objects are read from the database - /// as well as making it possible to extend the prototype of the returned constructor function. - /// - /// Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also - /// know what type each member has. Example: {name: String, emailAddresses: [String], properties: {shoeSize: Number}} - return this.mapToClass(Dexie.defineClass(structure), structure); - }, - bulkDelete: function (keys$$1) { - if (this.hook.deleting.fire === nop) { - return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) { - resolve(bulkDelete(idbstore, trans, keys$$1, false, nop)); - }); - } - else { - return this - .where(':id') - .anyOf(keys$$1) - .delete() - .then(function () { }); // Resolve with undefined. - } - }, - bulkPut: function (objects, keys$$1) { - var _this = this; - return this._idbstore(READWRITE, function (resolve, reject, idbstore) { - if (!idbstore.keyPath && !_this.schema.primKey.auto && !keys$$1) - throw new exceptions.InvalidArgument("bulkPut() with non-inbound keys requires keys array in second argument"); - if (idbstore.keyPath && keys$$1) - throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); - if (keys$$1 && keys$$1.length !== objects.length) - throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); - if (objects.length === 0) - return resolve(); // Caller provided empty list. - var done = function (result) { - if (errorList.length === 0) - resolve(result); - else - reject(new BulkError(_this.name + ".bulkPut(): " + errorList.length + " of " + numObjs + " operations failed", errorList)); - }; - var req, errorList = [], errorHandler, numObjs = objects.length, table = _this; - if (_this.hook.creating.fire === nop && _this.hook.updating.fire === nop) { - // - // Standard Bulk (no 'creating' or 'updating' hooks to care about) - // - errorHandler = BulkErrorHandlerCatchAll(errorList); - for (var i = 0, l = objects.length; i < l; ++i) { - req = keys$$1 ? idbstore.put(objects[i], keys$$1[i]) : idbstore.put(objects[i]); - req.onerror = errorHandler; - } - // Only need to catch success or error on the last operation - // according to the IDB spec. - req.onerror = BulkErrorHandlerCatchAll(errorList, done); - req.onsuccess = eventSuccessHandler(done); - } - else { - var effectiveKeys = keys$$1 || idbstore.keyPath && objects.map(function (o) { return getByKeyPath(o, idbstore.keyPath); }); - // Generate map of {[key]: object} - var objectLookup = effectiveKeys && arrayToObject(effectiveKeys, function (key, i) { return key != null && [key, objects[i]]; }); - var promise = !effectiveKeys ? - // Auto-incremented key-less objects only without any keys argument. - table.bulkAdd(objects) : - // Keys provided. Either as inbound in provided objects, or as a keys argument. - // Begin with updating those that exists in DB: - table.where(':id').anyOf(effectiveKeys.filter(function (key) { return key != null; })).modify(function () { - this.value = objectLookup[this.primKey]; - objectLookup[this.primKey] = null; // Mark as "don't add this" - }).catch(ModifyError, function (e) { - errorList = e.failures; // No need to concat here. These are the first errors added. - }).then(function () { - // Now, let's examine which items didnt exist so we can add them: - var objsToAdd = [], keysToAdd = keys$$1 && []; - // Iterate backwards. Why? Because if same key was used twice, just add the last one. - for (var i = effectiveKeys.length - 1; i >= 0; --i) { - var key = effectiveKeys[i]; - if (key == null || objectLookup[key]) { - objsToAdd.push(objects[i]); - keys$$1 && keysToAdd.push(key); - if (key != null) - objectLookup[key] = null; // Mark as "dont add again" - } - } - // The items are in reverse order so reverse them before adding. - // Could be important in order to get auto-incremented keys the way the caller - // would expect. Could have used unshift instead of push()/reverse(), - // but: http://jsperf.com/unshift-vs-reverse - objsToAdd.reverse(); - keys$$1 && keysToAdd.reverse(); - return table.bulkAdd(objsToAdd, keysToAdd); - }).then(function (lastAddedKey) { - // Resolve with key of the last object in given arguments to bulkPut(): - var lastEffectiveKey = effectiveKeys[effectiveKeys.length - 1]; // Key was provided. - return lastEffectiveKey != null ? lastEffectiveKey : lastAddedKey; - }); - promise.then(done).catch(BulkError, function (e) { - // Concat failure from ModifyError and reject using our 'done' method. - errorList = errorList.concat(e.failures); - done(); - }).catch(reject); - } - }, "locked"); // If called from transaction scope, lock transaction til all steps are done. - }, - bulkAdd: function (objects, keys$$1) { - var self = this, creatingHook = this.hook.creating.fire; - return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) { - if (!idbstore.keyPath && !self.schema.primKey.auto && !keys$$1) - throw new exceptions.InvalidArgument("bulkAdd() with non-inbound keys requires keys array in second argument"); - if (idbstore.keyPath && keys$$1) - throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); - if (keys$$1 && keys$$1.length !== objects.length) - throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); - if (objects.length === 0) - return resolve(); // Caller provided empty list. - function done(result) { - if (errorList.length === 0) - resolve(result); - else - reject(new BulkError(self.name + ".bulkAdd(): " + errorList.length + " of " + numObjs + " operations failed", errorList)); - } - var req, errorList = [], errorHandler, successHandler, numObjs = objects.length; - if (creatingHook !== nop) { - // - // There are subscribers to hook('creating') - // Must behave as documented. - // - var keyPath = idbstore.keyPath, hookCtx; - errorHandler = BulkErrorHandlerCatchAll(errorList, null, true); - successHandler = hookedEventSuccessHandler(null); - tryCatch(function () { - for (var i = 0, l = objects.length; i < l; ++i) { - hookCtx = { onerror: null, onsuccess: null }; - var key = keys$$1 && keys$$1[i]; - var obj = objects[i], effectiveKey = keys$$1 ? key : keyPath ? getByKeyPath(obj, keyPath) : undefined, keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans); - if (effectiveKey == null && keyToUse != null) { - if (keyPath) { - obj = deepClone(obj); - setByKeyPath(obj, keyPath, keyToUse); - } - else { - key = keyToUse; - } - } - req = key != null ? idbstore.add(obj, key) : idbstore.add(obj); - req._hookCtx = hookCtx; - if (i < l - 1) { - req.onerror = errorHandler; - if (hookCtx.onsuccess) - req.onsuccess = successHandler; - } - } - }, function (err) { - hookCtx.onerror && hookCtx.onerror(err); - throw err; - }); - req.onerror = BulkErrorHandlerCatchAll(errorList, done, true); - req.onsuccess = hookedEventSuccessHandler(done); - } - else { - // - // Standard Bulk (no 'creating' hook to care about) - // - errorHandler = BulkErrorHandlerCatchAll(errorList); - for (var i = 0, l = objects.length; i < l; ++i) { - req = keys$$1 ? idbstore.add(objects[i], keys$$1[i]) : idbstore.add(objects[i]); - req.onerror = errorHandler; - } - // Only need to catch success or error on the last operation - // according to the IDB spec. - req.onerror = BulkErrorHandlerCatchAll(errorList, done); - req.onsuccess = eventSuccessHandler(done); - } - }); - }, - add: function (obj, key) { - /// - /// Add an object to the database. In case an object with same primary key already exists, the object will not be added. - /// - /// A javascript object to insert - /// Primary key - var creatingHook = this.hook.creating.fire; - return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) { - var hookCtx = { onsuccess: null, onerror: null }; - if (creatingHook !== nop) { - var effectiveKey = (key != null) ? key : (idbstore.keyPath ? getByKeyPath(obj, idbstore.keyPath) : undefined); - var keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans); // Allow subscribers to when("creating") to generate the key. - if (effectiveKey == null && keyToUse != null) { - if (idbstore.keyPath) - setByKeyPath(obj, idbstore.keyPath, keyToUse); - else - key = keyToUse; - } - } - try { - var req = key != null ? idbstore.add(obj, key) : idbstore.add(obj); - req._hookCtx = hookCtx; - req.onerror = hookedEventRejectHandler(reject); - req.onsuccess = hookedEventSuccessHandler(function (result) { - // TODO: Remove these two lines in next major release (2.0?) - // It's no good practice to have side effects on provided parameters - var keyPath = idbstore.keyPath; - if (keyPath) - setByKeyPath(obj, keyPath, result); - resolve(result); - }); - } - catch (e) { - if (hookCtx.onerror) - hookCtx.onerror(e); - throw e; - } - }); - }, - put: function (obj, key) { - var _this = this; - /// - /// Add an object to the database but in case an object with same primary key alread exists, the existing one will get updated. - /// - /// A javascript object to insert or update - /// Primary key - var creatingHook = this.hook.creating.fire, updatingHook = this.hook.updating.fire; - if (creatingHook !== nop || updatingHook !== nop) { - // - // People listens to when("creating") or when("updating") events! - // We must know whether the put operation results in an CREATE or UPDATE. - // - var keyPath = this.schema.primKey.keyPath; - var effectiveKey = (key !== undefined) ? key : (keyPath && getByKeyPath(obj, keyPath)); - if (effectiveKey == null) - return this.add(obj); - // Since key is optional, make sure we get it from obj if not provided - // Primary key exist. Lock transaction and try modifying existing. If nothing modified, call add(). - // clone obj before this async call. If caller modifies obj the line after put(), the IDB spec requires that it should not affect operation. - obj = deepClone(obj); - return this._trans(READWRITE, function () { - return _this.where(":id").equals(effectiveKey).modify(function () { - // Replace extisting value with our object - // CRUD event firing handled in Collection.modify() - this.value = obj; - }).then(function (count) { return count === 0 ? _this.add(obj, key) : effectiveKey; }); - }, "locked"); // Lock needed because operation is splitted into modify() and add(). - } - else { - // Use the standard IDB put() method. - return this._idbstore(READWRITE, function (resolve, reject, idbstore) { - var req = key !== undefined ? idbstore.put(obj, key) : idbstore.put(obj); - req.onerror = eventRejectHandler(reject); - req.onsuccess = wrap(function (ev) { - var keyPath = idbstore.keyPath; - if (keyPath) - setByKeyPath(obj, keyPath, ev.target.result); - resolve(req.result); - }); - }); - } - }, - 'delete': function (key) { - /// Primary key of the object to delete - if (this.hook.deleting.subscribers.length) { - // People listens to when("deleting") event. Must implement delete using Collection.delete() that will - // call the CRUD event. Only Collection.delete() will know whether an object was actually deleted. - return this.where(":id").equals(key).delete(); - } - else { - // No one listens. Use standard IDB delete() method. - return this._idbstore(READWRITE, function (resolve, reject, idbstore) { - var req = idbstore.delete(key); - req.onerror = eventRejectHandler(reject); - req.onsuccess = wrap(function () { - resolve(req.result); - }); - }); - } - }, - clear: function () { - if (this.hook.deleting.subscribers.length) { - // People listens to when("deleting") event. Must implement delete using Collection.delete() that will - // call the CRUD event. Only Collection.delete() will knows which objects that are actually deleted. - return this.toCollection().delete(); - } - else { - return this._idbstore(READWRITE, function (resolve, reject, idbstore) { - var req = idbstore.clear(); - req.onerror = eventRejectHandler(reject); - req.onsuccess = wrap(function () { - resolve(req.result); - }); - }); - } - }, - update: function (keyOrObject, modifications) { - if (typeof modifications !== 'object' || isArray(modifications)) - throw new exceptions.InvalidArgument("Modifications must be an object."); - if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { - // object to modify. Also modify given object with the modifications: - keys(modifications).forEach(function (keyPath) { - setByKeyPath(keyOrObject, keyPath, modifications[keyPath]); - }); - var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); - if (key === undefined) - return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); - return this.where(":id").equals(key).modify(modifications); - } - else { - // key to modify - return this.where(":id").equals(keyOrObject).modify(modifications); - } - } - }); - // - // - // - // Transaction Class - // - // - // - function Transaction(mode, storeNames, dbschema, parent) { - var _this = this; - /// - /// Transaction class. Represents a database transaction. All operations on db goes through a Transaction. - /// - /// Any of "readwrite" or "readonly" - /// Array of table names to operate on - this.db = db; - this.mode = mode; - this.storeNames = storeNames; - this.idbtrans = null; - this.on = Events(this, "complete", "error", "abort"); - this.parent = parent || null; - this.active = true; - this._reculock = 0; - this._blockedFuncs = []; - this._resolve = null; - this._reject = null; - this._waitingFor = null; - this._waitingQueue = null; - this._spinCount = 0; // Just for debugging waitFor() - this._completion = new Promise(function (resolve, reject) { - _this._resolve = resolve; - _this._reject = reject; - }); - this._completion.then(function () { - _this.active = false; - _this.on.complete.fire(); - }, function (e) { - var wasActive = _this.active; - _this.active = false; - _this.on.error.fire(e); - _this.parent ? - _this.parent._reject(e) : - wasActive && _this.idbtrans && _this.idbtrans.abort(); - return rejection(e); // Indicate we actually DO NOT catch this error. - }); - } - props(Transaction.prototype, { - // - // Transaction Protected Methods (not required by API users, but needed internally and eventually by dexie extensions) - // - _lock: function () { - assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope. - // Temporary set all requests into a pending queue if they are called before database is ready. - ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage) - if (this._reculock === 1 && !PSD.global) - PSD.lockOwnerFor = this; - return this; - }, - _unlock: function () { - assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope. - if (--this._reculock === 0) { - if (!PSD.global) - PSD.lockOwnerFor = null; - while (this._blockedFuncs.length > 0 && !this._locked()) { - var fnAndPSD = this._blockedFuncs.shift(); - try { - usePSD(fnAndPSD[1], fnAndPSD[0]); - } - catch (e) { } - } - } - return this; - }, - _locked: function () { - // Checks if any write-lock is applied on this transaction. - // To simplify the Dexie API for extension implementations, we support recursive locks. - // This is accomplished by using "Promise Specific Data" (PSD). - // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ). - // PSD is local to code executing on top of the call stacks of any of any code executed by Promise(): - // * callback given to the Promise() constructor (function (resolve, reject){...}) - // * callbacks given to then()/catch()/finally() methods (function (value){...}) - // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise. - // Derivation is done so that the inner PSD __proto__ points to the outer PSD. - // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock. - return this._reculock && PSD.lockOwnerFor !== this; - }, - create: function (idbtrans) { - var _this = this; - if (!this.mode) - return this; - assert(!this.idbtrans); - if (!idbtrans && !idbdb) { - switch (dbOpenError && dbOpenError.name) { - case "DatabaseClosedError": - // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open() - throw new exceptions.DatabaseClosed(dbOpenError); - case "MissingAPIError": - // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open() - throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); - default: - // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()! - throw new exceptions.OpenFailed(dbOpenError); - } - } - if (!this.active) - throw new exceptions.TransactionInactive(); - assert(this._completion._state === null); - idbtrans = this.idbtrans = idbtrans || idbdb.transaction(safariMultiStoreFix(this.storeNames), this.mode); - idbtrans.onerror = wrap(function (ev) { - preventDefault(ev); // Prohibit default bubbling to window.error - _this._reject(idbtrans.error); - }); - idbtrans.onabort = wrap(function (ev) { - preventDefault(ev); - _this.active && _this._reject(new exceptions.Abort(idbtrans.error)); - _this.active = false; - _this.on("abort").fire(ev); - }); - idbtrans.oncomplete = wrap(function () { - _this.active = false; - _this._resolve(); - }); - return this; - }, - _promise: function (mode, fn, bWriteLock) { - var _this = this; - if (mode === READWRITE && this.mode !== READWRITE) - return rejection(new exceptions.ReadOnly("Transaction is readonly")); - if (!this.active) - return rejection(new exceptions.TransactionInactive()); - if (this._locked()) { - return new Promise(function (resolve, reject) { - _this._blockedFuncs.push([function () { - _this._promise(mode, fn, bWriteLock).then(resolve, reject); - }, PSD]); - }); - } - else if (bWriteLock) { - return newScope(function () { - var p = new Promise(function (resolve, reject) { - _this._lock(); - var rv = fn(resolve, reject, _this); - if (rv && rv.then) - rv.then(resolve, reject); - }); - p.finally(function () { return _this._unlock(); }); - p._lib = true; - return p; - }); - } - else { - var p = new Promise(function (resolve, reject) { - var rv = fn(resolve, reject, _this); - if (rv && rv.then) - rv.then(resolve, reject); - }); - p._lib = true; - return p; - } - }, - _root: function () { - return this.parent ? this.parent._root() : this; - }, - waitFor: function (promise) { - // Always operate on the root transaction (in case this is a sub stransaction) - var root = this._root(); - // For stability reasons, convert parameter to promise no matter what type is passed to waitFor(). - // (We must be able to call .then() on it.) - promise = Promise.resolve(promise); - if (root._waitingFor) { - // Already called waitFor(). Wait for both to complete. - root._waitingFor = root._waitingFor.then(function () { return promise; }); - } - else { - // We're not in waiting state. Start waiting state. - root._waitingFor = promise; - root._waitingQueue = []; - // Start interacting with indexedDB until promise completes: - var store = root.idbtrans.objectStore(root.storeNames[0]); - (function spin() { - ++root._spinCount; // For debugging only - while (root._waitingQueue.length) - (root._waitingQueue.shift())(); - if (root._waitingFor) - store.get(-Infinity).onsuccess = spin; - }()); - } - var currentWaitPromise = root._waitingFor; - return new Promise(function (resolve, reject) { - promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () { - if (root._waitingFor === currentWaitPromise) { - // No one added a wait after us. Safe to stop the spinning. - root._waitingFor = null; - } - }); - }); - }, - // - // Transaction Public Properties and Methods - // - abort: function () { - this.active && this._reject(new exceptions.Abort()); - this.active = false; - }, - tables: { - get: deprecated("Transaction.tables", function () { return allTables; }) - }, - table: function (name) { - var table = db.table(name); // Don't check that table is part of transaction. It must fail lazily! - return new Table(name, table.schema, this); - } - }); - // - // - // - // WhereClause - // - // - // - function WhereClause(table, index, orCollection) { - /// - /// - /// - this._ctx = { - table: table, - index: index === ":id" ? null : index, - or: orCollection - }; - } - props(WhereClause.prototype, function () { - // WhereClause private methods - function fail(collectionOrWhereClause, err, T) { - var collection = collectionOrWhereClause instanceof WhereClause ? - new Collection(collectionOrWhereClause) : - collectionOrWhereClause; - collection._ctx.error = T ? new T(err) : new TypeError(err); - return collection; - } - function emptyCollection(whereClause) { - return new Collection(whereClause, function () { return IDBKeyRange.only(""); }).limit(0); - } - function upperFactory(dir) { - return dir === "next" ? function (s) { return s.toUpperCase(); } : function (s) { return s.toLowerCase(); }; - } - function lowerFactory(dir) { - return dir === "next" ? function (s) { return s.toLowerCase(); } : function (s) { return s.toUpperCase(); }; - } - function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { - var length = Math.min(key.length, lowerNeedle.length); - var llp = -1; - for (var i = 0; i < length; ++i) { - var lwrKeyChar = lowerKey[i]; - if (lwrKeyChar !== lowerNeedle[i]) { - if (cmp(key[i], upperNeedle[i]) < 0) - return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); - if (cmp(key[i], lowerNeedle[i]) < 0) - return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); - if (llp >= 0) - return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); - return null; - } - if (cmp(key[i], lwrKeyChar) < 0) - llp = i; - } - if (length < lowerNeedle.length && dir === "next") - return key + upperNeedle.substr(key.length); - if (length < key.length && dir === "prev") - return key.substr(0, upperNeedle.length); - return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); - } - function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { - /// - var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; - if (!needles.every(function (s) { return typeof s === 'string'; })) { - return fail(whereClause, STRING_EXPECTED); - } - function initDirection(dir) { - upper = upperFactory(dir); - lower = lowerFactory(dir); - compare = (dir === "next" ? simpleCompare : simpleCompareReverse); - var needleBounds = needles.map(function (needle) { - return { lower: lower(needle), upper: upper(needle) }; - }).sort(function (a, b) { - return compare(a.lower, b.lower); - }); - upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); - lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); - direction = dir; - nextKeySuffix = (dir === "next" ? "" : suffix); - } - initDirection("next"); - var c = new Collection(whereClause, function () { - return IDBKeyRange.bound(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); - }); - c._ondirectionchange = function (direction) { - // This event onlys occur before filter is called the first time. - initDirection(direction); - }; - var firstPossibleNeedle = 0; - c._addAlgorithm(function (cursor, advance, resolve) { - /// - /// - /// - var key = cursor.key; - if (typeof key !== 'string') - return false; - var lowerKey = lower(key); - if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { - return true; - } - else { - var lowestPossibleCasing = null; - for (var i = firstPossibleNeedle; i < needlesLen; ++i) { - var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); - if (casing === null && lowestPossibleCasing === null) - firstPossibleNeedle = i + 1; - else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { - lowestPossibleCasing = casing; - } - } - if (lowestPossibleCasing !== null) { - advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); - } - else { - advance(resolve); - } - return false; - } - }); - return c; - } - // - // WhereClause public methods - // - return { - between: function (lower, upper, includeLower, includeUpper) { - /// - /// Filter out records whose where-field lays between given lower and upper values. Applies to Strings, Numbers and Dates. - /// - /// - /// - /// Whether items that equals lower should be included. Default true. - /// Whether items that equals upper should be included. Default false. - /// - includeLower = includeLower !== false; // Default to true - includeUpper = includeUpper === true; // Default to false - try { - if ((cmp(lower, upper) > 0) || - (cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) - return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection. - return new Collection(this, function () { return IDBKeyRange.bound(lower, upper, !includeLower, !includeUpper); }); - } - catch (e) { - return fail(this, INVALID_KEY_ARGUMENT); - } - }, - equals: function (value) { - return new Collection(this, function () { return IDBKeyRange.only(value); }); - }, - above: function (value) { - return new Collection(this, function () { return IDBKeyRange.lowerBound(value, true); }); - }, - aboveOrEqual: function (value) { - return new Collection(this, function () { return IDBKeyRange.lowerBound(value); }); - }, - below: function (value) { - return new Collection(this, function () { return IDBKeyRange.upperBound(value, true); }); - }, - belowOrEqual: function (value) { - return new Collection(this, function () { return IDBKeyRange.upperBound(value); }); - }, - startsWith: function (str) { - /// - if (typeof str !== 'string') - return fail(this, STRING_EXPECTED); - return this.between(str, str + maxString, true, true); - }, - startsWithIgnoreCase: function (str) { - /// - if (str === "") - return this.startsWith(str); - return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString); - }, - equalsIgnoreCase: function (str) { - /// - return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], ""); - }, - anyOfIgnoreCase: function () { - var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); - if (set.length === 0) - return emptyCollection(this); - return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, ""); - }, - startsWithAnyOfIgnoreCase: function () { - var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); - if (set.length === 0) - return emptyCollection(this); - return addIgnoreCaseAlgorithm(this, function (x, a) { - return a.some(function (n) { - return x.indexOf(n) === 0; - }); - }, set, maxString); - }, - anyOf: function () { - var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); - var compare = ascending; - try { - set.sort(compare); - } - catch (e) { - return fail(this, INVALID_KEY_ARGUMENT); - } - if (set.length === 0) - return emptyCollection(this); - var c = new Collection(this, function () { return IDBKeyRange.bound(set[0], set[set.length - 1]); }); - c._ondirectionchange = function (direction) { - compare = (direction === "next" ? ascending : descending); - set.sort(compare); - }; - var i = 0; - c._addAlgorithm(function (cursor, advance, resolve) { - var key = cursor.key; - while (compare(key, set[i]) > 0) { - // The cursor has passed beyond this key. Check next. - ++i; - if (i === set.length) { - // There is no next. Stop searching. - advance(resolve); - return false; - } - } - if (compare(key, set[i]) === 0) { - // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set. - return true; - } - else { - // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for. - advance(function () { cursor.continue(set[i]); }); - return false; - } - }); - return c; - }, - notEqual: function (value) { - return this.inAnyRange([[minKey, value], [value, maxKey]], { includeLowers: false, includeUppers: false }); - }, - noneOf: function () { - var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); - if (set.length === 0) - return new Collection(this); // Return entire collection. - try { - set.sort(ascending); - } - catch (e) { - return fail(this, INVALID_KEY_ARGUMENT); - } - // Transform ["a","b","c"] to a set of ranges for between/above/below: [[minKey,"a"], ["a","b"], ["b","c"], ["c",maxKey]] - var ranges = set.reduce(function (res, val) { return res ? res.concat([[res[res.length - 1][1], val]]) : [[minKey, val]]; }, null); - ranges.push([set[set.length - 1], maxKey]); - return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); - }, - /** Filter out values withing given set of ranges. - * Example, give children and elders a rebate of 50%: - * - * db.friends.where('age').inAnyRange([[0,18],[65,Infinity]]).modify({Rebate: 1/2}); - * - * @param {(string|number|Date|Array)[][]} ranges - * @param {{includeLowers: boolean, includeUppers: boolean}} options - */ - inAnyRange: function (ranges, options) { - if (ranges.length === 0) - return emptyCollection(this); - if (!ranges.every(function (range) { return range[0] !== undefined && range[1] !== undefined && ascending(range[0], range[1]) <= 0; })) { - return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); - } - var includeLowers = !options || options.includeLowers !== false; // Default to true - var includeUppers = options && options.includeUppers === true; // Default to false - function addRange(ranges, newRange) { - for (var i = 0, l = ranges.length; i < l; ++i) { - var range = ranges[i]; - if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { - range[0] = min(range[0], newRange[0]); - range[1] = max(range[1], newRange[1]); - break; - } - } - if (i === l) - ranges.push(newRange); - return ranges; - } - var sortDirection = ascending; - function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } - // Join overlapping ranges - var set; - try { - set = ranges.reduce(addRange, []); - set.sort(rangeSorter); - } - catch (ex) { - return fail(this, INVALID_KEY_ARGUMENT); - } - var i = 0; - var keyIsBeyondCurrentEntry = includeUppers ? - function (key) { return ascending(key, set[i][1]) > 0; } : - function (key) { return ascending(key, set[i][1]) >= 0; }; - var keyIsBeforeCurrentEntry = includeLowers ? - function (key) { return descending(key, set[i][0]) > 0; } : - function (key) { return descending(key, set[i][0]) >= 0; }; - function keyWithinCurrentRange(key) { - return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); - } - var checkKey = keyIsBeyondCurrentEntry; - var c = new Collection(this, function () { - return IDBKeyRange.bound(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); - }); - c._ondirectionchange = function (direction) { - if (direction === "next") { - checkKey = keyIsBeyondCurrentEntry; - sortDirection = ascending; - } - else { - checkKey = keyIsBeforeCurrentEntry; - sortDirection = descending; - } - set.sort(rangeSorter); - }; - c._addAlgorithm(function (cursor, advance, resolve) { - var key = cursor.key; - while (checkKey(key)) { - // The cursor has passed beyond this key. Check next. - ++i; - if (i === set.length) { - // There is no next. Stop searching. - advance(resolve); - return false; - } - } - if (keyWithinCurrentRange(key)) { - // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set. - return true; - } - else if (cmp(key, set[i][1]) === 0 || cmp(key, set[i][0]) === 0) { - // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border. - // Continue to next key but don't include this one. - return false; - } - else { - // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for. - advance(function () { - if (sortDirection === ascending) - cursor.continue(set[i][0]); - else - cursor.continue(set[i][1]); - }); - return false; - } - }); - return c; - }, - startsWithAnyOf: function () { - var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); - if (!set.every(function (s) { return typeof s === 'string'; })) { - return fail(this, "startsWithAnyOf() only works with strings"); - } - if (set.length === 0) - return emptyCollection(this); - return this.inAnyRange(set.map(function (str) { - return [str, str + maxString]; - })); - } - }; - }); - // - // - // - // Collection Class - // - // - // - function Collection(whereClause, keyRangeGenerator) { - /// - /// - /// - /// Where clause instance - /// - var keyRange = null, error = null; - if (keyRangeGenerator) - try { - keyRange = keyRangeGenerator(); - } - catch (ex) { - error = ex; - } - var whereCtx = whereClause._ctx, table = whereCtx.table; - this._ctx = { - table: table, - index: whereCtx.index, - isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), - range: keyRange, - keysOnly: false, - dir: "next", - unique: "", - algorithm: null, - filter: null, - replayFilter: null, - justLimit: true, - isMatch: null, - offset: 0, - limit: Infinity, - error: error, - or: whereCtx.or, - valueMapper: table.hook.reading.fire - }; - } - function isPlainKeyRange(ctx, ignoreLimitFilter) { - return !(ctx.filter || ctx.algorithm || ctx.or) && - (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); - } - props(Collection.prototype, function () { - // - // Collection Private Functions - // - function addFilter(ctx, fn) { - ctx.filter = combine(ctx.filter, fn); - } - function addReplayFilter(ctx, factory, isLimitFilter) { - var curr = ctx.replayFilter; - ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory; - ctx.justLimit = isLimitFilter && !curr; - } - function addMatchFilter(ctx, fn) { - ctx.isMatch = combine(ctx.isMatch, fn); - } - /** @param ctx { - * isPrimKey: boolean, - * table: Table, - * index: string - * } - * @param store IDBObjectStore - **/ - function getIndexOrStore(ctx, store) { - if (ctx.isPrimKey) - return store; - var indexSpec = ctx.table.schema.idxByName[ctx.index]; - if (!indexSpec) - throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + store.name + " is not indexed"); - return store.index(indexSpec.name); - } - /** @param ctx { - * isPrimKey: boolean, - * table: Table, - * index: string, - * keysOnly: boolean, - * range?: IDBKeyRange, - * dir: "next" | "prev" - * } - */ - function openCursor(ctx, store) { - var idxOrStore = getIndexOrStore(ctx, store); - return ctx.keysOnly && 'openKeyCursor' in idxOrStore ? - idxOrStore.openKeyCursor(ctx.range || null, ctx.dir + ctx.unique) : - idxOrStore.openCursor(ctx.range || null, ctx.dir + ctx.unique); - } - function iter(ctx, fn, resolve, reject, idbstore) { - var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; - if (!ctx.or) { - iterate(openCursor(ctx, idbstore), combine(ctx.algorithm, filter), fn, resolve, reject, !ctx.keysOnly && ctx.valueMapper); - } - else - (function () { - var set = {}; - var resolved = 0; - function resolveboth() { - if (++resolved === 2) - resolve(); // Seems like we just support or btwn max 2 expressions, but there are no limit because we do recursion. - } - function union(item, cursor, advance) { - if (!filter || filter(cursor, advance, resolveboth, reject)) { - var primaryKey = cursor.primaryKey; - var key = '' + primaryKey; - if (key === '[object ArrayBuffer]') - key = '' + new Uint8Array(primaryKey); - if (!hasOwn(set, key)) { - set[key] = true; - fn(item, cursor, advance); - } - } - } - ctx.or._iterate(union, resolveboth, reject, idbstore); - iterate(openCursor(ctx, idbstore), ctx.algorithm, union, resolveboth, reject, !ctx.keysOnly && ctx.valueMapper); - })(); - } - return { - // - // Collection Protected Functions - // - _read: function (fn, cb) { - var ctx = this._ctx; - return ctx.error ? - ctx.table._trans(null, rejection.bind(null, ctx.error)) : - ctx.table._idbstore(READONLY, fn).then(cb); - }, - _write: function (fn) { - var ctx = this._ctx; - return ctx.error ? - ctx.table._trans(null, rejection.bind(null, ctx.error)) : - ctx.table._idbstore(READWRITE, fn, "locked"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued. - }, - _addAlgorithm: function (fn) { - var ctx = this._ctx; - ctx.algorithm = combine(ctx.algorithm, fn); - }, - _iterate: function (fn, resolve, reject, idbstore) { - return iter(this._ctx, fn, resolve, reject, idbstore); - }, - clone: function (props$$1) { - var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); - if (props$$1) - extend(ctx, props$$1); - rv._ctx = ctx; - return rv; - }, - raw: function () { - this._ctx.valueMapper = null; - return this; - }, - // - // Collection Public methods - // - each: function (fn) { - var ctx = this._ctx; - return this._read(function (resolve, reject, idbstore) { - iter(ctx, fn, resolve, reject, idbstore); - }); - }, - count: function (cb) { - var ctx = this._ctx; - if (isPlainKeyRange(ctx, true)) { - // This is a plain key range. We can use the count() method if the index. - return this._read(function (resolve, reject, idbstore) { - var idx = getIndexOrStore(ctx, idbstore); - var req = (ctx.range ? idx.count(ctx.range) : idx.count()); - req.onerror = eventRejectHandler(reject); - req.onsuccess = function (e) { - resolve(Math.min(e.target.result, ctx.limit)); - }; - }, cb); - } - else { - // Algorithms, filters or expressions are applied. Need to count manually. - var count = 0; - return this._read(function (resolve, reject, idbstore) { - iter(ctx, function () { ++count; return false; }, function () { resolve(count); }, reject, idbstore); - }, cb); - } - }, - sortBy: function (keyPath, cb) { - /// - var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; - function getval(obj, i) { - if (i) - return getval(obj[parts[i]], i - 1); - return obj[lastPart]; - } - var order = this._ctx.dir === "next" ? 1 : -1; - function sorter(a, b) { - var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); - return aVal < bVal ? -order : aVal > bVal ? order : 0; - } - return this.toArray(function (a) { - return a.sort(sorter); - }).then(cb); - }, - toArray: function (cb) { - var ctx = this._ctx; - return this._read(function (resolve, reject, idbstore) { - if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { - // Special optimation if we could use IDBObjectStore.getAll() or - // IDBKeyRange.getAll(): - var readingHook = ctx.table.hook.reading.fire; - var idxOrStore = getIndexOrStore(ctx, idbstore); - var req = ctx.limit < Infinity ? - idxOrStore.getAll(ctx.range, ctx.limit) : - idxOrStore.getAll(ctx.range); - req.onerror = eventRejectHandler(reject); - req.onsuccess = readingHook === mirror ? - eventSuccessHandler(resolve) : - eventSuccessHandler(function (res) { - try { - resolve(res.map(readingHook)); - } - catch (e) { - reject(e); - } - }); - } - else { - // Getting array through a cursor. - var a = []; - iter(ctx, function (item) { a.push(item); }, function arrayComplete() { - resolve(a); - }, reject, idbstore); - } - }, cb); - }, - offset: function (offset) { - var ctx = this._ctx; - if (offset <= 0) - return this; - ctx.offset += offset; // For count() - if (isPlainKeyRange(ctx)) { - addReplayFilter(ctx, function () { - var offsetLeft = offset; - return function (cursor, advance) { - if (offsetLeft === 0) - return true; - if (offsetLeft === 1) { - --offsetLeft; - return false; - } - advance(function () { - cursor.advance(offsetLeft); - offsetLeft = 0; - }); - return false; - }; - }); - } - else { - addReplayFilter(ctx, function () { - var offsetLeft = offset; - return function () { return (--offsetLeft < 0); }; - }); - } - return this; - }, - limit: function (numRows) { - this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count() - addReplayFilter(this._ctx, function () { - var rowsLeft = numRows; - return function (cursor, advance, resolve) { - if (--rowsLeft <= 0) - advance(resolve); // Stop after this item has been included - return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here. - }; - }, true); - return this; - }, - until: function (filterFunction, bIncludeStopEntry) { - var ctx = this._ctx; - addFilter(this._ctx, function (cursor, advance, resolve) { - if (filterFunction(cursor.value)) { - advance(resolve); - return bIncludeStopEntry; - } - else { - return true; - } - }); - return this; - }, - first: function (cb) { - return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); - }, - last: function (cb) { - return this.reverse().first(cb); - }, - filter: function (filterFunction) { - /// function(val){return true/false} - addFilter(this._ctx, function (cursor) { - return filterFunction(cursor.value); - }); - // match filters not used in Dexie.js but can be used by 3rd part libraries to test a - // collection for a match without querying DB. Used by Dexie.Observable. - addMatchFilter(this._ctx, filterFunction); - return this; - }, - and: function (filterFunction) { - return this.filter(filterFunction); - }, - or: function (indexName) { - return new WhereClause(this._ctx.table, indexName, this); - }, - reverse: function () { - this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); - if (this._ondirectionchange) - this._ondirectionchange(this._ctx.dir); - return this; - }, - desc: function () { - return this.reverse(); - }, - eachKey: function (cb) { - var ctx = this._ctx; - ctx.keysOnly = !ctx.isMatch; - return this.each(function (val, cursor) { cb(cursor.key, cursor); }); - }, - eachUniqueKey: function (cb) { - this._ctx.unique = "unique"; - return this.eachKey(cb); - }, - eachPrimaryKey: function (cb) { - var ctx = this._ctx; - ctx.keysOnly = !ctx.isMatch; - return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); - }, - keys: function (cb) { - var ctx = this._ctx; - ctx.keysOnly = !ctx.isMatch; - var a = []; - return this.each(function (item, cursor) { - a.push(cursor.key); - }).then(function () { - return a; - }).then(cb); - }, - primaryKeys: function (cb) { - var ctx = this._ctx; - if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { - // Special optimation if we could use IDBObjectStore.getAllKeys() or - // IDBKeyRange.getAllKeys(): - return this._read(function (resolve, reject, idbstore) { - var idxOrStore = getIndexOrStore(ctx, idbstore); - var req = ctx.limit < Infinity ? - idxOrStore.getAllKeys(ctx.range, ctx.limit) : - idxOrStore.getAllKeys(ctx.range); - req.onerror = eventRejectHandler(reject); - req.onsuccess = eventSuccessHandler(resolve); - }).then(cb); - } - ctx.keysOnly = !ctx.isMatch; - var a = []; - return this.each(function (item, cursor) { - a.push(cursor.primaryKey); - }).then(function () { - return a; - }).then(cb); - }, - uniqueKeys: function (cb) { - this._ctx.unique = "unique"; - return this.keys(cb); - }, - firstKey: function (cb) { - return this.limit(1).keys(function (a) { return a[0]; }).then(cb); - }, - lastKey: function (cb) { - return this.reverse().firstKey(cb); - }, - distinct: function () { - var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; - if (!idx || !idx.multi) - return this; // distinct() only makes differencies on multiEntry indexes. - var set = {}; - addFilter(this._ctx, function (cursor) { - var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string - var found = hasOwn(set, strKey); - set[strKey] = true; - return !found; - }); - return this; - }, - // - // Methods that mutate storage - // - modify: function (changes) { - var self = this, ctx = this._ctx, hook = ctx.table.hook, updatingHook = hook.updating.fire, deletingHook = hook.deleting.fire; - return this._write(function (resolve, reject, idbstore, trans) { - var modifyer; - if (typeof changes === 'function') { - // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item) - if (updatingHook === nop && deletingHook === nop) { - // Noone cares about what is being changed. Just let the modifier function be the given argument as is. - modifyer = changes; - } - else { - // People want to know exactly what is being modified or deleted. - // Let modifyer be a proxy function that finds out what changes the caller is actually doing - // and call the hooks accordingly! - modifyer = function (item) { - var origItem = deepClone(item); // Clone the item first so we can compare laters. - if (changes.call(this, item, this) === false) - return false; // Call the real modifyer function (If it returns false explicitely, it means it dont want to modify anyting on this object) - if (!hasOwn(this, "value")) { - // The real modifyer function requests a deletion of the object. Inform the deletingHook that a deletion is taking place. - deletingHook.call(this, this.primKey, item, trans); - } - else { - // No deletion. Check what was changed - var objectDiff = getObjectDiff(origItem, this.value); - var additionalChanges = updatingHook.call(this, objectDiff, this.primKey, origItem, trans); - if (additionalChanges) { - // Hook want to apply additional modifications. Make sure to fullfill the will of the hook. - item = this.value; - keys(additionalChanges).forEach(function (keyPath) { - setByKeyPath(item, keyPath, additionalChanges[keyPath]); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath - }); - } - } - }; - } - } - else if (updatingHook === nop) { - // changes is a set of {keyPath: value} and no one is listening to the updating hook. - var keyPaths = keys(changes); - var numKeys = keyPaths.length; - modifyer = function (item) { - var anythingModified = false; - for (var i = 0; i < numKeys; ++i) { - var keyPath = keyPaths[i], val = changes[keyPath]; - if (getByKeyPath(item, keyPath) !== val) { - setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath - anythingModified = true; - } - } - return anythingModified; - }; - } - else { - // changes is a set of {keyPath: value} and people are listening to the updating hook so we need to call it and - // allow it to add additional modifications to make. - var origChanges = changes; - changes = shallowClone(origChanges); // Let's work with a clone of the changes keyPath/value set so that we can restore it in case a hook extends it. - modifyer = function (item) { - var anythingModified = false; - var additionalChanges = updatingHook.call(this, changes, this.primKey, deepClone(item), trans); - if (additionalChanges) - extend(changes, additionalChanges); - keys(changes).forEach(function (keyPath) { - var val = changes[keyPath]; - if (getByKeyPath(item, keyPath) !== val) { - setByKeyPath(item, keyPath, val); - anythingModified = true; - } - }); - if (additionalChanges) - changes = shallowClone(origChanges); // Restore original changes for next iteration - return anythingModified; - }; - } - var count = 0; - var successCount = 0; - var iterationComplete = false; - var failures = []; - var failKeys = []; - var currentKey = null; - function modifyItem(item, cursor) { - currentKey = cursor.primaryKey; - var thisContext = { - primKey: cursor.primaryKey, - value: item, - onsuccess: null, - onerror: null - }; - function onerror(e) { - failures.push(e); - failKeys.push(thisContext.primKey); - checkFinished(); - return true; // Catch these errors and let a final rejection decide whether or not to abort entire transaction - } - if (modifyer.call(thisContext, item, thisContext) !== false) { - var bDelete = !hasOwn(thisContext, "value"); - ++count; - tryCatch(function () { - var req = (bDelete ? cursor.delete() : cursor.update(thisContext.value)); - req._hookCtx = thisContext; - req.onerror = hookedEventRejectHandler(onerror); - req.onsuccess = hookedEventSuccessHandler(function () { - ++successCount; - checkFinished(); - }); - }, onerror); - } - else if (thisContext.onsuccess) { - // Hook will expect either onerror or onsuccess to always be called! - thisContext.onsuccess(thisContext.value); - } - } - function doReject(e) { - if (e) { - failures.push(e); - failKeys.push(currentKey); - } - return reject(new ModifyError("Error modifying one or more objects", failures, successCount, failKeys)); - } - function checkFinished() { - if (iterationComplete && successCount + failures.length === count) { - if (failures.length > 0) - doReject(); - else - resolve(successCount); - } - } - self.clone().raw()._iterate(modifyItem, function () { - iterationComplete = true; - checkFinished(); - }, doReject, idbstore); - }); - }, - 'delete': function () { - var _this = this; - var ctx = this._ctx, range = ctx.range, deletingHook = ctx.table.hook.deleting.fire, hasDeleteHook = deletingHook !== nop; - if (!hasDeleteHook && - isPlainKeyRange(ctx) && - ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || !range)) { - // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208) - // For chromium, this is the way most optimized version. - // For IE/Edge, this could hang the indexedDB engine and make operating system instable - // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7) - return this._write(function (resolve, reject, idbstore) { - // Our API contract is to return a count of deleted items, so we have to count() before delete(). - var onerror = eventRejectHandler(reject), countReq = (range ? idbstore.count(range) : idbstore.count()); - countReq.onerror = onerror; - countReq.onsuccess = function () { - var count = countReq.result; - tryCatch(function () { - var delReq = (range ? idbstore.delete(range) : idbstore.clear()); - delReq.onerror = onerror; - delReq.onsuccess = function () { return resolve(count); }; - }, function (err) { return reject(err); }); - }; - }); - } - // Default version to use when collection is not a vanilla IDBKeyRange on the primary key. - // Divide into chunks to not starve RAM. - // If has delete hook, we will have to collect not just keys but also objects, so it will use - // more memory and need lower chunk size. - var CHUNKSIZE = hasDeleteHook ? 2000 : 10000; - return this._write(function (resolve, reject, idbstore, trans) { - var totalCount = 0; - // Clone collection and change its table and set a limit of CHUNKSIZE on the cloned Collection instance. - var collection = _this - .clone({ - keysOnly: !ctx.isMatch && !hasDeleteHook - }) // load just keys (unless filter() or and() or deleteHook has subscribers) - .distinct() // In case multiEntry is used, never delete same key twice because resulting count - .limit(CHUNKSIZE) - .raw(); // Don't filter through reading-hooks (like mapped classes etc) - var keysOrTuples = []; - // We're gonna do things on as many chunks that are needed. - // Use recursion of nextChunk function: - var nextChunk = function () { return collection.each(hasDeleteHook ? function (val, cursor) { - // Somebody subscribes to hook('deleting'). Collect all primary keys and their values, - // so that the hook can be called with its values in bulkDelete(). - keysOrTuples.push([cursor.primaryKey, cursor.value]); - } : function (val, cursor) { - // No one subscribes to hook('deleting'). Collect only primary keys: - keysOrTuples.push(cursor.primaryKey); - }).then(function () { - // Chromium deletes faster when doing it in sort order. - hasDeleteHook ? - keysOrTuples.sort(function (a, b) { return ascending(a[0], b[0]); }) : - keysOrTuples.sort(ascending); - return bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook); - }).then(function () { - var count = keysOrTuples.length; - totalCount += count; - keysOrTuples = []; - return count < CHUNKSIZE ? totalCount : nextChunk(); - }); }; - resolve(nextChunk()); - }); - } - }; - }); - // - // - // - // ------------------------- Help functions --------------------------- - // - // - // - function lowerVersionFirst(a, b) { - return a._cfg.version - b._cfg.version; - } - function setApiOnPlace(objs, tableNames, dbschema) { - tableNames.forEach(function (tableName) { - var schema = dbschema[tableName]; - objs.forEach(function (obj) { - if (!(tableName in obj)) { - if (obj === Transaction.prototype || obj instanceof Transaction) { - // obj is a Transaction prototype (or prototype of a subclass to Transaction) - // Make the API a getter that returns this.table(tableName) - setProp(obj, tableName, { get: function () { return this.table(tableName); } }); - } - else { - // Table will not be bound to a transaction (will use Dexie.currentTransaction) - obj[tableName] = new Table(tableName, schema); - } - } - }); - }); - } - function removeTablesApi(objs) { - objs.forEach(function (obj) { - for (var key in obj) { - if (obj[key] instanceof Table) - delete obj[key]; - } - }); - } - function iterate(req, filter, fn, resolve, reject, valueMapper) { - // Apply valueMapper (hook('reading') or mappped class) - var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn; - // Wrap fn with PSD and microtick stuff from Promise. - var wrappedFn = wrap(mappedFn, reject); - if (!req.onerror) - req.onerror = eventRejectHandler(reject); - if (filter) { - req.onsuccess = trycatcher(function filter_record() { - var cursor = req.result; - if (cursor) { - var c = function () { cursor.continue(); }; - if (filter(cursor, function (advancer) { c = advancer; }, resolve, reject)) - wrappedFn(cursor.value, cursor, function (advancer) { c = advancer; }); - c(); - } - else { - resolve(); - } - }, reject); - } - else { - req.onsuccess = trycatcher(function filter_record() { - var cursor = req.result; - if (cursor) { - var c = function () { cursor.continue(); }; - wrappedFn(cursor.value, cursor, function (advancer) { c = advancer; }); - c(); - } - else { - resolve(); - } - }, reject); - } - } - function parseIndexSyntax(indexes) { - /// - /// - var rv = []; - indexes.split(',').forEach(function (index) { - index = index.trim(); - var name = index.replace(/([&*]|\+\+)/g, ""); // Remove "&", "++" and "*" - // Let keyPath of "[a+b]" be ["a","b"]: - var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; - rv.push(new IndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), /\./.test(index))); - }); - return rv; - } - function cmp(key1, key2) { - return indexedDB.cmp(key1, key2); - } - function min(a, b) { - return cmp(a, b) < 0 ? a : b; - } - function max(a, b) { - return cmp(a, b) > 0 ? a : b; - } - function ascending(a, b) { - return indexedDB.cmp(a, b); - } - function descending(a, b) { - return indexedDB.cmp(b, a); - } - function simpleCompare(a, b) { - return a < b ? -1 : a === b ? 0 : 1; - } - function simpleCompareReverse(a, b) { - return a > b ? -1 : a === b ? 0 : 1; - } - function combine(filter1, filter2) { - return filter1 ? - filter2 ? - function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : - filter1 : - filter2; - } - function readGlobalSchema() { - db.verno = idbdb.version / 10; - db._dbSchema = globalSchema = {}; - dbStoreNames = slice(idbdb.objectStoreNames, 0); - if (dbStoreNames.length === 0) - return; // Database contains no stores. - var trans = idbdb.transaction(safariMultiStoreFix(dbStoreNames), 'readonly'); - dbStoreNames.forEach(function (storeName) { - var store = trans.objectStore(storeName), keyPath = store.keyPath, dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1; - var primKey = new IndexSpec(keyPath, keyPath || "", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== 'string', dotted); - var indexes = []; - for (var j = 0; j < store.indexNames.length; ++j) { - var idbindex = store.index(store.indexNames[j]); - keyPath = idbindex.keyPath; - dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1; - var index = new IndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== 'string', dotted); - indexes.push(index); - } - globalSchema[storeName] = new TableSchema(storeName, primKey, indexes, {}); - }); - setApiOnPlace([allTables], keys(globalSchema), globalSchema); - } - function adjustToExistingIndexNames(schema, idbtrans) { - /// - /// Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db - /// - /// Map between name and TableSchema - /// - var storeNames = idbtrans.db.objectStoreNames; - for (var i = 0; i < storeNames.length; ++i) { - var storeName = storeNames[i]; - var store = idbtrans.objectStore(storeName); - hasGetAll = 'getAll' in store; - for (var j = 0; j < store.indexNames.length; ++j) { - var indexName = store.indexNames[j]; - var keyPath = store.index(indexName).keyPath; - var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; - if (schema[storeName]) { - var indexSpec = schema[storeName].idxByName[dexieName]; - if (indexSpec) - indexSpec.name = indexName; - } - } - } - // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579 - if (/Safari/.test(navigator.userAgent) && - !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && - _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && - [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { - hasGetAll = false; - } - } - function fireOnBlocked(ev) { - db.on("blocked").fire(ev); - // Workaround (not fully*) for missing "versionchange" event in IE,Edge and Safari: - connections - .filter(function (c) { return c.name === db.name && c !== db && !c._vcFired; }) - .map(function (c) { return c.on("versionchange").fire(ev); }); - } - extend(this, { - Collection: Collection, - Table: Table, - Transaction: Transaction, - Version: Version, - WhereClause: WhereClause - }); - init(); - addons.forEach(function (fn) { - fn(db); - }); -} -function parseType(type) { - if (typeof type === 'function') { - return new type(); - } - else if (isArray(type)) { - return [parseType(type[0])]; - } - else if (type && typeof type === 'object') { - var rv = {}; - applyStructure(rv, type); - return rv; - } - else { - return type; - } -} -function applyStructure(obj, structure) { - keys(structure).forEach(function (member) { - var value = parseType(structure[member]); - obj[member] = value; - }); - return obj; -} -function hookedEventSuccessHandler(resolve) { - // wrap() is needed when calling hooks because the rare scenario of: - // * hook does a db operation that fails immediately (IDB throws exception) - // For calling db operations on correct transaction, wrap makes sure to set PSD correctly. - // wrap() will also execute in a virtual tick. - // * If not wrapped in a virtual tick, direct exception will launch a new physical tick. - // * If this was the last event in the bulk, the promise will resolve after a physical tick - // and the transaction will have committed already. - // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise, - // because it is always marked with _lib = true when created using Transaction._promise(). - return wrap(function (event) { - var req = event.target, ctx = req._hookCtx, // Contains the hook error handler. Put here instead of closure to boost performance. - result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key. - hookSuccessHandler = ctx && ctx.onsuccess; - hookSuccessHandler && hookSuccessHandler(result); - resolve && resolve(result); - }, resolve); -} -function eventRejectHandler(reject) { - return wrap(function (event) { - preventDefault(event); - reject(event.target.error); - return false; - }); -} -function eventSuccessHandler(resolve) { - return wrap(function (event) { - resolve(event.target.result); - }); -} -function hookedEventRejectHandler(reject) { - return wrap(function (event) { - // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks. - var req = event.target, err = req.error, ctx = req._hookCtx, // Contains the hook error handler. Put here instead of closure to boost performance. - hookErrorHandler = ctx && ctx.onerror; - hookErrorHandler && hookErrorHandler(err); - preventDefault(event); - reject(err); - return false; - }); -} -function preventDefault(event) { - if (event.stopPropagation) - event.stopPropagation(); - if (event.preventDefault) - event.preventDefault(); -} -function awaitIterator(iterator) { - var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow); - function step(getNext) { - return function (val) { - var next = getNext(val), value = next.value; - return next.done ? value : - (!value || typeof value.then !== 'function' ? - isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : - value.then(onSuccess, onError)); - }; - } - return step(callNext)(); -} -// -// IndexSpec struct -// -function IndexSpec(name, keyPath, unique, multi, auto, compound, dotted) { - /// - /// - /// - /// - /// - /// - /// - this.name = name; - this.keyPath = keyPath; - this.unique = unique; - this.multi = multi; - this.auto = auto; - this.compound = compound; - this.dotted = dotted; - var keyPathSrc = typeof keyPath === 'string' ? keyPath : keyPath && ('[' + [].join.call(keyPath, '+') + ']'); - this.src = (unique ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + keyPathSrc; -} -// -// TableSchema struct -// -function TableSchema(name, primKey, indexes, instanceTemplate) { - /// - /// - /// - /// - this.name = name; - this.primKey = primKey || new IndexSpec(); - this.indexes = indexes || [new IndexSpec()]; - this.instanceTemplate = instanceTemplate; - this.mappedClass = null; - this.idxByName = arrayToObject(indexes, function (index) { return [index.name, index]; }); -} -function safariMultiStoreFix(storeNames) { - return storeNames.length === 1 ? storeNames[0] : storeNames; -} -function getNativeGetDatabaseNamesFn(indexedDB) { - var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames); - return fn && fn.bind(indexedDB); -} -// Export Error classes -props(Dexie, fullNameExceptions); // Dexie.XXXError = class XXXError {...}; -// -// Static methods and properties -// -props(Dexie, { - // - // Static delete() method. - // - delete: function (databaseName) { - var db = new Dexie(databaseName), promise = db.delete(); - promise.onblocked = function (fn) { - db.on("blocked", fn); - return this; - }; - return promise; - }, - // - // Static exists() method. - // - exists: function (name) { - return new Dexie(name).open().then(function (db) { - db.close(); - return true; - }).catch(Dexie.NoSuchDatabaseError, function () { return false; }); - }, - // - // Static method for retrieving a list of all existing databases at current host. - // - getDatabaseNames: function (cb) { - var getDatabaseNames = getNativeGetDatabaseNamesFn(Dexie.dependencies.indexedDB); - return getDatabaseNames ? new Promise(function (resolve, reject) { - var req = getDatabaseNames(); - req.onsuccess = function (event) { - resolve(slice(event.target.result, 0)); // Converst DOMStringList to Array - }; - req.onerror = eventRejectHandler(reject); - }).then(cb) : dbNamesDB.dbnames.toCollection().primaryKeys(cb); - }, - defineClass: function (structure) { - /// - /// Create a javascript constructor based on given template for which properties to expect in the class. - /// Any property that is a constructor function will act as a type. So {name: String} will be equal to {name: new String()}. - /// - /// Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also - /// know what type each member has. Example: {name: String, emailAddresses: [String], properties: {shoeSize: Number}} - // Default constructor able to copy given properties into this object. - function Class(properties) { - /// Properties to initialize object with. - /// - if (properties) - extend(this, properties); - } - return Class; - }, - applyStructure: applyStructure, - ignoreTransaction: function (scopeFunc) { - // In case caller is within a transaction but needs to create a separate transaction. - // Example of usage: - // - // Let's say we have a logger function in our app. Other application-logic should be unaware of the - // logger function and not need to include the 'logentries' table in all transaction it performs. - // The logging should always be done in a separate transaction and not be dependant on the current - // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction. - // - // Dexie.ignoreTransaction(function() { - // db.logentries.add(newLogEntry); - // }); - // - // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction - // in current Promise-scope. - // - // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an - // API for this because - // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout(). - // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate(). - // 3) setImmediate() is not supported in the ES standard. - // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough. - return PSD.trans ? - usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional. - scopeFunc(); // No need to change scope because there is no ongoing transaction. - }, - vip: function (fn) { - // To be used by subscribers to the on('ready') event. - // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing. - // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD - // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since - // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that. - // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip() - // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by - // the caller will not resolve until database is opened. - return newScope(function () { - PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing. - return fn(); - }); - }, - async: function (generatorFn) { - return function () { - try { - var rv = awaitIterator(generatorFn.apply(this, arguments)); - if (!rv || typeof rv.then !== 'function') - return Promise.resolve(rv); - return rv; - } - catch (e) { - return rejection(e); - } - }; - }, - spawn: function (generatorFn, args, thiz) { - try { - var rv = awaitIterator(generatorFn.apply(thiz, args || [])); - if (!rv || typeof rv.then !== 'function') - return Promise.resolve(rv); - return rv; - } - catch (e) { - return rejection(e); - } - }, - // Dexie.currentTransaction property - currentTransaction: { - get: function () { return PSD.trans || null; } - }, - waitFor: function (promiseOrFunction, optionalTimeout) { - // If a function is provided, invoke it and pass the returning value to Transaction.waitFor() - var promise = Promise.resolve(typeof promiseOrFunction === 'function' ? Dexie.ignoreTransaction(promiseOrFunction) : promiseOrFunction) - .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. - // Run given promise on current transaction. If no current transaction, just return a Dexie promise based - // on given value. - return PSD.trans ? PSD.trans.waitFor(promise) : promise; - }, - // Export our Promise implementation since it can be handy as a standalone Promise implementation - Promise: Promise, - // Dexie.debug proptery: - // Dexie.debug = false - // Dexie.debug = true - // Dexie.debug = "dexie" - don't hide dexie's stack frames. - debug: { - get: function () { return debug; }, - set: function (value) { - setDebug(value, value === 'dexie' ? function () { return true; } : dexieStackFrameFilter); - } - }, - // Export our derive/extend/override methodology - derive: derive, - extend: extend, - props: props, - override: override, - // Export our Events() function - can be handy as a toolkit - Events: Events, - // Utilities - getByKeyPath: getByKeyPath, - setByKeyPath: setByKeyPath, - delByKeyPath: delByKeyPath, - shallowClone: shallowClone, - deepClone: deepClone, - getObjectDiff: getObjectDiff, - asap: asap, - maxKey: maxKey, - minKey: minKey, - // Addon registry - addons: [], - // Global DB connection list - connections: connections, - MultiModifyError: exceptions.Modify, - errnames: errnames, - // Export other static classes - IndexSpec: IndexSpec, - TableSchema: TableSchema, - // - // Dependencies - // - // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included. - // - // In node.js, however, these properties must be set "manually" before instansiating a new Dexie(). - // For node.js, you need to require indexeddb-js or similar and then set these deps. - // - dependencies: { - // Required: - indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, - IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange - }, - // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc. - semVer: DEXIE_VERSION, - version: DEXIE_VERSION.split('.') - .map(function (n) { return parseInt(n); }) - .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }), - // https://github.com/dfahlander/Dexie.js/issues/186 - // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return - // x.default. Workaround: Set Dexie.default = Dexie. - default: Dexie, - // Make it possible to import {Dexie} (non-default import) - // Reason 1: May switch to that in future. - // Reason 2: We declare it both default and named exported in d.ts to make it possible - // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely - // exporting the symbol, not just default exporting) - Dexie: Dexie -}); -// Map DOMErrors and DOMExceptions to corresponding Dexie errors. May change in Dexie v2.0. -Promise.rejectionMapper = mapError; -// Initialize dbNamesDB (won't ever be opened on chromium browsers') -dbNamesDB = new Dexie('__dbnames'); -dbNamesDB.version(1).stores({ dbnames: 'name' }); -(function () { - // Migrate from Dexie 1.x database names stored in localStorage: - var DBNAMES = 'Dexie.DatabaseNames'; - if (typeof localStorage !== undefined && _global.document !== undefined) - try { - // Have localStorage and is not executing in a worker. Lets migrate from Dexie 1.x. - JSON.parse(localStorage.getItem(DBNAMES) || "[]") - .forEach(function (name) { return dbNamesDB.dbnames.put({ name: name }).catch(nop); }); - localStorage.removeItem(DBNAMES); - } - catch (_e) { } -})(); - -return Dexie; - -}))); -//# sourceMappingURL=dexie.js.map diff --git a/whotracksme.json b/whotracksme.json new file mode 100644 index 0000000..ac9430c --- /dev/null +++ b/whotracksme.json @@ -0,0 +1,6925 @@ +{ + "Index Exchange": { + "hosts": ["casalemedia.com", "indexww.com"], + "id": "index_exchange_", + "parent": "Index Exchange, Inc. " + }, + "CDNvideo": { + "hosts": ["cdnvideo.com"], + "id": "cdnvideo.com", + "parent": "CDNvideo" + }, + "Amazon Instant Video": { + "hosts": ["aiv-cdn.net"], + "id": "amazon_video", + "parent": "Amazon" + }, + "ShopAuskunft.de": { + "hosts": ["shopauskunft.de"], + "id": "shopauskunft.de", + "parent": "Unknown" + }, + "MicroAd": { + "hosts": ["microad.co.jp", "microad.jp", "microad.net"], + "id": "microad", + "parent": "Unknown" + }, + "Impact Radius": { + "hosts": [ + "7eer.net", + "d3cxv97fi8q177.cloudfront.net", + "evyy.net", + "impactradius-event.com", + "impactradius-tag.com", + "impactradius.com", + "ojrq.net", + "r7ls.net" + ], + "id": "impact_radius", + "parent": "Impact Radius" + }, + "AdTriba": { + "hosts": ["adtriba.com"], + "id": "adtriba.com", + "parent": "Unknown" + }, + "adnetworkperformance.com": { + "hosts": ["adnetworkperformance.com"], + "id": "adnetworkperformance.com", + "parent": "Unknown" + }, + "Urban Airship": { + "hosts": ["urbanairship.com"], + "id": "urban_airship", + "parent": "Urban Airship, Inc." + }, + "DeepIntent": { + "hosts": ["deepintent.com"], + "id": "deepintent.com", + "parent": "Unknown" + }, + "ACRWEB": { "hosts": ["ziyu.net"], "id": "acrweb", "parent": "ACRWEB" }, + "Kinja": { + "hosts": ["kinja.com"], + "id": "kinja.com", + "parent": "Gizmodo Media Group" + }, + "Adguard": { "hosts": ["adguard.com"], "id": "adguard", "parent": "Unknown" }, + "smartlink.cool": { + "hosts": ["smartlink.cool"], + "id": "smartlink.cool", + "parent": "Unknown" + }, + "Roblox": { "hosts": ["rbxcdn.com"], "id": "roblox", "parent": "Unknown" }, + "StreamRail": { + "hosts": ["streamrail.com", "streamrail.net"], + "id": "streamrail.com", + "parent": "ironSource" + }, + "24\u0421\u041c\u0418": { + "hosts": ["24smi.net", "24smi.org"], + "id": "24smi", + "parent": "Unknown" + }, + "Sellpoints": { + "hosts": ["sellpoint.net", "sellpoints.com"], + "id": "sellpoints", + "parent": "ConversionPoint Technologies Inc." + }, + "econda Cross Sell": { + "hosts": ["crosssell.info"], + "id": "crosssell.info", + "parent": "Econda" + }, + "LifeStreet Media": { + "hosts": ["lfstmedia.com"], + "id": "lifestreet_media", + "parent": "LifeStreet Corporation" + }, + "Ownpage": { "hosts": ["ownpage.fr"], "id": "ownpage", "parent": "Unknown" }, + "AdSniper": { + "hosts": ["adsniper.ru"], + "id": "adsniper.ru", + "parent": "Unknown" + }, + "Visual IQ": { + "hosts": ["myvisualiq.net"], + "id": "visual_iq", + "parent": "VisualIQ" + }, + "Yahoo! Japan": { + "hosts": [ + "storage-yahoo.jp", + "yahoo.co.jp", + "yahooapis.jp", + "yimg.jp", + "yjtag.jp" + ], + "id": "yahoo_japan", + "parent": "Unknown" + }, + "DataTables": { + "hosts": ["datatables.net"], + "id": "datatables", + "parent": "Unknown" + }, + "Acquia": { + "hosts": ["acquia.com"], + "id": "acquia.com", + "parent": "Unknown" + }, + "adtr02.com": { + "hosts": ["adtr02.com"], + "id": "adtr02.com", + "parent": "Unknown" + }, + "IAB Consent": { + "hosts": ["consensu.org"], + "id": "iab_consent", + "parent": "IAB" + }, + "cpx.to": { "hosts": ["cpx.to"], "id": "cpx.to", "parent": "Unknown" }, + "CoNative": { + "hosts": ["conative.de"], + "id": "conative.de", + "parent": "Unknown" + }, + "Meetrics": { + "hosts": ["meetrics.net", "mxcdn.net", "research.de.com"], + "id": "meetrics", + "parent": "Meetrics GmbH" + }, + "United Internet Media GmbH": { + "hosts": ["tifbs.net", "ui-portal.de", "uimserv.net"], + "id": "united_internet_media_gmbh", + "parent": "United Internet AG" + }, + "bRealTime": { + "hosts": ["brealtime.com"], + "id": "brealtime", + "parent": "Unknown" + }, + "Greentube Internet Entertainment Solutions": { + "hosts": ["greentube.com", "gt-cdn.net"], + "id": "greentube.com", + "parent": "Unknown" + }, + "Zendesk": { "hosts": ["zendesk.com"], "id": "zendesk", "parent": "Zendesk" }, + "Vergic": { + "hosts": ["vergic.com"], + "id": "vergic.com", + "parent": "Unknown" + }, + "Beachfront Media": { + "hosts": ["bfmio.com"], + "id": "beachfront", + "parent": "Unknown" + }, + "adverServe": { + "hosts": ["adverserve.net"], + "id": "adverserve", + "parent": "adverServe" + }, + "Pusher": { + "hosts": ["pusher.com", "pusherapp.com"], + "id": "pusher.com", + "parent": "Unknown" + }, + "stailamedia.com": { + "hosts": ["stailamedia.com"], + "id": "stailamedia_com", + "parent": "Unknown" + }, + "Shopgate": { + "hosts": ["shopgate.com"], + "id": "shopgate.com", + "parent": "Unknown" + }, + "Yandex.API": { + "hosts": ["yandex.st"], + "id": "yandex.api", + "parent": "Yandex" + }, + "Google AdServices": { + "hosts": ["googleadservices.com"], + "id": "google_adservices", + "parent": "Google" + }, + "pushno.com": { + "hosts": ["pushno.com"], + "id": "pushno.com", + "parent": "Unknown" + }, + "TubeMogul": { + "hosts": ["tubemogul.com"], + "id": "tubemogul", + "parent": "TubeMogul" + }, + "Piano": { + "hosts": ["npttech.com", "tinypass.com"], + "id": "tinypass", + "parent": "Piano (Previously Tinypass)" + }, + "Dailymotion": { + "hosts": [ + "dailymotion.com", + "dailymotionbus.com", + "dm-event.net", + "dmcdn.net" + ], + "id": "dailymotion", + "parent": "Vivendi" + }, + "overheat": { + "hosts": ["overheat.it"], + "id": "overheat.it", + "parent": "Unknown" + }, + "RichRelevance": { + "hosts": ["ics0.com", "richrelevance.com"], + "id": "richrelevance", + "parent": "RichRelevance" + }, + "Adomik": { "hosts": ["adomik.com"], "id": "adomik", "parent": "Unknown" }, + "Tovarro": { + "hosts": ["tovarro.com"], + "id": "tovarro.com", + "parent": "Unknown" + }, + "undercomputer.com": { + "hosts": ["undercomputer.com"], + "id": "undercomputer.com", + "parent": "Unknown" + }, + "mobtrks.com": { + "hosts": ["mobtrks.com"], + "id": "mobtrks.com", + "parent": "Unknown" + }, + "cdnwidget.com": { + "hosts": ["cdnwidget.com"], + "id": "cdnwidget.com", + "parent": "Unknown" + }, + "algovid.com": { + "hosts": ["algovid.com"], + "id": "algovid.com", + "parent": "Unknown" + }, + "Yieldify": { + "hosts": ["yieldify.com"], + "id": "yieldify", + "parent": "Yieldify" + }, + "enreach": { "hosts": ["adtlgc.com"], "id": "enreach", "parent": "Unknown" }, + "Scroll": { "hosts": ["scroll.com"], "id": "scroll", "parent": "Scroll" }, + "RawGit": { "hosts": ["rawgit.com"], "id": "rawgit", "parent": "Unknown" }, + "Wetter.com": { + "hosts": ["wetter.com", "wettercomassets.com"], + "id": "wetter_com", + "parent": "Unknown" + }, + "Visualstudio.com": { + "hosts": ["visualstudio.com"], + "id": "visualstudio.com", + "parent": "Microsoft" + }, + "Pingdom": { "hosts": ["pingdom.net"], "id": "pingdom", "parent": "Pingdom" }, + "makesource.cool": { + "hosts": ["makesource.cool"], + "id": "makesource.cool", + "parent": "Unknown" + }, + "puserving.com": { + "hosts": ["puserving.com"], + "id": "puserving.com", + "parent": "Unknown" + }, + "NEORY ": { + "hosts": [ + "ad-srv.net", + "contentspread.net", + "neory-tm.com", + "simptrack.com" + ], + "id": "neory_", + "parent": "NEORY GmbH" + }, + "1DMP": { "hosts": ["1dmp.io"], "id": "1dmp.io", "parent": "Unknown" }, + "Salesforce Live Agent": { + "hosts": ["liveagentforsalesforce.com", "salesforceliveagent.com"], + "id": "salesforce_live_agent", + "parent": "Salesforce" + }, + "Giraff.io": { + "hosts": ["giraff.io"], + "id": "giraff.io", + "parent": "Unknown" + }, + "propvideo.net": { + "hosts": ["propvideo.net"], + "id": "propvideo_net", + "parent": "Unknown" + }, + "Eperflex": { + "hosts": ["email-reflex.com"], + "id": "eperflex", + "parent": "Unknown" + }, + "Azure CDN": { + "hosts": ["azureedge.net"], + "id": "azureedge.net", + "parent": "Microsoft" + }, + "Accengage": { + "hosts": ["accengage.net"], + "id": "accengage", + "parent": "Accengage" + }, + "Fastly": { + "hosts": ["fastly.net", "fastlylb.net"], + "id": "fastlylb.net", + "parent": "Fastly" + }, + "Typekit by Adobe": { + "hosts": ["typekit.com", "typekit.net"], + "id": "typekit_by_adobe", + "parent": "Adobe" + }, + "Segment": { + "hosts": [ + "d2dq2ahtl5zl1z.cloudfront.net", + "d47xnnr8b1rki.cloudfront.net", + "segment.com", + "segment.io" + ], + "id": "segment", + "parent": "Segment" + }, + "TradeTracker": { + "hosts": ["tradetracker.net"], + "id": "tradetracker", + "parent": "TradeTracker" + }, + "Naver CDN": { + "hosts": ["pstatic.net"], + "id": "pstatic.net", + "parent": "NAVER Corp" + }, + "Taobao": { "hosts": ["alipcsec.com"], "id": "taobao", "parent": "Alibaba" }, + "Yieldr": { "hosts": ["254a.com"], "id": "yieldr", "parent": "Unknown" }, + "Gamedistribution.com": { + "hosts": ["gamedistribution.com"], + "id": "gamedistribution.com", + "parent": "Unknown" + }, + "Statcounter": { + "hosts": ["statcounter.com"], + "id": "statcounter", + "parent": "StatCounter" + }, + "AddToAny": { + "hosts": ["addtoany.com"], + "id": "lockerz_share", + "parent": "LightInTheBox.com" + }, + "CreateJS": { + "hosts": ["createjs.com"], + "id": "createjs", + "parent": "Unknown" + }, + "Mopinion": { + "hosts": ["mopinion.com"], + "id": "mopinion.com", + "parent": "Mopinion" + }, + "VisualDNA": { + "hosts": ["vdna-assets.com", "visualdna.com"], + "id": "visualdna", + "parent": "Harris Insights & Analytics" + }, + "Bild.de": { "hosts": ["bildstatic.de"], "id": "bild", "parent": "Unknown" }, + "Lenua System": { + "hosts": ["lenua.de"], + "id": "lenua.de", + "parent": "Synatix" + }, + "SAS": { "hosts": ["aimatch.com", "sas.com"], "id": "sas", "parent": "SAS" }, + "Rollbar": { + "hosts": ["d37gvrvc0wt4s1.cloudfront.net"], + "id": "rollbar", + "parent": "Rollbar" + }, + "Cond\u00e9 Nast Digital": { + "hosts": ["condenast.com"], + "id": "condenastdigital.com", + "parent": "Cond\u00e9 Nast " + }, + "St-Hatena": { + "hosts": ["hatena.ne.jp", "st-hatena.com"], + "id": "st-hatena", + "parent": "Hatena Co., Ltd." + }, + "Vizury": { "hosts": ["vizury.com"], "id": "vizury", "parent": "Vizury" }, + "apicit.net": { + "hosts": ["apicit.net"], + "id": "apicit.net", + "parent": "Unknown" + }, + "MRP": { + "hosts": ["mrpdata.com", "mrpdata.net"], + "id": "mrpdata", + "parent": "Fifth Story" + }, + "redtube.com": { + "hosts": ["rdtcdn.com", "redtube.com"], + "id": "redtube.com", + "parent": "Unknown" + }, + "MediaMath": { + "hosts": ["mathads.com", "mathtag.com"], + "id": "mediamath", + "parent": "MediaMath, Inc." + }, + "WWWPromoter": { + "hosts": ["wwwpromoter.com"], + "id": "wwwpromoter", + "parent": "wwwPromoter" + }, + "bulkhentai.com": { + "hosts": ["bulkhentai.com"], + "id": "bulkhentai.com", + "parent": "Unknown" + }, + "Indeed": { "hosts": ["indeed.com"], "id": "indeed", "parent": "Indeed" }, + "RevenueHits": { + "hosts": ["clksite.com", "imageshack.host"], + "id": "revenue_hits", + "parent": "Intango" + }, + "Monster Advertising": { + "hosts": ["monster.com"], + "id": "monster_advertising", + "parent": "Monster Worldwide" + }, + "Yandex.Direct": { + "hosts": ["an.yandex.ru", "awaps.yandex.ru"], + "id": "yandex_direct", + "parent": "Yandex" + }, + "Demandbase": { + "hosts": ["company-target.com", "demandbase.com"], + "id": "demandbase", + "parent": "Unknown" + }, + "Curse": { "hosts": ["curse.com"], "id": "curse.com", "parent": "Amazon" }, + "Los Angeles Times": { + "hosts": ["latimes.com"], + "id": "latimes", + "parent": "Los Angeles Times" + }, + "Webgains": { + "hosts": ["webgains.com"], + "id": "webgains", + "parent": "Unknown" + }, + "Adnologies": { + "hosts": ["heias.com"], + "id": "adnologies", + "parent": "ADNOLOGIES GmbH" + }, + "Nexage": { "hosts": ["nexage.com"], "id": "nexage", "parent": "Verizon" }, + "Taboola": { + "hosts": ["basebanner.com", "taboola.com", "taboolasyndication.com"], + "id": "taboola", + "parent": "Taboola" + }, + "Storify": { "hosts": ["storify.com"], "id": "storify", "parent": "Unknown" }, + "Samba TV": { + "hosts": ["samba.tv"], + "id": "samba.tv", + "parent": "Free Stream Media Corp. dba Samba TV" + }, + "TrialPay": { + "hosts": ["rialpay.com", "tp-cdn.com"], + "id": "tp-cdn.com", + "parent": "Unknown" + }, + "CapitalData": { + "hosts": ["kdata.fr"], + "id": "capitaldata", + "parent": "HighCo" + }, + "westlotto.com": { + "hosts": ["westlotto.com"], + "id": "westlotto_com", + "parent": "Unknown" + }, + "CBS Interactive": { + "hosts": ["cbsinteractive.com"], + "id": "cbsi.com", + "parent": "CBS Interactive" + }, + "NBC News": { + "hosts": ["s-nbcnews.com"], + "id": "nbc_news", + "parent": "Unknown" + }, + "LiveTex": { + "hosts": ["livetex.ru"], + "id": "livetex.ru", + "parent": "Unknown" + }, + "Sociomantic": { + "hosts": ["sociomantic.com"], + "id": "sociomantic", + "parent": "Sociomantic Labs GmbH" + }, + "VKontakte": { + "hosts": ["userapi.com", "vk.com", "vkontakte.ru"], + "id": "vkontakte_widgets", + "parent": "Megafon" + }, + "Audience Square": { + "hosts": ["audiencesquare.com"], + "id": "audiencesquare.com", + "parent": "Unknown" + }, + "DigiTrust": { "hosts": ["digitru.st"], "id": "digitrust", "parent": "IAB" }, + "Vk.com": { + "hosts": ["cdn-vk.com", "vk-analytics.com", "vkuservideo.net"], + "id": "vk.com", + "parent": "Megafon" + }, + "Google Photos": { + "hosts": ["ggpht.com"], + "id": "google_photos", + "parent": "Google" + }, + "Traffic Fabrik": { + "hosts": ["trafficfabrik.com"], + "id": "trafficfabrik.com", + "parent": "Unknown" + }, + "glganltcs.space": { + "hosts": ["glganltcs.space"], + "id": "glganltcs.space", + "parent": "Unknown" + }, + "G+J e|MS": { + "hosts": ["emsservice.de"], + "id": "gujems", + "parent": "Gruner + Jahr AG" + }, + "Hola Player": { + "hosts": ["h-cdn.com"], + "id": "hola_player", + "parent": "Hola CDN" + }, + "Jetlore": { "hosts": ["jetlore.com"], "id": "jetlore", "parent": "Jetlore" }, + "TrafficForce": { + "hosts": ["trafficforce.com"], + "id": "trafficforce", + "parent": "TrafficForce" + }, + "Perform Group": { + "hosts": ["performgroup.com"], + "id": "perform_group", + "parent": "Perform Media Services Ltd" + }, + "Omniture (Adobe Analytics)": { + "hosts": [ + "2o7.net", + "du8783wkf05yr.cloudfront.net", + "hitbox.com", + "imageg.net", + "omtrdc.net" + ], + "id": "omniture__adobe_analytics_", + "parent": "Adobe" + }, + "Rakuten LinkShare": { + "hosts": ["linksynergy.com"], + "id": "linksynergy.com", + "parent": "Rakuten Marketing LLC" + }, + "Ora.TV": { "hosts": ["ora.tv"], "id": "ora.tv", "parent": "Ora.TV" }, + "HomeAway": { + "hosts": ["homeaway.com"], + "id": "homeaway", + "parent": "Unknown" + }, + "toplist.cz": { + "hosts": ["toplist.cz"], + "id": "toplist.cz", + "parent": "Unknown" + }, + "ViralGains": { + "hosts": ["viralgains.com"], + "id": "viralgains", + "parent": "Unknown" + }, + "Freedom Mortgage": { + "hosts": ["freedom.com"], + "id": "freedom_mortgage", + "parent": "Freedom Mortgage" + }, + "K\u00e4ufersiegel": { + "hosts": ["kaeufersiegel.de"], + "id": "kaeufersiegel.de", + "parent": "Unknown" + }, + "Adelphic": { + "hosts": ["ipredictive.com"], + "id": "adelphic", + "parent": "Adelphic LLC" + }, + "nosto": { "hosts": ["nosto.com"], "id": "nosto.com", "parent": "Unknown" }, + "BBC": { "hosts": ["bbci.co.uk"], "id": "bbci", "parent": "Unknown" }, + "SumoMe": { + "hosts": ["sumo.com", "sumome.com"], + "id": "sumome", + "parent": "SumoMe" + }, + "Acuity Ads": { + "hosts": ["acuityplatform.com"], + "id": "acuity_ads", + "parent": "Acuityads Inc." + }, + "akamoihd.net": { + "hosts": ["akamoihd.net"], + "id": "akamoihd.net", + "parent": "Unknown" + }, + "zog.link": { "hosts": ["zog.link"], "id": "zog.link", "parent": "Unknown" }, + "adbetnet": { + "hosts": ["adbetclickin.pink", "adbetnet.com"], + "id": "adbetclickin.pink", + "parent": "Unknown" + }, + "Optanaon by OneTrust": { + "hosts": ["cookielaw.org"], + "id": "optanaon", + "parent": "Unknown" + }, + "PubNub": { + "hosts": ["pubnub.com"], + "id": "pubnub.com", + "parent": "Unknown" + }, + "eluxer.net": { + "hosts": ["eluxer.net"], + "id": "eluxer_net", + "parent": "Unknown" + }, + "Github Pages": { + "hosts": ["github.io"], + "id": "github_pages", + "parent": "GitHub, Inc." + }, + "Videology": { + "hosts": ["tidaltv.com"], + "id": "videology", + "parent": "Videology Ltd." + }, + "easylist.club": { + "hosts": ["easylist.club"], + "id": "easylist_club", + "parent": "Unknown" + }, + "ipify": { "hosts": ["ipify.org"], "id": "ipify", "parent": "Unknown" }, + "Kissmetrics": { + "hosts": ["kissmetrics.com"], + "id": "kissmetrics.com", + "parent": "Unknown" + }, + "ScoreCard Research": { + "hosts": [ + "comscore.com", + "scorecardresearch.com", + "scoreresearch.com", + "scrsrch.com", + "securestudies.com" + ], + "id": "scorecard_research_beacon", + "parent": "comScore, Inc." + }, + "adtng.com": { + "hosts": ["adtng.com"], + "id": "adtng.com", + "parent": "Unknown" + }, + "BlueConic": { + "hosts": ["blueconic.net"], + "id": "blueconic.net", + "parent": "Unknown" + }, + "Nekudo": { "hosts": ["nekudo.com"], "id": "nekudo.com", "parent": "Nekudo" }, + "Apester": { + "hosts": ["apester.com"], + "id": "apester", + "parent": "Apester Ltd" + }, + "blogimg.jp": { + "hosts": ["blogimg.jp"], + "id": "blogimg.jp", + "parent": "LINE Corporation" + }, + "Keen IO": { + "hosts": ["dc8na2hxrj29i.cloudfront.net", "keen.io"], + "id": "keen_io", + "parent": "Keen IO" + }, + "stayfriends.de": { + "hosts": ["stayfriends.de"], + "id": "stayfriends.de", + "parent": "Unknown" + }, + "Hubvisor": { + "hosts": ["hubvisor.io"], + "id": "hubvisor.io", + "parent": "Unknown" + }, + "Nativo": { + "hosts": ["ntv.io", "postrelease.com"], + "id": "nativo", + "parent": "Nativo, Inc." + }, + "TripAdvisor": { + "hosts": [ + "jscache.com", + "tacdn.com", + "tamgrt.com", + "tripadvisor.co.uk", + "tripadvisor.com", + "tripadvisor.de" + ], + "id": "tripadvisor", + "parent": "IAC (InterActiveCorp)" + }, + "Bannerflow": { + "hosts": ["bannerflow.com"], + "id": "bannerflow.com", + "parent": "Bannerflow AB" + }, + "Zimbio": { + "hosts": ["zimbio.com"], + "id": "zimbio.com", + "parent": "Unknown" + }, + "ShareThrough": { + "hosts": ["shareth.ru", "sharethrough.com"], + "id": "sharethrough", + "parent": "Sharethrough, Inc" + }, + "freegeoip.net": { + "hosts": ["freegeoip.net"], + "id": "freegeoip_net", + "parent": "Unknown" + }, + "Beeswax": { + "hosts": ["bidr.io"], + "id": "beeswax", + "parent": "BeeswaxIO Corporation" + }, + "ADventori": { + "hosts": ["adventori.com"], + "id": "adventori", + "parent": "ADventori SAS" + }, + "DANtrack": { + "hosts": ["dantrack.net"], + "id": "dantrack.net", + "parent": "Dentsu Aegis Network" + }, + "Clearbit": { + "hosts": ["clearbit.com"], + "id": "clearbit.com", + "parent": "Clearbit" + }, + "Eloqua": { + "hosts": ["eloqua.com", "en25.com"], + "id": "eloqua", + "parent": "Oracle" + }, + "Stripe": { + "hosts": ["stripe.com", "stripe.network"], + "id": "stripe.com", + "parent": "Unknown" + }, + "Smarter Travel Media": { + "hosts": ["smartertravel.com", "travelsmarter.net"], + "id": "smarter_travel", + "parent": "IAC (InterActiveCorp)" + }, + "Tumblr Analytics": { + "hosts": ["sre-perim.com", "txmblr.com"], + "id": "tumblr_analytics", + "parent": "Verizon" + }, + "Hurra Tracker": { + "hosts": ["hurra.com"], + "id": "hurra_tracker", + "parent": "Hurra Communications" + }, + "Blogfoster": { + "hosts": ["blogfoster.com"], + "id": "blogfoster.com", + "parent": "Blogfoster GmbH" + }, + "ClearPier": { + "hosts": ["pulseradius.com"], + "id": "clear_pier", + "parent": "ClearPier" + }, + "MyFonts": { + "hosts": ["myfonts.net"], + "id": "myfonts_counter", + "parent": "MyFonts" + }, + "GfK": { "hosts": ["sensic.net"], "id": "gfk", "parent": "GfK Group" }, + "Zopim": { "hosts": ["zopim.com"], "id": "zopim", "parent": "Zopim" }, + "bodelen.com": { + "hosts": ["bodelen.com"], + "id": "bodelen.com", + "parent": "Unknown" + }, + "Weborama": { + "hosts": ["adrcdn.com", "adrcntr.com", "weborama.com", "weborama.fr"], + "id": "weborama", + "parent": "WEBORAMA" + }, + "gfycat": { + "hosts": ["gfycat.com"], + "id": "gfycat.com", + "parent": "Unknown" + }, + "Boxever": { "hosts": ["boxever.com"], "id": "boxever", "parent": "Boxever" }, + "Bemobile": { + "hosts": ["bemobile.ua"], + "id": "bemobile.ua", + "parent": "Bemobile" + }, + "SoMo Audience": { + "hosts": ["mobileadtrading.com"], + "id": "somoaudience", + "parent": "SoMo Audience" + }, + "1&1 Internet": { + "hosts": ["1and1.com", "1und1.de", "uicdn.com", "website-start.de"], + "id": "1und1", + "parent": "Unknown" + }, + "SLI Systems": { + "hosts": ["sli-system.com"], + "id": "resultspage.com", + "parent": "SLI Systems" + }, + "Falk Technologies": { + "hosts": ["angsrvr.com"], + "id": "falk_technologies", + "parent": "Unknown" + }, + "Nano Interactive": { + "hosts": ["audiencemanager.de"], + "id": "nano_interactive", + "parent": "Nano Interactive GmbH" + }, + "Snowplow": { + "hosts": [ + "d346whrrklhco7.cloudfront.net", + "d78fikflryjgj.cloudfront.net", + "dc8xl0ndzn2cb.cloudfront.net", + "playwire.com", + "snplow.net" + ], + "id": "snowplow", + "parent": "Snowplow" + }, + "Fyber": { "hosts": ["fyber.com"], "id": "fyber", "parent": "Fyber " }, + "ReadSpeaker": { + "hosts": ["readspeaker.com"], + "id": "readspeaker.com", + "parent": "Unknown" + }, + "SociaPlus": { + "hosts": ["sociaplus.com"], + "id": "sociaplus.com", + "parent": "Unknown" + }, + "Interyield": { + "hosts": ["ps7894.com"], + "id": "interyield", + "parent": "Advertise.com" + }, + "ZeusClicks": { + "hosts": ["zeusclicks.com"], + "id": "zeusclicks", + "parent": "Unknown" + }, + "Consumable": { + "hosts": ["serverbid.com"], + "id": "consumable", + "parent": "GiftConnect" + }, + "Google Appspot": { + "hosts": ["appspot.com"], + "id": "google_appspot", + "parent": "Google" + }, + "ContentSquare": { + "hosts": ["contentsquare.net"], + "id": "contentsquare.net", + "parent": "Unknown" + }, + "licensebuttons.net": { + "hosts": ["licensebuttons.net"], + "id": "licensebuttons.net", + "parent": "Unknown" + }, + "redblue": { + "hosts": ["redblue.de"], + "id": "redblue_de", + "parent": "Unknown" + }, + "SmartClip": { + "hosts": ["smartclip.net"], + "id": "smartclip", + "parent": "smartclip Holding AG" + }, + "xHamster": { + "hosts": [ + "xhamster.com", + "xhamsterlive.com", + "xhamsterpremium.com", + "xhcdn.com" + ], + "id": "xhamster", + "parent": "Unknown" + }, + "aldi-international.com": { + "hosts": ["aldi-international.com"], + "id": "aldi-international.com", + "parent": "Unknown" + }, + "Bigpoint": { + "hosts": [ + "bigpoint-payment.com", + "bigpoint.com", + "bigpoint.net", + "bpcdn.net", + "bpsecure.com" + ], + "id": "bigpoint", + "parent": "Unknown" + }, + "Yandex Metrika": { + "hosts": ["mc.yandex.ru"], + "id": "yandex_metrika", + "parent": "Yandex" + }, + "Usabilla": { + "hosts": ["usabilla.com"], + "id": "usabilla", + "parent": "Usabilla" + }, + "Kontextr": { "hosts": ["ktxtr.com"], "id": "kontextr", "parent": "Kontext" }, + "Livesport Media": { + "hosts": ["livesportmedia.eu"], + "id": "livesportmedia.eu", + "parent": "Unknown" + }, + "xvideos.com": { + "hosts": ["xvideos-cdn.com", "xvideos.com"], + "id": "xvideos_com", + "parent": "Unknown" + }, + "modulepush.com": { + "hosts": ["modulepush.com"], + "id": "modulepush.com", + "parent": "Unknown" + }, + "Mouseflow": { + "hosts": ["mouseflow.com"], + "id": "mouseflow", + "parent": "Mouseflow" + }, + "Netmining": { + "hosts": ["netmining.com", "netmng.com"], + "id": "netmining", + "parent": "Netmining" + }, + "Oracle RightNow": { + "hosts": ["rightnowtech.com", "rnengage.com"], + "id": "oracle_rightnow", + "parent": "Oracle" + }, + "intelliAd": { + "hosts": ["intelliad.com", "intelliad.de"], + "id": "intelliad", + "parent": "intelliAd" + }, + "TORO": { + "hosts": [ + "toro-tags.com", + "toroadvertising.com", + "toroadvertisingmedia.com" + ], + "id": "toro", + "parent": "TORO Advertising" + }, + "[24]7": { + "hosts": ["247-inc.net", "d1af033869koo7.cloudfront.net"], + "id": "24_7", + "parent": "Unknown" + }, + "Crazy Egg": { + "hosts": ["cetrk.com", "crazyegg.com", "dnn506yrbagrg.cloudfront.net"], + "id": "crazy_egg", + "parent": "Crazy Egg" + }, + "Shopify Stats": { + "hosts": ["shopify.com"], + "id": "shopify_stats", + "parent": "Shopify" + }, + "GroovinAds": { + "hosts": ["groovinads.com"], + "id": "groovinads", + "parent": "GroovinAds" + }, + "Effective Measure": { + "hosts": ["effectivemeasure.net"], + "id": "effective_measure", + "parent": "Effective Measure" + }, + "Zendesk CDN": { + "hosts": ["zdassets.com"], + "id": "zdassets.com", + "parent": "Zendesk" + }, + "ad4mat": { + "hosts": [ + "ad4mat.ar", + "ad4mat.at", + "ad4mat.be", + "ad4mat.bg", + "ad4mat.br", + "ad4mat.ch", + "ad4mat.co.uk", + "ad4mat.cz", + "ad4mat.de", + "ad4mat.dk", + "ad4mat.es", + "ad4mat.fi", + "ad4mat.fr", + "ad4mat.gr", + "ad4mat.hu", + "ad4mat.it", + "ad4mat.mx", + "ad4mat.net", + "ad4mat.nl", + "ad4mat.no", + "ad4mat.pl", + "ad4mat.ro", + "ad4mat.ru", + "ad4mat.se", + "ad4mat.tr" + ], + "id": "ad4mat", + "parent": "ad4mat" + }, + "PopAds": { + "hosts": ["popads.net", "popadscdn.net"], + "id": "popads", + "parent": "PopAds" + }, + "AdOcean": { "hosts": ["adocean.pl"], "id": "adocean", "parent": "AdOcean" }, + "Media Innovation Group": { + "hosts": ["mookie1.com"], + "id": "media_innovation_group", + "parent": "Media Innovation Group" + }, + "coll2onf.com": { + "hosts": ["coll2onf.com"], + "id": "coll2onf.com", + "parent": "Unknown" + }, + "healte.de": { + "hosts": ["healte.de"], + "id": "healte.de", + "parent": "Unknown" + }, + "Rockerbox": { + "hosts": ["getrockerbox.com"], + "id": "rockerbox", + "parent": "Rockerbox" + }, + "clcknads.pro": { + "hosts": ["clcknads.pro"], + "id": "clcknads.pro", + "parent": "Unknown" + }, + "Routenplaner Karten": { + "hosts": ["routenplaner-karten.com"], + "id": "routenplaner-karten.com", + "parent": "Unknown" + }, + "DataCaciques": { + "hosts": ["datacaciques.com"], + "id": "datacaciques.com", + "parent": "Unknown" + }, + "SessionCam": { + "hosts": ["d2oh4tlt9mrke9.cloudfront.net", "sessioncam.com"], + "id": "sessioncam", + "parent": "SessionCam" + }, + "Mapbox": { "hosts": ["mapbox.com"], "id": "mapbox", "parent": "Unknown" }, + "Fidelity Media": { + "hosts": ["fidelity-media.com"], + "id": "fidelity_media", + "parent": "Fidelity Media" + }, + "algolia": { + "hosts": ["algolia.com", "algolia.net"], + "id": "algolia.net", + "parent": "Unknown" + }, + "khzbeucrltin.com": { + "hosts": ["khzbeucrltin.com"], + "id": "khzbeucrltin.com", + "parent": "Unknown" + }, + "bluenewsupdate.info": { + "hosts": ["bluenewsupdate.info"], + "id": "bluenewsupdate.info", + "parent": "Unknown" + }, + "Ligatus": { + "hosts": [ + "content-recommendation.net", + "ligadx.com", + "ligatus.com", + "ligatus.de", + "veeseo.com" + ], + "id": "ligatus", + "parent": "Gruner + Jahr AG" + }, + "sheego.de": { + "hosts": ["sheego.de"], + "id": "sheego.de", + "parent": "Unknown" + }, + "Perimeterx": { + "hosts": ["perimeterx.net"], + "id": "perimeterx.net", + "parent": "Unknown" + }, + "Datalogix": { + "hosts": ["inextaction.net", "nexac.com"], + "id": "datalogix", + "parent": "Oracle" + }, + "webclose.net": { + "hosts": ["webclose.net"], + "id": "webclose.net", + "parent": "Unknown" + }, + "WiredMinds": { + "hosts": ["wiredminds.com", "wiredminds.de"], + "id": "wiredminds", + "parent": "WiredMinds" + }, + "Salesforce": { + "hosts": ["force.com", "salesforce.com"], + "id": "salesforce.com", + "parent": "Salesforce" + }, + "Kampyle": { + "hosts": ["kampyle.com"], + "id": "kampyle", + "parent": "Medallia Inc. " + }, + "Datonics": { + "hosts": ["pro-market.net"], + "id": "datonics", + "parent": "Unknown" + }, + "Google Shopping": { + "hosts": ["googlecommerce.com"], + "id": "google_trusted_stores", + "parent": "Google" + }, + "howtank": { + "hosts": ["howtank.com"], + "id": "howtank.com", + "parent": "Unknown" + }, + "Awin1": { "hosts": ["awin.com"], "id": "awin1.com", "parent": "Awin" }, + "Vi": { "hosts": ["digitaltarget.ru"], "id": "vi", "parent": "Vi" }, + "Krux Digital": { + "hosts": ["krxd.net"], + "id": "krux_digital", + "parent": "Salesforce" + }, + "superfastcdn.com": { + "hosts": ["superfastcdn.com"], + "id": "superfastcdn.com", + "parent": "Unknown" + }, + "bongacams.com": { + "hosts": ["bongacams.com"], + "id": "bongacams.com", + "parent": "Unknown" + }, + "etracker": { + "hosts": ["etracker.com", "etracker.de", "sedotracker.com"], + "id": "etracker", + "parent": "etracker GmbH" + }, + "luckypushh.com": { + "hosts": ["luckypushh.com"], + "id": "luckypushh.com", + "parent": "Unknown" + }, + "Branch": { + "hosts": ["app.link", "branch.io"], + "id": "branch_metrics", + "parent": "Branch Metrics Inc" + }, + "Evergage": { + "hosts": ["evergage.com"], + "id": "evergage.com", + "parent": "Unknown" + }, + "SoundCloud": { + "hosts": ["sndcdn.com", "soundcloud.com"], + "id": "soundcloud", + "parent": "SoundCloud" + }, + "Bidswitch": { + "hosts": ["bidswitch.net", "exe.bid"], + "id": "bidswitch", + "parent": "BIDSWITCH GmbH" + }, + "Brightcove": { + "hosts": ["brightcove.com"], + "id": "brightcove", + "parent": "Brightcove" + }, + "AT Internet": { + "hosts": ["ati-host.net", "aticdn.net", "xiti.com"], + "id": "at_internet", + "parent": "AT Internet" + }, + "Hyvyd GmbH": { "hosts": ["hyvyd.com"], "id": "hyvyd", "parent": "Unknown" }, + "m-pathy": { "hosts": ["m-pathy.com"], "id": "m-pathy", "parent": "m-pathy" }, + "iPerceptions": { + "hosts": ["iperceptions.com"], + "id": "iperceptions", + "parent": "iPerceptions" + }, + "Rakuten Global Market": { + "hosts": ["rakuten.co.jp"], + "id": "rakuten_globalmarket", + "parent": "Rakuten Marketing LLC" + }, + "InfoLinks": { + "hosts": ["infolinks.com", "intextscript.com"], + "id": "infolinks", + "parent": "Infolinks" + }, + "Bidtellect": { + "hosts": ["bttrack.com"], + "id": "bidtellect", + "parent": "Bidtellect, Inc" + }, + "Wikia CDN": { + "hosts": ["nocookie.net"], + "id": "wikia_cdn", + "parent": "Wikia" + }, + "Orange France": { + "hosts": ["wanadoo.fr"], + "id": "orange_france", + "parent": "Orange France" + }, + "Loggly": { "hosts": ["loggly.com"], "id": "loggly", "parent": "Loggly" }, + "Snapchat For Business": { + "hosts": ["sc-static.net", "snapchat.com"], + "id": "snapchat", + "parent": "Unknown" + }, + "Brandmetrics.com": { + "hosts": ["brandmetrics.com"], + "id": "brandmetrics.com", + "parent": "Unknown" + }, + "Chatango": { + "hosts": ["chatango.com"], + "id": "chatango", + "parent": "Chatango" + }, + "Curse CDN": { + "hosts": ["cursecdn.com"], + "id": "cursecdn.com", + "parent": "Amazon" + }, + "BigCommerce": { + "hosts": ["bigcommerce.com"], + "id": "bigcommerce.com", + "parent": "BigCommerce" + }, + "Bebi Media": { "hosts": ["bebi.com"], "id": "bebi", "parent": "Unknown" }, + "RadiumOne": { + "hosts": ["gwallet.com", "r1-cdn.net"], + "id": "radiumone", + "parent": "RhythmOne, LLC" + }, + "Map and Route": { + "hosts": ["mapandroute.de"], + "id": "mapandroute.de", + "parent": "Unknown" + }, + "Auditorius": { + "hosts": ["audtd.com"], + "id": "audtd.com", + "parent": "Unknown" + }, + "Instart Logic": { + "hosts": ["sdad.guru"], + "id": "instart_logic", + "parent": "Instart Logic Inc." + }, + "Vicomi": { + "hosts": ["vicomi.com"], + "id": "vicomi.com", + "parent": "Unknown" + }, + "Amazon CloudFront": { + "hosts": ["cloudfront.net"], + "id": "amazon_cloudfront", + "parent": "Amazon" + }, + "borrango.com": { + "hosts": ["borrango.com"], + "id": "borrango.com", + "parent": "Unknown" + }, + "vooxe.com": { + "hosts": ["vooxe.com"], + "id": "vooxe.com", + "parent": "Unknown" + }, + "CloudMedia": { + "hosts": ["cloud-media.fr"], + "id": "cloud-media.fr", + "parent": "Unknown" + }, + "Facebook": { + "hosts": ["facebook.com", "facebook.net"], + "id": "facebook", + "parent": "Facebook" + }, + "Sailthru Horizon": { + "hosts": ["sail-horizon.com", "sail-personalize.com", "sailthru.com"], + "id": "sailthru_horizon", + "parent": "Sailthru" + }, + "Ooyala": { + "hosts": ["ooyala.com"], + "id": "ooyala.com", + "parent": "Telstra" + }, + "AdRecover": { + "hosts": ["adrecover.com"], + "id": "adrecover", + "parent": "AdPushUp, Inc." + }, + "HookLogic": { + "hosts": ["hlserve.com"], + "id": "hooklogic", + "parent": "Criteo S.A." + }, + "Naver": { + "hosts": ["naver.com", "naver.net"], + "id": "naver.com", + "parent": "NAVER Corp" + }, + "Reed Business Information": { + "hosts": ["reedbusiness.net"], + "id": "reed_business_information", + "parent": "Andera Partners" + }, + "Wordpress Ads": { + "hosts": ["pubmine.com"], + "id": "wordpress_ads", + "parent": "Automattic" + }, + "Stack Exchange": { + "hosts": ["sstatic.net"], + "id": "sstatic.net", + "parent": "Unknown" + }, + "Digiteka": { + "hosts": ["digiteka.net", "ultimedia.com"], + "id": "digiteka", + "parent": "DIGITEKA Technologies" + }, + "ComboTag": { + "hosts": ["combotag.com"], + "id": "combotag", + "parent": "Unknown" + }, + "fortlachanhecksof.info": { + "hosts": ["fortlachanhecksof.info"], + "id": "fortlachanhecksof.info", + "parent": "Unknown" + }, + "The Reach Group": { + "hosts": ["deepthought.online", "reachgroup.com", "redintelligence.net"], + "id": "the_reach_group", + "parent": "The Reach Group GmbH" + }, + "Twiago": { + "hosts": ["twiago.com"], + "id": "twiago", + "parent": "twiago GmbH" + }, + "adality GmbH": { + "hosts": ["adrtx.net"], + "id": "adality_gmbh", + "parent": "Arvato Bertelsmann" + }, + "Avail": { "hosts": ["avail.net"], "id": "avail", "parent": "Avail" }, + "Insider": { + "hosts": ["useinsider.com"], + "id": "insider", + "parent": "Insider" + }, + "Unruly Media": { + "hosts": ["unrulymedia.com"], + "id": "unruly_media", + "parent": "Unruly Group Ltd" + }, + "Nanigans": { + "hosts": ["nanigans.com"], + "id": "nanigans", + "parent": "Nanigans" + }, + "Gruner + Jahr": { + "hosts": ["guj.de"], + "id": "guj.de", + "parent": "Gruner + Jahr AG" + }, + "MediaNova CDN": { + "hosts": ["mncdn.com"], + "id": "mncdn.com", + "parent": "Unknown" + }, + "Expedia": { + "hosts": ["expedia.com", "trvl-px.com"], + "id": "expedia", + "parent": "IAC (InterActiveCorp)" + }, + "Active Agent": { + "hosts": ["active-agent.com"], + "id": "active_agent", + "parent": "Active Agent AG" + }, + "Traffective": { + "hosts": ["cdntrf.com", "traffective.com"], + "id": "traffective", + "parent": "Unknown" + }, + "perfdrive.com": { + "hosts": ["perfdrive.com"], + "id": "perfdrive.com", + "parent": "Unknown" + }, + "Delve Networks": { + "hosts": ["delvenetworks.com"], + "id": "delve_networks", + "parent": "Limelight Networks" + }, + "TrackJS": { + "hosts": [ + "d2zah9y47r7bi2.cloudfront.net", + "dl1d2m8ri9v3j.cloudfront.net", + "trackjs.com" + ], + "id": "trackjs", + "parent": "TrackJS" + }, + "Didomi": { + "hosts": ["privacy-center.org"], + "id": "didomi", + "parent": "Didomi" + }, + "adNET.de": { + "hosts": ["adnet.biz", "adnet.de"], + "id": "adnet.de", + "parent": "adNET.de" + }, + "7tv.de": { "hosts": ["7tv.de"], "id": "7tv.de", "parent": "Unknown" }, + "Maru-EDU": { + "hosts": ["edigitalsurvey.com"], + "id": "maru-edu", + "parent": "MaruEdr" + }, + "poirreleast.club": { + "hosts": ["poirreleast.club"], + "id": "poirreleast.club", + "parent": "Unknown" + }, + "srvtrck.com": { + "hosts": ["srvtrck.com"], + "id": "srvtrck.com", + "parent": "Unknown" + }, + "Adalyser": { + "hosts": ["adalyser.com"], + "id": "adalyser.com", + "parent": "OneSoon Ltd" + }, + "Kiosked": { "hosts": ["kiosked.com"], "id": "kiosked", "parent": "Kiosked" }, + "Vox": { "hosts": ["vox-cdn.com"], "id": "vox", "parent": "Vox Media" }, + "ad-delivery.net": { + "hosts": ["ad-delivery.net"], + "id": "ad-delivery.net", + "parent": "Unknown" + }, + "Cedexis Radar": { + "hosts": [ + "cedexis-radar.net", + "cedexis-test.com", + "cedexis.com", + "cedexis.fastlylb.net", + "cedexis.net" + ], + "id": "cedexis_radar", + "parent": "Cedexis" + }, + "redGalaxy CDN": { + "hosts": ["atendesoftware.pl"], + "id": "redcdn.pl", + "parent": "Atende Software Sp. z o.o." + }, + "Adtheorent": { + "hosts": ["adentifi.com"], + "id": "adtheorent", + "parent": "AdTheorent, Inc" + }, + "tomnewsupdate.info": { + "hosts": ["tomnewsupdate.info"], + "id": "tomnewsupdate.info", + "parent": "Unknown" + }, + "Urban Media GmbH": { + "hosts": ["urban-media.com"], + "id": "urban-media.com", + "parent": "Unknown" + }, + "fontawesome.com": { + "hosts": ["fontawesome.com"], + "id": "fontawesome_com", + "parent": "Unknown" + }, + "ADmantX": { + "hosts": ["admantx.com"], + "id": "admantx.com", + "parent": "Expert System, SpA" + }, + "iGoDigital": { + "hosts": ["igodigital.com"], + "id": "igodigital", + "parent": "iGoDigital" + }, + "Etsy CDN": { + "hosts": ["etsystatic.com"], + "id": "etsystatic", + "parent": "Etsy, Inc." + }, + "TripleLift": { + "hosts": ["3lift.com", "d3iwjrnl4m67rd.cloudfront.net", "triplelift.com"], + "id": "triplelift", + "parent": "TripleLift, Inc." + }, + "OnThe.io": { "hosts": ["onthe.io"], "id": "onthe.io", "parent": "onthe.io" }, + "VG Wort": { "hosts": ["vgwort.de"], "id": "vg_wort", "parent": "VG Wort" }, + "Ippen Digital": { + "hosts": ["id-news.net", "idcdn.de"], + "id": "id-news.net", + "parent": "Unknown" + }, + "Vibrant Ads": { + "hosts": ["intellitxt.com"], + "id": "vibrant_ads", + "parent": "Vibrant Media Limited" + }, + "Footprint DNS": { + "hosts": ["footprintdns.com"], + "id": "footprintdns.com", + "parent": "Microsoft" + }, + "Refined Labs": { + "hosts": ["refinedads.com"], + "id": "refined_labs", + "parent": "Refined Labs" + }, + "vacaneedasap.com": { + "hosts": ["vacaneedasap.com"], + "id": "vacaneedasap.com", + "parent": "Unknown" + }, + "newsupdatedir.info": { + "hosts": ["newsupdatedir.info"], + "id": "newsupdatedir.info", + "parent": "Unknown" + }, + "nerfherdersolo.com": { + "hosts": ["nerfherdersolo.com"], + "id": "nerfherdersolo_com", + "parent": "Unknown" + }, + "Wix": { + "hosts": ["parastorage.com", "wix.com"], + "id": "wix.com", + "parent": "Unknown" + }, + "Adtrue": { "hosts": ["adtrue.com"], "id": "adtrue", "parent": "AdTrue" }, + "Smartlook": { + "hosts": ["getsmartlook.com", "smartlook.com"], + "id": "smartlook", + "parent": "SmartLook" + }, + "Wix Media Platform": { + "hosts": ["wixmp.com"], + "id": "wixmp", + "parent": "Wix" + }, + "LiveChat": { + "hosts": ["livechatinc.com", "livechatinc.net"], + "id": "livechat", + "parent": "LiveChat" + }, + "Schibsted Media Group": { + "hosts": ["schibsted.com", "schibsted.io"], + "id": "schibsted", + "parent": "Schibsted ASA" + }, + "Embedly": { + "hosts": ["embed.ly", "embedly.com"], + "id": "embed.ly", + "parent": "Medium" + }, + "wnzmauurgol.com": { + "hosts": ["wnzmauurgol.com"], + "id": "wnzmauurgol.com", + "parent": "Unknown" + }, + "IXI Digital": { + "hosts": ["ixiaa.com"], + "id": "ixi_digital", + "parent": "IXI Services" + }, + "ADTECH": { + "hosts": ["adtech.de", "adtechus.com"], + "id": "adtech", + "parent": "Verizon" + }, + "1plusX": { + "hosts": ["opecloud.com"], + "id": "1plusx", + "parent": "1plusX AG" + }, + "Next Tuesday GmbH": { + "hosts": ["nt.vc"], + "id": "nt.vc", + "parent": "Unknown" + }, + "Adzerk": { "hosts": ["adzerk.net"], "id": "adzerk", "parent": "Adzerk" }, + "solads.media": { + "hosts": ["solads.media"], + "id": "solads.media", + "parent": "Unknown" + }, + "SkimLinks": { + "hosts": ["redirectingat.com", "skimlinks.com", "skimresources.com"], + "id": "skimlinks", + "parent": "SkimLinks" + }, + "CCM Benchmark": { + "hosts": ["ccmbg.com"], + "id": "ccm_benchmark", + "parent": "Unknown" + }, + "i-mobile": { + "hosts": ["i-mobile.co.jp"], + "id": "i-mobile", + "parent": "i-mobile" + }, + "Engagio": { "hosts": ["engagio.com"], "id": "engagio", "parent": "Engagio" }, + "Switch Concepts": { + "hosts": [ + "myswitchads.com", + "switchadhub.com", + "switchads.com", + "switchafrica.com" + ], + "id": "switch_concepts", + "parent": "Switch Concepts Limited" + }, + "OpenStat": { + "hosts": ["openstat.net"], + "id": "openstat", + "parent": "Unknown" + }, + "OnFocus": { + "hosts": ["fogl1onf.com", "onfocus.io"], + "id": "onfocus.io", + "parent": "OnFocus" + }, + "Jumptap": { + "hosts": ["jumptap.com"], + "id": "jumptap", + "parent": "Millenial Media (Jumptap)" + }, + "loadercdn.com": { + "hosts": ["loadercdn.com"], + "id": "loadercdn.com", + "parent": "Unknown" + }, + "belboon GmbH": { + "hosts": ["belboon.de"], + "id": "belboon_gmbh", + "parent": "Unknown" + }, + "webclicks24.com": { + "hosts": ["webclicks24.com"], + "id": "webclicks24_com", + "parent": "Unknown" + }, + "Orange": { + "hosts": ["orange.fr", "orangeads.fr"], + "id": "orange", + "parent": "Orange Mobile" + }, + "BugHerd": { + "hosts": ["bugherd.com"], + "id": "bugherd.com", + "parent": "Macropod Software Pty Ltd" + }, + "Google Analytics": { + "hosts": ["google-analytics.com"], + "id": "google_analytics", + "parent": "Google" + }, + "GroupM Server": { + "hosts": ["gmads.net", "grmtech.net"], + "id": "groupm_server", + "parent": "GroupM" + }, + "Autoscout24": { + "hosts": ["autoscout24.com", "autoscout24.net"], + "id": "autoscout24.com", + "parent": "Scout 24" + }, + "Zencoder": { + "hosts": ["zencdn.net"], + "id": "zencoder", + "parent": "Zencoder" + }, + "umebiggestern.club": { + "hosts": ["umebiggestern.club"], + "id": "umebiggestern.club", + "parent": "Unknown" + }, + "Disqus": { + "hosts": ["disqus.com", "disquscdn.com"], + "id": "disqus", + "parent": "Disqus" + }, + "Quantcount": { + "hosts": ["quantcount.com"], + "id": "quantcount", + "parent": "Quantcast International Limited" + }, + "Chute": { + "hosts": ["api.getchute.com", "media.chute.io"], + "id": "chute", + "parent": "ESW Capital" + }, + "Forter": { "hosts": ["forter.com"], "id": "forter", "parent": "Unknown" }, + "Gravatar": { + "hosts": ["gravatar.com"], + "id": "gravatar", + "parent": "Automattic" + }, + "jsDelivr": { + "hosts": ["jsdelivr.net"], + "id": "jsdelivr", + "parent": "Unknown" + }, + "Google Servers": { + "hosts": ["1e100cdn.net"], + "id": "google_servers", + "parent": "Google" + }, + "flixcdn.com": { + "hosts": ["flixcdn.com"], + "id": "flixcdn.com", + "parent": "Unknown" + }, + "MoPub": { "hosts": ["mopub.com"], "id": "mopub", "parent": "Twitter" }, + "LiveRamp": { + "hosts": ["pippio.com", "rapleaf.com", "rlcdn.com"], + "id": "liveramp", + "parent": "Acxiom" + }, + "Wipe Analytics": { + "hosts": ["wipe.de"], + "id": "web_wipe_anlaytics", + "parent": "TenSquare" + }, + "Internet BillBoard": { + "hosts": ["bbelements.com", "goadservices.com", "ibillboard.com"], + "id": "internet_billboard", + "parent": "Internet BillBoard a.s." + }, + "Leadin": { + "hosts": ["hsleadflows.net"], + "id": "hsleadflows.net", + "parent": "HubSpot" + }, + "Adnium": { + "hosts": ["adnium.com"], + "id": "adnium.com", + "parent": "Unknown" + }, + "vtracy.de": { + "hosts": ["vtracy.de"], + "id": "vtracy.de", + "parent": "Unknown" + }, + "OneTrust": { + "hosts": ["onetrust.com"], + "id": "onetrust", + "parent": "OneTrust" + }, + "SiteImprove Analytics": { + "hosts": ["siteimproveanalytics.com"], + "id": "siteimprove_analytics", + "parent": "Siteimprove" + }, + "Fiksu": { "hosts": ["fiksu.com"], "id": "fiksu", "parent": "Noosphere" }, + "POWr": { "hosts": ["powr.io"], "id": "powr.io", "parent": "POWr" }, + "WikiMedia": { + "hosts": ["wikimedia.org", "wikipedia.org", "wikiquote.org"], + "id": "wikimedia.org", + "parent": "Wikimedia Foundation" + }, + "Plista": { + "hosts": ["plista.com"], + "id": "plista", + "parent": "plista GmbH" + }, + "Adobe Login": { + "hosts": ["adobelogin.com"], + "id": "adobe_login", + "parent": "Adobe" + }, + "Turn Inc.": { + "hosts": ["turn.com"], + "id": "turn_inc.", + "parent": "Singtel" + }, + "AdGear": { + "hosts": ["adgear.com", "adgrx.com"], + "id": "adgear", + "parent": "Samsung" + }, + "Intermarkets": { + "hosts": ["intermarkets.net"], + "id": "intermarkets.net", + "parent": "Unknown" + }, + "Kalooga": { "hosts": ["kaloo.ga"], "id": "kaloo.ga", "parent": "Unknown" }, + "DMG Media": { + "hosts": ["and.co.uk"], + "id": "dmg_media", + "parent": "Daily Mail and General Trust plc" + }, + "Booking.com": { + "hosts": ["booking.com", "bstatic.com"], + "id": "booking.com", + "parent": "Unknown" + }, + "Travel Audience": { + "hosts": ["travelaudience.com"], + "id": "travel_audience", + "parent": "Unknown" + }, + "Jivox": { "hosts": ["jivox.com"], "id": "jivox", "parent": "Jivox Corp" }, + "ad-blocker.org": { + "hosts": ["ad-blocker.org"], + "id": "ad-blocker.org", + "parent": "Unknown" + }, + "Braze": { + "hosts": ["appboycdn.com"], + "id": "braze", + "parent": "Braze, Inc." + }, + "makeappdev.xyz": { + "hosts": ["makeappdev.xyz"], + "id": "makeappdev.xyz", + "parent": "Unknown" + }, + "exoticads": { + "hosts": ["exoticads.com"], + "id": "exoticads.com", + "parent": "Unknown" + }, + "Stride": { + "hosts": ["cdn.stridespark.com", "tracking.stridespark.com"], + "id": "stride", + "parent": "Stride Software, Inc." + }, + "Visual Website Optimizer": { + "hosts": [ + "d5phz18u4wuww.cloudfront.net", + "visualwebsiteoptimizer.com", + "wingify.com" + ], + "id": "visual_website_optimizer", + "parent": "Wingify" + }, + "Le Monde.fr": { + "hosts": ["lemde.fr"], + "id": "le_monde.fr", + "parent": "Le Monde.fr" + }, + "AdBrain": { "hosts": ["adbrn.com"], "id": "adbrain", "parent": "Unknown" }, + "Magnetic": { + "hosts": ["d3ezl4ajpp2zy8.cloudfront.net", "domdex.com", "domdex.net"], + "id": "magnetic", + "parent": "Magnetic" + }, + "Truste Consent": { + "hosts": ["consent.truste.com"], + "id": "truste_consent", + "parent": "TrustArc" + }, + "OG Hub": { "hosts": ["oghub.io"], "id": "oghub.io", "parent": "Unknown" }, + "Art19": { "hosts": ["art19.com"], "id": "art19", "parent": "Art19" }, + "StackAdapt": { + "hosts": ["stackadapt.com"], + "id": "stackadapt", + "parent": "StackAdapt" + }, + "BrandWire": { + "hosts": ["brandwire.tv"], + "id": "brandwire.tv", + "parent": "Unknown" + }, + "Tamedia": { + "hosts": ["tamedia.ch"], + "id": "tamedia.ch", + "parent": "Unknown" + }, + "Segmento": { + "hosts": ["rutarget.ru"], + "id": "segmento", + "parent": "Unknown" + }, + "RTB House": { + "hosts": ["creativecdn.com"], + "id": "rtb_house", + "parent": "RTB House S.A." + }, + "GrandSlamMedia": { + "hosts": ["trw12.com", "tuberewards.com"], + "id": "grandslammedia", + "parent": "Grand Slam Media" + }, + "Navegg DMP": { + "hosts": ["navdmp.com"], + "id": "navegg_dmp", + "parent": "Navegg" + }, + "Wayfair": { + "hosts": ["wayfair.com"], + "id": "wayfair_com", + "parent": "Unknown" + }, + "Kaltura": { "hosts": ["kaltura.com"], "id": "kaltura", "parent": "Kaltura" }, + "Evidon": { + "hosts": ["betrad.com", "evidon.com"], + "id": "evidon", + "parent": "Unknown" + }, + "RevContent": { + "hosts": ["revcontent.com"], + "id": "revcontent", + "parent": "Revcontent, LLC" + }, + "Dropbox": { + "hosts": ["dropbox.com", "dropboxstatic.com"], + "id": "dropbox.com", + "parent": "Unknown" + }, + "zmctrack.net": { + "hosts": ["zmctrack.net"], + "id": "zmctrack.net", + "parent": "Unknown" + }, + "Kupona": { + "hosts": ["d31bfnnwekbny6.cloudfront.net", "kpcustomer.de", "q-sis.de"], + "id": "kupona", + "parent": "ACTU/CCI" + }, + "upravel.com": { + "hosts": ["upravel.com"], + "id": "upravel.com", + "parent": "Unknown" + }, + "SendPulse": { + "hosts": ["sendpulse.com"], + "id": "sendpulse.com", + "parent": "Unknown" + }, + "HERE (formerly Navteq Media Solutions)": { + "hosts": ["here.com"], + "id": "here__formerly_navteq_media_solutions_", + "parent": "Unknown" + }, + "Bunchbox": { + "hosts": ["bunchbox.co"], + "id": "bunchbox", + "parent": "Bunchbox" + }, + "Bonial Connect": { + "hosts": ["bonial.com", "bonialconnect.com", "bonialserviceswidget.de"], + "id": "bonial", + "parent": "Unknown" + }, + "web.de": { + "hosts": ["web.de", "webde.de"], + "id": "web.de", + "parent": "Unknown" + }, + "Browser Update": { + "hosts": ["browser-update.org"], + "id": "browser_update", + "parent": "Browser-Update" + }, + "Affec.tv": { + "hosts": ["affectv.com"], + "id": "affec.tv", + "parent": "Affectv Ltd" + }, + "Are You a Human": { + "hosts": ["areyouahuman.com"], + "id": "are_you_a_human", + "parent": "distil networks" + }, + "Batch Media": { + "hosts": ["t4ft.de"], + "id": "batch_media", + "parent": "ProSiebenSat.1 Media" + }, + "Amazon Payments": { + "hosts": ["amazonpay.com", "payments-amazon.com"], + "id": "amazon_payments", + "parent": "Amazon" + }, + "Snap Engage": { + "hosts": ["snapengage.com"], + "id": "snap_engage", + "parent": "Snap Engage" + }, + "Opinary": { "hosts": ["opinary.com"], "id": "opinary", "parent": "Unknown" }, + "HubSpot": { + "hosts": [ + "hs-analytics.net", + "hs-scripts.com", + "hubapi.com", + "hubspot.com" + ], + "id": "hubspot", + "parent": "HubSpot" + }, + "BlogHer": { + "hosts": ["blogher.com", "blogherads.com"], + "id": "blogher", + "parent": "Penske Media Corporation " + }, + "Supership": { + "hosts": ["socdm.com"], + "id": "supership", + "parent": "Unknown" + }, + "btncdn.com": { + "hosts": ["btncdn.com"], + "id": "btncdn.com", + "parent": "Unknown" + }, + "Crimtan": { + "hosts": ["ctasnet.com", "ctnsnet.com", "ctpsnet.com"], + "id": "crimtan", + "parent": "Crimtan Holdings Limited" + }, + "Spongecell": { + "hosts": ["spongecell.com"], + "id": "spongecell", + "parent": "Spongecell" + }, + "Yotpo": { "hosts": ["yotpo.com"], "id": "yotpo", "parent": "Unknown" }, + "adstir": { + "hosts": ["ad-stir.com"], + "id": "adstir", + "parent": "United Inc." + }, + "Findologic": { + "hosts": ["findologic.com"], + "id": "findologic.com", + "parent": "Unknown" + }, + "mbr targeting": { + "hosts": ["m6r.eu"], + "id": "mbr_targeting", + "parent": "Str\u00f6er SSP GmbH" + }, + "Tribal Fusion": { + "hosts": ["exponential.com", "tribalfusion.com"], + "id": "tribal_fusion", + "parent": "Exponential Interactive, Inc" + }, + "ZergNet": { "hosts": ["zergnet.com"], "id": "zergnet", "parent": "ZergNet" }, + "zalando.de": { + "hosts": ["zalan.do", "zalando.de", "ztat.net"], + "id": "zalando_de", + "parent": "Zalando" + }, + "PornHub": { + "hosts": ["phncdn.com", "pornhub.com"], + "id": "pornhub", + "parent": "Pornhub" + }, + "smi2.ru": { + "hosts": ["smi2.net", "smi2.ru", "stat.media"], + "id": "smi2.ru", + "parent": "Unknown" + }, + "Playbuzz": { + "hosts": ["playbuzz.com"], + "id": "playbuzz.com", + "parent": "Playbuzz Ltd. " + }, + "ORC International": { + "hosts": ["emxdgt.com"], + "id": "orc_international", + "parent": "Engine" + }, + "Errorception": { + "hosts": ["d15qhc0lu1ghnk.cloudfront.net", "errorception.com"], + "id": "errorception", + "parent": "Errorception" + }, + "ubersetzung-app.com": { + "hosts": ["ubersetzung-app.com"], + "id": "ubersetzung-app.com", + "parent": "Unknown" + }, + "bumlam.com": { + "hosts": ["bumlam.com"], + "id": "bumlam.com", + "parent": "Unknown" + }, + "AdMachine": { + "hosts": ["adx1.com"], + "id": "admachine", + "parent": "Unknown" + }, + "LKQD": { + "hosts": ["lkqd.net"], + "id": "lkqd", + "parent": "Nexstar Digital, LLC." + }, + "atsfi.de": { + "hosts": ["atsfi.de"], + "id": "atsfi_de", + "parent": "Axel Springer Group" + }, + "LiveInternet": { + "hosts": ["yadro.ru"], + "id": "liveinternet", + "parent": "LiveInternet" + }, + "ShortNews.de": { + "hosts": ["shortnews.de"], + "id": "shortnews", + "parent": "Unknown" + }, + "King.com": { + "hosts": ["midasplayer.com", "king.com"], + "id": "king_com", + "parent": "Activision Blizzard" + }, + "Blue Triangle": { + "hosts": ["btttag.com"], + "id": "bluetriangle", + "parent": "Unknown" + }, + "RTBmarkt": { "hosts": ["rvty.net"], "id": "rtblab", "parent": "Unknown" }, + "94j7afz2nr.xyz": { + "hosts": ["94j7afz2nr.xyz"], + "id": "94j7afz2nr.xyz", + "parent": "Unknown" + }, + "Q-Division": { + "hosts": ["q-divisioncdn.de"], + "id": "q_division", + "parent": "Unknown" + }, + "Trustwave": { + "hosts": ["trustwave.com"], + "id": "trustwave.com", + "parent": "Unknown" + }, + "Bazaarvoice": { + "hosts": ["bazaarvoice.com"], + "id": "bazaarvoice", + "parent": "Bazaarvoice" + }, + "ESPN CDN": { + "hosts": ["espncdn.com"], + "id": "espn_cdn", + "parent": "The Walt Disney Company" + }, + "Sonobi": { + "hosts": ["sonobi.com"], + "id": "sonobi", + "parent": "Sonobi, Inc" + }, + "zononi.com": { + "hosts": ["zononi.com"], + "id": "zononi.com", + "parent": "Unknown" + }, + "Klarna": { + "hosts": ["klarna.com"], + "id": "klarna.com", + "parent": "Unknown" + }, + "Catchpoint": { + "hosts": ["3gl.net"], + "id": "catchpoint", + "parent": "Catchpoint Systems" + }, + "Google Custom Search Ads": { + "hosts": ["adsensecustomsearchads.com"], + "id": "google_custom_search", + "parent": "Google" + }, + "Beeline": { + "hosts": ["beeline.ru"], + "id": "beeline.ru", + "parent": "Unknown" + }, + "ihvmcqojoj.com": { + "hosts": ["ihvmcqojoj.com"], + "id": "ihvmcqojoj.com", + "parent": "Unknown" + }, + "Freshdesk": { + "hosts": ["d36mpcpuzc4ztk.cloudfront.net", "freshdesk.com"], + "id": "freshdesk", + "parent": "Freshdesk" + }, + "INFOnline": { + "hosts": ["ioam.de", "iocnt.net", "ivwbox.de"], + "id": "infonline", + "parent": "INFOnline" + }, + "Mov.ad ": { + "hosts": ["movad.de", "movad.net"], + "id": "mov.ad_", + "parent": "Unknown" + }, + "Flowplayer": { + "hosts": ["flowplayer.org"], + "id": "flowplayer", + "parent": "FlowPlayer" + }, + "Apa": { "hosts": ["apa.at"], "id": "apa.at", "parent": "Apa" }, + "Monero Miner": { + "hosts": ["devappgrant.space"], + "id": "monero_miner", + "parent": "Unknown" + }, + "Flashtalking": { + "hosts": ["flashtalking.com"], + "id": "flashtalking", + "parent": "Flashtalking, Inc." + }, + "1000mercis": { + "hosts": ["mmtro.com"], + "id": "1000mercis", + "parent": "1000mercis" + }, + "newsupdatewe.info": { + "hosts": ["newsupdatewe.info"], + "id": "newsupdatewe.info", + "parent": "Unknown" + }, + "Mail.Ru CDN": { + "hosts": ["mycdn.me"], + "id": "mycdn.me", + "parent": "Megafon" + }, + "SevenOne Media": { + "hosts": ["71i.de"], + "id": "sevenone_media", + "parent": "Unknown" + }, + "Lucky Orange": { + "hosts": ["livestatserver.com", "luckyorange.com", "luckyorange.net"], + "id": "lucky_orange", + "parent": "Unknown" + }, + "Flickr": { + "hosts": ["flickr.com", "staticflickr.com"], + "id": "flickr_badge", + "parent": "Verizon" + }, + "Aggregate Knowledge": { + "hosts": ["agkn.com"], + "id": "aggregate_knowledge", + "parent": "Neustar " + }, + "Diamoni": { + "hosts": [ + "d3von6il1wr7wo.cloudfront.net", + "dianomi.com", + "dianomioffers.co.uk" + ], + "id": "dianomi", + "parent": "Unknown" + }, + "Between Digital": { + "hosts": ["betweendigital.com"], + "id": "betweendigital.com", + "parent": "Between Digital" + }, + "Eulerian Technologies": { + "hosts": ["ew3.io"], + "id": "eulerian", + "parent": "Eulerian Technologies" + }, + "YouPorn": { + "hosts": ["youporn.com", "ypncdn.com"], + "id": "youporn", + "parent": "Unknown" + }, + "Roq.ad": { "hosts": ["rqtrk.eu"], "id": "roq.ad", "parent": "Roq.ad GmbH" }, + "Bitrix24": { + "hosts": ["bitrix.info", "bitrix.ru"], + "id": "bitrix", + "parent": "Unknown" + }, + "Opta": { "hosts": ["opta.net"], "id": "opta.net", "parent": "Unknown" }, + "Digidip": { "hosts": ["digidip.net"], "id": "digidip", "parent": "Digidip" }, + "Qubit Opentag": { + "hosts": ["d3c3cq33003psk.cloudfront.net", "qubit.com"], + "id": "qubit", + "parent": "Unknown" + }, + "HotLog": { "hosts": ["hotlog.ru"], "id": "hotlog.ru", "parent": "Unknown" }, + "Cnetcontent": { + "hosts": ["cnetcontent.com"], + "id": "cnetcontent.com", + "parent": "CBS Interactive" + }, + "Cross Pixel": { + "hosts": ["crosspixel.net", "crsspxl.com"], + "id": "crosspixel", + "parent": "Unknown" + }, + "H\u00e4ndlerbund": { + "hosts": ["haendlerbund.de"], + "id": "haendlerbund.de", + "parent": "Unknown" + }, + "IVC Brasil": { + "hosts": ["ivcbrasil.org.br"], + "id": "ivcbrasil.org.br", + "parent": "Unknown" + }, + "OWOX": { "hosts": ["owox.com"], "id": "owox.com", "parent": "OWOX Inc." }, + "Audience Science": { + "hosts": ["revsci.net", "targetingmarketplace.com", "wunderloop.net"], + "id": "audience_science", + "parent": "AudienceScience" + }, + "Steel House Media": { + "hosts": ["steelhousemedia.com"], + "id": "steelhouse", + "parent": "Steel House, Inc." + }, + "YOOCHOOSE": { + "hosts": ["yoochoose.net"], + "id": "yoochoose.net", + "parent": "Unknown" + }, + "Content.ad": { + "hosts": ["content.ad"], + "id": "content.ad", + "parent": "Content.ad" + }, + "spotscenered.info": { + "hosts": ["spotscenered.info"], + "id": "spotscenered.info", + "parent": "Unknown" + }, + "Elastic Ad": { + "hosts": ["elasticad.net"], + "id": "elastic_ad", + "parent": "Elastic Ad" + }, + "OptimiCDN": { + "hosts": ["optimicdn.com"], + "id": "optimicdn.com", + "parent": "Unknown" + }, + "Social Miner": { + "hosts": ["soclminer.com.br"], + "id": "social_miner", + "parent": "Unknown" + }, + "ChartBeat": { + "hosts": ["chartbeat.com", "chartbeat.net"], + "id": "chartbeat", + "parent": "ChartBeat" + }, + "mirtesen.ru": { + "hosts": ["mirtesen.ru"], + "id": "mirtesen.ru", + "parent": "Unknown" + }, + "Realperson Chat": { + "hosts": ["realperson.de"], + "id": "realperson.de", + "parent": "Optimise-it" + }, + "Wikia Beacon": { + "hosts": ["wikia-beacon.com"], + "id": "wikia_beacon", + "parent": "Wikia" + }, + "Forensiq": { + "hosts": ["fqtag.com", "securepaths.com"], + "id": "forensiq", + "parent": "Impact" + }, + "Intent Media": { + "hosts": ["intentmedia.net"], + "id": "intent_media", + "parent": "Intent Media, Inc." + }, + "ClickInText": { + "hosts": ["clickintext.net"], + "id": "clickintext", + "parent": "ClickInText" + }, + "Stroer Digital Media": { + "hosts": [ + "interactivemedia.net", + "stroeerdigitalgroup.de", + "stroeerdigitalmedia.de", + "stroeerdp.de", + "stroeermediabrands.de" + ], + "id": "stroer_digital_media", + "parent": "Str\u00f6er SSP GmbH" + }, + "unpkg": { "hosts": ["unpkg.com"], "id": "unpkg.com", "parent": "Unknown" }, + "xfreeservice.com": { + "hosts": ["xfreeservice.com"], + "id": "xfreeservice.com", + "parent": "Unknown" + }, + "Post Affiliate Pro": { + "hosts": ["postaffiliatepro.com"], + "id": "post_affiliate_pro", + "parent": "QualityUnit" + }, + "Investing Channel": { + "hosts": ["investingchannel.com"], + "id": "investingchannel", + "parent": "InvestingChannel, Inc." + }, + "FlowSurf": { + "hosts": ["othersearch.info"], + "id": "othersearch.info", + "parent": "Unknown" + }, + "Mux, Inc.": { + "hosts": ["litix.io"], + "id": "mux_inc", + "parent": "Mux, Inc." + }, + "TagMan": { "hosts": ["levexis.com"], "id": "tagman", "parent": "TagMan" }, + "BidTheatre": { + "hosts": ["bidtheatre.com"], + "id": "bidtheatre", + "parent": "BidTheatre AB" + }, + "interedy.info": { + "hosts": ["interedy.info"], + "id": "interedy.info", + "parent": "Unknown" + }, + "Inbox SDK": { + "hosts": ["inboxsdk.com"], + "id": "inboxsdk.com", + "parent": "Unknown" + }, + "bigmir.net": { + "hosts": ["bigmir.net"], + "id": "bigmir.net", + "parent": "Unknown" + }, + "vodafone.de": { + "hosts": ["vodafone.de"], + "id": "vodafone.de", + "parent": "Unknown" + }, + "Conviva": { "hosts": ["conviva.com"], "id": "conviva", "parent": "Conviva" }, + "Narrative I/O": { + "hosts": ["narrative.io"], + "id": "narrative_io", + "parent": "Unknown" + }, + "Cloudinary": { + "hosts": ["cloudinary.com"], + "id": "cloudinary", + "parent": "Unknown" + }, + "NetSeer": { "hosts": ["netseer.com"], "id": "netseer", "parent": "NetSeer" }, + "Beeketing": { + "hosts": ["beeketing.com"], + "id": "beeketing.com", + "parent": "Beeketing" + }, + "DoublePimp": { + "hosts": [ + "doublepimp.com", + "doublepimpssl.com", + "redcourtside.com", + "xeontopa.com", + "zerezas.com" + ], + "id": "doublepimp", + "parent": "DoublePimp" + }, + "Dstillery": { + "hosts": ["m6d.com", "media6degrees.com"], + "id": "dstillery", + "parent": "Dstillery" + }, + "Instagram": { + "hosts": ["cdninstagram.com", "instagram.com"], + "id": "instagram_com", + "parent": "Facebook" + }, + "Umeng": { + "hosts": ["cnzz.com", "umeng.com"], + "id": "cnzz.com", + "parent": "Umeng" + }, + "Digicert Trust Seal": { + "hosts": ["digicert.com"], + "id": "digicert_trust_seal", + "parent": "Digicert" + }, + "Shopzilla": { + "hosts": ["shopzilla.com"], + "id": "shopzilla", + "parent": "Symphony Technology Group" + }, + "SmartStream.TV": { + "hosts": ["smartstream.tv"], + "id": "smartstream.tv", + "parent": "SMARTSTREAM.TV GmbH" + }, + "Pardot": { "hosts": ["pardot.com"], "id": "pardot", "parent": "Pardot" }, + "logsss.com": { + "hosts": ["logsss.com"], + "id": "logsss.com", + "parent": "Unknown" + }, + "NET-Metrix": { + "hosts": ["wemfbox.ch"], + "id": "net-metrix", + "parent": "NET-Metrix" + }, + "Underdog Media": { + "hosts": ["udmserve.net"], + "id": "underdog_media", + "parent": "Underdog Media LLC " + }, + "ICF Technology": { + "hosts": ["nsimg.net"], + "id": "icf_technology", + "parent": "Unknown" + }, + "Popcash": { + "hosts": ["popcash.net"], + "id": "popcash", + "parent": "PopCash Network" + }, + "Pluso": { "hosts": ["pluso.ru"], "id": "pluso.ru", "parent": "Unknown" }, + "Fastly Insights": { + "hosts": ["fastly-insights.com"], + "id": "fastly_insights", + "parent": "Fastly" + }, + "UserReport": { + "hosts": ["userreport.com"], + "id": "userreport", + "parent": "UserReport" + }, + "wp.pl": { + "hosts": ["wp.pl", "wpimg.pl"], + "id": "wp.pl", + "parent": "Unknown" + }, + "AdClear": { + "hosts": ["adclear.net"], + "id": "adclear", + "parent": "AdClear GmbH" + }, + "AdDefend": { + "hosts": ["yagiay.com"], + "id": "addefend", + "parent": "Unknown" + }, + "mein-bmi.com": { + "hosts": ["mein-bmi.com"], + "id": "mein-bmi.com", + "parent": "Unknown" + }, + "teufel.de": { + "hosts": ["teufel.de"], + "id": "teufel.de", + "parent": "Unknown" + }, + "UserZoom": { + "hosts": ["userzoom.com"], + "id": "userzoom.com", + "parent": "Unknown" + }, + "ChannelPilot Solutions": { + "hosts": ["cptrack.de"], + "id": "channel_pilot_solutions", + "parent": "Unknown" + }, + "Zanox": { + "hosts": ["zanox-affiliate.de", "zanox.com", "zanox.ws"], + "id": "zanox", + "parent": "Unknown" + }, + "Hybrid.ai": { + "hosts": ["hybrid.ai", "targetix.net"], + "id": "hybrid.ai", + "parent": "Hybrid Adtech GmbH" + }, + "gmx.net": { + "hosts": ["gmx.net", "gmxpro.net"], + "id": "gmx_net", + "parent": "Unknown" + }, + "noop.style": { + "hosts": ["noop.style"], + "id": "noop.style", + "parent": "Unknown" + }, + "MarketGid": { + "hosts": ["dt00.net", "dt07.net", "marketgid.com", "mgid.com"], + "id": "marketgid", + "parent": "MGID Inc." + }, + "idealo.com": { + "hosts": ["idealo.com"], + "id": "idealo_com", + "parent": "Unknown" + }, + "BrightRoll": { + "hosts": ["btrll.com"], + "id": "brightroll", + "parent": "Verizon" + }, + "GroundTruth": { + "hosts": ["bidagent.xad.com"], + "id": "groundtruth", + "parent": "GroundTruth" + }, + "TrafMag": { + "hosts": ["trafmag.com"], + "id": "trafmag.com", + "parent": "Unknown" + }, + "nonstop Consulting": { + "hosts": ["trkme.net"], + "id": "nonstop_consulting", + "parent": "United Digital Group (FKA nonstopConsulting)" + }, + "Pepper": { + "hosts": ["pepper.com"], + "id": "pepper.com", + "parent": "6 Minutes Media GmbH" + }, + "jimdo.com": { + "hosts": ["jimcdn.com", "jimdo.com", "jimstatic.com"], + "id": "jimdo.com", + "parent": "Unknown" + }, + "SAP Exchange Media": { + "hosts": ["sap-xm.org"], + "id": "sap_xm", + "parent": "Unknown" + }, + "madeleine.de": { + "hosts": ["madeleine.de"], + "id": "madeleine.de", + "parent": "Unknown" + }, + "Factor Eleven": { + "hosts": ["f11-ads.com"], + "id": "f11-ads.com", + "parent": "Unknown" + }, + "AdUp Technology": { + "hosts": ["adup-tech.com"], + "id": "adup-tech.com", + "parent": "Unknown" + }, + "AdRoll": { "hosts": ["adroll.com"], "id": "adroll", "parent": "AdRoll Inc" }, + "xen-media.com": { + "hosts": ["xen-media.com"], + "id": "xen-media.com", + "parent": "Unknown" + }, + "Bing Maps": { + "hosts": ["virtualearth.net"], + "id": "bing_maps", + "parent": "Microsoft" + }, + "Trueffect": { + "hosts": ["adlegend.com"], + "id": "trueffect", + "parent": "Trueffect" + }, + "stalluva.pro": { + "hosts": ["stalluva.pro"], + "id": "stalluva.pro", + "parent": "Unknown" + }, + "RUN": { + "hosts": ["runadtag.com", "rundsp.com"], + "id": "run", + "parent": "RUN" + }, + "DataDome": { + "hosts": ["datadome.co"], + "id": "datadome", + "parent": "DataDome" + }, + "siblesectiveal.club": { + "hosts": ["siblesectiveal.club"], + "id": "siblesectiveal.club", + "parent": "Unknown" + }, + "alephd": { + "hosts": ["alephd.com"], + "id": "alephd.com", + "parent": "Verizon" + }, + "realytics.io": { + "hosts": ["realytics.io"], + "id": "realytics.io", + "parent": "Unknown" + }, + "eanalyzer.de": { + "hosts": ["eanalyzer.de"], + "id": "eanalyzer.de", + "parent": "Unknown" + }, + "Facebook CDN": { + "hosts": ["fbcdn.net", "fbsbx.com"], + "id": "facebook_cdn", + "parent": "Facebook" + }, + "HQ Entertainment Network": { + "hosts": ["hqentertainmentnetwork.com", "justservingfiles.net"], + "id": "hqentertainmentnetwork.com", + "parent": "Unknown" + }, + "XXXLutz": { + "hosts": ["xxxlutz.de"], + "id": "xxxlutz", + "parent": "XXXLutz KG" + }, + "nfxTrack": { + "hosts": ["netrk.net"], + "id": "netrk.net", + "parent": "netzeffekt" + }, + "ciuvo.com": { + "hosts": ["ciuvo.com"], + "id": "ciuvo.com", + "parent": "Unknown" + }, + "GeoTrust": { + "hosts": ["geotrust.com"], + "id": "geotrust", + "parent": "GeoTrust" + }, + "Dawanda CDN": { + "hosts": ["dawandastatic.com"], + "id": "dawandastatic.com", + "parent": "Unknown" + }, + "ixquick": { + "hosts": ["ixquick.com"], + "id": "ixquick.com", + "parent": "StartPage" + }, + "yapfiles.ru": { + "hosts": ["yapfiles.ru"], + "id": "yapfiles.ru", + "parent": "Unknown" + }, + "Signal": { + "hosts": ["btstatic.com", "signal.co", "thebrighttag.com"], + "id": "signal", + "parent": "Signal Digital Inc." + }, + "OnAudience": { + "hosts": ["behavioralengine.com", "onaudience.com"], + "id": "onaudience", + "parent": "Cloud Technologies S.A." + }, + "Voluum": { + "hosts": ["cwkuki.com", "voluumtrk3.com"], + "id": "voluum", + "parent": "Unknown" + }, + "Contentpass": { + "hosts": ["contentpass.de", "contentpass.net"], + "id": "contentpass", + "parent": "Unknown" + }, + "gumgum": { + "hosts": ["gumgum.com"], + "id": "gumgum", + "parent": "GumGum, Inc." + }, + "Visual Revenue": { + "hosts": ["visualrevenue.com"], + "id": "visual_revenue", + "parent": "Outbrain" + }, + "Level 3 Communications, Inc.": { + "hosts": ["footprint.net"], + "id": "level3_communications", + "parent": "Level 3 Communications, Inc." + }, + "Netletix": { + "hosts": ["netzathleten-media.de"], + "id": "netletix", + "parent": "IP Deutschland" + }, + "Admixer": { + "hosts": ["admixer.net"], + "id": "admixer.net", + "parent": "Unknown" + }, + "iubenda": { + "hosts": ["iubenda.com"], + "id": "iubenda.com", + "parent": "Unknown" + }, + "Ividence": { "hosts": ["ivitrack.com"], "id": "ividence", "parent": "SIEN" }, + "Microsoft Ajax CDN": { + "hosts": ["aspnetcdn.com"], + "id": "aspnetcdn", + "parent": "Microsoft" + }, + "Marketo": { + "hosts": ["marketo.com", "marketo.net", "mktoresp.com"], + "id": "marketo", + "parent": "Marketo" + }, + "Bootstrap CDN": { + "hosts": ["bootstrapcdn.com"], + "id": "bootstrap", + "parent": "BootstrapCDN" + }, + "Livefyre": { + "hosts": ["fyre.co", "livefyre.com"], + "id": "livefyre", + "parent": "Livefyre" + }, + "ymzrrizntbhde.com": { + "hosts": ["ymzrrizntbhde.com"], + "id": "ymzrrizntbhde.com", + "parent": "Unknown" + }, + "Admitad": { + "hosts": ["admitad.com"], + "id": "admitad.com", + "parent": "Admitad" + }, + "Get Site Control": { + "hosts": ["getsitecontrol.com"], + "id": "get_site_control", + "parent": "GetSiteControl" + }, + "a3cloud.net": { + "hosts": ["a3cloud.net"], + "id": "a3cloud_net", + "parent": "Unknown" + }, + "pushnative.com": { + "hosts": ["pushnative.com"], + "id": "pushnative.com", + "parent": "Unknown" + }, + "Nuance": { + "hosts": ["inq.com"], + "id": "touchcommerce", + "parent": "Unknown" + }, + "StackPath": { + "hosts": ["stackpathdns.com"], + "id": "stackpathdns.com", + "parent": "Unknown" + }, + "Sophus3": { "hosts": ["sophus3.com"], "id": "sophus3", "parent": "Sophus3" }, + "Kinja Static": { + "hosts": ["kinja-img.com", "kinja-static.com"], + "id": "kinja_static", + "parent": "Gizmodo Media Group" + }, + "Digital.gov": { + "hosts": ["digitalgov.gov"], + "id": "digital.gov", + "parent": "USA Government" + }, + "PageFair": { + "hosts": ["blockmetrics.com", "pagefair.com", "pagefair.net"], + "id": "pagefair", + "parent": "PageFair" + }, + "Purch": { + "hosts": ["purch.com", "servebom.com"], + "id": "purch", + "parent": "Purch Group, Inc." + }, + "Google Tag Manager": { + "hosts": ["googletagmanager.com", "googletagservices.com"], + "id": "google_tag_manager", + "parent": "Google" + }, + "nyetm2mkch.com": { + "hosts": ["nyetm2mkch.com"], + "id": "nyetm2mkch.com", + "parent": "Unknown" + }, + "Amplitude": { + "hosts": ["amplitude.com", "d24n15hnbwhuhn.cloudfront.net"], + "id": "amplitude", + "parent": "Amplitude" + }, + "Vigo": { "hosts": ["vigo.one", "vigo.ru"], "id": "vigo", "parent": "Vigo" }, + "VideoAdX": { + "hosts": ["videoadex.com"], + "id": "videoadex.com", + "parent": "DIGITEKA Technologies" + }, + "VigLink": { "hosts": ["viglink.com"], "id": "viglink", "parent": "VigLink" }, + "datds.net": { + "hosts": ["datds.net"], + "id": "datds.net", + "parent": "Unknown" + }, + "StartApp": { + "hosts": ["startappservice.com"], + "id": "startapp", + "parent": "Unknown" + }, + "Bid.Run": { "hosts": ["bid.run"], "id": "bid.run", "parent": "Bid.Run" }, + "SnackTV": { "hosts": ["snacktv.de"], "id": "snacktv", "parent": "Unknown" }, + "faktor.io": { + "hosts": ["faktor.io"], + "id": "faktor.io", + "parent": "Faktor B.V." + }, + "Creative Commons": { + "hosts": ["creativecommons.org"], + "id": "creative_commons", + "parent": "Creative Commons Corporation" + }, + "Pinterest": { + "hosts": ["pinimg.com", "pinterest.com"], + "id": "pinterest", + "parent": "Pinterest" + }, + "Tag Commander": { + "hosts": ["commander1.com", "tagcommander.com"], + "id": "tag_commander", + "parent": "Tag Commander" + }, + "afgr2.com": { + "hosts": ["afgr2.com"], + "id": "afgr2.com", + "parent": "Unknown" + }, + "MailChimp": { + "hosts": ["chimpstatic.com", "list-manage.com", "mailchimp.com"], + "id": "mailchimp", + "parent": "The Rocket Science Group" + }, + "Spoutable": { + "hosts": ["spoutable.com"], + "id": "spoutable", + "parent": "Unknown" + }, + "TNS": { + "hosts": [ + "research-int.se", + "sesamestats.com", + "spring-tns.net", + "statistik-gallup.net", + "tns-cs.net", + "tns-gallup.dk" + ], + "id": "tns", + "parent": "WPP" + }, + "V12 Group": { + "hosts": ["v12group.com"], + "id": "v12_group", + "parent": "Unknown" + }, + "Recreativ": { + "hosts": ["recreativ.ru"], + "id": "recreativ", + "parent": "Recreativ" + }, + "Baynote Observer": { + "hosts": ["baynote.net"], + "id": "baynote_observer", + "parent": "Baynote" + }, + "BlueKai": { + "hosts": ["bkrtx.com", "bluekai.com"], + "id": "bluekai", + "parent": "Oracle" + }, + "PulsePoint": { + "hosts": ["contextweb.com", "pulsepoint.com"], + "id": "pulsepoint", + "parent": "PulsePoint, Inc." + }, + "ausgezeichnet.org": { + "hosts": ["ausgezeichnet.org"], + "id": "ausgezeichnet_org", + "parent": "Unknown" + }, + "Propeller Ads": { + "hosts": [ + "oclaserver.com", + "onclasrv.com", + "onclickads.net", + "onclkds.com", + "propellerads.com", + "propellerpops.com" + ], + "id": "propeller_ads", + "parent": "Propeller Ads" + }, + "Shutterstock": { + "hosts": ["shutterstock.com"], + "id": "shutterstock", + "parent": "Shutterstock, Inc." + }, + "Siteimprove": { + "hosts": ["siteimprove.com"], + "id": "siteimprove", + "parent": "Siteimprove" + }, + "Pushwoosh": { + "hosts": ["pushwoosh.com"], + "id": "pushwoosh.com", + "parent": "Pushwoosh" + }, + "cdnetworks.net": { + "hosts": ["cdnetworks.com", "cdnetworks.net"], + "id": "cdnetworks.net", + "parent": "Unknown" + }, + "Vidible": { "hosts": ["vidible.tv"], "id": "vidible", "parent": "Verizon" }, + "Fivetran": { + "hosts": ["fivetran.com"], + "id": "fivetran", + "parent": "Fivetran" + }, + "Zebestof": { + "hosts": ["zebestof.com"], + "id": "zebestof.com", + "parent": "Zebestof" + }, + "Tapad": { "hosts": ["tapad.com"], "id": "tapad", "parent": "Telenor Group" }, + "Shopify Cloud": { + "hosts": ["shopifycloud.com"], + "id": "shopifycloud.com", + "parent": "Shopify" + }, + "Docler": { + "hosts": ["awecr.com", "fwbntw.com"], + "id": "docler", + "parent": "Docler IP" + }, + "Yusp": { + "hosts": ["gravityrd-services.com"], + "id": "yusp", + "parent": "Unknown" + }, + "adworxs.net": { + "hosts": ["adworxs.net"], + "id": "adworxs.net", + "parent": "Unknown" + }, + "Chip Analytics": { + "hosts": ["cxo.name"], + "id": "cxo.name", + "parent": "Unknown" + }, + "Po.st": { "hosts": ["po.st"], "id": "po.st", "parent": "RhythmOne, LLC" }, + "etahub.com": { + "hosts": ["etahub.com"], + "id": "etahub.com", + "parent": "Unknown" + }, + "Ringier": { + "hosts": ["ringier.ch"], + "id": "ringier.ch", + "parent": "Ringier AG" + }, + "Adobe TagManager": { + "hosts": ["adobetag.com"], + "id": "adobe_tagmanager", + "parent": "Adobe" + }, + "Hi-Media Performance": { + "hosts": [ + "adlink.net", + "comclick.com", + "hi-mediaserver.com", + "himediads.com", + "himediadx.com" + ], + "id": "hi-media_performance", + "parent": "Hi-media Performance" + }, + "Eyereturn Marketing": { + "hosts": ["eyereturn.com"], + "id": "eyereturnmarketing", + "parent": "Torstar Corporation " + }, + "pnamic.com": { + "hosts": ["pnamic.com"], + "id": "pnamic.com", + "parent": "Unknown" + }, + "defpush.com": { + "hosts": ["defpush.com"], + "id": "defpush.com", + "parent": "Unknown" + }, + "davebestdeals.com": { + "hosts": ["davebestdeals.com"], + "id": "davebestdeals.com", + "parent": "Unknown" + }, + "adxprtz.com": { + "hosts": ["adxprtz.com"], + "id": "adxprtz.com", + "parent": "Unknown" + }, + "EroAdvertising": { + "hosts": ["ero-advertising.com", "eroadvertising.com"], + "id": "eroadvertising", + "parent": "Ero Advertising" + }, + "Imgur": { "hosts": ["imgur.com"], "id": "imgur", "parent": "Imgur" }, + "24-ADS GmbH": { + "hosts": ["24-ads.com"], + "id": "24-ads.com", + "parent": "Unknown" + }, + "Platform360": { + "hosts": ["pfrm.co"], + "id": "platform360", + "parent": "Unknown" + }, + "Venatus Media": { + "hosts": ["vntsm.com"], + "id": "vntsm.com", + "parent": "Venatus Media Limited" + }, + "Heroku": { "hosts": ["herokuapp.com"], "id": "heroku", "parent": "Unknown" }, + "Platform161": { + "hosts": ["creative-serving.com"], + "id": "161media", + "parent": "Platform161" + }, + "usemessages.com": { + "hosts": ["usemessages.com"], + "id": "usemessages.com", + "parent": "Unknown" + }, + "Adloox": { + "hosts": ["adlooxtracking.com"], + "id": "adloox", + "parent": "Adloox SA" + }, + "Marvellous Machine": { + "hosts": ["marvellousmachine.net"], + "id": "marvellous_machine", + "parent": "Unknown" + }, + "Exactag": { + "hosts": ["exactag.com"], + "id": "exactag", + "parent": "Exactag GmbH" + }, + "4finance.com": { + "hosts": ["4finance.com"], + "id": "4finance_com", + "parent": "Unknown" + }, + "Highwinds": { + "hosts": ["hwcdn.net"], + "id": "highwinds", + "parent": "Highwinds" + }, + "LinkedIn": { + "hosts": [ + "bizo.com", + "bizographics.com", + "licdn.com", + "linkedin.com", + "lynda.com" + ], + "id": "linkedin", + "parent": "Microsoft" + }, + "Bounce Exchange": { + "hosts": ["bounceexchange.com"], + "id": "bounce_exchange", + "parent": "Bounce Exchange, Inc" + }, + "Traffic Factory": { + "hosts": ["trafficfactory.biz"], + "id": "trafficfactory", + "parent": "Unknown" + }, + "AOL CDN": { "hosts": ["aolcdn.com"], "id": "aol_cdn", "parent": "Verizon" }, + "Whatbroadcast": { + "hosts": ["whatsbroadcast.com"], + "id": "whatbroadcast", + "parent": "WhatsBroadcast" + }, + "Alibaba": { + "hosts": ["alibaba.com", "alicdn.com"], + "id": "alibaba.com", + "parent": "Alibaba" + }, + "eXelate": { + "hosts": ["exelator.com"], + "id": "exelate", + "parent": "Nielsen" + }, + "vorwerk.de": { + "hosts": ["vorwerk.de"], + "id": "vorwerk.de", + "parent": "Unknown" + }, + "4Chan": { "hosts": ["4cdn.org"], "id": "4chan", "parent": "Unknown" }, + "Tealium": { + "hosts": ["llnwd.net", "tealium.com", "tealiumiq.com", "tiqcdn.com"], + "id": "tealium", + "parent": "Tealium" + }, + "statsy.net": { + "hosts": ["statsy.net"], + "id": "statsy.net", + "parent": "Unknown" + }, + "Blau": { "hosts": ["blau.de"], "id": "blau.de", "parent": "Unknown" }, + "FraudLogix": { + "hosts": ["yabidos.com"], + "id": "fraudlogix", + "parent": "Unknown" + }, + "Canvas": { + "hosts": [ + "canvas.net", + "canvasnetwork.com", + "du11hjcvx0uqb.cloudfront.net" + ], + "id": "canvas", + "parent": "Unknown" + }, + "cdnondemand.org": { + "hosts": ["cdnondemand.org"], + "id": "cdnondemand.org", + "parent": "Unknown" + }, + "Yieldmo": { + "hosts": ["yieldmo.com"], + "id": "yieldmo", + "parent": "Yieldmo, Inc." + }, + "Gravity Insights": { + "hosts": ["gravity.com", "grvcdn.com"], + "id": "gravity_insights", + "parent": "Gravity" + }, + "pushwhy.com": { + "hosts": ["pushwhy.com"], + "id": "pushwhy.com", + "parent": "Unknown" + }, + "Scoota": { + "hosts": ["rockabox.co"], + "id": "scoota", + "parent": "Rockabox Media Ltd" + }, + "wdr.de": { "hosts": ["wdr.de"], "id": "wdr.de", "parent": "Unknown" }, + "JivoChat": { + "hosts": ["jivosite.com"], + "id": "jivochat", + "parent": "Unknown" + }, + "BetterTTV": { + "hosts": ["betterttv.net"], + "id": "betterttv", + "parent": "NightDev, LLC" + }, + "MaxPoint Interactive": { + "hosts": ["mxptint.net"], + "id": "maxpoint_interactive", + "parent": "MaxPoint Interactive" + }, + "Tyroo": { "hosts": ["tyroodr.com"], "id": "tyroo", "parent": "Tyroo" }, + "Baidu Static": { + "hosts": ["bdimg.com", "bdstatic.com"], + "id": "baidu_static", + "parent": "Baidu" + }, + "Polyfill.io": { + "hosts": ["polyfill.io"], + "id": "polyfill.io", + "parent": "Unknown" + }, + "Netaffiliation": { + "hosts": ["netaffiliation.com"], + "id": "metaffiliation.com", + "parent": "Kwanko" + }, + "cdn13.com": { + "hosts": ["cdn13.com"], + "id": "cdn13.com", + "parent": "Unknown" + }, + "codeonclick.com": { + "hosts": ["codeonclick.com"], + "id": "codeonclick.com", + "parent": "Unknown" + }, + "CPMStar": { "hosts": ["cpmstar.com"], "id": "cpmstar", "parent": "CPMStar" }, + "Sublime Skinz": { + "hosts": ["ayads.co"], + "id": "sublime_skinz", + "parent": "Sublime Skinz" + }, + "True Anthem": { + "hosts": ["tru.am"], + "id": "trueanthem", + "parent": "trueAnthem" + }, + "neXeps": { + "hosts": ["nexeps.com"], + "id": "nexeps.com", + "parent": "Unknown" + }, + "SmartClick": { + "hosts": ["smartclick.net"], + "id": "smartclick.net", + "parent": "Unknown" + }, + "WP Engine": { + "hosts": ["wpengine.com"], + "id": "wp_engine", + "parent": "WP Engine" + }, + "Wistia": { + "hosts": ["wistia.com", "wistia.net"], + "id": "wistia", + "parent": "Wistia" + }, + "Research Now": { + "hosts": ["researchnow.com"], + "id": "research_now", + "parent": "Research Now Group, Inc" + }, + "asambeauty.com": { + "hosts": ["asambeauty.com"], + "id": "asambeauty.com", + "parent": "Unknown" + }, + "express.co.uk": { + "hosts": ["express.co.uk"], + "id": "express.co.uk", + "parent": "Unknown" + }, + "Webfonts by Hoefler&Co": { + "hosts": ["typography.com"], + "id": "typography.com", + "parent": "Unknown" + }, + "Clicky": { + "hosts": ["getclicky.com", "staticstuff.net"], + "id": "clicky", + "parent": "Clicky" + }, + "oclasrv.com": { + "hosts": ["oclasrv.com"], + "id": "oclasrv.com", + "parent": "Unknown" + }, + "loadsource.org": { + "hosts": ["loadsource.org"], + "id": "loadsource.org", + "parent": "Unknown" + }, + "Loadbee": { + "hosts": ["loadbee.com"], + "id": "loadbee.com", + "parent": "Unknown" + }, + "boltdns.net": { + "hosts": ["boltdns.net"], + "id": "boltdns.net", + "parent": "Unknown" + }, + "cdn-net.com": { + "hosts": ["cdn-net.com"], + "id": "cdn-net.com", + "parent": "Unknown" + }, + "Optimizely": { + "hosts": ["optimizely.com"], + "id": "optimizely", + "parent": "Optimizely" + }, + "AutopilotHQ": { + "hosts": ["api.autopilothq.com"], + "id": "autopilothq", + "parent": "AutopilotHQ" + }, + "OwnerIQ": { "hosts": ["owneriq.net"], "id": "owneriq", "parent": "OwnerIQ" }, + "Symantec (Norton Secured Seal)": { + "hosts": ["norton.com", "symantec.com", "thawte.com", "verisign.com"], + "id": "symantec", + "parent": "Symantec" + }, + "myThings": { + "hosts": ["mythings.com"], + "id": "mythings", + "parent": "MyThings " + }, + "maxonclick.com": { + "hosts": ["maxonclick.com"], + "id": "maxonclick_com", + "parent": "Unknown" + }, + "AdRiver": { "hosts": ["adriver.ru"], "id": "adriver", "parent": "Ad River" }, + "Digital Remedy": { + "hosts": ["adready.com"], + "id": "digital_remedy", + "parent": "Digital Remedy" + }, + "Tumblr Buttons": { + "hosts": ["platform.tumblr.com"], + "id": "tumblr_buttons", + "parent": "Verizon" + }, + "Shopping24 internet group": { + "hosts": ["s24.com"], + "id": "s24_com", + "parent": "Unknown" + }, + "Riskfield": { + "hosts": ["riskfield.com"], + "id": "riskfield.com", + "parent": "Riskfield" + }, + "Eyeview": { + "hosts": ["eyeviewads.com"], + "id": "eyeview", + "parent": "Eyeview" + }, + "toponclick.com": { + "hosts": ["toponclick.com"], + "id": "toponclick_com", + "parent": "Unknown" + }, + "ThreatMetrix": { + "hosts": ["online-metrix.net"], + "id": "threatmetrix", + "parent": "ThreatMetrix" + }, + "Periscope": { "hosts": ["pscp.tv"], "id": "pscp.tv", "parent": "Periscope" }, + "continum.net": { + "hosts": ["continum.net"], + "id": "continum_net", + "parent": "Unknown" + }, + "Rambler DSP": { + "hosts": ["dsp-rambler.ru"], + "id": "dsp_rambler", + "parent": "A&NN Investments " + }, + "DynAdmic": { + "hosts": ["dyntrk.com"], + "id": "dynadmic", + "parent": "Unknown" + }, + "ADARA Analytics": { + "hosts": ["yieldoptimizer.com"], + "id": "adara_analytics", + "parent": "ADARA MEDIA UNLIMITED" + }, + "Jetpack": { + "hosts": ["pixel.wp.com", "stats.wp.com"], + "id": "jetpack", + "parent": "Automattic" + }, + "MarkMonitor": { + "hosts": ["9c9media.com", "caanalytics.com", "mmstat.com"], + "id": "markmonitor", + "parent": "MarkMonitor" + }, + "Skyscanner CDN": { + "hosts": ["skyscnr.com"], + "id": "skyscnr.com", + "parent": "Unknown" + }, + "stripst.com": { + "hosts": ["stripst.com"], + "id": "stripst.com", + "parent": "Unknown" + }, + "Platform One": { + "hosts": ["impact-ad.jp"], + "id": "platformone", + "parent": "D.A.Consortium" + }, + "baur.de": { "hosts": ["baur.de"], "id": "baur.de", "parent": "Unknown" }, + "pushame.com": { + "hosts": ["pushame.com"], + "id": "pushame.com", + "parent": "Unknown" + }, + "tororango.com": { + "hosts": ["tororango.com"], + "id": "tororango.com", + "parent": "Unknown" + }, + "Conversant": { + "hosts": ["fastclick.net", "mediaplex.com", "mplxtms.com"], + "id": "conversant", + "parent": "Conversant Europe Ltd." + }, + "Firebase": { + "hosts": ["firebaseio.com"], + "id": "firebaseio.com", + "parent": "Google" + }, + "Whos.amung.us": { + "hosts": ["amung.us"], + "id": "whos.amung.us", + "parent": "whos.amung.us" + }, + "Bombora": { + "hosts": ["ml314.com"], + "id": "bombora", + "parent": "Bombora Inc." + }, + "SpringServe": { + "hosts": ["springserve.com"], + "id": "springserve", + "parent": "SpringServe, LLC" + }, + "Widespace": { + "hosts": ["widespace.com"], + "id": "widespace", + "parent": "Widespace AB" + }, + "Mail.Ru Group": { + "hosts": [ + "imgsmail.ru", + "mail.ru", + "mradx.net", + "odnoklassniki.ru", + "ok.ru" + ], + "id": "mail.ru_group", + "parent": "Megafon" + }, + "Sojern": { + "hosts": ["sojern.com"], + "id": "sojern", + "parent": "Sojern, Inc." + }, + "Seznam": { + "hosts": ["imedia.cz", "szn.cz"], + "id": "seznam", + "parent": "Seznam" + }, + "Privy": { "hosts": ["privy.com"], "id": "privy.com", "parent": "Privy" }, + "Tawk": { "hosts": ["tawk.to"], "id": "tawk", "parent": "Tawk" }, + "Ask.com": { "hosts": ["ask.com"], "id": "ask.com", "parent": "Unknown" }, + "Intent IQ": { + "hosts": ["intentiq.com"], + "id": "intent_iq", + "parent": "Intent IQ" + }, + "Yahoo!": { + "hosts": [ + "interclick.com", + "tumblr.com", + "yahoo.com", + "yahooapis.com", + "yimg.com" + ], + "id": "yahoo", + "parent": "Verizon" + }, + "trsv3.com": { + "hosts": ["trsv3.com"], + "id": "trsv3.com", + "parent": "Unknown" + }, + "GreatViews": { + "hosts": ["greatviews.de"], + "id": "greatviews.de", + "parent": "Parship" + }, + "C1 Exchange": { + "hosts": ["c1exchange.com"], + "id": "c1_exchange", + "parent": "C1 Exchange " + }, + "VoiceFive": { + "hosts": ["voicefive.com"], + "id": "voicefive", + "parent": "comScore, Inc." + }, + "qq.com": { "hosts": ["qq.com"], "id": "qq.com", "parent": "QQ.com" }, + "native ads": { + "hosts": ["nativeads.com"], + "id": "nativeads.com", + "parent": "Unknown" + }, + "Teads": { "hosts": ["teads.tv"], "id": "teads", "parent": "Teads " }, + "dcbap.com": { + "hosts": ["dcbap.com"], + "id": "dcbap.com", + "parent": "Unknown" + }, + "Oxomi": { "hosts": ["oxomi.com"], "id": "oxomi.com", "parent": "Unknown" }, + "Ancestry CDN": { + "hosts": ["ancestrycdn.com"], + "id": "ancestry_cdn", + "parent": "Ancestry" + }, + "BuySellAds": { + "hosts": ["buysellads.com", "servedby-buysellads.com"], + "id": "buysellads", + "parent": "BuySellAds.com" + }, + "office365.com": { + "hosts": ["office365.com"], + "id": "office365.com", + "parent": "Microsoft" + }, + "Digital Analytix": { + "hosts": ["nedstat.com", "sitestat.com"], + "id": "digital_analytix", + "parent": "Adobe" + }, + "Microsoft Network": { + "hosts": [ + "ads.msn.com", + "ads1.msn.com", + "adsyndication.msn.com", + "bat.r.msn.com", + "col.stc.s-msn.com", + "flex.msn.com", + "msn.com", + "s-msn.com" + ], + "id": "msn", + "parent": "Microsoft" + }, + "Atlassian Marketplace": { + "hosts": ["d1xfq2052q7thw.cloudfront.net", "marketplace.atlassian.com"], + "id": "atlassian_marketplace", + "parent": "Atlassian" + }, + "Infospace Search": { + "hosts": ["inspsearchapi.com"], + "id": "inspsearchapi.com", + "parent": "System1" + }, + "Reuters media": { + "hosts": ["reutersmedia.net"], + "id": "reuters_media", + "parent": "Unknown" + }, + "SOASTA mPulse": { + "hosts": ["go-mpulse.net", "mpstat.us"], + "id": "soasta_mpulse", + "parent": "Akamai Technologies" + }, + "Intercom": { + "hosts": ["intercom.io", "intercomassets.com", "intercomcdn.com"], + "id": "intercom", + "parent": "Intercom" + }, + "1822direkt.de": { + "hosts": ["1822direkt.de"], + "id": "1822direkt.de", + "parent": "Unknown" + }, + "BurdaForward": { + "hosts": ["bf-ad.net", "bf-tools.net"], + "id": "burda", + "parent": "Hubert Burda Media" + }, + "ClickTripz": { + "hosts": ["clicktripz.com"], + "id": "clicktripz", + "parent": "ClickTripz" + }, + "ad6media": { + "hosts": [ + "ad6.fr", + "ad6media.co.uk", + "ad6media.com", + "ad6media.es", + "ad6media.fr" + ], + "id": "ad6media", + "parent": "ad6media" + }, + "Swiftype": { + "hosts": ["swiftypecdn.com"], + "id": "swiftype", + "parent": "Elastic" + }, + "Advertising Technologies Ltd": { + "hosts": ["rtmark.net"], + "id": "rtmark.net", + "parent": "Big Wall Vision" + }, + "Sanoma": { + "hosts": ["ilsemedia.nl", "sanoma.fi"], + "id": "sanoma.fi", + "parent": "Unknown" + }, + "Hotjar": { "hosts": ["hotjar.com"], "id": "hotjar", "parent": "Hotjar" }, + "GENIEE": { "hosts": ["gssprt.jp"], "id": "geniee", "parent": "Unknown" }, + "Imagefap": { "hosts": ["fap.to"], "id": "fap.to", "parent": "Unknown" }, + "go.com": { + "hosts": ["go.com"], + "id": "go.com", + "parent": "The Walt Disney Company" + }, + "Btttag": { + "hosts": ["bluetriangletech.com"], + "id": "btttag.com", + "parent": "Blue Triangle Technologies Inc" + }, + "Republer": { + "hosts": ["republer.com"], + "id": "republer.com", + "parent": "Republer" + }, + "Netbiscuits": { + "hosts": ["netbiscuits.net"], + "id": "netbiscuits", + "parent": "Netbiscuits" + }, + "Deutsche Bahn": { + "hosts": ["bahn.de", "img-bahn.de"], + "id": "bahn_de", + "parent": "Unknown" + }, + "pendo": { "hosts": ["pendo.io"], "id": "pendo.io", "parent": "Unknown" }, + "Atlas": { + "hosts": ["adbureau.net", "atdmt.com", "atlassbx.com"], + "id": "atlas", + "parent": "Facebook" + }, + "Experian": { + "hosts": ["eccmp.com"], + "id": "experian", + "parent": "Experian Information Solutions, Inc." + }, + "The Sun": { + "hosts": ["thesun.co.uk"], + "id": "the_sun", + "parent": "The Sun" + }, + "epoq": { "hosts": ["epoq.de"], "id": "epoq", "parent": "epoq" }, + "Grapeshot": { + "hosts": ["grapeshot.co.uk", "gscontxt.net"], + "id": "grapeshot", + "parent": "Oracle" + }, + "Ad Alliance": { + "hosts": ["adalliance.io"], + "id": "adalliance.io", + "parent": "Unknown" + }, + "Digilant": { + "hosts": ["wtp101.com"], + "id": "digilant", + "parent": "Digilant Spain, SLU" + }, + "Dotomi": { + "hosts": ["dotomi.com", "dtmc.com", "dtmpub.com"], + "id": "dotomi", + "parent": "Conversant Europe Ltd." + }, + "ExoClick": { + "hosts": ["exdynsrv.com", "exoclick.com", "exosrv.com"], + "id": "exoclick", + "parent": "ExoClick" + }, + "Quisma": { + "hosts": ["qservz.com", "quisma.com"], + "id": "quisma", + "parent": "Quisma" + }, + "videoplayerhub.com": { + "hosts": ["videoplayerhub.com"], + "id": "videoplayerhub.com", + "parent": "Unknown" + }, + "Vendemore": { + "hosts": ["vendemore.com"], + "id": "vendemore", + "parent": "Ratos" + }, + "New Relic": { + "hosts": ["d1ros97qkrwjf5.cloudfront.net", "newrelic.com", "nr-data.net"], + "id": "new_relic", + "parent": "New Relic" + }, + "Tradelab": { + "hosts": ["tradelab.fr"], + "id": "tradelab", + "parent": "Tradelab, SAS" + }, + "Typeform": { + "hosts": ["typeform.com"], + "id": "typeform", + "parent": "Unknown" + }, + "VIVALU": { "hosts": ["vi-tag.net"], "id": "vivalu", "parent": "Vivalu" }, + "Skype": { + "hosts": ["skype.com", "skypeassets.com"], + "id": "skype", + "parent": "Microsoft" + }, + "pmddby.com": { + "hosts": ["pmddby.com"], + "id": "pmddby.com", + "parent": "Unknown" + }, + "FeedBurner": { + "hosts": ["feedburner.com"], + "id": "feedburner.com", + "parent": "Google" + }, + "circIT": { + "hosts": ["iqcontentplatform.de"], + "id": "circit", + "parent": "Unknown" + }, + "Heatmap": { "hosts": ["heatmap.it"], "id": "heatmap", "parent": "Heatmap" }, + "Rocket Fuel": { + "hosts": ["rfihub.com", "rfihub.net", "ru4.com", "xplusone.com"], + "id": "rocket_fuel", + "parent": "Sizmek Technologies, Inc. " + }, + "Semantiqo": { + "hosts": ["semantiqo.com"], + "id": "semantiqo.com", + "parent": "Unknown" + }, + "ActStream": { + "hosts": ["acestream.net"], + "id": "acestream.net", + "parent": "Unknown" + }, + "Amazon CDN": { + "hosts": ["images-amazon.com", "media-amazon.com", "ssl-images-amazon.com"], + "id": "amazon_cdn", + "parent": "Amazon" + }, + "buzzadexchange.com": { + "hosts": ["buzzadexchange.com"], + "id": "buzzadexchange.com", + "parent": "Unknown" + }, + "Linkpulse": { + "hosts": ["lp4.io"], + "id": "linkpulse", + "parent": "Linkpulse" + }, + "highwebmedia.com": { + "hosts": ["highwebmedia.com"], + "id": "highwebmedia.com", + "parent": "Unknown" + }, + "Metrigo": { "hosts": ["metrigo.com"], "id": "metrigo", "parent": "Metrigo" }, + "Arc Publishing": { + "hosts": ["arcpublishing.com"], + "id": "arcpublishing", + "parent": "Unknown" + }, + "Adotmob": { + "hosts": ["adotmob.com"], + "id": "adotmob.com", + "parent": "A.Mob" + }, + "OptinMonster": { + "hosts": ["mstrlytcs.com", "optmnstr.com", "optmstr.com", "optnmstr.com"], + "id": "optinmonster", + "parent": "OptinMonster" + }, + "Acxiom": { "hosts": ["acxiom.com"], "id": "acxiom", "parent": "Acxiom" }, + "Shareaholic": { + "hosts": ["dtym7iokkjlif.cloudfront.net", "shareaholic.com"], + "id": "shareaholic", + "parent": "Shareaholic" + }, + "eshopcomp.com": { + "hosts": ["eshopcomp.com"], + "id": "eshopcomp.com", + "parent": "Unknown" + }, + "blogsmithmedia.com": { + "hosts": ["blogsmithmedia.com"], + "id": "blogsmithmedia.com", + "parent": "Verizon" + }, + "pcvark.com": { + "hosts": ["pcvark.com"], + "id": "pcvark.com", + "parent": "Unknown" + }, + "Bauer Media": { + "hosts": ["bauernative.com"], + "id": "bauer_media", + "parent": "Bauer Media" + }, + "Amazon Web Services": { + "hosts": ["amazonaws.com", "amazonwebservices.com", "awsstatic.com"], + "id": "amazon_web_services", + "parent": "Amazon" + }, + "CNBC": { + "hosts": ["cnbc.com"], + "id": "cnbc", + "parent": "NBCUniversal, LLC" + }, + "Oath, Inc.": { + "hosts": ["oath.com"], + "id": "oath_inc", + "parent": "Verizon" + }, + "AMP Project": { + "hosts": ["ampproject.org"], + "id": "ampproject.org", + "parent": "Google" + }, + "News Connect": { + "hosts": ["newscgp.com"], + "id": "newscgp.com", + "parent": "News Corp" + }, + "Rakuten Display": { + "hosts": ["mediaforge.com", "rmtag.com"], + "id": "rakuten_display", + "parent": "Rakuten Marketing LLC" + }, + "Olark": { "hosts": ["olark.com"], "id": "olark", "parent": "Olark" }, + "Seeding Alliance": { + "hosts": ["nativendo.de"], + "id": "seeding_alliance", + "parent": "Str\u00f6er SSP GmbH" + }, + "Decibel Insight": { + "hosts": ["decibelinsight.net"], + "id": "decibel_insight", + "parent": "Decibel Insight" + }, + "Twyn": { "hosts": ["twyn.com"], "id": "twyn", "parent": "Twyn" }, + "Cookiebot": { + "hosts": ["cookiebot.com"], + "id": "cookiebot", + "parent": "Unknown" + }, + "FullStory": { + "hosts": ["fullstory.com"], + "id": "fullstory", + "parent": "fullstory" + }, + "adworx": { "hosts": ["adworx.at"], "id": "adworx.at", "parent": "Unknown" }, + "trbo": { "hosts": ["trbo.com"], "id": "trbo", "parent": "trbo" }, + "CrossEngage": { + "hosts": ["crossengage.io"], + "id": "crossengage", + "parent": "CrossEngage" + }, + "t8cdn.com": { + "hosts": ["t8cdn.com"], + "id": "t8cdn.com", + "parent": "Unknown" + }, + "Alipay": { + "hosts": ["alipay.com"], + "id": "alipay.com", + "parent": "Alibaba" + }, + "Gannett Media": { + "hosts": ["gannett-cdn.com"], + "id": "gannett", + "parent": "Unknown" + }, + "Acint": { "hosts": ["acint.net"], "id": "acint.net", "parent": "Acint" }, + "LivePerson": { + "hosts": ["liveperson.net", "lpsnmedia.net"], + "id": "liveperson", + "parent": "LivePerson" + }, + "GetIntent": { + "hosts": ["adhigh.net"], + "id": "getintent", + "parent": "GetIntent" + }, + "Clever Push": { + "hosts": ["cleverpush.com"], + "id": "clever_push", + "parent": "Clever Push" + }, + "Getty Images": { + "hosts": ["gettyimages.com"], + "id": "gettyimages", + "parent": "Unknown" + }, + "iRobinHood": { + "hosts": ["donation-tools.org"], + "id": "donationtools", + "parent": "Unknown" + }, + "Profitshare": { + "hosts": ["profitshare.ro"], + "id": "profitshare", + "parent": "Unknown" + }, + "Performio.cz": { + "hosts": ["performax.cz"], + "id": "performio", + "parent": "Unknown" + }, + "Pushcrew": { + "hosts": ["pushcrew.com"], + "id": "pushcrew", + "parent": "Pushcrew" + }, + "Media.net": { + "hosts": ["media.net"], + "id": "media.net", + "parent": "Media.net Advertising FZ-LLC" + }, + "Kaspersky Labs": { + "hosts": ["kaspersky-labs.com"], + "id": "kaspersky-labs.com", + "parent": "Kaspersky Lab" + }, + "Yandex AdExchange": { + "hosts": ["yandexadexchange.net"], + "id": "yandex_adexchange", + "parent": "Yandex" + }, + "Amobee": { + "hosts": ["ad.amgdgt.com", "ads.amgdgt.com"], + "id": "amobee", + "parent": "Singtel" + }, + "glotgrx.com": { + "hosts": ["glotgrx.com"], + "id": "glotgrx.com", + "parent": "Unknown" + }, + "Walmart": { "hosts": ["walmart.com"], "id": "walmart", "parent": "Unknown" }, + "marshadow.io": { + "hosts": ["marshadow.io"], + "id": "marshadow.io", + "parent": "Unknown" + }, + "Rambler&Co": { + "hosts": ["rambler.ru", "top100.ru"], + "id": "rambler", + "parent": "A&NN Investments " + }, + "EQS Group": { + "hosts": ["equitystory.com"], + "id": "eqs_group", + "parent": "EQS Group" + }, + "Dailymotion Advertising": { + "hosts": ["dmxleo.com"], + "id": "dailymotion_advertising", + "parent": "Vivendi" + }, + "Fit Analytics": { + "hosts": ["fitanalytics.com"], + "id": "fit_analytics", + "parent": "Fit Analytics" + }, + "Sentifi": { + "hosts": ["sentifi.com"], + "id": "sentifi.com", + "parent": "Sentifi AG" + }, + "Mercado-Analytics": { + "hosts": ["mercadoclics.com", "mlstatic.com"], + "id": "mercado", + "parent": "Unknown" + }, + "McAfee Secure": { + "hosts": ["scanalert.com", "ywxi.net"], + "id": "mcafee_secure", + "parent": "McAfee" + }, + "Google": { + "hosts": [ + "google.at", + "google.be", + "google.ca", + "google.ch", + "google.co.id", + "google.co.in", + "google.co.jp", + "google.co.ma", + "google.co.th", + "google.co.uk", + "google.com", + "google.com.ar", + "google.com.au", + "google.com.br", + "google.com.mx", + "google.com.tr", + "google.com.tw", + "google.com.ua", + "google.cz", + "google.de", + "google.dk", + "google.dz", + "google.es", + "google.fi", + "google.fr", + "google.gr", + "google.hu", + "google.ie", + "google.it", + "google.nl", + "google.no", + "google.pl", + "google.pt", + "google.ro", + "google.rs", + "google.ru", + "google.se", + "google.tn" + ], + "id": "google", + "parent": "Google" + }, + "Foresee": { + "hosts": ["foresee.com"], + "id": "foresee", + "parent": "Answers.com" + }, + "OTM": { "hosts": ["otm-r.com"], "id": "otm-r.com", "parent": "Unknown" }, + "Discord": { + "hosts": ["discordapp.com"], + "id": "discord", + "parent": "Unknown" + }, + "KataWeb": { + "hosts": ["kataweb.it"], + "id": "kataweb.it", + "parent": "Unknown" + }, + "Openload": { + "hosts": ["oloadcdn.net", "openload.co"], + "id": "openload", + "parent": "Unknown" + }, + "Nugg.Ad": { "hosts": ["nuggad.net"], "id": "nugg.ad", "parent": "Nugg.ad" }, + "Marin Search Marketer": { + "hosts": ["marinsm.com"], + "id": "marin_search_marketer", + "parent": "Marin Software" + }, + "hoholikik.club": { + "hosts": ["hoholikik.club"], + "id": "hoholikik.club", + "parent": "Unknown" + }, + "AdsKeeper": { + "hosts": ["adskeeper.co.uk"], + "id": "adskeeper", + "parent": "Adskeeper" + }, + "MaxMind": { "hosts": ["maxmind.com"], "id": "maxmind", "parent": "MaxMind" }, + "Criteo": { + "hosts": ["criteo.com", "criteo.net"], + "id": "criteo", + "parent": "Criteo S.A." + }, + "Sekindo": { "hosts": ["sekindo.com"], "id": "sekindo", "parent": "SekiNdo" }, + "aftv-serving.bid": { + "hosts": ["aftv-serving.bid"], + "id": "aftv-serving.bid", + "parent": "Unknown" + }, + "cqq5id8n.com": { + "hosts": ["cqq5id8n.com"], + "id": "cqq5id8n.com", + "parent": "Unknown" + }, + "DCMN": { "hosts": ["dcmn.com"], "id": "dcmn.com", "parent": "Unknown" }, + "Quora": { "hosts": ["quora.com"], "id": "quora.com", "parent": "Unknown" }, + "GlobalSign": { + "hosts": ["globalsign.com"], + "id": "globalsign", + "parent": "Unknown" + }, + "DoubleClick": { + "hosts": ["2mdn.net", "doubleclick.net", "invitemedia.com"], + "id": "doubleclick", + "parent": "Google" + }, + "ard.de": { "hosts": ["ard.de"], "id": "ard.de", "parent": "Unknown" }, + "Semasio": { + "hosts": ["semasio.net"], + "id": "semasio", + "parent": "Semasio GmbH" + }, + "div.show": { "hosts": ["div.show"], "id": "div.show", "parent": "Unknown" }, + "Undertone": { + "hosts": ["ads.undertone.com"], + "id": "undertone", + "parent": "Perion" + }, + "reEmbed": { + "hosts": ["reembed.com"], + "id": "reembed.com", + "parent": "reEmbed" + }, + "Vindico Group": { + "hosts": ["vindicosuite.com"], + "id": "vindico_group", + "parent": "Vindico Group" + }, + "Histats": { "hosts": ["histats.com"], "id": "histats", "parent": "Histats" }, + "popIn": { "hosts": ["popin.cc"], "id": "popin.cc", "parent": "Unknown" }, + "Innovid": { "hosts": ["innovid.com"], "id": "innovid", "parent": "Innovid" }, + "MathJax": { + "hosts": ["mathjax.org"], + "id": "mathjax.org", + "parent": "Unknown" + }, + "Sina CDN": { + "hosts": ["sinaimg.cn"], + "id": "sina_cdn", + "parent": "Unknown" + }, + "iPromote": { + "hosts": ["ipromote.com"], + "id": "ipromote", + "parent": "iPromote" + }, + "Merkle RKG": { + "hosts": ["rkdms.com"], + "id": "merkle_rkg", + "parent": "Dentsu Aegis Network" + }, + "Tail": { + "hosts": ["tailtarget.com"], + "id": "tail_target", + "parent": "Tail" + }, + "Advertising.com": { + "hosts": [ + "adsdk.com", + "advertising.com", + "aol.com", + "atwola.com", + "pictela.net" + ], + "id": "advertising.com", + "parent": "Verizon" + }, + "eProof": { "hosts": ["eproof.com"], "id": "eproof", "parent": "Unknown" }, + "Quantum Metric": { + "hosts": ["quantummetric.com"], + "id": "quantum_metric", + "parent": "Quantum Metric, Inc." + }, + "DC StormIQ": { + "hosts": [ + "dc-storm.com", + "h4k5.com", + "stormcontainertag.com", + "stormiq.com" + ], + "id": "dc_stormiq", + "parent": "DC Storm" + }, + "Akanoo": { "hosts": ["akanoo.com"], "id": "akanoo", "parent": "Akanoo" }, + "Digital Window": { + "hosts": ["dwin1.com"], + "id": "digital_window", + "parent": "Axel Springer Group" + }, + "Flipboard": { + "hosts": ["lflipboard.com"], + "id": "flipboard", + "parent": "Flipboard" + }, + "xnxx CDN": { + "hosts": ["xnxx-cdn.com"], + "id": "xnxx_cdn", + "parent": "Unknown" + }, + "Push.world": { + "hosts": ["push.world"], + "id": "push.world", + "parent": "Push.world" + }, + "pvclouds.com": { + "hosts": ["pvclouds.com"], + "id": "pvclouds.com", + "parent": "Unknown" + }, + "Chaordic": { + "hosts": ["chaordicsystems.com"], + "id": "chaordic", + "parent": "Unknown" + }, + "Ionic": { + "hosts": ["ionicframework.com"], + "id": "ionicframework.com", + "parent": "Unknown" + }, + "Delta Projects": { + "hosts": ["adaction.se", "de17a.com"], + "id": "delta_projects", + "parent": "Delta Projects AB" + }, + "Cardlytics": { + "hosts": ["cardlytics.com"], + "id": "cardlytics", + "parent": "Unknown" + }, + "stripchat.com": { + "hosts": ["stripcdn.com", "stripchat.com"], + "id": "stripchat.com", + "parent": "Unknown" + }, + "NetRatings SiteCensus": { + "hosts": ["glanceguide.com", "imrworldwide.com", "vizu.com"], + "id": "netratings_sitecensus", + "parent": "Nielsen" + }, + "Adform": { + "hosts": ["adform.net", "adformdsp.net", "seadform.net"], + "id": "adform", + "parent": "Adform A/S" + }, + "ATG Ad Tech Group": { + "hosts": ["oadts.com"], + "id": "atg_group", + "parent": "Unknown" + }, + "AdLabs": { + "hosts": ["adlabs.ru", "clickiocdn.com", "luxup.ru", "mixmarket.biz"], + "id": "adlabs", + "parent": "Unknown" + }, + "icuazeczpeoohx.com": { + "hosts": ["icuazeczpeoohx.com"], + "id": "icuazeczpeoohx.com", + "parent": "Unknown" + }, + "nyacampwk.com": { + "hosts": ["nyacampwk.com"], + "id": "nyacampwk.com", + "parent": "Unknown" + }, + "sparkasse.de": { + "hosts": ["sparkasse.de"], + "id": "sparkasse.de", + "parent": "Unknown" + }, + "sexypartners.net": { + "hosts": ["sexypartners.net"], + "id": "sexypartners.net", + "parent": "Unknown" + }, + "Bluelithium": { + "hosts": ["adrevolver.com", "bluelithium.com"], + "id": "bluelithium", + "parent": "Verizon" + }, + "Visible Measures": { + "hosts": ["viewablemedia.net", "visiblemeasures.com"], + "id": "visible_measures", + "parent": "Visible Measures" + }, + "The Guardian": { + "hosts": ["gu-web.net", "guardianapps.co.uk", "guim.co.uk"], + "id": "the_guardian", + "parent": "The Guardian" + }, + "Yandex.Advisor": { + "hosts": ["metabar.ru"], + "id": "yandex_advisor", + "parent": "Yandex" + }, + "GitHub": { + "hosts": ["github.com", "githubassets.com", "githubusercontent.com"], + "id": "github", + "parent": "GitHub, Inc." + }, + "RTL Group": { + "hosts": ["rtl.de", "static-fra.de", "technical-service.net"], + "id": "rtl_group", + "parent": "Unknown" + }, + "lyuoaxruaqdo.com": { + "hosts": ["lyuoaxruaqdo.com"], + "id": "lyuoaxruaqdo.com", + "parent": "Unknown" + }, + "Bitly": { "hosts": ["bit.ly"], "id": "bitly", "parent": "Unknown" }, + "Strossle": { + "hosts": ["sprinklecontent.com", "strossle.it"], + "id": "strossle", + "parent": "Strossle" + }, + "Scarab Research": { + "hosts": ["scarabresearch.com"], + "id": "scarabresearch", + "parent": "Emarsys" + }, + "Proper Media": { + "hosts": ["proper.io"], + "id": "propermedia", + "parent": "Proper Media" + }, + "Quantcast": { + "hosts": ["quantcast.com", "quantserve.com"], + "id": "quantcast", + "parent": "Quantcast International Limited" + }, + "uuidksinc.net": { + "hosts": ["uuidksinc.net"], + "id": "uuidksinc.net", + "parent": "Unknown" + }, + "Realytics": { + "hosts": ["dcniko1cv0rz.cloudfront.net"], + "id": "realytics", + "parent": "Realytics" + }, + "uCoz": { "hosts": ["ucoz.net"], "id": "ucoz.net", "parent": "Unknown" }, + "Giphy": { "hosts": ["giphy.com"], "id": "giphy.com", "parent": "Unknown" }, + "IPG Mediabrands": { + "hosts": ["mbww.com"], + "id": "ipg_mediabrands", + "parent": "IPG Mediabrands" + }, + "Adobe Dynamic Tag Management": { + "hosts": ["adobedtm.com"], + "id": "adobe_dynamic_tag_management", + "parent": "Adobe" + }, + "PowerLinks": { + "hosts": ["powerlinks.com"], + "id": "powerlinks", + "parent": "PowerLinks" + }, + "office.net": { + "hosts": ["office.net"], + "id": "office.net", + "parent": "Microsoft" + }, + "cXense": { "hosts": ["cxense.com"], "id": "cxense", "parent": "Cxense ASA" }, + "Adify": { + "hosts": ["afy11.net"], + "id": "adify", + "parent": "Cox Enterprises" + }, + "Spot.IM": { + "hosts": ["spot.im"], + "id": "spot.im", + "parent": "Spot.IM Ltd." + }, + "Mediarithmics": { + "hosts": ["mediarithmics.com"], + "id": "mediarithmics.com", + "parent": "mediarithmics SAS" + }, + "Prebid": { "hosts": ["prebid.org"], "id": "prebid", "parent": "Unknown" }, + "lenmit.com": { + "hosts": ["lenmit.com"], + "id": "lenmit.com", + "parent": "Unknown" + }, + "xplosion": { + "hosts": ["xplosion.de"], + "id": "xplosion", + "parent": "xplosion interactive" + }, + "Webtrends": { + "hosts": ["webtrends.com", "webtrendslive.com"], + "id": "webtrends", + "parent": "Webtrends" + }, + "imonomy": { "hosts": ["imonomy.com"], "id": "imonomy", "parent": "imonomy" }, + "RCS": { + "hosts": ["rcsmediagroup.it"], + "id": "rcs.it", + "parent": "RCS MediaGroup S.p.A. \u0003" + }, + "ComScore, Inc.": { + "hosts": ["zqtk.net"], + "id": "comscore", + "parent": "comScore, Inc." + }, + "o2online.de": { + "hosts": ["o2online.de"], + "id": "o2online.de", + "parent": "Unknown" + }, + "Cackle": { "hosts": ["cackle.me"], "id": "cackle.me", "parent": "Unknown" }, + "deviantart.net": { + "hosts": ["dapxl.com", "deviantart.net"], + "id": "deviantart.net", + "parent": "Unknown" + }, + "OWA": { + "hosts": ["oewabox.at"], + "id": "owa", + "parent": "The Austrian Web Analysis (OWA)" + }, + "Yieldlab": { + "hosts": ["yieldlab.net"], + "id": "yieldlab", + "parent": "ProSiebenSat.1 Media" + }, + "Zmags": { + "hosts": ["zmags.com"], + "id": "zmags", + "parent": "The Gores Group" + }, + "Sortable": { + "hosts": ["deployads.com"], + "id": "sortable", + "parent": "Unknown" + }, + "TRUSTe Seal": { + "hosts": ["privacy-policy.truste.com"], + "id": "truste_seal", + "parent": "TrustArc" + }, + "Adjust": { + "hosts": ["adjust.com"], + "id": "adjust", + "parent": "Adjust GmbH" + }, + "srvvtrk.com": { + "hosts": ["srvvtrk.com"], + "id": "srvvtrk.com", + "parent": "Unknown" + }, + "StickyAds": { + "hosts": ["stickyadstv.com"], + "id": "stickyads", + "parent": "Comcast" + }, + "SimilarDeals": { + "hosts": ["similardeals.net"], + "id": "similardeals.net", + "parent": "Unknown" + }, + "affilinet": { + "hosts": ["banner-rotation.com", "webmasterplan.com"], + "id": "affilinet", + "parent": "Axel Springer Group" + }, + "Convertro": { + "hosts": ["convertro.com", "d1ivexoxmp59q7.cloudfront.net"], + "id": "convertro", + "parent": "Verizon" + }, + "De Persgroep": { + "hosts": ["persgroep.net"], + "id": "persgroep", + "parent": "Unknown" + }, + "Answers Cloud Service": { + "hosts": ["answerscloud.com"], + "id": "answers_cloud_service", + "parent": "Answers.com" + }, + "Oracle Maxymiser": { + "hosts": ["maxymiser.net"], + "id": "maxymiser", + "parent": "Oracle" + }, + "The New York Times": { + "hosts": ["nyt.com"], + "id": "nyt.com", + "parent": "The New York Times Company" + }, + "Vidazoo": { + "hosts": ["vidazoo.com"], + "id": "vidazoo.com", + "parent": "Unknown" + }, + "Brightcove Player": { + "hosts": ["brightcove.net"], + "id": "brightcove_player", + "parent": "Brightcove" + }, + "sovrn": { + "hosts": ["d3pkae9owd2lcf.cloudfront.net", "lijit.com"], + "id": "sovrn", + "parent": "Sovrn Holdings Inc" + }, + "pageanalytics.space": { + "hosts": ["pageanalytics.space"], + "id": "pageanalytics.space", + "parent": "Unknown" + }, + "office.com": { + "hosts": ["office.com"], + "id": "office.com", + "parent": "Microsoft" + }, + "Sift Science": { + "hosts": ["dtlilztwypawv.cloudfront.net", "siftscience.com"], + "id": "sift_science", + "parent": "Sift Science" + }, + "hotdogsandads.com": { + "hosts": ["hotdogsandads.com"], + "id": "hotdogsandads.com", + "parent": "Unknown" + }, + "Reevoo": { "hosts": ["reevoo.com"], "id": "reevoo.com", "parent": "Reevoo" }, + "OpenX": { + "hosts": [ + "odnxs.net", + "openx.net", + "openx.org", + "openxenterprise.com", + "servedbyopenx.com" + ], + "id": "openx", + "parent": "OpenX Software Ltd." + }, + "Facebook Messenger": { + "hosts": ["messenger.com"], + "id": "messenger.com", + "parent": "Facebook" + }, + "AdsBookie": { + "hosts": ["adsbookie.com"], + "id": "adsbookie", + "parent": "Unknown" + }, + "deichmann.com": { + "hosts": ["deichmann.com"], + "id": "deichmann.com", + "parent": "Unknown" + }, + "The ADEX": { + "hosts": ["theadex.com"], + "id": "the_adex", + "parent": "ProSiebenSat.1 Media" + }, + "LiquidM Technology GmbH": { + "hosts": ["lqm.io", "lqmcdn.com"], + "id": "liquidm_technology_gmbh", + "parent": "LiquidM Technology GmbH" + }, + "AdXpansion": { + "hosts": ["adxpansion.com"], + "id": "adxpansion", + "parent": "AdXpansion" + }, + "Yieldlove": { + "hosts": ["yieldlove-ad-serving.net", "yieldlove.com"], + "id": "yieldlove", + "parent": "Yieldlove GmbH" + }, + "Eyeota": { + "hosts": ["eyeota.net"], + "id": "eyeota", + "parent": "Eyeota Ptd Ltd" + }, + "under-box.com": { + "hosts": ["under-box.com"], + "id": "under-box.com", + "parent": "Unknown" + }, + "Flattr Button": { + "hosts": ["flattr.com"], + "id": "flattr_button", + "parent": "Flattr" + }, + "dyncdn.me": { + "hosts": ["dyncdn.me"], + "id": "dyncdn.me", + "parent": "Unknown" + }, + "Wikia Services": { + "hosts": ["wikia-services.com"], + "id": "wikia-services.com", + "parent": "Wikia" + }, + "IHS Markit": { + "hosts": ["ad.wsod.com"], + "id": "ihs_markit", + "parent": "IHS" + }, + "Fluct": { "hosts": ["adingo.jp"], "id": "fluct", "parent": "Unknown" }, + "uppr GmbH": { "hosts": ["uppr.de"], "id": "uppr.de", "parent": "Unknown" }, + "FastPic": { + "hosts": ["fastpic.ru"], + "id": "fastpic.ru", + "parent": "FastPic" + }, + "Honey": { + "hosts": ["joinhoney.com"], + "id": "joinhoney", + "parent": "Unknown" + }, + "SundaySky": { + "hosts": ["sundaysky.com"], + "id": "sundaysky", + "parent": "SundaySky" + }, + "YuMe": { "hosts": ["yume.com"], "id": "yume", "parent": "Unknown" }, + "Connextra": { + "hosts": ["connextra.com"], + "id": "connextra", + "parent": "Connextra" + }, + "adsnative": { + "hosts": ["adsnative.com"], + "id": "adsnative", + "parent": "AdsNative" + }, + "CivicScience": { + "hosts": ["civicscience.com"], + "id": "civicscience.com", + "parent": "Unknown" + }, + "SEMKNOX GmbH": { + "hosts": ["semknox.com"], + "id": "semknox.com", + "parent": "Unknown" + }, + "SALESmanago": { + "hosts": ["salesmanago.com"], + "id": "salesmanago.pl", + "parent": "SALESmanago" + }, + "sixt-neuwagen.de": { + "hosts": ["sixt-neuwagen.de"], + "id": "sixt-neuwagen.de", + "parent": "Unknown" + }, + "Adkontekst": { + "hosts": ["netsprint.eu"], + "id": "adkontekst.pl", + "parent": "Netsprint SA" + }, + "clearsale": { + "hosts": ["clearsale.com.br"], + "id": "clearsale", + "parent": "Unknown" + }, + "ScribbleLive": { + "hosts": ["scribblelive.com"], + "id": "scribblelive", + "parent": "Unknown" + }, + "Adtelligence": { + "hosts": ["adtelligence.de"], + "id": "adtelligence.de", + "parent": "Unknown" + }, + "Runative": { + "hosts": ["un-syndicate.com"], + "id": "runative", + "parent": "Unknown" + }, + "SexAdNetwork": { + "hosts": ["sexad.net"], + "id": "sexadnetwork", + "parent": "SexAdNetwork" + }, + "DataMind": { + "hosts": ["datamind.ru"], + "id": "datamind.ru", + "parent": "Unknown" + }, + "Omarsys": { + "hosts": ["omarsys.com"], + "id": "omarsys.com", + "parent": "XCaliber" + }, + "Art.Lebedev": { + "hosts": ["artlebedev.ru"], + "id": "artlebedev.ru", + "parent": "Art.Lebedev Studio" + }, + "relevant4 GmbH": { + "hosts": ["relevant4.com"], + "id": "relevant4.com", + "parent": "Unknown" + }, + "Inspectlet": { + "hosts": ["inspectlet.com"], + "id": "inspectlet", + "parent": "Inspectlet" + }, + "Retail Rocket": { + "hosts": ["retailrocket.net", "retailrocket.ru"], + "id": "retailrocket.net", + "parent": "Unknown" + }, + "ZypMedia": { "hosts": ["extend.tv"], "id": "zypmedia", "parent": "Unknown" }, + "jsuol.com.br": { + "hosts": ["jsuol.com.br"], + "id": "jsuol.com.br", + "parent": "Unknown" + }, + "UserVoice": { + "hosts": ["uservoice.com"], + "id": "uservoice", + "parent": "UserVoice" + }, + "txxx.com": { "hosts": ["txxx.com"], "id": "txxx.com", "parent": "Unknown" }, + "Prisma Media Digital": { + "hosts": ["pmdrecrute.com"], + "id": "prismamediadigital.com", + "parent": "Prisma Media Digital" + }, + "Cloudimage.io": { + "hosts": ["cloudimg.io"], + "id": "cloudimage.io", + "parent": "Scaleflex SAS" + }, + "Inbenta": { "hosts": ["inbenta.com"], "id": "inbenta", "parent": "Inbenta" }, + "ClickTale": { + "hosts": ["clicktale.com", "clicktale.net", "pantherssl.com"], + "id": "clicktale", + "parent": "ClickTale" + }, + "Amazon Associates": { + "hosts": [ + "assoc-amazon.ca", + "assoc-amazon.co.uk", + "assoc-amazon.com", + "assoc-amazon.de", + "assoc-amazon.fr", + "assoc-amazon.jp" + ], + "id": "amazon_associates", + "parent": "Amazon" + }, + "Amazon Adsystem": { + "hosts": ["amazon-adsystem.com"], + "id": "amazon_adsystem", + "parent": "Amazon" + }, + "eBay Stats": { + "hosts": [ + "classistatic.de", + "ebay-us.com", + "ebay.com", + "ebay.de", + "ebayclassifiedsgroup.com", + "ebaycommercenetwork.com", + "ebaydesc.com", + "ebayimg.com", + "ebayrtm.com", + "ebaystatic.com" + ], + "id": "ebay", + "parent": "eBay" + }, + "Mediator": { + "hosts": ["mediator.media"], + "id": "mediator.media", + "parent": "My.com B.V." + }, + "Twitter": { + "hosts": ["ads-twitter.com", "t.co", "twimg.com", "twitter.com"], + "id": "twitter", + "parent": "Twitter" + }, + "tchibo.de": { + "hosts": ["tchibo-content.de", "tchibo.de"], + "id": "tchibo_de", + "parent": "Unknown" + }, + "Mindspark": { + "hosts": ["imgfarm.com", "mindspark.com", "staticimgfarm.com"], + "id": "mindspark", + "parent": "IAC (InterActiveCorp)" + }, + "SpotXchange": { + "hosts": ["spotx.tv", "spotxcdn.com", "spotxchange.com"], + "id": "spotxchange", + "parent": "RTL Group" + }, + "chefkoch.de": { + "hosts": ["chefkoch-cdn.de", "chefkoch.de"], + "id": "chefkoch_de", + "parent": "Unknown" + }, + "Perfect Audience": { + "hosts": ["perfectaudience.com", "prfct.co"], + "id": "perfect_audience", + "parent": "Perfect Audience" + }, + "Metapeople": { + "hosts": ["metalyzer.com", "mlsat02.de"], + "id": "metapeople", + "parent": "Metapeople" + }, + "runmewivel.com": { + "hosts": ["runmewivel.com"], + "id": "runmewivel.com", + "parent": "Unknown" + }, + "Early Birds": { + "hosts": ["early-birds.fr"], + "id": "early_birds", + "parent": "Unknown" + }, + "24metrics Fraudshield": { + "hosts": ["fstrk.net"], + "id": "fstrk.net", + "parent": "24metrics" + }, + "velocecdn.com": { + "hosts": ["velocecdn.com"], + "id": "velocecdn.com", + "parent": "Unknown" + }, + "Mediascope": { + "hosts": ["tns-counter.ru"], + "id": "mediascope", + "parent": "Mediascope" + }, + "Dynamic Yield": { + "hosts": ["dynamicyield.com"], + "id": "dynamic_yield", + "parent": "Unknown" + }, + "Heap": { + "hosts": ["d36lvucg9kzous.cloudfront.net", "heapanalytics.com"], + "id": "heap", + "parent": "Heap" + }, + "Polar": { + "hosts": ["mediavoice.com"], + "id": "polar.me", + "parent": "Polar Mobile Group Inc." + }, + "octapi.net": { + "hosts": ["octapi.net"], + "id": "octapi.net", + "parent": "Unknown" + }, + "Neustar AdAdvisor": { + "hosts": ["adadvisor.net"], + "id": "neustar_adadvisor", + "parent": "Neustar " + }, + "Bloomberg CDN": { + "hosts": ["bwbx.io"], + "id": "bwbx.io", + "parent": "Unknown" + }, + "Tru Optik": { + "hosts": ["truoptik.com"], + "id": "truoptik", + "parent": "Unknown" + }, + "LINE Apps": { + "hosts": ["line-apps.com", "line-scdn.net", "line.me"], + "id": "line_apps", + "parent": "LINE Corporation" + }, + "Shopify CDN": { + "hosts": ["shopifycdn.com"], + "id": "shopifycdn.com", + "parent": "Shopify" + }, + "tensitionschoo.club": { + "hosts": ["tensitionschoo.club"], + "id": "tensitionschoo.club", + "parent": "Unknown" + }, + "Netflix": { + "hosts": [ + "netflix.com", + "nflxext.com", + "nflximg.net", + "nflxso.net", + "nflxvideo.net" + ], + "id": "netflix", + "parent": "Unknown" + }, + "Acceptable Ads Exchange": { + "hosts": ["aaxads.com"], + "id": "aaxads.com", + "parent": "Unknown" + }, + "Sentry": { + "hosts": ["ravenjs.com", "sentry.io"], + "id": "sentry", + "parent": "Unknown" + }, + "Webedia": { + "hosts": ["goutee.top", "mediaathay.org.uk", "wbdx.fr"], + "id": "webedia", + "parent": "Fimalac Group" + }, + "commercialvalue.org": { + "hosts": ["commercialvalue.org"], + "id": "commercialvalue.org", + "parent": "Unknown" + }, + "CDN77": { + "hosts": ["cdn77.com", "cdn77.org"], + "id": "cdn77", + "parent": "Unknown" + }, + "Live Intent": { + "hosts": ["liadm.com"], + "id": "live_intent", + "parent": "Liveintent Inc." + }, + "BloomReach": { + "hosts": ["brcdn.com", "brsrvr.com", "brtstats.com"], + "id": "bloomreach", + "parent": "BloomReach" + }, + "Gigya": { "hosts": ["gigya.com"], "id": "gigya", "parent": "Gigya" }, + "Parsely": { + "hosts": ["d1z2jf7jlzjs58.cloudfront.net", "parsely.com"], + "id": "parsely", + "parent": "Parse.ly" + }, + "Layer-ADS.net": { + "hosts": ["layer-ad.org"], + "id": "layer-ad.org", + "parent": "Unknown" + }, + "BeamPulse": { + "hosts": ["beampulse.com"], + "id": "beampulse.com", + "parent": "Unknown" + }, + "MediaV": { "hosts": ["mediav.com"], "id": "mediav", "parent": "Unknown" }, + "Turner": { "hosts": ["turner.com"], "id": "turner", "parent": "Turner" }, + "Ninja Access Analysis": { + "hosts": ["cho-chin.com", "donburako.com", "hishaku.com", "shinobi.jp"], + "id": "ninja_access_analysis", + "parent": "Samurai Factory" + }, + "Treasure Data": { + "hosts": ["treasuredata.com"], + "id": "treasuredata", + "parent": "arm" + }, + "Contentful GmbH": { + "hosts": ["ctfassets.net"], + "id": "contentful_gmbh", + "parent": "Contentful GmbH" + }, + "Trusted Shops": { + "hosts": ["trustedshops.com"], + "id": "trusted_shops", + "parent": "Trusted Shops" + }, + "wywy": { + "hosts": ["wywy.com", "wywyuserservice.com"], + "id": "wywy.com", + "parent": "Unknown" + }, + "Steepto": { + "hosts": ["steepto.com"], + "id": "steepto.com", + "parent": "Unknown" + }, + "Certona": { + "hosts": ["certona.net", "res-x.com"], + "id": "certona", + "parent": "Certona (Resonance)" + }, + "Fox News CDN": { + "hosts": ["fncstatic.com"], + "id": "foxnews_static", + "parent": "Fox News Network, LLC" + }, + "Userlike": { + "hosts": [ + "dq4irj27fs462.cloudfront.net", + "userlike-cdn-widgets.s3-eu-west-1.amazonaws.com", + "userlike.com" + ], + "id": "userlike.com", + "parent": "Unknown" + }, + "Distroscale": { + "hosts": ["jsrdn.com"], + "id": "distroscale", + "parent": "Unknown" + }, + "Optimonk": { + "hosts": ["optimonk.com"], + "id": "optimonk", + "parent": "OptiMonk" + }, + "Ad Spirit": { + "hosts": ["adspirit.de", "adspirit.net"], + "id": "ad_spirit", + "parent": "AdSpirit GmbH" + }, + "OneSignal": { + "hosts": ["onesignal.com", "os.tc"], + "id": "onesignal", + "parent": "OneSignal" + }, + "Intelligent Reach": { + "hosts": ["ist-track.com"], + "id": "intelligent_reach", + "parent": "Intelligent Reach" + }, + "Statuspage": { + "hosts": ["statuspage.io"], + "id": "statuspage.io", + "parent": "Atlassian" + }, + "StatHat": { "hosts": ["stathat.com"], "id": "stathat", "parent": "Unknown" }, + "o12zs3u2n.com": { + "hosts": ["o12zs3u2n.com"], + "id": "o12zs3u2n.com", + "parent": "Unknown" + }, + "eXTReMe Tracker": { + "hosts": ["extreme-dm.com"], + "id": "extreme_tracker", + "parent": "Extreme Digital" + }, + "SpeedCurve": { + "hosts": ["speedcurve.com"], + "id": "speedcurve", + "parent": "Unknown" + }, + "Storygize": { + "hosts": ["storygize.net"], + "id": "storygize", + "parent": "Unknown" + }, + "GitHub Apps": { + "hosts": ["githubapp.com"], + "id": "github_apps", + "parent": "GitHub, Inc." + }, + "Auth0 Inc.": { + "hosts": ["auth0.com"], + "id": "auth0", + "parent": "Auth0 Inc." + }, + "JuggCash": { + "hosts": ["contentabc.com", "mofos.com"], + "id": "juggcash", + "parent": "JuggCash" + }, + "Connexity": { + "hosts": ["connexity.net", "cxt.ms"], + "id": "connexity", + "parent": "Connexity" + }, + "StepStone": { + "hosts": ["stepstone.com"], + "id": "stepstone.com", + "parent": "Unknown" + }, + "Polldaddy": { + "hosts": ["polldaddy.com"], + "id": "polldaddy", + "parent": "Polldaddy" + }, + "Seedtag": { + "hosts": ["seedtag.com"], + "id": "seedtag.com", + "parent": "Seedtag Advertising S.L" + }, + "InnoGames": { + "hosts": ["innogames.com", "innogames.de", "innogamescdn.com"], + "id": "innogames.de", + "parent": "Unknown" + }, + "Bugsnag": { + "hosts": ["bugsnag.com", "d2wy8f7a9ursnm.cloudfront.net"], + "id": "bugsnag", + "parent": "Bugsnag" + }, + "Advolution": { + "hosts": ["advolution.de"], + "id": "advolution", + "parent": "Advolution" + }, + "Sourcepoint": { + "hosts": ["decenthat.com", "summerhamster.com"], + "id": "sourcepoint", + "parent": "Unknown" + }, + "iAdvize": { "hosts": ["iadvize.com"], "id": "iadvize", "parent": "iAdvize" }, + "Burda Digital Systems": { + "hosts": ["bstatic.de"], + "id": "burda_digital_systems", + "parent": "Hubert Burda Media" + }, + "i-Behavior": { + "hosts": ["ib-ibi.com"], + "id": "i-behavior", + "parent": "KBM Group" + }, + "Raygun": { "hosts": ["raygun.io"], "id": "raygun", "parent": "Raygun" }, + "LiftIgniter": { + "hosts": ["petametrics.com"], + "id": "petametrics", + "parent": "Unknown" + }, + "ACPM": { "hosts": ["acpm.fr"], "id": "acpm.fr", "parent": "Unknown" }, + "IBM Customer Experience": { + "hosts": ["cmcore.com", "coremetrics.com"], + "id": "ibm_customer_experience", + "parent": "IBM" + }, + "doofinder": { + "hosts": ["doofinder.com"], + "id": "doofinder.com", + "parent": "Unknown" + }, + "Sumologic": { + "hosts": ["sumologic.com"], + "id": "sumologic.com", + "parent": "Unknown" + }, + "Twitch CDN": { + "hosts": ["jtvnw.net", "ttvnw.net", "twitchcdn.net", "twitchsvc.net"], + "id": "twitch_cdn", + "parent": "Amazon" + }, + "esprit.de": { + "hosts": ["esprit.de"], + "id": "esprit.de", + "parent": "Unknown" + }, + "Improve Digital": { + "hosts": ["360yield.com"], + "id": "improve_digital", + "parent": "Improve Digital International BV" + }, + "eKomi": { "hosts": ["ekomi.de"], "id": "ekomi", "parent": "eKomi" }, + "Mailerlite": { + "hosts": ["mailerlite.com"], + "id": "mailerlite.com", + "parent": "MailerLite" + }, + "Xing": { + "hosts": ["xing-share.com", "xing.com"], + "id": "xing", + "parent": "XING" + }, + "Shopping.com": { + "hosts": ["shoppingshadow.com"], + "id": "shopping_com", + "parent": "eBay" + }, + "Adap.tv": { "hosts": ["adap.tv"], "id": "adap.tv", "parent": "Verizon" }, + "Ad Lightning": { + "hosts": ["adlightning.com"], + "id": "ad_lightning", + "parent": "Ad Lightning" + }, + "Sizmek": { + "hosts": ["serving-sys.com"], + "id": "sizmek", + "parent": "Sizmek Technologies, Inc. " + }, + "pub.network": { + "hosts": ["pub.network"], + "id": "pub.network", + "parent": "Unknown" + }, + "EMS Mobile": { + "hosts": ["emsmobile.de"], + "id": "emsmobile.de", + "parent": "Unknown" + }, + "Tremor Video": { + "hosts": ["tremorhub.com", "tremorvideo.com", "videohub.tv"], + "id": "tremor_video", + "parent": "Unknown" + }, + "The Weather Company": { + "hosts": ["w-x.co", "weather.com", "wfxtriggers.com"], + "id": "the_weather_company", + "parent": "IBM" + }, + "Atlassian": { + "hosts": [ + "atl-paas.net", + "atlassian.com", + "atlassian.net", + "d12ramskps3070.cloudfront.net" + ], + "id": "atlassian.net", + "parent": "Atlassian" + }, + "camakaroda.com": { + "hosts": ["camakaroda.com"], + "id": "camakaroda.com", + "parent": "Unknown" + }, + "Digital Nomads": { + "hosts": ["adtag.cc"], + "id": "digital_nomads", + "parent": "Unknown" + }, + "Gemius": { "hosts": ["gemius.pl"], "id": "gemius", "parent": "Gemius SA" }, + "GDM Digital": { + "hosts": ["gdmdigital.com"], + "id": "gdm_digital", + "parent": "VE Interactive (Formely GDM Digital)" + }, + "ad:C media": { + "hosts": ["adc-serv.net", "adc-srv.net"], + "id": "adc_media", + "parent": "Unknown" + }, + "Findizer": { + "hosts": ["findizer.fr"], + "id": "findizer.fr", + "parent": "Unknown" + }, + "liveadexchanger.com": { + "hosts": ["liveadexchanger.com"], + "id": "liveadexchanger.com", + "parent": "Unknown" + }, + "Yottaa": { "hosts": ["yottaa.net"], "id": "yottaa", "parent": "Yottaa" }, + "Uptolike": { + "hosts": ["uptolike.com"], + "id": "uptolike.com", + "parent": "Unknown" + }, + "Insight Image": { + "hosts": ["iias.eu"], + "id": "iias.eu", + "parent": "Unknown" + }, + "Site24x7": { + "hosts": ["site24x7rum.com", "site24x7rum.eu"], + "id": "site24x7", + "parent": "Zoho Corporation" + }, + "Clickonometrics": { + "hosts": ["clickonometrics.pl"], + "id": "clickonometrics", + "parent": "Clickonometrics" + }, + "Google Static": { + "hosts": ["gstatic.com"], + "id": "gstatic", + "parent": "Google" + }, + "Just Premium": { + "hosts": ["justpremium.com", "justpremium.nl"], + "id": "just_premium", + "parent": "Justpremium BV" + }, + "FreakOut": { "hosts": ["fout.jp"], "id": "fout.jp", "parent": "Unknown" }, + "Coinhive": { + "hosts": ["authedmine.com", "coinhive.com"], + "id": "coinhive", + "parent": "Unknown" + }, + "Usemax": { + "hosts": ["usemax.de", "usemaxserver.de"], + "id": "usemax", + "parent": "usemax advertisement (Emego GmbH)" + }, + "AdScale": { + "hosts": ["adscale.de"], + "id": "adscale", + "parent": "Str\u00f6er SSP GmbH" + }, + "Optomaton": { + "hosts": ["volvelle.tech"], + "id": "optomaton", + "parent": "Ve Global" + }, + "PayPal": { + "hosts": ["paypal.com", "paypalobjects.com"], + "id": "paypal", + "parent": "eBay" + }, + "zukxd6fkxqn.com": { + "hosts": ["zukxd6fkxqn.com"], + "id": "zukxd6fkxqn.com", + "parent": "Unknown" + }, + "rtbsuperhub.com": { + "hosts": ["rtbsuperhub.com"], + "id": "rtbsuperhub.com", + "parent": "Unknown" + }, + "district m": { + "hosts": ["districtm.ca", "districtm.io"], + "id": "districtm.io", + "parent": "district m inc." + }, + "WonderPush": { + "hosts": ["wonderpush.com"], + "id": "wonderpush", + "parent": "WonderPush" + }, + "The Movie DB": { + "hosts": ["tmdb.org"], + "id": "themoviedb", + "parent": "The Movie DB" + }, + "GiantMedia": { + "hosts": ["videostat.com"], + "id": "giantmedia", + "parent": "Adknowledge" + }, + "Advanced Hosters": { + "hosts": ["ahcdn.com", "pix-cdn.org"], + "id": "advanced_hosters", + "parent": "Unknown" + }, + "Google Fonts": { + "hosts": ["fonts.googleapis.com"], + "id": "google_fonts", + "parent": "Google" + }, + "Crimson Hexagon": { + "hosts": ["crimsonhexagon.com", "hexagon-analytics.com"], + "id": "crimsonhexagon_com", + "parent": "Unknown" + }, + "Twenga Solutions": { + "hosts": ["c4tw.net"], + "id": "twenga", + "parent": "Unknown" + }, + "Google User Content": { + "hosts": ["googleusercontent.com"], + "id": "google_users", + "parent": "Google" + }, + "Queue-it": { + "hosts": ["queue-it.net"], + "id": "queue-it", + "parent": "Unknown" + }, + "ImgIX": { "hosts": ["imgix.net"], "id": "imgix.net", "parent": "Unknown" }, + "lentainform.com": { + "hosts": ["lentainform.com"], + "id": "lentainform.com", + "parent": "Unknown" + }, + "ie8eamus.com": { + "hosts": ["ie8eamus.com"], + "id": "ie8eamus.com", + "parent": "Unknown" + }, + "Apple": { "hosts": ["apple.com"], "id": "apple", "parent": "Apple" }, + "Schnee von Morgen": { + "hosts": ["schneevonmorgen.com", "svonm.com"], + "id": "schneevonmorgen.com", + "parent": "Unknown" + }, + "ADMIZED": { "hosts": ["admized.com"], "id": "admized", "parent": "Unknown" }, + "Monotype Imaging Inc.": { + "hosts": ["fonts.com"], + "id": "monotype_imaging", + "parent": "Unknown" + }, + "WordPress": { + "hosts": ["w.org", "wordpress.com", "wp.com"], + "id": "wordpress_stats", + "parent": "Automattic" + }, + "Pladform": { + "hosts": ["pladform.com"], + "id": "pladform.ru", + "parent": "Pladform" + }, + "TRUSTe Notice": { + "hosts": ["choices-or.truste.com", "choices.truste.com"], + "id": "truste_notice", + "parent": "TrustArc" + }, + "Airbnb": { + "hosts": ["muscache.com", "musthird.com"], + "id": "airbnb", + "parent": "Unknown" + }, + "HEIM:SPIEL Medien GmbH": { + "hosts": ["weltsport.net", "hstrck.com"], + "id": "heimspiel", + "parent": "Unknown" + }, + "Keycdn": { "hosts": ["kxcdn.com"], "id": "kxcdn.com", "parent": "Unknown" }, + "Rackspace": { + "hosts": ["rackcdn.com"], + "id": "rackcdn.com", + "parent": "Unknown" + }, + "Google Syndication": { + "hosts": ["googlesyndication.com"], + "id": "google_syndication", + "parent": "Google" + }, + "TrafficJunky": { + "hosts": ["trafficjunky.net"], + "id": "trafficjunky", + "parent": "TrafficJunky" + }, + "hiveDX": { + "hosts": ["hivedx.com"], + "id": "hivedx.com", + "parent": "Unknown" + }, + "Unister": { + "hosts": ["unister-adservices.com", "unister-gmbh.de"], + "id": "unister", + "parent": "Unister" + }, + "magnuum.com": { + "hosts": ["magnuum.com"], + "id": "magnuum.com", + "parent": "Unknown" + }, + "CJ Affiliate": { + "hosts": [ + "afcyhf.com", + "anrdoezrs.net", + "apmebf.com", + "awltovhc.com", + "emjcd.com", + "ftjcfx.com", + "lduhtrp.net", + "qksz.net", + "tkqlhce.com", + "tqlkg.com", + "yceml.net" + ], + "id": "commission_junction", + "parent": "APN News and Media Ltd" + }, + "Content Exchange": { + "hosts": ["contentexchange.me"], + "id": "contentexchange.me", + "parent": "I.R.V." + }, + "Adult Webmaster Empire": { + "hosts": ["awempire.com", "dditscdn.com", "livejasmin.com"], + "id": "adult_webmaster_empire", + "parent": "Adult Webmaster Empire" + }, + "GP One GmbH": { + "hosts": ["skadtec.com"], + "id": "skadtec.com", + "parent": "Unknown" + }, + "InsightExpress": { + "hosts": ["insightexpressai.com"], + "id": "insightexpress", + "parent": "Millward Brown" + }, + "Adglue": { "hosts": ["adsafety.net"], "id": "adglue", "parent": "Admans" }, + "freenet.de": { + "hosts": ["freenet.de", "freent.de"], + "id": "freenet_de", + "parent": "Unknown" + }, + "JuicyAds": { + "hosts": ["juicyads.com"], + "id": "juicyads", + "parent": "JuicyAds" + }, + "blogspot.com": { + "hosts": ["blogblog.com", "blogger.com", "blogspot.com"], + "id": "blogspot_com", + "parent": "Google" + }, + "Econda": { + "hosts": ["econda-monitor.de"], + "id": "econda", + "parent": "Econda" + }, + "Wirecard": { + "hosts": ["wirecard.com", "wirecard.de"], + "id": "wirecard", + "parent": "Unknown" + }, + "AdFox": { + "hosts": ["adfox.ru", "adwolf.ru"], + "id": "adfox", + "parent": "Yandex" + }, + "NitroPay": { + "hosts": ["nitropay.com"], + "id": "nitropay", + "parent": "GG Software LLC" + }, + "Cliplister": { + "hosts": ["mycliplister.com"], + "id": "mycliplister.com", + "parent": "Unknown" + }, + "worldnaturenet.xyz": { + "hosts": ["worldnaturenet.xyz"], + "id": "worldnaturenet_xyz", + "parent": "Unknown" + }, + "jQuery": { + "hosts": ["cdnjquery.com", "jquery.com"], + "id": "jquery", + "parent": "JS Foundation" + }, + "itineraire.info": { + "hosts": ["itineraire.info"], + "id": "itineraire.info", + "parent": "Unknown" + }, + "TVSquared": { + "hosts": ["tvsquared.com"], + "id": "tvsquared.com", + "parent": "Unknown" + }, + "Smyte": { "hosts": ["smyte.com"], "id": "smyte", "parent": "Smyte" }, + "Lengow": { "hosts": ["lengow.com"], "id": "lengow", "parent": "Lengow" }, + "ladsp.com": { + "hosts": ["ladsp.com"], + "id": "ladsp.com", + "parent": "Unknown" + }, + "Flixmedia": { + "hosts": ["flix360.com"], + "id": "flixmedia", + "parent": "Unknown" + }, + "Trustpilot": { + "hosts": ["trustpilot.com"], + "id": "trustpilot", + "parent": "Trustpilot" + }, + "Sovrn Viewability Solutions": { + "hosts": ["onscroll.com"], + "id": "sovrn_viewability_solutions", + "parent": "Sovrn Holdings Inc" + }, + "National Oceanic and Atmospheric Administration": { + "hosts": ["noaa.gov"], + "id": "noaa.gov", + "parent": "Unknown" + }, + "AdMeira": { + "hosts": ["admeira.ch"], + "id": "admeira.ch", + "parent": "Unknown" + }, + "Nakanohito": { + "hosts": ["nakanohito.jp"], + "id": "nakanohito.jp", + "parent": "UserInsight" + }, + "Admedo": { + "hosts": ["adizio.com", "admedo.com"], + "id": "admedo_com", + "parent": "Admedo Ltd" + }, + "Remintrex": { + "hosts": ["remintrex.com"], + "id": "remintrex", + "parent": "Unknown" + }, + "Avocet": { + "hosts": ["avocet.io"], + "id": "avocet", + "parent": "Avocet Systems Limited" + }, + "Infectious Media": { + "hosts": ["impdesk.com", "impressiondesk.com"], + "id": "infectious_media", + "parent": "Infectious Media" + }, + "Yieldbot": { + "hosts": ["yldbt.com"], + "id": "yieldbot", + "parent": "Yieldbot" + }, + "Kenshoo": { "hosts": ["xg4ken.com"], "id": "kenshoo", "parent": "Kenshoo" }, + "Ensighten": { + "hosts": ["ensighten.com"], + "id": "ensighten", + "parent": "Ensighten" + }, + "TradeDesk": { + "hosts": ["adsrvr.org"], + "id": "tradedesk", + "parent": "The Trade Desk" + }, + "AdvertServe": { + "hosts": ["advertserve.com"], + "id": "advertserve", + "parent": "Unknown" + }, + "AdTiger": { "hosts": ["adtiger.de"], "id": "adtiger", "parent": "AdTiger" }, + "Drawbridge": { + "hosts": ["adsymptotic.com"], + "id": "drawbridge", + "parent": "Drawbridge" + }, + "Media Impact": { + "hosts": ["mediaimpact.de"], + "id": "media_impact", + "parent": "Media Impact" + }, + "s3xified.com": { + "hosts": ["s3xified.com"], + "id": "s3xified.com", + "parent": "Unknown" + }, + "Webtrekk": { + "hosts": [ + "d1r27qvpjiaqj3.cloudfront.net", + "mateti.net", + "wbtrk.net", + "wcfbc.net", + "webtrekk-asia.net", + "webtrekk.com", + "webtrekk.net", + "wt-eu02.net", + "wt-safetag.com" + ], + "id": "webtrekk", + "parent": "Webtrekk" + }, + "adac.de": { "hosts": ["adac.de"], "id": "adac_de", "parent": "Unknown" }, + "Feedbackify": { + "hosts": ["feedbackify.com"], + "id": "feedbackify", + "parent": "Feedbackify" + }, + "DoubleVerify": { + "hosts": ["doubleverify.com"], + "id": "doubleverify", + "parent": "DoubleVerify Inc.\u200b" + }, + "cdnsure.com": { + "hosts": ["cdnsure.com"], + "id": "cdnsure.com", + "parent": "Unknown" + }, + "DMWD": { "hosts": ["ctret.de"], "id": "dmwd", "parent": "Unknown" }, + "Integral Ad Science": { + "hosts": ["adsafeprotected.com", "iasds01.com"], + "id": "integral_ad_science", + "parent": "Integral Ad Science, Inc." + }, + "Vinted": { "hosts": ["vinted.net"], "id": "vinted", "parent": "Unknown" }, + "congstar.de": { + "hosts": ["congstar.de"], + "id": "congstar.de", + "parent": "Unknown" + }, + "Ve Interactive": { + "hosts": ["veinteractive.com"], + "id": "ve_interactive", + "parent": "Ve Interactive" + }, + "boudja.com": { + "hosts": ["boudja.com"], + "id": "boudja.com", + "parent": "Unknown" + }, + "generaltracking.de": { + "hosts": ["generaltracking.de"], + "id": "generaltracking_de", + "parent": "Unknown" + }, + "Nice264": { + "hosts": ["nice264.com"], + "id": "nice264.com", + "parent": "Unknown" + }, + "Wysistat": { + "hosts": ["wysistat.net"], + "id": "wysistat.com", + "parent": "Wysistat" + }, + "i10c.net": { "hosts": ["i10c.net"], "id": "i10c.net", "parent": "Unknown" }, + "Quartic": { + "hosts": ["quarticon.com"], + "id": "quartic.pl", + "parent": "QuarticOn S.A." + }, + "Loop11": { "hosts": ["loop11.com"], "id": "loop11", "parent": "360i" }, + "AdSpyglass": { + "hosts": ["o333o.com"], + "id": "adspyglass", + "parent": "AdSpyglass" + }, + "AddThis": { + "hosts": ["addthis.com", "addthiscdn.com", "addthisedge.com"], + "id": "addthis", + "parent": "Oracle" + }, + "eStat": { + "hosts": ["cybermonitor.com", "estat.com"], + "id": "estat", + "parent": "Mediametrie" + }, + "Twitch": { + "hosts": ["ext-twitch.tv", "twitch.tv"], + "id": "twitch.tv", + "parent": "Amazon" + }, + "OMS": { + "hosts": ["oms.eu", "omsnative.de"], + "id": "oms", + "parent": "Unknown" + }, + "FreeWheel": { + "hosts": ["fwmrm.net"], + "id": "freewheel", + "parent": "Comcast" + }, + "WURFL": { "hosts": ["wurfl.io"], "id": "wurfl", "parent": "ScientiaMobile" }, + "Flocktory": { + "hosts": ["flocktory.com"], + "id": "flocktory.com", + "parent": "Unknown" + }, + "Alexa Metrics": { + "hosts": [ + "alexametrics.com", + "d31qbv1cthcecs.cloudfront.net", + "d5nxst8fruw4z.cloudfront.net" + ], + "id": "alexa_metrics", + "parent": "Amazon" + }, + "Microsoft SharePoint": { + "hosts": ["sharepointonline.com"], + "id": "sharepoint", + "parent": "Microsoft" + }, + "tableteducation.com": { + "hosts": ["tableteducation.com"], + "id": "tableteducation.com", + "parent": "Unknown" + }, + "Akamai Technologies": { + "hosts": [ + "abmr.net", + "akamai.net", + "akamaihd.net", + "akamaized.net", + "akstat.io", + "edgekey.net", + "edgesuite.net" + ], + "id": "akamai_technologies", + "parent": "Akamai Technologies" + }, + "iSpot.tv": { "hosts": ["ispot.tv"], "id": "ispot.tv", "parent": "Unknown" }, + "FileServe": { + "hosts": ["fileserve.xyz"], + "id": "fileserve", + "parent": "FileServe" + }, + "DataXu": { + "hosts": ["w55c.net"], + "id": "dataxu", + "parent": "Dataxu, Inc. " + }, + "Glomex": { + "hosts": ["glomex.cloud", "glomex.com"], + "id": "glomex.com", + "parent": "Unknown" + }, + "Flag Counter": { + "hosts": ["flagcounter.com"], + "id": "flag_counter", + "parent": "Flag Counter" + }, + "Tisoomi": { + "hosts": ["tisoomi-services.com"], + "id": "tisoomi", + "parent": "Unknown" + }, + "Omniconvert": { + "hosts": ["omniconvert.com"], + "id": "omniconvert.com", + "parent": "Omniconvert" + }, + "brillen.de": { + "hosts": ["brillen.de"], + "id": "brillen.de", + "parent": "Unknown" + }, + "Allo-Pages": { + "hosts": ["allo-pages.fr"], + "id": "allo-pages.fr", + "parent": "Links Lab" + }, + "Connatix": { + "hosts": ["connatix.com"], + "id": "connatix.com", + "parent": "Connatix Native Exchange Inc." + }, + "Digioh": { + "hosts": ["digioh.com", "lightboxcdn.com"], + "id": "digioh", + "parent": "Unknown" + }, + "Blink New Media": { + "hosts": ["bnmla.com"], + "id": "blink_new_media", + "parent": "engage:BDR (Blink New Media)" + }, + "BounceX": { + "hosts": ["bouncex.com", "bouncex.net"], + "id": "bouncex", + "parent": "Unknown" + }, + "AppsFlyer": { + "hosts": ["appsflyer.com"], + "id": "appsflyer", + "parent": "AppsFlyer" + }, + "Pixalate": { + "hosts": ["adrta.com"], + "id": "pixalate", + "parent": "Pixalate, Inc." + }, + "chaturbate.com": { + "hosts": ["chaturbate.com"], + "id": "chaturbate.com", + "parent": "Unknown" + }, + "Distil Bot Discovery": { + "hosts": ["distiltag.com"], + "id": "distil_tag", + "parent": "distil networks" + }, + "LeadPlace": { + "hosts": ["leadplace.fr"], + "id": "leadplace", + "parent": "Leadplace - Temelio" + }, + "Otto Group": { + "hosts": ["otto.de", "ottogroup.media"], + "id": "otto.de", + "parent": "Unknown" + }, + "Caltat": { + "hosts": ["caltat.com"], + "id": "caltat.com", + "parent": "Unknown" + }, + "Pulpix": { + "hosts": ["pulpix.com"], + "id": "pulpix.com", + "parent": "ADYOULIKE SA" + }, + "Spoteffect": { + "hosts": ["spoteffects.net"], + "id": "spoteffect", + "parent": "Spoteffect" + }, + "SnigelWeb, Inc.": { + "hosts": ["h-bid.com"], + "id": "snigelweb", + "parent": "SnigelWeb, Inc." + }, + "Moz": { "hosts": ["moz.com"], "id": "moz", "parent": "Unknown" }, + "Reddit": { + "hosts": [ + "redd.it", + "reddit-image.s3.amazonaws.com", + "reddit.com", + "redditmedia.com", + "redditstatic.com" + ], + "id": "reddit", + "parent": "reddit" + }, + "Smaato": { + "hosts": ["smaato.net"], + "id": "smaato", + "parent": "Spearhead Integrated Marketing Communication" + }, + "comprigo": { + "hosts": ["comprigo.com"], + "id": "comprigo", + "parent": "Unknown" + }, + "foxydeal.com": { + "hosts": ["foxydeal.com"], + "id": "foxydeal_com", + "parent": "Unknown" + }, + "Psyma": { "hosts": ["psyma.com"], "id": "psyma", "parent": "Psyma" }, + "onet": { + "hosts": ["ocdn.eu", "onet.pl"], + "id": "onet.pl", + "parent": "Unknown" + }, + "SaleCycle": { + "hosts": ["d16fk4ms6rqz1v.cloudfront.net", "salecycle.com"], + "id": "salecycle", + "parent": "SaleCycle" + }, + "Aemediatraffic": { + "hosts": ["aemediatraffic.com", "hprofits.com"], + "id": "aemediatraffic", + "parent": "Unknown" + }, + "Admo.TV": { "hosts": ["admo.tv"], "id": "admo.tv", "parent": "Unknown" }, + "Adglare": { + "hosts": ["adglare.net"], + "id": "adglare.net", + "parent": "Unknown" + }, + "Allegro": { + "hosts": [ + "allegroimg.com", + "allegrostatic.com", + "allegrostatic.pl", + "ngacm.com", + "ngastatic.com" + ], + "id": "allegro.pl", + "parent": "Allegro" + }, + "TrafficHaus": { + "hosts": ["traffichaus.com"], + "id": "traffichaus", + "parent": "TrafficHaus" + }, + "AB Tasty": { + "hosts": ["abtasty.com", "d1447tq2m68ekg.cloudfront.net"], + "id": "ab_tasty", + "parent": "AB Tasty" + }, + "Lotame": { + "hosts": ["crwdcntrl.net"], + "id": "lotame", + "parent": "Lotame Solutions, Inc." + }, + "MaxCDN": { + "hosts": ["maxcdn.com", "netdna-cdn.com", "netdna-ssl.com"], + "id": "maxcdn", + "parent": "Unknown" + }, + "Effiliation": { + "hosts": ["effiliation.com"], + "id": "effiliation", + "parent": "Effiliation" + }, + "Perfect Market": { + "hosts": ["perfectmarket.com"], + "id": "perfect_market", + "parent": "Perfect Market" + }, + "Simpli.fi": { + "hosts": ["simpli.fi"], + "id": "simpli.fi", + "parent": "Simplifi Holdings Inc." + }, + "Amazon.com": { + "hosts": [ + "amazon.ca", + "amazon.co.jp", + "amazon.co.uk", + "amazon.com", + "amazon.de", + "amazon.es", + "amazon.fr", + "amazon.it", + "d3io1k5o0zdpqr.cloudfront.net" + ], + "id": "amazon", + "parent": "Amazon" + }, + "Appcues": { "hosts": ["appcues.com"], "id": "appcues", "parent": "Unknown" }, + "DreamLab.pl": { + "hosts": ["dreamlab.pl"], + "id": "dreamlab.pl", + "parent": "Onet.pl SA" + }, + "kairion": { + "hosts": ["kairion.de", "kctag.net"], + "id": "kairion.de", + "parent": "ProSiebenSat.1 Media" + }, + "Proxistore": { + "hosts": ["proxistore.com"], + "id": "proxistore.com", + "parent": "Unknown" + }, + "sitelabweb.com": { + "hosts": ["sitelabweb.com"], + "id": "sitelabweb.com", + "parent": "Unknown" + }, + "Moat": { + "hosts": ["moatads.com", "moatpixel.com"], + "id": "moat", + "parent": "Oracle" + }, + "Qualtrics": { + "hosts": ["qualtrics.com"], + "id": "qualtrics", + "parent": "Qualtrics" + }, + "FLXONE": { + "hosts": ["flx1.com", "flxpxl.com"], + "id": "flxone", + "parent": "FlxOne" + }, + "AffiMax": { "hosts": ["affimax.de"], "id": "affimax", "parent": "AffiMax" }, + "Adscore": { "hosts": ["adsco.re"], "id": "adsco.re", "parent": "Unknown" }, + "Next Performance": { + "hosts": ["nxtck.com"], + "id": "next_performance", + "parent": "Nextperf" + }, + "immobilienscout24.de": { + "hosts": ["immobilienscout24.de", "static-immobilienscout24.de"], + "id": "immobilienscout24_de", + "parent": "Scout 24" + }, + "ablida": { + "hosts": ["ablida.de", "ablida.net"], + "id": "ablida", + "parent": "Unknown" + }, + "Sape": { + "hosts": ["sape.ru"], + "id": "sape.ru", + "parent": "Sape Sapient Solution" + }, + "venturead.com": { + "hosts": ["venturead.com"], + "id": "venturead.com", + "parent": "Unknown" + }, + "Adyoulike": { + "hosts": ["adyoulike.com", "omnitagjs.com"], + "id": "adyoulike", + "parent": "ADYOULIKE SA" + }, + "IMDB CDN": { + "hosts": ["media-imdb.com"], + "id": "media-imdb.com", + "parent": "Amazon" + }, + "Lytics": { "hosts": ["lytics.io"], "id": "lytics", "parent": "Unknown" }, + "Relap": { "hosts": ["relap.io"], "id": "relap", "parent": "Unknown" }, + "xxxlshop.de": { + "hosts": ["xxxlshop.de"], + "id": "xxxlshop.de", + "parent": "Unknown" + }, + "OLX": { + "hosts": ["olx-st.com", "onap.io"], + "id": "olx-st.com", + "parent": "Unknown" + }, + "Videoplaza": { + "hosts": ["videoplaza.tv"], + "id": "videoplaza", + "parent": "Videoplaza" + }, + "Zemanta": { + "hosts": ["zemanta.com"], + "id": "zemanta", + "parent": "Zemanta, Inc." + }, + "Vimeo": { + "hosts": ["vimeo.com", "vimeocdn.com"], + "id": "vimeo", + "parent": "IAC (InterActiveCorp)" + }, + "Rating@Mail.Ru": { + "hosts": ["list.ru"], + "id": "list.ru", + "parent": "Megafon" + }, + "CQuotient": { + "hosts": ["cquotient.com"], + "id": "cquotient.com", + "parent": "Salesforce" + }, + "Reflected Networks": { + "hosts": ["rncdn3.com"], + "id": "rncdn3.com", + "parent": "Unknown" + }, + "Ziff Davis": { + "hosts": [ + "webtest.net", + "zdbb.net", + "ziffdavis.com", + "ziffdavisinternational.com", + "ziffprod.com", + "ziffstatic.com" + ], + "id": "ziff_davis", + "parent": "Ziff Davis LLC" + }, + "Kiwe.io": { + "hosts": ["kiwe.io", "tracc.it"], + "id": "tracc.it", + "parent": "Unknown" + }, + "Intimate Merger": { + "hosts": ["im-apps.net"], + "id": "intimate_merger", + "parent": "Intimate Merger" + }, + "o2.pl": { "hosts": ["o2.pl"], "id": "o2.pl", "parent": "o2.pl" }, + "CleverTap": { + "hosts": ["wzrkt.com"], + "id": "clever_tap", + "parent": "CleverTap" + }, + "Contact Impact": { + "hosts": ["adrolays.de", "c-i.as", "df-srv.de"], + "id": "contact_impact", + "parent": "Axel Springer Group" + }, + "SiteScout": { + "hosts": ["sitescout.com"], + "id": "sitescout", + "parent": "SiteScout" + }, + "Smartsupp Chat": { + "hosts": ["smartsuppchat.com"], + "id": "smartsupp_chat", + "parent": "Smartsuppp" + }, + "United Digital Group": { + "hosts": ["nonstoppartner.net"], + "id": "united_digital_group", + "parent": "Unknown" + }, + "AdsWizz": { "hosts": ["adswizz.com"], "id": "adswizz", "parent": "Unknown" }, + "DimML": { "hosts": ["dimml.io"], "id": "dimml", "parent": "Unknown" }, + "Adthink": { + "hosts": ["adthink.com", "audienceinsights.net"], + "id": "adthink", + "parent": "Unknown" + }, + "Adobe Dynamic Media (Scene7)": { + "hosts": ["scene7.com"], + "id": "scene7.com", + "parent": "Adobe" + }, + "ymetrica1.com": { + "hosts": ["ymetrica1.com"], + "id": "ymetrica1.com", + "parent": "Unknown" + }, + "Monetate": { + "hosts": ["monetate.net"], + "id": "monetate", + "parent": "Monetate" + }, + "Daily Mail": { + "hosts": ["dailymail.co.uk"], + "id": "dailymail.co.uk", + "parent": "Dmn Media" + }, + "Dynamic 1001 GmbH": { + "hosts": ["dyntracker.de", "media01.eu"], + "id": "dynamic_1001_gmbh", + "parent": "Unknown" + }, + "iovation": { + "hosts": ["iesnare.com", "iovation.com"], + "id": "iovation", + "parent": "iovation" + }, + "Bing Ads": { + "hosts": ["bing.com", "bing.net"], + "id": "bing_ads", + "parent": "Microsoft" + }, + "Yabbi": { + "hosts": ["adx.com.ru", "yabbi.me"], + "id": "yabbi", + "parent": "Unknown" + }, + "Ancora": { + "hosts": ["ancoraplatform.com"], + "id": "ancora", + "parent": "Ancora" + }, + "Rythmxchange": { + "hosts": ["rhythmxchange.com"], + "id": "rythmxchange", + "parent": "RhythmOne, LLC" + }, + "Tube Corporate": { + "hosts": ["tubecorporate.com"], + "id": "tubecorporate", + "parent": "Unknown" + }, + "Valiton": { + "hosts": ["vinsight.de"], + "id": "valiton", + "parent": "Hubert Burda Media" + }, + "Squarespace": { + "hosts": ["squarespace.com"], + "id": "squarespace.com", + "parent": "Unknown" + }, + "emetriq": { + "hosts": ["emetriq.de"], + "id": "emetriq", + "parent": "emetriq GmbH" + }, + "SMART AdServer": { + "hosts": [ + "sascdn.com", + "smartadserver.com", + "styria-digital.com", + "yoc-adserver.com" + ], + "id": "smart_adserver", + "parent": "Smart Adserver" + }, + "Google APIs": { + "hosts": ["googleapis.com"], + "id": "googleapis.com", + "parent": "Google" + }, + "Blis": { "hosts": ["blismedia.com"], "id": "blis", "parent": "Blis" }, + "Adition": { + "hosts": ["adition.com"], + "id": "adition", + "parent": "ProSiebenSat.1 Media" + }, + "Microsoft Services": { + "hosts": [ + "azurewebsites.net", + "cloudapp.net", + "gfx.ms", + "live.com", + "microsoft.com", + "microsoftonline-p.com", + "microsoftonline.com", + "microsofttranslator.com", + "msecnd.net", + "msedge.net", + "msocdn.com", + "onestore.ms", + "s-microsoft.com", + "trouter.io", + "windows.net" + ], + "id": "microsoft", + "parent": "Microsoft" + }, + "amgload.net": { + "hosts": ["amgload.net"], + "id": "amgload.net", + "parent": "Unknown" + }, + "Spotify": { + "hosts": ["scdn.co", "spotify.com"], + "id": "spotify", + "parent": "Unknown" + }, + "Outbrain": { + "hosts": ["outbrain.com", "outbrainimg.com"], + "id": "outbrain", + "parent": "Outbrain" + }, + "Bluecore": { + "hosts": ["bluecore.com", "triggeredmail.appspot.com"], + "id": "bluecore.com", + "parent": "Unknown" + }, + "Peerius": { "hosts": ["peerius.com"], "id": "peerius", "parent": "Peerius" }, + "da-ads.com": { + "hosts": ["da-ads.com"], + "id": "da-ads.com", + "parent": "Unknown" + }, + "Adblade": { + "hosts": ["adblade.com"], + "id": "adblade.com", + "parent": "Adblade" + }, + "Adverticum": { + "hosts": ["adverticum.net"], + "id": "adverticum", + "parent": "Adverticum Zrt." + }, + "FriendFinder Network": { + "hosts": [ + "adultfriendfinder.com", + "amigos.com", + "board-books.com", + "cams.com", + "facebookofsex.com", + "getiton.com", + "nostringsattached.com", + "pop6.com", + "streamray.com" + ], + "id": "friendfinder_network", + "parent": "FriendFinder Networks" + }, + "YouTube": { + "hosts": [ + "googlevideo.com", + "youtube-nocookie.com", + "youtube.com", + "ytimg.com" + ], + "id": "youtube", + "parent": "Google" + }, + "brightonclick.com": { + "hosts": ["brightonclick.com"], + "id": "brightonclick.com", + "parent": "Unknown" + }, + "CloudFlare": { + "hosts": ["cloudflare.com", "cloudflare.net"], + "id": "cloudflare", + "parent": "Cloudflare" + }, + "PubMatic": { + "hosts": ["pubmatic.com"], + "id": "pubmatic", + "parent": "PubMatic, Inc." + }, + "woopic.com": { + "hosts": ["woopic.com"], + "id": "woopic.com", + "parent": "Unknown" + }, + "Twitter for Business": { + "hosts": ["tellapart.com"], + "id": "twitter_for_business", + "parent": "Twitter" + }, + "AirPR": { + "hosts": ["airpr.com"], + "id": "airpr.com", + "parent": "AirPR Inc." + }, + "basilic.io": { + "hosts": ["basilic.io"], + "id": "basilic.io", + "parent": "Unknown" + }, + "33Across": { + "hosts": ["33across.com"], + "id": "33across", + "parent": "33Across" + }, + "Optimatic": { + "hosts": ["optimatic.com"], + "id": "optimatic", + "parent": "Optimatic" + }, + "Komoona": { "hosts": ["komoona.com"], "id": "komoona", "parent": "Komoona" }, + "Mixpanel": { + "hosts": ["mixpanel.com", "mxpnl.com", "mxpnl.net"], + "id": "mixpanel", + "parent": "Mixpanel" + }, + "BangBros": { + "hosts": ["bangdom.com"], + "id": "bangdom.com", + "parent": "Unknown" + }, + "adwebster": { + "hosts": ["adwebster.com"], + "id": "adwebster", + "parent": "adwebster" + }, + "Rubicon": { + "hosts": [ + "dpclk.com", + "mobsmith.com", + "nearbyad.com", + "rubiconproject.com" + ], + "id": "rubicon", + "parent": "The Rubicon Project, Limited" + }, + "Yandex": { + "hosts": [ + "d31j93rd8oukbv.cloudfront.net", + "webvisor.org", + "yandex.net", + "yandex.ru", + "yastatic.net" + ], + "id": "yandex", + "parent": "Yandex" + }, + "Kameleoon": { + "hosts": ["kameleoon.com", "kameleoon.eu"], + "id": "kameleoon", + "parent": "Kameleoon" + }, + "Omniscienta": { + "hosts": ["omnidsp.com"], + "id": "omniscienta", + "parent": "Unknown" + }, + "Qualaroo": { + "hosts": ["qualaroo.com"], + "id": "qualaroo", + "parent": "Unknown" + }, + "Zedo": { "hosts": ["zedo.com"], "id": "zedo", "parent": "Zedo" }, + "TrustArc": { + "hosts": ["trustarc.com", "truste.com"], + "id": "trustarc", + "parent": "TrustArc" + }, + "Movable Ink": { + "hosts": ["micpn.com"], + "id": "movable_ink", + "parent": "Unknown" + }, + "adgoal": { + "hosts": ["smartadcheck.de", "smartredirect.de"], + "id": "adgoal", + "parent": "adgoal" + }, + "Traffic Stars": { + "hosts": ["trafficstars.com", "tsyndicate.com"], + "id": "traffic_stars", + "parent": "Traffic Stars" + }, + "M. P. NEWMEDIA": { + "hosts": ["mpnrs.com"], + "id": "m._p._newmedia", + "parent": "Unknown" + }, + "Admeta": { + "hosts": ["admaym.com", "atemda.com"], + "id": "admeta", + "parent": "AdMeta" + }, + "Babator": { + "hosts": ["babator.com"], + "id": "babator.com", + "parent": "Unknown" + }, + "Monotype GmbH": { + "hosts": ["fonts.net"], + "id": "monotype_gmbh", + "parent": "Unknown" + }, + "AniView": { + "hosts": ["aniview.com"], + "id": "aniview.com", + "parent": "Unknown" + }, + "Baidu Ads": { + "hosts": ["baidu.com", "baidustatic.com"], + "id": "baidu_ads", + "parent": "Baidu" + }, + "pizzaandads.com": { + "hosts": ["pizzaandads.com"], + "id": "pizzaandads_com", + "parent": "Unknown" + }, + "AppNexus": { + "hosts": ["adnxs.com", "adnxs.net"], + "id": "appnexus", + "parent": "AppNexus Inc." + }, + "R-Advertising": { + "hosts": ["ads-digitalkeys.com"], + "id": "r_advertising", + "parent": "Unknown" + }, + "OptinProject": { + "hosts": ["optincollect.com"], + "id": "optinproject.com", + "parent": "OptinCollect" + }, + "baletingo.com": { + "hosts": ["baletingo.com"], + "id": "baletingo.com", + "parent": "Unknown" + }, + "ria.ru": { "hosts": ["ria.ru"], "id": "ria.ru", "parent": "Unknown" }, + "AiData": { "hosts": ["aidata.io"], "id": "aidata.io", "parent": "Unknown" }, + "Deutsche Telekom": { + "hosts": [ + "sdp-campaign.de", + "t-online.de", + "telekom-dienste.de", + "telekom.com", + "telekom.de", + "toi.de" + ], + "id": "t-mobile", + "parent": "Unknown" + }, + "cdnnetwok.xyz": { + "hosts": ["cdnnetwok.xyz"], + "id": "cdnnetwok_xyz", + "parent": "Unknown" + }, + "Keywee": { "hosts": ["keywee.co"], "id": "keywee", "parent": "Unknown" }, + "Netsprint Audience": { + "hosts": ["nsaudience.pl"], + "id": "netsprint_audience", + "parent": "Netsprint SA" + }, + "Jeuxvideo CDN": { "hosts": ["jvc.gg"], "id": "jvc.gg", "parent": "Unknown" }, + "Sirdata": { "hosts": ["sddan.com"], "id": "sirdata", "parent": "Sirdata" }, + "Adobe Audience Manager": { + "hosts": ["adobe.com", "demdex.net", "everestjs.net", "everesttech.net"], + "id": "adobe_audience_manager", + "parent": "Adobe" + }, + "First Impression": { + "hosts": ["firstimpression.io"], + "id": "first_impression", + "parent": "First Impression" + }, + "remove.video": { + "hosts": ["remove.video"], + "id": "remove.video", + "parent": "Unknown" + }, + "Dotmetrics": { + "hosts": ["dotmetrics.net"], + "id": "dotmetrics.net", + "parent": "Unknown" + }, + "Walk Me": { + "hosts": ["walkme.com"], + "id": "walkme.com", + "parent": "Unknown" + }, + "Medialead": { + "hosts": ["medialead.de"], + "id": "medialead", + "parent": "The Reach Group GmbH" + }, + "Dynatrace": { + "hosts": ["dynatrace.com"], + "id": "dynatrace.com", + "parent": "Thoma Bravo" + }, + "StumbleUpon Widgets": { + "hosts": ["stumble-upon.com", "stumbleupon.com", "su.pr"], + "id": "stumbleupon_widgets", + "parent": "StumbleUpon" + }, + "Sovrn OneTag": { + "hosts": ["s-onetag.com"], + "id": "sovrn_onetag", + "parent": "Sovrn Holdings Inc" + }, + "Tynt": { "hosts": ["tynt.com"], "id": "tynt", "parent": "33Across" }, + "Programattik": { + "hosts": ["programattik.com"], + "id": "programattik", + "parent": "T\u00fcrk Telekom" + }, + "iotec": { + "hosts": ["dsp.io"], + "id": "iotec", + "parent": "iotec global Ltd." + }, + "tubecup.org": { + "hosts": ["tubecup.org"], + "id": "tubecup.org", + "parent": "Unknown" + }, + "Notify": { + "hosts": ["adleadevent.com"], + "id": "notify", + "parent": "Unknown" + }, + "Facetz.DCA": { + "hosts": ["facetz.net"], + "id": "facetz.dca", + "parent": "DCA (Data-Centric Alliance)" + }, + "Swisscom": { + "hosts": ["swisscom.ch"], + "id": "swisscom", + "parent": "Unknown" + }, + "Peer5": { "hosts": ["peer5.com"], "id": "peer5.com", "parent": "Peer5" }, + "AppDynamics": { + "hosts": [ + "appdynamics.com", + "de8of677fyt0b.cloudfront.net", + "eum-appdynamics.com" + ], + "id": "appdynamics", + "parent": "AppDynamics" + }, + "TradeDoubler": { + "hosts": ["tradedoubler.com"], + "id": "tradedoubler", + "parent": "Tradedoubler AB" + }, + "vidcpm.com": { + "hosts": ["vidcpm.com"], + "id": "lottex_inc", + "parent": "Unknown" + }, + "ShareThis": { + "hosts": ["sharethis.com"], + "id": "sharethis", + "parent": "ShareThis, Inc." + }, + "Rhythmone Beacon": { + "hosts": ["1rx.io"], + "id": "rhythmone_beacon", + "parent": "RhythmOne, LLC" + }, + "Disqus Ads": { + "hosts": ["disqusads.com"], + "id": "disqus_ads", + "parent": "Disqus" + }, + "piguiqproxy.com": { + "hosts": ["piguiqproxy.com"], + "id": "piguiqproxy.com", + "parent": "Unknown" + }, + "adRom": { + "hosts": ["adrom.net", "txt.eu"], + "id": "adrom", + "parent": "Unknown" + }, + "AdPilot": { + "hosts": ["adpilot.at", "erne.co"], + "id": "adpilot", + "parent": "Unknown" + }, + "GlobalWebIndex": { + "hosts": ["globalwebindex.net"], + "id": "global_web_index", + "parent": "GlobalWebIndex" + }, + "coll1onf.com": { + "hosts": ["coll1onf.com"], + "id": "coll1onf.com", + "parent": "Unknown" + }, + "ehi-siegel.de": { + "hosts": ["ehi-siegel.de"], + "id": "ehi-siegel_de", + "parent": "Unknown" + }, + "tdsrmbl.net": { + "hosts": ["tdsrmbl.net"], + "id": "tdsrmbl_net", + "parent": "Unknown" + }, + "Permutive": { + "hosts": ["permutive.com"], + "id": "permutive", + "parent": "Permutive, Inc." + }, + "Cam-Content.com": { + "hosts": ["cam-content.com"], + "id": "cam-content.com", + "parent": "Unknown" + }, + "Dtscout": { + "hosts": ["dtscout.com"], + "id": "dtscout.com", + "parent": "Unknown" + }, + "JW Player": { + "hosts": [ + "d21rhj7n383afu.cloudfront.net", + "jwpcdn.com", + "jwplatform.com", + "jwplayer.com", + "jwpltx.com", + "jwpsrv.com" + ], + "id": "jw_player", + "parent": "JW Player" + }, + "globalnotifier.com": { + "hosts": ["globalnotifier.com"], + "id": "globalnotifier.com", + "parent": "Unknown" + }, + "Recettes.net": { + "hosts": ["recettes.net"], + "id": "recettes.net", + "parent": "Recettes.net" + } +}