Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3525656
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
181 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/lib/utils/reserved-users.js b/lib/utils/reserved-users.js
index b5dfcbfea..ff7e750a7 100644
--- a/lib/utils/reserved-users.js
+++ b/lib/utils/reserved-users.js
@@ -1,2238 +1,2239 @@
// @flow
// All entries in this list must be lowercase and must also be included in
-// `services/identity/reserved_usernames.json`!!
+// `services/identity/reserved_usernames.json` and in
+// `services/blob/reserved_usernames.json`!!
const reservedUsernamesSet: $ReadOnlySet<string> = new Set([
// Additional Reserved Keywords
'comm',
'dapp-tools',
'dapp_tools',
'ethers-js',
'ethers_js',
'ganache-cli',
'ganache_cli',
'hardhat',
'mod',
'moderator',
'solidity',
'truffle',
'web3',
'web3modal',
// Reserved Usernames List
// https://github.com/shouldbee/reserved-usernames
'0',
'12',
'49',
'478',
'1hive',
'aave',
'agoraspace',
'aladdindao',
'alchemistdao',
'allships',
'ampled',
'angeldao',
'aragon',
'badgerdao',
'bankless',
'bardao',
'bayc',
'beetsdao',
'braintrust',
'bright',
'brightid',
'brightmomentsgallery',
'brrdao',
'cabindao',
'canudao',
'cedge',
'clip',
'closerdao',
'coinvise',
'collab-land',
'collab_land',
'colony',
'comp',
'compound',
'coordinape',
'cre8club',
'crisisdao',
'cspdao',
'daohaus',
'daosquare',
'daostack',
'darkstardao',
'decred',
'developerdao',
'devs',
'dfdao',
'dinnerdao',
'dinogangz',
'discodao',
'distributed-town',
'distributed_town',
'divineroles',
'dopewarsdao',
'dorg',
'duckdao',
'dxdao',
'edendao',
'elektradao',
'ethernautdao',
'etherscan',
'evewealth',
'ff',
'fiatluxdao',
'fingerprints',
'fireeyes',
'flamingodao',
'forefront',
'freecompany',
'friendswithbenefits',
'fwb',
'gardens',
'gcr',
'genezisbiohacking',
'genre',
'geometrydao',
'gitcoin',
'gnosis',
'gnosissafe',
'gorn',
'gornhegemonydao',
'gremlins',
'guildhall',
'habitat',
'heatdao',
'herstorydao',
'honeydao',
'idlefinance',
'indexcoop',
'insuredao',
'jennydao',
'joystream',
'jumperdao',
'keeperdao',
'kleoverse',
'komorebicollective',
'krause',
'krausehouse',
'learndao',
'leavingrecords',
'lex',
'lexdao',
'llama',
'lovesocietydao',
'lurkerdao',
'magnetdao',
'makerdao',
'maodao',
'maskdao',
'meebitsdao',
'meritcircle',
'metacartel',
'metafam',
'metagammadelta',
'metamask',
'metaversedao',
'minty',
'mirror-xyz',
'mirror_xyz',
'mirrorclubdao',
'molochdao',
'moonshotcollective',
'moshdao',
'muse0',
'nebo',
'neptunedao',
'nfdao',
'nounsdao',
'olympusdao',
'opendao',
'opensea',
'opolis',
'orcaprotocol',
'pacdao',
'paperclip',
'parcel',
'party',
'partydao',
'peerion',
'phlotedao',
'physicalanddigitalartaficionados',
'pizzadao',
'pleasrdao',
'pokemontrainersclub',
'prints',
'proofofhumanity',
'prosperdao',
'proteindao',
'psydao',
'rabbithole',
'raidguild',
'rainbowwallet',
'raribledao',
'readyplayerdao',
'reddao',
'ref',
'retokendao',
'ribondao',
'rumblekong',
'sarcophagus',
'scribedao',
'seedclub',
'sharkdao',
'shinydao',
'snapshot',
'snx',
'sourcecred',
'spork',
'sporkdao',
'sputnik-fund',
'sputnik_fund',
'squaddao',
'squig',
'squiggle',
'stack',
'stackerventuresdao',
'syndicate',
'synthetix',
'tally',
'taodao',
'tarascadao',
'terrachess',
'thelao',
'thewipmeetup',
'thugdao',
'tinseldao',
'tokenwalkdao',
'tomomasterdao',
'triforcedao',
'trippy',
'trojandao',
'ultradao',
'universitydao',
'unlockdao',
'vectordao',
'viariodao',
'vita',
'vitadao',
'walletconnect',
'whalerdao',
'whiskeypioneers',
'yamdao',
'yearn',
'yfi',
'ygg',
'zouzoukwa',
// Top Level Domains
// https://data.iana.org/TLD/tlds-alpha-by-domain.txt
'aaa',
'aarp',
'abarth',
'abb',
'abbott',
'abbvie',
'abc',
'able',
'abogado',
'abudhabi',
'ac',
'academy',
'accenture',
'accountant',
'accountants',
'aco',
'actor',
'ad',
'adac',
'ads',
'adult',
'ae',
'aeg',
'aero',
'aetna',
'af',
'afamilycompany',
'afl',
'africa',
'ag',
'agakhan',
'agency',
'ai',
'aig',
'airbus',
'airforce',
'airtel',
'akdn',
'al',
'alfaromeo',
'alibaba',
'alipay',
'allfinanz',
'allstate',
'ally',
'alsace',
'alstom',
'am',
'amazon',
'americanexpress',
'americanfamily',
'amex',
'amfam',
'amica',
'amsterdam',
'analytics',
'android',
'anquan',
'anz',
'ao',
'aol',
'apartments',
'app',
'apple',
'aq',
'aquarelle',
'ar',
'arab',
'aramco',
'archi',
'army',
'arpa',
'art',
'arte',
'as',
'asda',
'asia',
'associates',
'at',
'athleta',
'attorney',
'au',
'auction',
'audi',
'audible',
'audio',
'auspost',
'author',
'auto',
'autos',
'avianca',
'aw',
'aws',
'ax',
'axa',
'az',
'azure',
'ba',
'baby',
'baidu',
'banamex',
'bananarepublic',
'band',
'bank',
'bar',
'barcelona',
'barclaycard',
'barclays',
'barefoot',
'bargains',
'baseball',
'basketball',
'bauhaus',
'bayern',
'bb',
'bbc',
'bbt',
'bbva',
'bcg',
'bcn',
'bd',
'be',
'beats',
'beauty',
'beer',
'bentley',
'berlin',
'best',
'bestbuy',
'bet',
'bf',
'bg',
'bh',
'bharti',
'bi',
'bible',
'bid',
'bike',
'bing',
'bingo',
'bio',
'biz',
'bj',
'black',
'blackfriday',
'blockbuster',
'blog',
'bloomberg',
'blue',
'bm',
'bms',
'bmw',
'bn',
'bnpparibas',
'bo',
'boats',
'boehringer',
'bofa',
'bom',
'bond',
'boo',
'book',
'booking',
'bosch',
'bostik',
'boston',
'bot',
'boutique',
'box',
'br',
'bradesco',
'bridgestone',
'broadway',
'broker',
'brother',
'brussels',
'bs',
'bt',
'budapest',
'bugatti',
'build',
'builders',
'business',
'buy',
'buzz',
'bv',
'bw',
'by',
'bz',
'bzh',
'ca',
'cab',
'cafe',
'cal',
'call',
'calvinklein',
'cam',
'camera',
'camp',
'cancerresearch',
'canon',
'capetown',
'capital',
'capitalone',
'car',
'caravan',
'cards',
'care',
'career',
'careers',
'cars',
'casa',
'case',
'cash',
'casino',
'cat',
'catering',
'catholic',
'cba',
'cbn',
'cbre',
'cbs',
'cc',
'cd',
'center',
'ceo',
'cern',
'cf',
'cfa',
'cfd',
'cg',
'ch',
'chanel',
'channel',
'charity',
'chase',
'chat',
'cheap',
'chintai',
'christmas',
'chrome',
'church',
'ci',
'cipriani',
'circle',
'cisco',
'citadel',
'citi',
'citic',
'city',
'cityeats',
'ck',
'cl',
'claims',
'cleaning',
'click',
'clinic',
'clinique',
'clothing',
'cloud',
'club',
'clubmed',
'cm',
'cn',
'co',
'coach',
'codes',
'coffee',
'college',
'cologne',
'com',
'comcast',
'commbank',
'community',
'company',
'compare',
'computer',
'comsec',
'condos',
'construction',
'consulting',
'contact',
'contractors',
'cooking',
'cookingchannel',
'cool',
'coop',
'corsica',
'country',
'coupon',
'coupons',
'courses',
'cpa',
'cr',
'credit',
'creditcard',
'creditunion',
'cricket',
'crown',
'crs',
'cruise',
'cruises',
'csc',
'cu',
'cuisinella',
'cv',
'cw',
'cx',
'cy',
'cymru',
'cyou',
'cz',
'dabur',
'dad',
'dance',
'data',
'date',
'dating',
'datsun',
'day',
'dclk',
'dds',
'de',
'deal',
'dealer',
'deals',
'degree',
'delivery',
'dell',
'deloitte',
'delta',
'democrat',
'dental',
'dentist',
'desi',
'design',
'dev',
'dhl',
'diamonds',
'diet',
'digital',
'direct',
'directory',
'discount',
'discover',
'dish',
'diy',
'dj',
'dk',
'dm',
'dnp',
'do',
'docs',
'doctor',
'dog',
'domains',
'dot',
'download',
'drive',
'dtv',
'dubai',
'duck',
'dunlop',
'dupont',
'durban',
'dvag',
'dvr',
'dz',
'earth',
'eat',
'ec',
'eco',
'edeka',
'edu',
'education',
'ee',
'eg',
'email',
'emerck',
'energy',
'engineer',
'engineering',
'enterprises',
'epson',
'equipment',
'er',
'ericsson',
'erni',
'es',
'esq',
'estate',
'et',
'etisalat',
'eu',
'eurovision',
'eus',
'events',
'exchange',
'expert',
'exposed',
'express',
'extraspace',
'fage',
'fail',
'fairwinds',
'faith',
'family',
'fan',
'fans',
'farm',
'farmers',
'fashion',
'fast',
'fedex',
'feedback',
'ferrari',
'ferrero',
'fi',
'fiat',
'fidelity',
'fido',
'film',
'final',
'finance',
'financial',
'fire',
'firestone',
'firmdale',
'fish',
'fishing',
'fit',
'fitness',
'fj',
'fk',
'flickr',
'flights',
'flir',
'florist',
'flowers',
'fly',
'fm',
'fo',
'foo',
'food',
'foodnetwork',
'football',
'ford',
'forex',
'forsale',
'forum',
'foundation',
'fox',
'fr',
'free',
'fresenius',
'frl',
'frogans',
'frontdoor',
'frontier',
'ftr',
'fujitsu',
'fun',
'fund',
'furniture',
'futbol',
'fyi',
'ga',
'gal',
'gallery',
'gallo',
'gallup',
'game',
'games',
'gap',
'garden',
'gay',
'gb',
'gbiz',
'gd',
'gdn',
'ge',
'gea',
'gent',
'genting',
'george',
'gf',
'gg',
'ggee',
'gh',
'gi',
'gift',
'gifts',
'gives',
'giving',
'gl',
'glade',
'glass',
'gle',
'global',
'globo',
'gm',
'gmail',
'gmbh',
'gmo',
'gmx',
'gn',
'godaddy',
'gold',
'goldpoint',
'golf',
'goo',
'goodyear',
'goog',
'google',
'gop',
'got',
'gov',
'gp',
'gq',
'gr',
'grainger',
'graphics',
'gratis',
'green',
'gripe',
'grocery',
'group',
'gs',
'gt',
'gu',
'guardian',
'gucci',
'guge',
'guide',
'guitars',
'guru',
'gw',
'gy',
'hair',
'hamburg',
'hangout',
'haus',
'hbo',
'hdfc',
'hdfcbank',
'health',
'healthcare',
'help',
'helsinki',
'here',
'hermes',
'hgtv',
'hiphop',
'hisamitsu',
'hitachi',
'hiv',
'hk',
'hkt',
'hm',
'hn',
'hockey',
'holdings',
'holiday',
'homedepot',
'homegoods',
'homes',
'homesense',
'honda',
'horse',
'hospital',
'host',
'hosting',
'hot',
'hoteles',
'hotels',
'hotmail',
'house',
'how',
'hr',
'hsbc',
'ht',
'hu',
'hughes',
'hyatt',
'hyundai',
'ibm',
'icbc',
'ice',
'icu',
'id',
'ie',
'ieee',
'ifm',
'ikano',
'il',
'im',
'imamat',
'imdb',
'immo',
'immobilien',
'in',
'inc',
'industries',
'infiniti',
'info',
'ing',
'ink',
'institute',
'insurance',
'insure',
'int',
'international',
'intuit',
'investments',
'io',
'ipiranga',
'iq',
'ir',
'irish',
'is',
'ismaili',
'ist',
'istanbul',
'it',
'itau',
'itv',
'jaguar',
'java',
'jcb',
'je',
'jeep',
'jetzt',
'jewelry',
'jio',
'jll',
'jm',
'jmp',
'jnj',
'jo',
'jobs',
'joburg',
'jot',
'joy',
'jp',
'jpmorgan',
'jprs',
'juegos',
'juniper',
'kaufen',
'kddi',
'ke',
'kerryhotels',
'kerrylogistics',
'kerryproperties',
'kfh',
'kg',
'kh',
'ki',
'kia',
'kim',
'kinder',
'kindle',
'kitchen',
'kiwi',
'km',
'kn',
'koeln',
'komatsu',
'kosher',
'kp',
'kpmg',
'kpn',
'kr',
'krd',
'kred',
'kuokgroup',
'kw',
'ky',
'kyoto',
'kz',
'la',
'lacaixa',
'lamborghini',
'lamer',
'lancaster',
'lancia',
'land',
'landrover',
'lanxess',
'lasalle',
'lat',
'latino',
'latrobe',
'law',
'lawyer',
'lb',
'lc',
'lds',
'lease',
'leclerc',
'lefrak',
'legal',
'lego',
'lexus',
'lgbt',
'li',
'lidl',
'life',
'lifeinsurance',
'lifestyle',
'lighting',
'like',
'lilly',
'limited',
'limo',
'lincoln',
'linde',
'link',
'lipsy',
'live',
'living',
'lixil',
'lk',
'llc',
'llp',
'loan',
'loans',
'locker',
'locus',
'loft',
'lol',
'london',
'lotte',
'lotto',
'love',
'lpl',
'lplfinancial',
'lr',
'ls',
'lt',
'ltd',
'ltda',
'lu',
'lundbeck',
'luxe',
'luxury',
'lv',
'ly',
'ma',
'macys',
'madrid',
'maif',
'maison',
'makeup',
'man',
'management',
'mango',
'map',
'market',
'marketing',
'markets',
'marriott',
'marshalls',
'maserati',
'mattel',
'mba',
'mc',
'mckinsey',
'md',
'me',
'med',
'media',
'meet',
'melbourne',
'meme',
'memorial',
'men',
'menu',
'merckmsd',
'mg',
'mh',
'miami',
'microsoft',
'mil',
'mini',
'mint',
'mit',
'mitsubishi',
'mk',
'ml',
'mlb',
'mls',
'mm',
'mma',
'mn',
'mo',
'mobi',
'mobile',
'moda',
'moe',
'moi',
'mom',
'monash',
'money',
'monster',
'mormon',
'mortgage',
'moscow',
'moto',
'motorcycles',
'mov',
'movie',
'mp',
'mq',
'mr',
'ms',
'msd',
'mt',
'mtn',
'mtr',
'mu',
'museum',
'music',
'mutual',
'mv',
'mw',
'mx',
'my',
'mz',
'na',
'nab',
'nagoya',
'name',
'natura',
'navy',
'nba',
'nc',
'ne',
'nec',
'net',
'netbank',
'netflix',
'network',
'neustar',
'new',
'news',
'next',
'nextdirect',
'nexus',
'nf',
'nfl',
'ng',
'ngo',
'nhk',
'ni',
'nico',
'nike',
'nikon',
'ninja',
'nissan',
'nissay',
'nl',
'no',
'nokia',
'northwesternmutual',
'norton',
'now',
'nowruz',
'nowtv',
'np',
'nr',
'nra',
'nrw',
'ntt',
'nu',
'nyc',
'nz',
'obi',
'observer',
'off',
'office',
'okinawa',
'olayan',
'olayangroup',
'oldnavy',
'ollo',
'om',
'omega',
'one',
'ong',
'onl',
'online',
'ooo',
'open',
'oracle',
'orange',
'org',
'organic',
'origins',
'osaka',
'otsuka',
'ott',
'ovh',
'pa',
'page',
'panasonic',
'paris',
'pars',
'partners',
'parts',
'passagens',
'pay',
'pccw',
'pe',
'pet',
'pf',
'pfizer',
'pg',
'ph',
'pharmacy',
'phd',
'philips',
'phone',
'photo',
'photography',
'photos',
'physio',
'pics',
'pictet',
'pictures',
'pid',
'pin',
'ping',
'pink',
'pioneer',
'pizza',
'pk',
'pl',
'place',
'play',
'playstation',
'plumbing',
'plus',
'pm',
'pn',
'pnc',
'pohl',
'poker',
'politie',
'porn',
'post',
'pr',
'pramerica',
'praxi',
'press',
'prime',
'pro',
'prod',
'productions',
'prof',
'progressive',
'promo',
'properties',
'property',
'protection',
'pru',
'prudential',
'ps',
'pt',
'pub',
'pw',
'pwc',
'py',
'qa',
'qpon',
'quebec',
'quest',
'racing',
'radio',
'raid',
're',
'read',
'realestate',
'realtor',
'realty',
'recipes',
'red',
'redstone',
'redumbrella',
'rehab',
'reise',
'reisen',
'reit',
'reliance',
'ren',
'rent',
'rentals',
'repair',
'report',
'republican',
'rest',
'restaurant',
'review',
'reviews',
'rexroth',
'rich',
'richardli',
'ricoh',
'ril',
'rio',
'rip',
'ro',
'rocher',
'rocks',
'rodeo',
'rogers',
'room',
'rs',
'rsvp',
'ru',
'rugby',
'ruhr',
'run',
'rw',
'rwe',
'ryukyu',
'sa',
'saarland',
'safe',
'safety',
'sakura',
'sale',
'salon',
'samsclub',
'samsung',
'sandvik',
'sandvikcoromant',
'sanofi',
'sap',
'sarl',
'sas',
'save',
'saxo',
'sb',
'sbi',
'sbs',
'sc',
'sca',
'scb',
'schaeffler',
'schmidt',
'scholarships',
'school',
'schule',
'schwarz',
'science',
'scjohnson',
'scot',
'sd',
'se',
'search',
'seat',
'secure',
'security',
'seek',
'select',
'sener',
'services',
'ses',
'seven',
'sew',
'sex',
'sexy',
'sfr',
'sg',
'sh',
'shangrila',
'sharp',
'shaw',
'shell',
'shia',
'shiksha',
'shoes',
'shop',
'shopping',
'shouji',
'show',
'showtime',
'si',
'silk',
'sina',
'singles',
'site',
'sj',
'sk',
'ski',
'skin',
'sky',
'skype',
'sl',
'sling',
'sm',
'smart',
'smile',
'sn',
'sncf',
'so',
'soccer',
'social',
'softbank',
'software',
'sohu',
'solar',
'solutions',
'song',
'sony',
'soy',
'spa',
'space',
'sport',
'spot',
'sr',
'srl',
'ss',
'st',
'stada',
'staples',
'star',
'statebank',
'statefarm',
'stc',
'stcgroup',
'stockholm',
'storage',
'store',
'stream',
'studio',
'study',
'style',
'su',
'sucks',
'supplies',
'supply',
'support',
'surf',
'surgery',
'suzuki',
'sv',
'swatch',
'swiss',
'sx',
'sy',
'sydney',
'systems',
'sz',
'tab',
'taipei',
'talk',
'taobao',
'target',
'tatamotors',
'tatar',
'tattoo',
'tax',
'taxi',
'tc',
'tci',
'td',
'tdk',
'team',
'tech',
'technology',
'tel',
'temasek',
'tennis',
'teva',
'tf',
'tg',
'th',
'thd',
'theater',
'theatre',
'tiaa',
'tickets',
'tienda',
'tiffany',
'tips',
'tires',
'tirol',
'tj',
'tjmaxx',
'tjx',
'tk',
'tkmaxx',
'tl',
'tm',
'tmall',
'tn',
'to',
'today',
'tokyo',
'tools',
'top',
'toray',
'toshiba',
'total',
'tours',
'town',
'toyota',
'toys',
'tr',
'trade',
'trading',
'training',
'travel',
'travelchannel',
'travelers',
'travelersinsurance',
'trust',
'trv',
'tt',
'tube',
'tui',
'tunes',
'tushu',
'tv',
'tvs',
'tw',
'tz',
'ua',
'ubank',
'ubs',
'ug',
'uk',
'unicom',
'university',
'uno',
'uol',
'ups',
'us',
'uy',
'uz',
'va',
'vacations',
'vana',
'vanguard',
'vc',
've',
'vegas',
'ventures',
'verisign',
'versicherung',
'vet',
'vg',
'vi',
'viajes',
'video',
'vig',
'viking',
'villas',
'vin',
'vip',
'virgin',
'visa',
'vision',
'viva',
'vivo',
'vlaanderen',
'vn',
'vodka',
'volkswagen',
'volvo',
'vote',
'voting',
'voto',
'voyage',
'vu',
'vuelos',
'wales',
'walmart',
'walter',
'wang',
'wanggou',
'watch',
'watches',
'weather',
'weatherchannel',
'webcam',
'weber',
'website',
'wed',
'wedding',
'weibo',
'weir',
'wf',
'whoswho',
'wien',
'wiki',
'williamhill',
'win',
'windows',
'wine',
'winners',
'wme',
'wolterskluwer',
'woodside',
'work',
'works',
'world',
'wow',
'ws',
'wtc',
'wtf',
'xbox',
'xerox',
'xfinity',
'xihuan',
'xin',
'xn--11b4c3d',
'xn--1ck2e1b',
'xn--1qqw23a',
'xn--2scrj9c',
'xn--30rr7y',
'xn--3bst00m',
'xn--3ds443g',
'xn--3e0b707e',
'xn--3hcrj9c',
'xn--3pxu8k',
'xn--42c2d9a',
'xn--45br5cyl',
'xn--45brj9c',
'xn--45q11c',
'xn--4dbrk0ce',
'xn--4gbrim',
'xn--54b7fta0cc',
'xn--55qw42g',
'xn--55qx5d',
'xn--5su34j936bgsg',
'xn--5tzm5g',
'xn--6frz82g',
'xn--6qq986b3xl',
'xn--80adxhks',
'xn--80ao21a',
'xn--80aqecdr1a',
'xn--80asehdb',
'xn--80aswg',
'xn--8y0a063a',
'xn--90a3ac',
'xn--90ae',
'xn--90ais',
'xn--9dbq2a',
'xn--9et52u',
'xn--9krt00a',
'xn--b4w605ferd',
'xn--bck1b9a5dre4c',
'xn--c1avg',
'xn--c2br7g',
'xn--cck2b3b',
'xn--cckwcxetd',
'xn--cg4bki',
'xn--clchc0ea0b2g2a9gcd',
'xn--czr694b',
'xn--czrs0t',
'xn--czru2d',
'xn--d1acj3b',
'xn--d1alf',
'xn--e1a4c',
'xn--eckvdtc9d',
'xn--efvy88h',
'xn--fct429k',
'xn--fhbei',
'xn--fiq228c5hs',
'xn--fiq64b',
'xn--fiqs8s',
'xn--fiqz9s',
'xn--fjq720a',
'xn--flw351e',
'xn--fpcrj9c3d',
'xn--fzc2c9e2c',
'xn--fzys8d69uvgm',
'xn--g2xx48c',
'xn--gckr3f0f',
'xn--gecrj9c',
'xn--gk3at1e',
'xn--h2breg3eve',
'xn--h2brj9c',
'xn--h2brj9c8c',
'xn--hxt814e',
'xn--i1b6b1a6a2e',
'xn--imr513n',
'xn--io0a7i',
'xn--j1aef',
'xn--j1amh',
'xn--j6w193g',
'xn--jlq480n2rg',
'xn--jlq61u9w7b',
'xn--jvr189m',
'xn--kcrx77d1x4a',
'xn--kprw13d',
'xn--kpry57d',
'xn--kput3i',
'xn--l1acc',
'xn--lgbbat1ad8j',
'xn--mgb9awbf',
'xn--mgba3a3ejt',
'xn--mgba3a4f16a',
'xn--mgba7c0bbn0a',
'xn--mgbaakc7dvf',
'xn--mgbaam7a8h',
'xn--mgbab2bd',
'xn--mgbah1a3hjkrd',
'xn--mgbai9azgqp6j',
'xn--mgbayh7gpa',
'xn--mgbbh1a',
'xn--mgbbh1a71e',
'xn--mgbc0a9azcg',
'xn--mgbca7dzdo',
'xn--mgbcpq6gpa1a',
'xn--mgberp4a5d4ar',
'xn--mgbgu82a',
'xn--mgbi4ecexp',
'xn--mgbpl2fh',
'xn--mgbt3dhd',
'xn--mgbtx2b',
'xn--mgbx4cd0ab',
'xn--mix891f',
'xn--mk1bu44c',
'xn--mxtq1m',
'xn--ngbc5azd',
'xn--ngbe9e0a',
'xn--ngbrx',
'xn--node',
'xn--nqv7f',
'xn--nqv7fs00ema',
'xn--nyqy26a',
'xn--o3cw4h',
'xn--ogbpf8fl',
'xn--otu796d',
'xn--p1acf',
'xn--p1ai',
'xn--pgbs0dh',
'xn--pssy2u',
'xn--q7ce6a',
'xn--q9jyb4c',
'xn--qcka1pmc',
'xn--qxa6a',
'xn--qxam',
'xn--rhqv96g',
'xn--rovu88b',
'xn--rvc1e0am3e',
'xn--s9brj9c',
'xn--ses554g',
'xn--t60b56a',
'xn--tckwe',
'xn--tiq49xqyj',
'xn--unup4y',
'xn--vermgensberater-ctb',
'xn--vermgensberatung-pwb',
'xn--vhquv',
'xn--vuq861b',
'xn--w4r85el8fhu5dnra',
'xn--w4rs40l',
'xn--wgbh1c',
'xn--wgbl6a',
'xn--xhq521b',
'xn--xkc2al3hye2a',
'xn--xkc2dl3a5ee0h',
'xn--y9a3aq',
'xn--yfro4i67o',
'xn--ygbi2ammx',
'xn--zfr164b',
// DAO aggregate
// https://www.notion.so/commapp/DAO-aggregate-1539d5c849da4eec8f479e8f06d46c73
'xxx',
'xyz',
'yachts',
'yahoo',
'yamaxun',
'yandex',
'ye',
'yodobashi',
'yoga',
'yokohama',
'you',
'youtube',
'yt',
'yun',
'za',
'zappos',
'zara',
'zero',
'zip',
'zm',
'zone',
'zuerich',
'zw',
'skiptocontent',
'pullrequests',
'issues',
'marketplace',
'explore',
'@andnasnd',
'shouldbee/',
'reserved-usernames',
'public',
'code',
'issues4',
'actions',
'projects',
'insights',
'about',
'access',
'account',
'accounts',
'activate',
'activities',
'activity',
'add',
'address',
'adm',
'admin',
'administration',
'administrator',
'advertising',
'affiliate',
'affiliates',
'ajax',
'all',
'alpha',
'analysis',
'anon',
'anonymous',
'api',
'apps',
'archive',
'archives',
'article',
'asct',
'asset',
'atom',
'auth',
'authentication',
'avatar',
'backup',
'balancer-manager',
'banner',
'banners',
'beta',
'billing',
'bin',
'blogs',
'board',
'bookmark',
'bots',
'bug',
'cache',
'cadastro',
'calendar',
'campaign',
'cancel',
'captcha',
'cart',
'categories',
'category',
'cgi',
'cgi-bin',
'changelog',
'check',
'checking',
'checkout',
'client',
'cliente',
'clients',
'codereview',
'comercial',
'comment',
'comments',
'communities',
'compras',
'config',
'configuration',
'connect',
'contact-us',
'contact_us',
'contactus',
'contest',
'contribute',
'corp',
'create',
'css',
'dashboard',
'db',
'default',
'delete',
'demo',
'designer',
'destroy',
'devel',
'developer',
'developers',
'diagram',
'diary',
'dict',
'dictionary',
'die',
'dir',
'direct_messages',
'dist',
'doc',
'documentation',
'domain',
'downloads',
'ecommerce',
'edit',
'editor',
'employment',
'empty',
'end',
'enterprise',
'entries',
'entry',
'error',
'errors',
'eval',
'event',
'everyone',
'exit',
'facebook',
'faq',
'favorite',
'favorites',
'feature',
'features',
'feed',
'feeds',
'file',
'files',
'first',
'flash',
'fleet',
'fleets',
'flog',
'follow',
'followers',
'following',
'forgot',
'form',
'forums',
'founder',
'friend',
'friends',
'ftp',
'gadget',
'gadgets',
'get',
'ghost',
'gist',
'github',
'graph',
'groups',
'guest',
'guests',
'home',
'homepage',
'hostmaster',
'hostname',
'howto',
'hpg',
'html',
'http',
'httpd',
'https',
'i',
'iamges',
'icon',
'icons',
'idea',
'ideas',
'image',
'images',
'imap',
'img',
'index',
'indice',
'information',
'inquiry',
'instagram',
'intranet',
'invitations',
'invite',
'ipad',
'iphone',
'irc',
'issue',
'item',
'items',
'javascript',
'job',
'join',
'js',
'json',
'jump',
'knowledgebase',
'language',
'languages',
'last',
'ldap-status',
'license',
'links',
'linux',
'list',
'lists',
'log',
'log-in',
'log-out',
'log_in',
'log_out',
'login',
'logout',
'logs',
'm',
'mac',
'mail',
'mail1',
'mail2',
'mail3',
'mail4',
'mail5',
'mailer',
'mailing',
'maintenance',
'manager',
'manual',
'maps',
'master',
'member',
'members',
'message',
'messages',
'messenger',
'microblog',
'microblogs',
'mine',
'mis',
'mob',
'movies',
'mp3',
'msg',
'msn',
'musicas',
'mysql',
'named',
'nan',
'navi',
'navigation',
'newsletter',
'nick',
'nickname',
'notes',
'noticias',
'notification',
'notifications',
'notify',
'ns',
'ns1',
'ns10',
'ns2',
'ns3',
'ns4',
'ns5',
'ns6',
'ns7',
'ns8',
'ns9',
'null',
'oauth',
'oauth_clients',
'offer',
'offers',
'official',
'old',
'openid',
'operator',
'order',
'orders',
'organization',
'organizations',
'overview',
'owner',
'owners',
'pager',
'pages',
'panel',
'password',
'payment',
'perl',
'photoalbum',
'php',
'phpmyadmin',
'phppgadmin',
'phpredisadmin',
'pic',
'plan',
'plans',
'plugin',
'plugins',
'policy',
'pop',
'pop3',
'popular',
'portal',
'postfix',
'postmaster',
'posts',
'premium',
'price',
'pricing',
'privacy',
'privacy-policy',
'privacy_policy',
'privacypolicy',
'private',
'product',
'products',
'profile',
'project',
'purpose',
'put',
'python',
'query',
'random',
'ranking',
'readme',
'recent',
'recruit',
'recruitment',
'register',
'registration',
'release',
'remove',
'replies',
'reports',
'repositories',
'repository',
'req',
'request',
'requests',
'reset',
'roc',
'root',
'rss',
'ruby',
'rule',
'sag',
'sales',
'sample',
'samples',
'script',
'scripts',
'self',
'send',
'server',
'server-info',
'server-status',
'service',
'session',
'sessions',
'setting',
'settings',
'setup',
'share',
'sign-in',
'sign-up',
'sign_in',
'sign_up',
'signin',
'signout',
'signup',
'sitemap',
'sites',
'smartphone',
'smtp',
'soporte',
'source',
'spec',
'special',
'sql',
'src',
'ssh',
'ssl',
'ssladmin',
'ssladministrator',
'sslwebmaster',
'staff',
'stage',
'staging',
'start',
'stat',
'state',
'static',
'stats',
'status',
'stores',
'stories',
'styleguide',
'stylesheet',
'stylesheets',
'subdomain',
'subscribe',
'subscriptions',
'suporte',
'svn',
'swf',
'sys',
'sysadmin',
'sysadministrator',
'system',
'tablet',
'tablets',
'tag',
'task',
'tasks',
'teams',
'telnet',
'term',
'terms',
'terms-of-service',
'terms_of_service',
'termsofservice',
'test',
'test1',
'test2',
'test3',
'teste',
'testing',
'tests',
'theme',
'themes',
'thread',
'threads',
'tmp',
'todo',
'tool',
'topic',
'topics',
'tos',
'tour',
'translations',
'trends',
'tutorial',
'tux',
'twitter',
'undef',
'unfollow',
'unsubscribe',
'update',
'upload',
'uploads',
'url',
'usage',
'user',
'username',
'users',
'usuario',
'vendas',
'ver',
'version',
'videos',
'visitor',
'web',
'webhook',
'webhooks',
'webmail',
'webmaster',
'websites',
'welcome',
'widget',
'widgets',
'word',
'workshop',
'ww',
'wws',
'www',
'www1',
'www2',
'www3',
'www4',
'www5',
'www6',
'www7',
'wwws',
'wwww',
'xfn',
'xml',
'xmpp',
'xpg',
'yaml',
'year',
'yml',
'yourdomain',
'yourname',
'yoursite',
'yourusername',
]);
export { reservedUsernamesSet };
diff --git a/services/blob/Cargo.lock b/services/blob/Cargo.lock
index de0bba6e5..7a532d9ca 100644
--- a/services/blob/Cargo.lock
+++ b/services/blob/Cargo.lock
@@ -1,3498 +1,3518 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "actix-codec"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe"
dependencies = [
"bitflags",
"bytes",
"futures-core",
"futures-sink",
"log",
"memchr",
"pin-project-lite",
"tokio",
"tokio-util",
]
[[package]]
name = "actix-cors"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b340e9cfa5b08690aae90fb61beb44e9b06f44fe3d0f93781aaa58cfba86245e"
dependencies = [
"actix-utils",
"actix-web",
"derive_more",
"futures-util",
"log",
"once_cell",
"smallvec",
]
[[package]]
name = "actix-http"
version = "3.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74"
dependencies = [
"actix-codec",
"actix-rt",
"actix-service",
"actix-utils",
"ahash 0.8.3",
"base64 0.21.0",
"bitflags",
"brotli",
"bytes",
"bytestring",
"derive_more",
"encoding_rs",
"flate2",
"futures-core",
"h2",
"http",
"httparse",
"httpdate",
"itoa",
"language-tags",
"local-channel",
"mime",
"percent-encoding",
"pin-project-lite",
"rand",
"sha1",
"smallvec",
"tokio",
"tokio-util",
"tracing",
"zstd",
]
[[package]]
name = "actix-macros"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6"
dependencies = [
"quote",
"syn 1.0.103",
]
[[package]]
name = "actix-multipart"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dee489e3c01eae4d1c35b03c4493f71cb40d93f66b14558feb1b1a807671cc4e"
dependencies = [
"actix-multipart-derive",
"actix-utils",
"actix-web",
"bytes",
"derive_more",
"futures-core",
"futures-util",
"httparse",
"local-waker",
"log",
"memchr",
"mime",
"serde",
"serde_json",
"serde_plain",
"tempfile",
"tokio",
]
[[package]]
name = "actix-multipart-derive"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ec592f234db8a253cf80531246a4407c8a70530423eea80688a6c5a44a110e7"
dependencies = [
"darling",
"parse-size",
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "actix-router"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799"
dependencies = [
"bytestring",
"http",
"regex",
"serde",
"tracing",
]
[[package]]
name = "actix-rt"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e"
dependencies = [
"futures-core",
"tokio",
]
[[package]]
name = "actix-server"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327"
dependencies = [
"actix-rt",
"actix-service",
"actix-utils",
"futures-core",
"futures-util",
"mio",
"num_cpus",
"socket2 0.4.7",
"tokio",
"tracing",
]
[[package]]
name = "actix-service"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
dependencies = [
"futures-core",
"paste",
"pin-project-lite",
]
[[package]]
name = "actix-utils"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8"
dependencies = [
"local-waker",
"pin-project-lite",
]
[[package]]
name = "actix-web"
version = "4.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96"
dependencies = [
"actix-codec",
"actix-http",
"actix-macros",
"actix-router",
"actix-rt",
"actix-server",
"actix-service",
"actix-utils",
"actix-web-codegen",
"ahash 0.7.6",
"bytes",
"bytestring",
"cfg-if",
"cookie",
"derive_more",
"encoding_rs",
"futures-core",
"futures-util",
"http",
"itoa",
"language-tags",
"log",
"mime",
"once_cell",
"pin-project-lite",
"regex",
"serde",
"serde_json",
"serde_urlencoded",
"smallvec",
"socket2 0.4.7",
"time",
"url",
]
[[package]]
name = "actix-web-codegen"
version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9"
dependencies = [
"actix-router",
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "actix-web-httpauth"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dda62cf04bc3a9ad2ea8f314f721951cfdb4cdacec4e984d20e77c7bb170991"
dependencies = [
"actix-utils",
"actix-web",
"base64 0.13.1",
"futures-core",
"futures-util",
"log",
"pin-project-lite",
]
[[package]]
name = "addr2line"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
dependencies = [
"gimli",
]
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
dependencies = [
"getrandom",
"once_cell",
"version_check",
]
[[package]]
name = "ahash"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
dependencies = [
"cfg-if",
"getrandom",
"once_cell",
"version_check",
]
[[package]]
name = "aho-corasick"
-version = "0.7.19"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
[[package]]
name = "alloc-no-stdlib"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
[[package]]
name = "alloc-stdlib"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
dependencies = [
"alloc-no-stdlib",
]
[[package]]
name = "android-tzdata"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
[[package]]
name = "android_system_properties"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
dependencies = [
"libc",
]
[[package]]
name = "anyhow"
version = "1.0.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c6f84b74db2535ebae81eede2f39b947dcbf01d093ae5f791e5dd414a1bf289"
[[package]]
name = "async-stream"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
dependencies = [
"async-stream-impl",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-stream-impl"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.28",
]
[[package]]
name = "async-trait"
version = "0.1.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.28",
]
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "aws-config"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcdcf0d683fe9c23d32cf5b53c9918ea0a500375a9fb20109802552658e576c9"
dependencies = [
"aws-credential-types",
"aws-http",
"aws-sdk-sso",
"aws-sdk-sts",
"aws-smithy-async",
"aws-smithy-client",
"aws-smithy-http",
"aws-smithy-http-tower",
"aws-smithy-json",
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand",
"hex",
"http",
"hyper",
"ring",
"time",
"tokio",
"tower",
"tracing",
"zeroize",
]
[[package]]
name = "aws-credential-types"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fcdb2f7acbc076ff5ad05e7864bdb191ca70a6fd07668dc3a1a8bcd051de5ae"
dependencies = [
"aws-smithy-async",
"aws-smithy-types",
"fastrand",
"tokio",
"tracing",
"zeroize",
]
[[package]]
name = "aws-endpoint"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8cce1c41a6cfaa726adee9ebb9a56fcd2bbfd8be49fd8a04c5e20fd968330b04"
dependencies = [
"aws-smithy-http",
"aws-smithy-types",
"aws-types",
"http",
"regex",
"tracing",
]
[[package]]
name = "aws-http"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aadbc44e7a8f3e71c8b374e03ecd972869eb91dd2bc89ed018954a52ba84bc44"
dependencies = [
"aws-credential-types",
"aws-smithy-http",
"aws-smithy-types",
"aws-types",
"bytes",
"http",
"http-body",
"lazy_static",
"percent-encoding",
"pin-project-lite",
"tracing",
]
[[package]]
name = "aws-sdk-dynamodb"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67fb64867fe098cffee7e34352b01bbfa2beb3aa1b2ff0e0a7bf9ff293557852"
dependencies = [
"aws-credential-types",
"aws-endpoint",
"aws-http",
"aws-sig-auth",
"aws-smithy-async",
"aws-smithy-client",
"aws-smithy-http",
"aws-smithy-http-tower",
"aws-smithy-json",
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand",
"http",
"regex",
"tokio-stream",
"tower",
"tracing",
]
[[package]]
name = "aws-sdk-s3"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37c77060408d653d3efa6ea7b66c1389bc35a0342352984c8bf8bcb814a8fc27"
dependencies = [
"aws-credential-types",
"aws-endpoint",
"aws-http",
"aws-sig-auth",
"aws-sigv4",
"aws-smithy-async",
"aws-smithy-checksums",
"aws-smithy-client",
"aws-smithy-eventstream",
"aws-smithy-http",
"aws-smithy-http-tower",
"aws-smithy-json",
"aws-smithy-types",
"aws-smithy-xml",
"aws-types",
"bytes",
"http",
"http-body",
"once_cell",
"percent-encoding",
"regex",
"tokio-stream",
"tower",
"tracing",
"url",
]
[[package]]
name = "aws-sdk-secretsmanager"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "502ccd2a5469223f03116ed1ef8d310bfe3caa0e8398b968439cd8e76e4ae91c"
dependencies = [
"aws-credential-types",
"aws-endpoint",
"aws-http",
"aws-sig-auth",
"aws-smithy-async",
"aws-smithy-client",
"aws-smithy-http",
"aws-smithy-http-tower",
"aws-smithy-json",
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand",
"http",
"regex",
"tokio-stream",
"tower",
"tracing",
]
[[package]]
name = "aws-sdk-sso"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8b812340d86d4a766b2ca73f740dfd47a97c2dff0c06c8517a16d88241957e4"
dependencies = [
"aws-credential-types",
"aws-endpoint",
"aws-http",
"aws-sig-auth",
"aws-smithy-async",
"aws-smithy-client",
"aws-smithy-http",
"aws-smithy-http-tower",
"aws-smithy-json",
"aws-smithy-types",
"aws-types",
"bytes",
"http",
"regex",
"tokio-stream",
"tower",
"tracing",
]
[[package]]
name = "aws-sdk-sts"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "265fac131fbfc188e5c3d96652ea90ecc676a934e3174eaaee523c6cec040b3b"
dependencies = [
"aws-credential-types",
"aws-endpoint",
"aws-http",
"aws-sig-auth",
"aws-smithy-async",
"aws-smithy-client",
"aws-smithy-http",
"aws-smithy-http-tower",
"aws-smithy-json",
"aws-smithy-query",
"aws-smithy-types",
"aws-smithy-xml",
"aws-types",
"bytes",
"http",
"regex",
"tower",
"tracing",
]
[[package]]
name = "aws-sig-auth"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b94acb10af0c879ecd5c7bdf51cda6679a0a4f4643ce630905a77673bfa3c61"
dependencies = [
"aws-credential-types",
"aws-sigv4",
"aws-smithy-eventstream",
"aws-smithy-http",
"aws-types",
"http",
"tracing",
]
[[package]]
name = "aws-sigv4"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d2ce6f507be68e968a33485ced670111d1cbad161ddbbab1e313c03d37d8f4c"
dependencies = [
"aws-smithy-eventstream",
"aws-smithy-http",
"bytes",
"form_urlencoded",
"hex",
"hmac",
"http",
"once_cell",
"percent-encoding",
"regex",
"sha2",
"time",
"tracing",
]
[[package]]
name = "aws-smithy-async"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13bda3996044c202d75b91afeb11a9afae9db9a721c6a7a427410018e286b880"
dependencies = [
"futures-util",
"pin-project-lite",
"tokio",
"tokio-stream",
]
[[package]]
name = "aws-smithy-checksums"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07ed8b96d95402f3f6b8b57eb4e0e45ee365f78b1a924faf20ff6e97abf1eae6"
dependencies = [
"aws-smithy-http",
"aws-smithy-types",
"bytes",
"crc32c",
"crc32fast",
"hex",
"http",
"http-body",
"md-5",
"pin-project-lite",
"sha1",
"sha2",
"tracing",
]
[[package]]
name = "aws-smithy-client"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a86aa6e21e86c4252ad6a0e3e74da9617295d8d6e374d552be7d3059c41cedd"
dependencies = [
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-http-tower",
"aws-smithy-types",
"bytes",
"fastrand",
"http",
"http-body",
"hyper",
"hyper-rustls",
"lazy_static",
"pin-project-lite",
"rustls 0.20.7",
"tokio",
"tower",
"tracing",
]
[[package]]
name = "aws-smithy-eventstream"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "460c8da5110835e3d9a717c61f5556b20d03c32a1dec57f8fc559b360f733bb8"
dependencies = [
"aws-smithy-types",
"bytes",
"crc32fast",
]
[[package]]
name = "aws-smithy-http"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b3b693869133551f135e1f2c77cb0b8277d9e3e17feaf2213f735857c4f0d28"
dependencies = [
"aws-smithy-eventstream",
"aws-smithy-types",
"bytes",
"bytes-utils",
"futures-core",
"http",
"http-body",
"hyper",
"once_cell",
"percent-encoding",
"pin-project-lite",
"pin-utils",
"tokio",
"tokio-util",
"tracing",
]
[[package]]
name = "aws-smithy-http-tower"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ae4f6c5798a247fac98a867698197d9ac22643596dc3777f0c76b91917616b9"
dependencies = [
"aws-smithy-http",
"aws-smithy-types",
"bytes",
"http",
"http-body",
"pin-project-lite",
"tower",
"tracing",
]
[[package]]
name = "aws-smithy-json"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23f9f42fbfa96d095194a632fbac19f60077748eba536eb0b9fecc28659807f8"
dependencies = [
"aws-smithy-types",
]
[[package]]
name = "aws-smithy-query"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98819eb0b04020a1c791903533b638534ae6c12e2aceda3e6e6fba015608d51d"
dependencies = [
"aws-smithy-types",
"urlencoding",
]
[[package]]
name = "aws-smithy-types"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16a3d0bf4f324f4ef9793b86a1701d9700fbcdbd12a846da45eed104c634c6e8"
dependencies = [
"base64-simd",
"itoa",
"num-integer",
"ryu",
"time",
]
[[package]]
name = "aws-smithy-xml"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1b9d12875731bd07e767be7baad95700c3137b56730ec9ddeedb52a5e5ca63b"
dependencies = [
"xmlparser",
]
[[package]]
name = "aws-types"
version = "0.55.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dd209616cc8d7bfb82f87811a5c655dc97537f592689b18743bddf5dc5c4829"
dependencies = [
"aws-credential-types",
"aws-smithy-async",
"aws-smithy-client",
"aws-smithy-http",
"aws-smithy-types",
"http",
"rustc_version",
"tracing",
]
[[package]]
name = "axum"
version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acee9fd5073ab6b045a275b3e709c163dd36c90685219cb21804a147b58dba43"
dependencies = [
"async-trait",
"axum-core 0.2.9",
"bitflags",
"bytes",
"futures-util",
"http",
"http-body",
"hyper",
"itoa",
"matchit 0.5.0",
"memchr",
"mime",
"percent-encoding",
"pin-project-lite",
"serde",
"sync_wrapper",
"tokio",
"tower",
"tower-http",
"tower-layer",
"tower-service",
]
[[package]]
name = "axum"
version = "0.6.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
dependencies = [
"async-trait",
"axum-core 0.3.4",
"bitflags",
"bytes",
"futures-util",
"http",
"http-body",
"hyper",
"itoa",
"matchit 0.7.3",
"memchr",
"mime",
"percent-encoding",
"pin-project-lite",
"rustversion",
"serde",
"sync_wrapper",
"tower",
"tower-layer",
"tower-service",
]
[[package]]
name = "axum-core"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e5939e02c56fecd5c017c37df4238c0a839fa76b7f97acdd7efb804fd181cc"
dependencies = [
"async-trait",
"bytes",
"futures-util",
"http",
"http-body",
"mime",
"tower-layer",
"tower-service",
]
[[package]]
name = "axum-core"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
dependencies = [
"async-trait",
"bytes",
"futures-util",
"http",
"http-body",
"mime",
"rustversion",
"tower-layer",
"tower-service",
]
[[package]]
name = "backtrace"
version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
dependencies = [
"addr2line",
"cc",
"cfg-if",
"libc",
"miniz_oxide 0.7.1",
"object",
"rustc-demangle",
]
[[package]]
name = "base64"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
[[package]]
name = "base64-simd"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195"
dependencies = [
"outref",
"vsimd",
]
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "blob"
version = "1.0.0"
dependencies = [
"actix-multipart",
"actix-web",
"anyhow",
"async-stream",
"aws-config",
"aws-sdk-dynamodb",
"aws-sdk-s3",
"chrono",
"clap",
"comm-lib",
"derive_more",
"http",
"once_cell",
"prost",
+ "regex",
"serde",
+ "serde_json",
"tokio",
"tokio-stream",
"tonic 0.8.2",
"tracing",
"tracing-actix-web",
"tracing-futures",
"tracing-subscriber",
]
[[package]]
name = "block-buffer"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
dependencies = [
"generic-array",
]
[[package]]
name = "brotli"
version = "3.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
"brotli-decompressor",
]
[[package]]
name = "brotli-decompressor"
version = "2.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
]
[[package]]
name = "bumpalo"
version = "3.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
[[package]]
name = "bytes"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
[[package]]
name = "bytes-utils"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9"
dependencies = [
"bytes",
"either",
]
[[package]]
name = "bytestring"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae"
dependencies = [
"bytes",
]
[[package]]
name = "cc"
version = "1.0.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f"
dependencies = [
"jobserver",
]
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
dependencies = [
"android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"wasm-bindgen",
"windows-targets 0.48.0",
]
[[package]]
name = "clap"
version = "4.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76"
dependencies = [
"bitflags",
"clap_derive",
"clap_lex",
"is-terminal",
"once_cell",
"strsim",
"termcolor",
]
[[package]]
name = "clap_derive"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "clap_lex"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade"
dependencies = [
"os_str_bytes",
]
[[package]]
name = "codespan-reporting"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
dependencies = [
"termcolor",
"unicode-width",
]
[[package]]
name = "comm-lib"
version = "0.1.0"
dependencies = [
"actix-cors",
"actix-multipart",
"actix-web",
"actix-web-httpauth",
"anyhow",
"aws-config",
"aws-sdk-dynamodb",
"aws-sdk-secretsmanager",
"base64 0.21.0",
"chrono",
"constant_time_eq",
"derive_more",
"futures-core",
"futures-util",
"grpc_clients",
"hex",
"http",
"rand",
"serde",
"serde_json",
"sha2",
"tokio",
"tokio-stream",
"tracing",
"uuid",
]
[[package]]
name = "constant_time_eq"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
[[package]]
name = "convert_case"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
name = "cookie"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
dependencies = [
"percent-encoding",
"time",
"version_check",
]
[[package]]
name = "core-foundation"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "core-foundation-sys"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
[[package]]
name = "cpufeatures"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
dependencies = [
"libc",
]
[[package]]
name = "crc32c"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dfea2db42e9927a3845fb268a10a72faed6d416065f77873f05e411457c363e"
dependencies = [
"rustc_version",
]
[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
dependencies = [
"cfg-if",
]
[[package]]
name = "crypto-common"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
"typenum",
]
[[package]]
name = "cxx"
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453"
dependencies = [
"cc",
"cxxbridge-flags",
"cxxbridge-macro",
"link-cplusplus",
]
[[package]]
name = "cxx-build"
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0"
dependencies = [
"cc",
"codespan-reporting",
"once_cell",
"proc-macro2",
"quote",
"scratch",
"syn 1.0.103",
]
[[package]]
name = "cxxbridge-flags"
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71"
[[package]]
name = "cxxbridge-macro"
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "darling"
version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn 1.0.103",
]
[[package]]
name = "darling_macro"
version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
dependencies = [
"darling_core",
"quote",
"syn 1.0.103",
]
[[package]]
name = "derive_more"
version = "0.99.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
dependencies = [
"convert_case",
"proc-macro2",
"quote",
"rustc_version",
"syn 1.0.103",
]
[[package]]
name = "digest"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
dependencies = [
"block-buffer",
"crypto-common",
"subtle",
]
[[package]]
name = "either"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
[[package]]
name = "encoding_rs"
version = "0.8.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
dependencies = [
"cfg-if",
]
[[package]]
name = "errno"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
dependencies = [
"errno-dragonfly",
"libc",
"winapi",
]
[[package]]
name = "errno"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
dependencies = [
"errno-dragonfly",
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "errno-dragonfly"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
dependencies = [
"cc",
"libc",
]
[[package]]
name = "fastrand"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
dependencies = [
"instant",
]
[[package]]
name = "fixedbitset"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "flate2"
version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
dependencies = [
"crc32fast",
"miniz_oxide 0.6.2",
]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "form_urlencoded"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
dependencies = [
"percent-encoding",
]
[[package]]
name = "futures"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
dependencies = [
"futures-channel",
"futures-core",
"futures-executor",
"futures-io",
"futures-sink",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-channel"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
dependencies = [
"futures-core",
"futures-sink",
]
[[package]]
name = "futures-core"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
[[package]]
name = "futures-executor"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
dependencies = [
"futures-core",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-io"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
[[package]]
name = "futures-macro"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "futures-sink"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
[[package]]
name = "futures-task"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
[[package]]
name = "futures-util"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
"memchr",
"pin-project-lite",
"pin-utils",
"slab",
]
[[package]]
name = "generic-array"
version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
dependencies = [
"typenum",
"version_check",
]
[[package]]
name = "getrandom"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "gimli"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "grpc_clients"
version = "0.1.0"
dependencies = [
"derive_more",
"prost",
"tonic 0.9.2",
"tonic-build",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "h2"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
"http",
"indexmap",
"slab",
"tokio",
"tokio-util",
"tracing",
]
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "heck"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "hermit-abi"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
dependencies = [
"libc",
]
[[package]]
name = "hermit-abi"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hmac"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
dependencies = [
"digest",
]
[[package]]
name = "http"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]]
name = "http-body"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
dependencies = [
"bytes",
"http",
"pin-project-lite",
]
[[package]]
name = "http-range-header"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
[[package]]
name = "httparse"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
[[package]]
name = "httpdate"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]]
name = "hyper"
version = "0.14.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
"socket2 0.4.7",
"tokio",
"tower-service",
"tracing",
"want",
]
[[package]]
name = "hyper-rustls"
version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59df7c4e19c950e6e0e868dcc0a300b09a9b88e9ec55bd879ca819087a77355d"
dependencies = [
"http",
"hyper",
"log",
"rustls 0.20.7",
"rustls-native-certs",
"tokio",
"tokio-rustls 0.23.4",
]
[[package]]
name = "hyper-timeout"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
dependencies = [
"hyper",
"pin-project-lite",
"tokio",
"tokio-io-timeout",
]
[[package]]
name = "iana-time-zone"
version = "0.1.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
"winapi",
]
[[package]]
name = "iana-time-zone-haiku"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
dependencies = [
"cxx",
"cxx-build",
]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "idna"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
dependencies = [
"unicode-bidi",
"unicode-normalization",
]
[[package]]
name = "indexmap"
version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if",
]
[[package]]
name = "io-lifetimes"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
dependencies = [
"hermit-abi 0.3.1",
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "is-terminal"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
dependencies = [
"hermit-abi 0.2.6",
"io-lifetimes",
"rustix 0.36.7",
"windows-sys 0.42.0",
]
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
name = "jobserver"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
dependencies = [
"libc",
]
[[package]]
name = "js-sys"
version = "0.3.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "language-tags"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.147"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
[[package]]
name = "link-cplusplus"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
dependencies = [
"cc",
]
[[package]]
name = "linux-raw-sys"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
[[package]]
name = "linux-raw-sys"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
[[package]]
name = "local-channel"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c"
dependencies = [
"futures-core",
"futures-sink",
"futures-util",
"local-waker",
]
[[package]]
name = "local-waker"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1"
[[package]]
name = "lock_api"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
dependencies = [
"autocfg",
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
dependencies = [
"cfg-if",
]
[[package]]
name = "matchers"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
dependencies = [
- "regex-automata",
+ "regex-automata 0.1.10",
]
[[package]]
name = "matchit"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb"
[[package]]
name = "matchit"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
[[package]]
name = "md-5"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
dependencies = [
"digest",
]
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "mime"
version = "0.3.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
[[package]]
name = "miniz_oxide"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
dependencies = [
"adler",
]
[[package]]
name = "miniz_oxide"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
dependencies = [
"adler",
]
[[package]]
name = "mio"
version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
dependencies = [
"libc",
"log",
"wasi",
"windows-sys 0.48.0",
]
[[package]]
name = "multimap"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
[[package]]
name = "nu-ansi-term"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
dependencies = [
"overload",
"winapi",
]
[[package]]
name = "num-integer"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
dependencies = [
"autocfg",
]
[[package]]
name = "num_cpus"
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
dependencies = [
"hermit-abi 0.1.19",
"libc",
]
[[package]]
name = "object"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
[[package]]
name = "openssl-probe"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "os_str_bytes"
version = "6.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
[[package]]
name = "outref"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a"
[[package]]
name = "overload"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
name = "parking_lot"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf"
dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.2.16",
"smallvec",
"windows-sys 0.42.0",
]
[[package]]
name = "parse-size"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "944553dd59c802559559161f9816429058b869003836120e262e8caec061b7ae"
[[package]]
name = "paste"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
[[package]]
name = "percent-encoding"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
[[package]]
name = "petgraph"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
dependencies = [
"fixedbitset",
"indexmap",
]
[[package]]
name = "pin-project"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "pin-project-lite"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05"
[[package]]
name = "pin-utils"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
[[package]]
name = "ppv-lite86"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "prettyplease"
version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c142c0e46b57171fe0c528bee8c5b7569e80f0c17e377cd0e30ea57dbc11bb51"
dependencies = [
"proc-macro2",
"syn 1.0.103",
]
[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn 1.0.103",
"version_check",
]
[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"version_check",
]
[[package]]
name = "proc-macro2"
version = "1.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "prost"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
dependencies = [
"bytes",
"prost-derive",
]
[[package]]
name = "prost-build"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
dependencies = [
"bytes",
"heck",
"itertools",
"lazy_static",
"log",
"multimap",
"petgraph",
"prettyplease",
"prost",
"prost-types",
"regex",
"syn 1.0.103",
"tempfile",
"which",
]
[[package]]
name = "prost-derive"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
dependencies = [
"anyhow",
"itertools",
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "prost-types"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
dependencies = [
"prost",
]
[[package]]
name = "quote"
version = "1.0.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom",
]
[[package]]
name = "redox_syscall"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [
"bitflags",
]
[[package]]
name = "redox_syscall"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
-version = "1.7.0"
+version = "1.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax",
+ "regex-automata 0.4.5",
+ "regex-syntax 0.8.2",
]
[[package]]
name = "regex-automata"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
dependencies = [
- "regex-syntax",
+ "regex-syntax 0.6.28",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
]
[[package]]
name = "regex-syntax"
version = "0.6.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
[[package]]
name = "ring"
version = "0.16.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
dependencies = [
"cc",
"libc",
"once_cell",
"spin",
"untrusted",
"web-sys",
"winapi",
]
[[package]]
name = "rustc-demangle"
version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]]
name = "rustc_version"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
dependencies = [
"semver",
]
[[package]]
name = "rustix"
version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03"
dependencies = [
"bitflags",
"errno 0.2.8",
"io-lifetimes",
"libc",
"linux-raw-sys 0.1.4",
"windows-sys 0.42.0",
]
[[package]]
name = "rustix"
version = "0.37.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77"
dependencies = [
"bitflags",
"errno 0.3.1",
"io-lifetimes",
"libc",
"linux-raw-sys 0.3.1",
"windows-sys 0.48.0",
]
[[package]]
name = "rustls"
version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c"
dependencies = [
"log",
"ring",
"sct",
"webpki",
]
[[package]]
name = "rustls"
version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
dependencies = [
"log",
"ring",
"rustls-webpki 0.101.6",
"sct",
]
[[package]]
name = "rustls-native-certs"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
dependencies = [
"openssl-probe",
"rustls-pemfile",
"schannel",
"security-framework",
]
[[package]]
name = "rustls-pemfile"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55"
dependencies = [
"base64 0.13.1",
]
[[package]]
name = "rustls-webpki"
version = "0.100.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "rustls-webpki"
version = "0.101.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "rustversion"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]]
name = "ryu"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
[[package]]
name = "schannel"
version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
dependencies = [
"lazy_static",
"windows-sys 0.36.1",
]
[[package]]
name = "scopeguard"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "scratch"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
[[package]]
name = "sct"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "security-framework"
version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
dependencies = [
"bitflags",
"core-foundation",
"core-foundation-sys",
"libc",
"security-framework-sys",
]
[[package]]
name = "security-framework-sys"
version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "semver"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
[[package]]
name = "serde"
version = "1.0.147"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.147"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "serde_json"
version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "serde_plain"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6018081315db179d0ce57b1fe4b62a12a0028c9cf9bbef868c9cf477b3c34ae"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
"itoa",
"ryu",
"serde",
]
[[package]]
name = "sha1"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "sha2"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "sharded-slab"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
dependencies = [
"lazy_static",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
dependencies = [
"libc",
]
[[package]]
name = "slab"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "socket2"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "socket2"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
dependencies = [
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "subtle"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "syn"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "sync_wrapper"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
[[package]]
name = "tempfile"
version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
dependencies = [
"cfg-if",
"fastrand",
"redox_syscall 0.3.5",
"rustix 0.37.11",
"windows-sys 0.45.0",
]
[[package]]
name = "termcolor"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
dependencies = [
"winapi-util",
]
[[package]]
name = "thread_local"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
dependencies = [
"once_cell",
]
[[package]]
name = "time"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
dependencies = [
"itoa",
"serde",
"time-core",
"time-macros",
]
[[package]]
name = "time-core"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
[[package]]
name = "time-macros"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
dependencies = [
"time-core",
]
[[package]]
name = "tinyvec"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
dependencies = [
"tinyvec_macros",
]
[[package]]
name = "tinyvec_macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
dependencies = [
"backtrace",
"bytes",
"libc",
"mio",
"num_cpus",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
"socket2 0.5.3",
"tokio-macros",
"windows-sys 0.48.0",
]
[[package]]
name = "tokio-io-timeout"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
dependencies = [
"pin-project-lite",
"tokio",
]
[[package]]
name = "tokio-macros"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.28",
]
[[package]]
name = "tokio-rustls"
version = "0.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
dependencies = [
"rustls 0.20.7",
"tokio",
"webpki",
]
[[package]]
name = "tokio-rustls"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
dependencies = [
"rustls 0.21.7",
"tokio",
]
[[package]]
name = "tokio-stream"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
dependencies = [
"futures-core",
"pin-project-lite",
"tokio",
]
[[package]]
name = "tokio-util"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"pin-project-lite",
"tokio",
"tracing",
]
[[package]]
name = "tonic"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55b9af819e54b8f33d453655bef9b9acc171568fb49523078d0cc4e7484200ec"
dependencies = [
"async-stream",
"async-trait",
"axum 0.5.17",
"base64 0.13.1",
"bytes",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"hyper",
"hyper-timeout",
"percent-encoding",
"pin-project",
"prost",
"prost-derive",
"tokio",
"tokio-stream",
"tokio-util",
"tower",
"tower-layer",
"tower-service",
"tracing",
"tracing-futures",
]
[[package]]
name = "tonic"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a"
dependencies = [
"async-stream",
"async-trait",
"axum 0.6.20",
"base64 0.21.0",
"bytes",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"hyper",
"hyper-timeout",
"percent-encoding",
"pin-project",
"prost",
"rustls-pemfile",
"tokio",
"tokio-rustls 0.24.1",
"tokio-stream",
"tower",
"tower-layer",
"tower-service",
"tracing",
"webpki-roots",
]
[[package]]
name = "tonic-build"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
dependencies = [
"prettyplease",
"proc-macro2",
"prost-build",
"quote",
"syn 1.0.103",
]
[[package]]
name = "tower"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
dependencies = [
"futures-core",
"futures-util",
"indexmap",
"pin-project",
"pin-project-lite",
"rand",
"slab",
"tokio",
"tokio-util",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower-http"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba"
dependencies = [
"bitflags",
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"http-range-header",
"pin-project-lite",
"tower",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-layer"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
[[package]]
name = "tower-service"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
version = "0.1.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
dependencies = [
"cfg-if",
"log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
]
[[package]]
name = "tracing-actix-web"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a230d51c76e70c5ff8edae9085d7d7161803a871880406a6772639def50d059c"
dependencies = [
"actix-web",
"pin-project",
"tracing",
"uuid",
]
[[package]]
name = "tracing-attributes"
version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.103",
]
[[package]]
name = "tracing-core"
version = "0.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
dependencies = [
"once_cell",
"valuable",
]
[[package]]
name = "tracing-futures"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
dependencies = [
"futures",
"futures-task",
"pin-project",
"tracing",
]
[[package]]
name = "tracing-log"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
dependencies = [
"lazy_static",
"log",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.3.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
dependencies = [
"matchers",
"nu-ansi-term",
"once_cell",
"regex",
"sharded-slab",
"smallvec",
"thread_local",
"tracing",
"tracing-core",
"tracing-log",
]
[[package]]
name = "try-lock"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
[[package]]
name = "typenum"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
[[package]]
name = "unicode-bidi"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
[[package]]
name = "unicode-ident"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
[[package]]
name = "unicode-normalization"
version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-width"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]]
name = "untrusted"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
name = "url"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
]
[[package]]
name = "urlencoding"
version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"
[[package]]
name = "uuid"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb"
dependencies = [
"getrandom",
]
[[package]]
name = "valuable"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "vsimd"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
[[package]]
name = "want"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
dependencies = [
"log",
"try-lock",
]
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
"syn 1.0.103",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.103",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
[[package]]
name = "web-sys"
version = "0.3.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "webpki"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "webpki-roots"
version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
dependencies = [
"rustls-webpki 0.100.3",
]
[[package]]
name = "which"
version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
dependencies = [
"either",
"libc",
"once_cell",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
"winapi",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
dependencies = [
"windows_aarch64_msvc 0.36.1",
"windows_i686_gnu 0.36.1",
"windows_i686_msvc 0.36.1",
"windows_x86_64_gnu 0.36.1",
"windows_x86_64_msvc 0.36.1",
]
[[package]]
name = "windows-sys"
version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
dependencies = [
"windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc 0.42.2",
"windows_i686_gnu 0.42.2",
"windows_i686_msvc 0.42.2",
"windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets 0.48.0",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc 0.42.2",
"windows_i686_gnu 0.42.2",
"windows_i686_msvc 0.42.2",
"windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-targets"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
dependencies = [
"windows_aarch64_gnullvm 0.48.0",
"windows_aarch64_msvc 0.48.0",
"windows_i686_gnu 0.48.0",
"windows_i686_msvc 0.48.0",
"windows_x86_64_gnu 0.48.0",
"windows_x86_64_gnullvm 0.48.0",
"windows_x86_64_msvc 0.48.0",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
[[package]]
name = "windows_i686_gnu"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
[[package]]
name = "windows_i686_msvc"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
[[package]]
name = "windows_x86_64_gnu"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
[[package]]
name = "windows_x86_64_msvc"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "xmlparser"
version = "0.13.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd"
[[package]]
name = "zeroize"
version = "1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
[[package]]
name = "zstd"
version = "0.12.3+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
dependencies = [
"zstd-safe",
]
[[package]]
name = "zstd-safe"
version = "6.0.5+zstd.1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
dependencies = [
"libc",
"zstd-sys",
]
[[package]]
name = "zstd-sys"
version = "2.0.8+zstd.1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
dependencies = [
"cc",
"libc",
"pkg-config",
]
diff --git a/services/blob/Cargo.toml b/services/blob/Cargo.toml
index b5e259b61..c46e0a561 100644
--- a/services/blob/Cargo.toml
+++ b/services/blob/Cargo.toml
@@ -1,31 +1,33 @@
[package]
name = "blob"
description = "Blob service"
homepage = "https://comm.app"
license = "BSD-3-Clause"
version = "1.0.0"
edition = "2021"
[dependencies]
actix-multipart = "0.6"
actix-web = "4.3"
anyhow = "1.0"
async-stream = "0.3"
aws-config = "0.55"
aws-sdk-dynamodb = "0.27"
aws-sdk-s3 = "0.27"
chrono = "0.4.31"
clap = { version = "4.0", features = ["derive", "env"] }
comm-lib = { path = "../../shared/comm-lib", features = ["http", "aws"] }
derive_more = "0.99"
http = "0.2"
once_cell = "1.17"
prost = "0.11"
+regex = "1.10.3"
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.24", features = ["rt-multi-thread"] }
tokio-stream = "0.1"
tonic = "0.8"
tracing = "0.1"
tracing-actix-web = "0.7.3"
tracing-futures = { version = "0.2", features = ["futures-03"] }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
+serde_json = "1.0.95"
diff --git a/services/blob/reserved_usernames.json b/services/blob/reserved_usernames.json
new file mode 100644
index 000000000..c0aa37fb8
--- /dev/null
+++ b/services/blob/reserved_usernames.json
@@ -0,0 +1,2223 @@
+[
+ "comm",
+ "dapp-tools",
+ "dapp_tools",
+ "ethers-js",
+ "ethers_js",
+ "ganache-cli",
+ "ganache_cli",
+ "hardhat",
+ "mod",
+ "moderator",
+ "solidity",
+ "truffle",
+ "web3",
+ "web3modal",
+ "0",
+ "12",
+ "49",
+ "478",
+ "1hive",
+ "aave",
+ "agoraspace",
+ "aladdindao",
+ "alchemistdao",
+ "allships",
+ "ampled",
+ "angeldao",
+ "aragon",
+ "badgerdao",
+ "bankless",
+ "bardao",
+ "bayc",
+ "beetsdao",
+ "braintrust",
+ "bright",
+ "brightid",
+ "brightmomentsgallery",
+ "brrdao",
+ "cabindao",
+ "canudao",
+ "cedge",
+ "clip",
+ "closerdao",
+ "coinvise",
+ "collab-land",
+ "collab_land",
+ "colony",
+ "comp",
+ "compound",
+ "coordinape",
+ "cre8club",
+ "crisisdao",
+ "cspdao",
+ "daohaus",
+ "daosquare",
+ "daostack",
+ "darkstardao",
+ "decred",
+ "developerdao",
+ "devs",
+ "dfdao",
+ "dinnerdao",
+ "dinogangz",
+ "discodao",
+ "distributed-town",
+ "distributed_town",
+ "divineroles",
+ "dopewarsdao",
+ "dorg",
+ "duckdao",
+ "dxdao",
+ "edendao",
+ "elektradao",
+ "ethernautdao",
+ "etherscan",
+ "evewealth",
+ "ff",
+ "fiatluxdao",
+ "fingerprints",
+ "fireeyes",
+ "flamingodao",
+ "forefront",
+ "freecompany",
+ "friendswithbenefits",
+ "fwb",
+ "gardens",
+ "gcr",
+ "genezisbiohacking",
+ "genre",
+ "geometrydao",
+ "gitcoin",
+ "gnosis",
+ "gnosissafe",
+ "gorn",
+ "gornhegemonydao",
+ "gremlins",
+ "guildhall",
+ "habitat",
+ "heatdao",
+ "herstorydao",
+ "honeydao",
+ "idlefinance",
+ "indexcoop",
+ "insuredao",
+ "jennydao",
+ "joystream",
+ "jumperdao",
+ "keeperdao",
+ "kleoverse",
+ "komorebicollective",
+ "krause",
+ "krausehouse",
+ "learndao",
+ "leavingrecords",
+ "lex",
+ "lexdao",
+ "llama",
+ "lovesocietydao",
+ "lurkerdao",
+ "magnetdao",
+ "makerdao",
+ "maodao",
+ "maskdao",
+ "meebitsdao",
+ "meritcircle",
+ "metacartel",
+ "metafam",
+ "metagammadelta",
+ "metamask",
+ "metaversedao",
+ "minty",
+ "mirror-xyz",
+ "mirror_xyz",
+ "mirrorclubdao",
+ "molochdao",
+ "moonshotcollective",
+ "moshdao",
+ "muse0",
+ "nebo",
+ "neptunedao",
+ "nfdao",
+ "nounsdao",
+ "olympusdao",
+ "opendao",
+ "opensea",
+ "opolis",
+ "orcaprotocol",
+ "pacdao",
+ "paperclip",
+ "parcel",
+ "party",
+ "partydao",
+ "peerion",
+ "phlotedao",
+ "physicalanddigitalartaficionados",
+ "pizzadao",
+ "pleasrdao",
+ "pokemontrainersclub",
+ "prints",
+ "proofofhumanity",
+ "prosperdao",
+ "proteindao",
+ "psydao",
+ "rabbithole",
+ "raidguild",
+ "rainbowwallet",
+ "raribledao",
+ "readyplayerdao",
+ "reddao",
+ "ref",
+ "retokendao",
+ "ribondao",
+ "rumblekong",
+ "sarcophagus",
+ "scribedao",
+ "seedclub",
+ "sharkdao",
+ "shinydao",
+ "snapshot",
+ "snx",
+ "sourcecred",
+ "spork",
+ "sporkdao",
+ "sputnik-fund",
+ "sputnik_fund",
+ "squaddao",
+ "squig",
+ "squiggle",
+ "stack",
+ "stackerventuresdao",
+ "syndicate",
+ "synthetix",
+ "tally",
+ "taodao",
+ "tarascadao",
+ "terrachess",
+ "thelao",
+ "thewipmeetup",
+ "thugdao",
+ "tinseldao",
+ "tokenwalkdao",
+ "tomomasterdao",
+ "triforcedao",
+ "trippy",
+ "trojandao",
+ "ultradao",
+ "universitydao",
+ "unlockdao",
+ "vectordao",
+ "viariodao",
+ "vita",
+ "vitadao",
+ "walletconnect",
+ "whalerdao",
+ "whiskeypioneers",
+ "yamdao",
+ "yearn",
+ "yfi",
+ "ygg",
+ "zouzoukwa",
+ "aaa",
+ "aarp",
+ "abarth",
+ "abb",
+ "abbott",
+ "abbvie",
+ "abc",
+ "able",
+ "abogado",
+ "abudhabi",
+ "ac",
+ "academy",
+ "accenture",
+ "accountant",
+ "accountants",
+ "aco",
+ "actor",
+ "ad",
+ "adac",
+ "ads",
+ "adult",
+ "ae",
+ "aeg",
+ "aero",
+ "aetna",
+ "af",
+ "afamilycompany",
+ "afl",
+ "africa",
+ "ag",
+ "agakhan",
+ "agency",
+ "ai",
+ "aig",
+ "airbus",
+ "airforce",
+ "airtel",
+ "akdn",
+ "al",
+ "alfaromeo",
+ "alibaba",
+ "alipay",
+ "allfinanz",
+ "allstate",
+ "ally",
+ "alsace",
+ "alstom",
+ "am",
+ "amazon",
+ "americanexpress",
+ "americanfamily",
+ "amex",
+ "amfam",
+ "amica",
+ "amsterdam",
+ "analytics",
+ "android",
+ "anquan",
+ "anz",
+ "ao",
+ "aol",
+ "apartments",
+ "app",
+ "apple",
+ "aq",
+ "aquarelle",
+ "ar",
+ "arab",
+ "aramco",
+ "archi",
+ "army",
+ "arpa",
+ "art",
+ "arte",
+ "as",
+ "asda",
+ "asia",
+ "associates",
+ "at",
+ "athleta",
+ "attorney",
+ "au",
+ "auction",
+ "audi",
+ "audible",
+ "audio",
+ "auspost",
+ "author",
+ "auto",
+ "autos",
+ "avianca",
+ "aw",
+ "aws",
+ "ax",
+ "axa",
+ "az",
+ "azure",
+ "ba",
+ "baby",
+ "baidu",
+ "banamex",
+ "bananarepublic",
+ "band",
+ "bank",
+ "bar",
+ "barcelona",
+ "barclaycard",
+ "barclays",
+ "barefoot",
+ "bargains",
+ "baseball",
+ "basketball",
+ "bauhaus",
+ "bayern",
+ "bb",
+ "bbc",
+ "bbt",
+ "bbva",
+ "bcg",
+ "bcn",
+ "bd",
+ "be",
+ "beats",
+ "beauty",
+ "beer",
+ "bentley",
+ "berlin",
+ "best",
+ "bestbuy",
+ "bet",
+ "bf",
+ "bg",
+ "bh",
+ "bharti",
+ "bi",
+ "bible",
+ "bid",
+ "bike",
+ "bing",
+ "bingo",
+ "bio",
+ "biz",
+ "bj",
+ "black",
+ "blackfriday",
+ "blockbuster",
+ "blog",
+ "bloomberg",
+ "blue",
+ "bm",
+ "bms",
+ "bmw",
+ "bn",
+ "bnpparibas",
+ "bo",
+ "boats",
+ "boehringer",
+ "bofa",
+ "bom",
+ "bond",
+ "boo",
+ "book",
+ "booking",
+ "bosch",
+ "bostik",
+ "boston",
+ "bot",
+ "boutique",
+ "box",
+ "br",
+ "bradesco",
+ "bridgestone",
+ "broadway",
+ "broker",
+ "brother",
+ "brussels",
+ "bs",
+ "bt",
+ "budapest",
+ "bugatti",
+ "build",
+ "builders",
+ "business",
+ "buy",
+ "buzz",
+ "bv",
+ "bw",
+ "by",
+ "bz",
+ "bzh",
+ "ca",
+ "cab",
+ "cafe",
+ "cal",
+ "call",
+ "calvinklein",
+ "cam",
+ "camera",
+ "camp",
+ "cancerresearch",
+ "canon",
+ "capetown",
+ "capital",
+ "capitalone",
+ "car",
+ "caravan",
+ "cards",
+ "care",
+ "career",
+ "careers",
+ "cars",
+ "casa",
+ "case",
+ "cash",
+ "casino",
+ "cat",
+ "catering",
+ "catholic",
+ "cba",
+ "cbn",
+ "cbre",
+ "cbs",
+ "cc",
+ "cd",
+ "center",
+ "ceo",
+ "cern",
+ "cf",
+ "cfa",
+ "cfd",
+ "cg",
+ "ch",
+ "chanel",
+ "channel",
+ "charity",
+ "chase",
+ "chat",
+ "cheap",
+ "chintai",
+ "christmas",
+ "chrome",
+ "church",
+ "ci",
+ "cipriani",
+ "circle",
+ "cisco",
+ "citadel",
+ "citi",
+ "citic",
+ "city",
+ "cityeats",
+ "ck",
+ "cl",
+ "claims",
+ "cleaning",
+ "click",
+ "clinic",
+ "clinique",
+ "clothing",
+ "cloud",
+ "club",
+ "clubmed",
+ "cm",
+ "cn",
+ "co",
+ "coach",
+ "codes",
+ "coffee",
+ "college",
+ "cologne",
+ "com",
+ "comcast",
+ "commbank",
+ "community",
+ "company",
+ "compare",
+ "computer",
+ "comsec",
+ "condos",
+ "construction",
+ "consulting",
+ "contact",
+ "contractors",
+ "cooking",
+ "cookingchannel",
+ "cool",
+ "coop",
+ "corsica",
+ "country",
+ "coupon",
+ "coupons",
+ "courses",
+ "cpa",
+ "cr",
+ "credit",
+ "creditcard",
+ "creditunion",
+ "cricket",
+ "crown",
+ "crs",
+ "cruise",
+ "cruises",
+ "csc",
+ "cu",
+ "cuisinella",
+ "cv",
+ "cw",
+ "cx",
+ "cy",
+ "cymru",
+ "cyou",
+ "cz",
+ "dabur",
+ "dad",
+ "dance",
+ "data",
+ "date",
+ "dating",
+ "datsun",
+ "day",
+ "dclk",
+ "dds",
+ "de",
+ "deal",
+ "dealer",
+ "deals",
+ "degree",
+ "delivery",
+ "dell",
+ "deloitte",
+ "delta",
+ "democrat",
+ "dental",
+ "dentist",
+ "desi",
+ "design",
+ "dev",
+ "dhl",
+ "diamonds",
+ "diet",
+ "digital",
+ "direct",
+ "directory",
+ "discount",
+ "discover",
+ "dish",
+ "diy",
+ "dj",
+ "dk",
+ "dm",
+ "dnp",
+ "do",
+ "docs",
+ "doctor",
+ "dog",
+ "domains",
+ "dot",
+ "download",
+ "drive",
+ "dtv",
+ "dubai",
+ "duck",
+ "dunlop",
+ "dupont",
+ "durban",
+ "dvag",
+ "dvr",
+ "dz",
+ "earth",
+ "eat",
+ "ec",
+ "eco",
+ "edeka",
+ "edu",
+ "education",
+ "ee",
+ "eg",
+ "email",
+ "emerck",
+ "energy",
+ "engineer",
+ "engineering",
+ "enterprises",
+ "epson",
+ "equipment",
+ "er",
+ "ericsson",
+ "erni",
+ "es",
+ "esq",
+ "estate",
+ "et",
+ "etisalat",
+ "eu",
+ "eurovision",
+ "eus",
+ "events",
+ "exchange",
+ "expert",
+ "exposed",
+ "express",
+ "extraspace",
+ "fage",
+ "fail",
+ "fairwinds",
+ "faith",
+ "family",
+ "fan",
+ "fans",
+ "farm",
+ "farmers",
+ "fashion",
+ "fast",
+ "fedex",
+ "feedback",
+ "ferrari",
+ "ferrero",
+ "fi",
+ "fiat",
+ "fidelity",
+ "fido",
+ "film",
+ "final",
+ "finance",
+ "financial",
+ "fire",
+ "firestone",
+ "firmdale",
+ "fish",
+ "fishing",
+ "fit",
+ "fitness",
+ "fj",
+ "fk",
+ "flickr",
+ "flights",
+ "flir",
+ "florist",
+ "flowers",
+ "fly",
+ "fm",
+ "fo",
+ "foo",
+ "food",
+ "foodnetwork",
+ "football",
+ "ford",
+ "forex",
+ "forsale",
+ "forum",
+ "foundation",
+ "fox",
+ "fr",
+ "free",
+ "fresenius",
+ "frl",
+ "frogans",
+ "frontdoor",
+ "frontier",
+ "ftr",
+ "fujitsu",
+ "fun",
+ "fund",
+ "furniture",
+ "futbol",
+ "fyi",
+ "ga",
+ "gal",
+ "gallery",
+ "gallo",
+ "gallup",
+ "game",
+ "games",
+ "gap",
+ "garden",
+ "gay",
+ "gb",
+ "gbiz",
+ "gd",
+ "gdn",
+ "ge",
+ "gea",
+ "gent",
+ "genting",
+ "george",
+ "gf",
+ "gg",
+ "ggee",
+ "gh",
+ "gi",
+ "gift",
+ "gifts",
+ "gives",
+ "giving",
+ "gl",
+ "glade",
+ "glass",
+ "gle",
+ "global",
+ "globo",
+ "gm",
+ "gmail",
+ "gmbh",
+ "gmo",
+ "gmx",
+ "gn",
+ "godaddy",
+ "gold",
+ "goldpoint",
+ "golf",
+ "goo",
+ "goodyear",
+ "goog",
+ "google",
+ "gop",
+ "got",
+ "gov",
+ "gp",
+ "gq",
+ "gr",
+ "grainger",
+ "graphics",
+ "gratis",
+ "green",
+ "gripe",
+ "grocery",
+ "group",
+ "gs",
+ "gt",
+ "gu",
+ "guardian",
+ "gucci",
+ "guge",
+ "guide",
+ "guitars",
+ "guru",
+ "gw",
+ "gy",
+ "hair",
+ "hamburg",
+ "hangout",
+ "haus",
+ "hbo",
+ "hdfc",
+ "hdfcbank",
+ "health",
+ "healthcare",
+ "help",
+ "helsinki",
+ "here",
+ "hermes",
+ "hgtv",
+ "hiphop",
+ "hisamitsu",
+ "hitachi",
+ "hiv",
+ "hk",
+ "hkt",
+ "hm",
+ "hn",
+ "hockey",
+ "holdings",
+ "holiday",
+ "homedepot",
+ "homegoods",
+ "homes",
+ "homesense",
+ "honda",
+ "horse",
+ "hospital",
+ "host",
+ "hosting",
+ "hot",
+ "hoteles",
+ "hotels",
+ "hotmail",
+ "house",
+ "how",
+ "hr",
+ "hsbc",
+ "ht",
+ "hu",
+ "hughes",
+ "hyatt",
+ "hyundai",
+ "ibm",
+ "icbc",
+ "ice",
+ "icu",
+ "id",
+ "ie",
+ "ieee",
+ "ifm",
+ "ikano",
+ "il",
+ "im",
+ "imamat",
+ "imdb",
+ "immo",
+ "immobilien",
+ "in",
+ "inc",
+ "industries",
+ "infiniti",
+ "info",
+ "ing",
+ "ink",
+ "institute",
+ "insurance",
+ "insure",
+ "int",
+ "international",
+ "intuit",
+ "investments",
+ "io",
+ "ipiranga",
+ "iq",
+ "ir",
+ "irish",
+ "is",
+ "ismaili",
+ "ist",
+ "istanbul",
+ "it",
+ "itau",
+ "itv",
+ "jaguar",
+ "java",
+ "jcb",
+ "je",
+ "jeep",
+ "jetzt",
+ "jewelry",
+ "jio",
+ "jll",
+ "jm",
+ "jmp",
+ "jnj",
+ "jo",
+ "jobs",
+ "joburg",
+ "jot",
+ "joy",
+ "jp",
+ "jpmorgan",
+ "jprs",
+ "juegos",
+ "juniper",
+ "kaufen",
+ "kddi",
+ "ke",
+ "kerryhotels",
+ "kerrylogistics",
+ "kerryproperties",
+ "kfh",
+ "kg",
+ "kh",
+ "ki",
+ "kia",
+ "kim",
+ "kinder",
+ "kindle",
+ "kitchen",
+ "kiwi",
+ "km",
+ "kn",
+ "koeln",
+ "komatsu",
+ "kosher",
+ "kp",
+ "kpmg",
+ "kpn",
+ "kr",
+ "krd",
+ "kred",
+ "kuokgroup",
+ "kw",
+ "ky",
+ "kyoto",
+ "kz",
+ "la",
+ "lacaixa",
+ "lamborghini",
+ "lamer",
+ "lancaster",
+ "lancia",
+ "land",
+ "landrover",
+ "lanxess",
+ "lasalle",
+ "lat",
+ "latino",
+ "latrobe",
+ "law",
+ "lawyer",
+ "lb",
+ "lc",
+ "lds",
+ "lease",
+ "leclerc",
+ "lefrak",
+ "legal",
+ "lego",
+ "lexus",
+ "lgbt",
+ "li",
+ "lidl",
+ "life",
+ "lifeinsurance",
+ "lifestyle",
+ "lighting",
+ "like",
+ "lilly",
+ "limited",
+ "limo",
+ "lincoln",
+ "linde",
+ "link",
+ "lipsy",
+ "live",
+ "living",
+ "lixil",
+ "lk",
+ "llc",
+ "llp",
+ "loan",
+ "loans",
+ "locker",
+ "locus",
+ "loft",
+ "lol",
+ "london",
+ "lotte",
+ "lotto",
+ "love",
+ "lpl",
+ "lplfinancial",
+ "lr",
+ "ls",
+ "lt",
+ "ltd",
+ "ltda",
+ "lu",
+ "lundbeck",
+ "luxe",
+ "luxury",
+ "lv",
+ "ly",
+ "ma",
+ "macys",
+ "madrid",
+ "maif",
+ "maison",
+ "makeup",
+ "man",
+ "management",
+ "mango",
+ "map",
+ "market",
+ "marketing",
+ "markets",
+ "marriott",
+ "marshalls",
+ "maserati",
+ "mattel",
+ "mba",
+ "mc",
+ "mckinsey",
+ "md",
+ "me",
+ "med",
+ "media",
+ "meet",
+ "melbourne",
+ "meme",
+ "memorial",
+ "men",
+ "menu",
+ "merckmsd",
+ "mg",
+ "mh",
+ "miami",
+ "microsoft",
+ "mil",
+ "mini",
+ "mint",
+ "mit",
+ "mitsubishi",
+ "mk",
+ "ml",
+ "mlb",
+ "mls",
+ "mm",
+ "mma",
+ "mn",
+ "mo",
+ "mobi",
+ "mobile",
+ "moda",
+ "moe",
+ "moi",
+ "mom",
+ "monash",
+ "money",
+ "monster",
+ "mormon",
+ "mortgage",
+ "moscow",
+ "moto",
+ "motorcycles",
+ "mov",
+ "movie",
+ "mp",
+ "mq",
+ "mr",
+ "ms",
+ "msd",
+ "mt",
+ "mtn",
+ "mtr",
+ "mu",
+ "museum",
+ "music",
+ "mutual",
+ "mv",
+ "mw",
+ "mx",
+ "my",
+ "mz",
+ "na",
+ "nab",
+ "nagoya",
+ "name",
+ "natura",
+ "navy",
+ "nba",
+ "nc",
+ "ne",
+ "nec",
+ "net",
+ "netbank",
+ "netflix",
+ "network",
+ "neustar",
+ "new",
+ "news",
+ "next",
+ "nextdirect",
+ "nexus",
+ "nf",
+ "nfl",
+ "ng",
+ "ngo",
+ "nhk",
+ "ni",
+ "nico",
+ "nike",
+ "nikon",
+ "ninja",
+ "nissan",
+ "nissay",
+ "nl",
+ "no",
+ "nokia",
+ "northwesternmutual",
+ "norton",
+ "now",
+ "nowruz",
+ "nowtv",
+ "np",
+ "nr",
+ "nra",
+ "nrw",
+ "ntt",
+ "nu",
+ "nyc",
+ "nz",
+ "obi",
+ "observer",
+ "off",
+ "office",
+ "okinawa",
+ "olayan",
+ "olayangroup",
+ "oldnavy",
+ "ollo",
+ "om",
+ "omega",
+ "one",
+ "ong",
+ "onl",
+ "online",
+ "ooo",
+ "open",
+ "oracle",
+ "orange",
+ "org",
+ "organic",
+ "origins",
+ "osaka",
+ "otsuka",
+ "ott",
+ "ovh",
+ "pa",
+ "page",
+ "panasonic",
+ "paris",
+ "pars",
+ "partners",
+ "parts",
+ "passagens",
+ "pay",
+ "pccw",
+ "pe",
+ "pet",
+ "pf",
+ "pfizer",
+ "pg",
+ "ph",
+ "pharmacy",
+ "phd",
+ "philips",
+ "phone",
+ "photo",
+ "photography",
+ "photos",
+ "physio",
+ "pics",
+ "pictet",
+ "pictures",
+ "pid",
+ "pin",
+ "ping",
+ "pink",
+ "pioneer",
+ "pizza",
+ "pk",
+ "pl",
+ "place",
+ "play",
+ "playstation",
+ "plumbing",
+ "plus",
+ "pm",
+ "pn",
+ "pnc",
+ "pohl",
+ "poker",
+ "politie",
+ "porn",
+ "post",
+ "pr",
+ "pramerica",
+ "praxi",
+ "press",
+ "prime",
+ "pro",
+ "prod",
+ "productions",
+ "prof",
+ "progressive",
+ "promo",
+ "properties",
+ "property",
+ "protection",
+ "pru",
+ "prudential",
+ "ps",
+ "pt",
+ "pub",
+ "pw",
+ "pwc",
+ "py",
+ "qa",
+ "qpon",
+ "quebec",
+ "quest",
+ "racing",
+ "radio",
+ "raid",
+ "re",
+ "read",
+ "realestate",
+ "realtor",
+ "realty",
+ "recipes",
+ "red",
+ "redstone",
+ "redumbrella",
+ "rehab",
+ "reise",
+ "reisen",
+ "reit",
+ "reliance",
+ "ren",
+ "rent",
+ "rentals",
+ "repair",
+ "report",
+ "republican",
+ "rest",
+ "restaurant",
+ "review",
+ "reviews",
+ "rexroth",
+ "rich",
+ "richardli",
+ "ricoh",
+ "ril",
+ "rio",
+ "rip",
+ "ro",
+ "rocher",
+ "rocks",
+ "rodeo",
+ "rogers",
+ "room",
+ "rs",
+ "rsvp",
+ "ru",
+ "rugby",
+ "ruhr",
+ "run",
+ "rw",
+ "rwe",
+ "ryukyu",
+ "sa",
+ "saarland",
+ "safe",
+ "safety",
+ "sakura",
+ "sale",
+ "salon",
+ "samsclub",
+ "samsung",
+ "sandvik",
+ "sandvikcoromant",
+ "sanofi",
+ "sap",
+ "sarl",
+ "sas",
+ "save",
+ "saxo",
+ "sb",
+ "sbi",
+ "sbs",
+ "sc",
+ "sca",
+ "scb",
+ "schaeffler",
+ "schmidt",
+ "scholarships",
+ "school",
+ "schule",
+ "schwarz",
+ "science",
+ "scjohnson",
+ "scot",
+ "sd",
+ "se",
+ "search",
+ "seat",
+ "secure",
+ "security",
+ "seek",
+ "select",
+ "sener",
+ "services",
+ "ses",
+ "seven",
+ "sew",
+ "sex",
+ "sexy",
+ "sfr",
+ "sg",
+ "sh",
+ "shangrila",
+ "sharp",
+ "shaw",
+ "shell",
+ "shia",
+ "shiksha",
+ "shoes",
+ "shop",
+ "shopping",
+ "shouji",
+ "show",
+ "showtime",
+ "si",
+ "silk",
+ "sina",
+ "singles",
+ "site",
+ "sj",
+ "sk",
+ "ski",
+ "skin",
+ "sky",
+ "skype",
+ "sl",
+ "sling",
+ "sm",
+ "smart",
+ "smile",
+ "sn",
+ "sncf",
+ "so",
+ "soccer",
+ "social",
+ "softbank",
+ "software",
+ "sohu",
+ "solar",
+ "solutions",
+ "song",
+ "sony",
+ "soy",
+ "spa",
+ "space",
+ "sport",
+ "spot",
+ "sr",
+ "srl",
+ "ss",
+ "st",
+ "stada",
+ "staples",
+ "star",
+ "statebank",
+ "statefarm",
+ "stc",
+ "stcgroup",
+ "stockholm",
+ "storage",
+ "store",
+ "stream",
+ "studio",
+ "study",
+ "style",
+ "su",
+ "sucks",
+ "supplies",
+ "supply",
+ "support",
+ "surf",
+ "surgery",
+ "suzuki",
+ "sv",
+ "swatch",
+ "swiss",
+ "sx",
+ "sy",
+ "sydney",
+ "systems",
+ "sz",
+ "tab",
+ "taipei",
+ "talk",
+ "taobao",
+ "target",
+ "tatamotors",
+ "tatar",
+ "tattoo",
+ "tax",
+ "taxi",
+ "tc",
+ "tci",
+ "td",
+ "tdk",
+ "team",
+ "tech",
+ "technology",
+ "tel",
+ "temasek",
+ "tennis",
+ "teva",
+ "tf",
+ "tg",
+ "th",
+ "thd",
+ "theater",
+ "theatre",
+ "tiaa",
+ "tickets",
+ "tienda",
+ "tiffany",
+ "tips",
+ "tires",
+ "tirol",
+ "tj",
+ "tjmaxx",
+ "tjx",
+ "tk",
+ "tkmaxx",
+ "tl",
+ "tm",
+ "tmall",
+ "tn",
+ "to",
+ "today",
+ "tokyo",
+ "tools",
+ "top",
+ "toray",
+ "toshiba",
+ "total",
+ "tours",
+ "town",
+ "toyota",
+ "toys",
+ "tr",
+ "trade",
+ "trading",
+ "training",
+ "travel",
+ "travelchannel",
+ "travelers",
+ "travelersinsurance",
+ "trust",
+ "trv",
+ "tt",
+ "tube",
+ "tui",
+ "tunes",
+ "tushu",
+ "tv",
+ "tvs",
+ "tw",
+ "tz",
+ "ua",
+ "ubank",
+ "ubs",
+ "ug",
+ "uk",
+ "unicom",
+ "university",
+ "uno",
+ "uol",
+ "ups",
+ "us",
+ "uy",
+ "uz",
+ "va",
+ "vacations",
+ "vana",
+ "vanguard",
+ "vc",
+ "ve",
+ "vegas",
+ "ventures",
+ "verisign",
+ "versicherung",
+ "vet",
+ "vg",
+ "vi",
+ "viajes",
+ "video",
+ "vig",
+ "viking",
+ "villas",
+ "vin",
+ "vip",
+ "virgin",
+ "visa",
+ "vision",
+ "viva",
+ "vivo",
+ "vlaanderen",
+ "vn",
+ "vodka",
+ "volkswagen",
+ "volvo",
+ "vote",
+ "voting",
+ "voto",
+ "voyage",
+ "vu",
+ "vuelos",
+ "wales",
+ "walmart",
+ "walter",
+ "wang",
+ "wanggou",
+ "watch",
+ "watches",
+ "weather",
+ "weatherchannel",
+ "webcam",
+ "weber",
+ "website",
+ "wed",
+ "wedding",
+ "weibo",
+ "weir",
+ "wf",
+ "whoswho",
+ "wien",
+ "wiki",
+ "williamhill",
+ "win",
+ "windows",
+ "wine",
+ "winners",
+ "wme",
+ "wolterskluwer",
+ "woodside",
+ "work",
+ "works",
+ "world",
+ "wow",
+ "ws",
+ "wtc",
+ "wtf",
+ "xbox",
+ "xerox",
+ "xfinity",
+ "xihuan",
+ "xin",
+ "xn--11b4c3d",
+ "xn--1ck2e1b",
+ "xn--1qqw23a",
+ "xn--2scrj9c",
+ "xn--30rr7y",
+ "xn--3bst00m",
+ "xn--3ds443g",
+ "xn--3e0b707e",
+ "xn--3hcrj9c",
+ "xn--3pxu8k",
+ "xn--42c2d9a",
+ "xn--45br5cyl",
+ "xn--45brj9c",
+ "xn--45q11c",
+ "xn--4dbrk0ce",
+ "xn--4gbrim",
+ "xn--54b7fta0cc",
+ "xn--55qw42g",
+ "xn--55qx5d",
+ "xn--5su34j936bgsg",
+ "xn--5tzm5g",
+ "xn--6frz82g",
+ "xn--6qq986b3xl",
+ "xn--80adxhks",
+ "xn--80ao21a",
+ "xn--80aqecdr1a",
+ "xn--80asehdb",
+ "xn--80aswg",
+ "xn--8y0a063a",
+ "xn--90a3ac",
+ "xn--90ae",
+ "xn--90ais",
+ "xn--9dbq2a",
+ "xn--9et52u",
+ "xn--9krt00a",
+ "xn--b4w605ferd",
+ "xn--bck1b9a5dre4c",
+ "xn--c1avg",
+ "xn--c2br7g",
+ "xn--cck2b3b",
+ "xn--cckwcxetd",
+ "xn--cg4bki",
+ "xn--clchc0ea0b2g2a9gcd",
+ "xn--czr694b",
+ "xn--czrs0t",
+ "xn--czru2d",
+ "xn--d1acj3b",
+ "xn--d1alf",
+ "xn--e1a4c",
+ "xn--eckvdtc9d",
+ "xn--efvy88h",
+ "xn--fct429k",
+ "xn--fhbei",
+ "xn--fiq228c5hs",
+ "xn--fiq64b",
+ "xn--fiqs8s",
+ "xn--fiqz9s",
+ "xn--fjq720a",
+ "xn--flw351e",
+ "xn--fpcrj9c3d",
+ "xn--fzc2c9e2c",
+ "xn--fzys8d69uvgm",
+ "xn--g2xx48c",
+ "xn--gckr3f0f",
+ "xn--gecrj9c",
+ "xn--gk3at1e",
+ "xn--h2breg3eve",
+ "xn--h2brj9c",
+ "xn--h2brj9c8c",
+ "xn--hxt814e",
+ "xn--i1b6b1a6a2e",
+ "xn--imr513n",
+ "xn--io0a7i",
+ "xn--j1aef",
+ "xn--j1amh",
+ "xn--j6w193g",
+ "xn--jlq480n2rg",
+ "xn--jlq61u9w7b",
+ "xn--jvr189m",
+ "xn--kcrx77d1x4a",
+ "xn--kprw13d",
+ "xn--kpry57d",
+ "xn--kput3i",
+ "xn--l1acc",
+ "xn--lgbbat1ad8j",
+ "xn--mgb9awbf",
+ "xn--mgba3a3ejt",
+ "xn--mgba3a4f16a",
+ "xn--mgba7c0bbn0a",
+ "xn--mgbaakc7dvf",
+ "xn--mgbaam7a8h",
+ "xn--mgbab2bd",
+ "xn--mgbah1a3hjkrd",
+ "xn--mgbai9azgqp6j",
+ "xn--mgbayh7gpa",
+ "xn--mgbbh1a",
+ "xn--mgbbh1a71e",
+ "xn--mgbc0a9azcg",
+ "xn--mgbca7dzdo",
+ "xn--mgbcpq6gpa1a",
+ "xn--mgberp4a5d4ar",
+ "xn--mgbgu82a",
+ "xn--mgbi4ecexp",
+ "xn--mgbpl2fh",
+ "xn--mgbt3dhd",
+ "xn--mgbtx2b",
+ "xn--mgbx4cd0ab",
+ "xn--mix891f",
+ "xn--mk1bu44c",
+ "xn--mxtq1m",
+ "xn--ngbc5azd",
+ "xn--ngbe9e0a",
+ "xn--ngbrx",
+ "xn--node",
+ "xn--nqv7f",
+ "xn--nqv7fs00ema",
+ "xn--nyqy26a",
+ "xn--o3cw4h",
+ "xn--ogbpf8fl",
+ "xn--otu796d",
+ "xn--p1acf",
+ "xn--p1ai",
+ "xn--pgbs0dh",
+ "xn--pssy2u",
+ "xn--q7ce6a",
+ "xn--q9jyb4c",
+ "xn--qcka1pmc",
+ "xn--qxa6a",
+ "xn--qxam",
+ "xn--rhqv96g",
+ "xn--rovu88b",
+ "xn--rvc1e0am3e",
+ "xn--s9brj9c",
+ "xn--ses554g",
+ "xn--t60b56a",
+ "xn--tckwe",
+ "xn--tiq49xqyj",
+ "xn--unup4y",
+ "xn--vermgensberater-ctb",
+ "xn--vermgensberatung-pwb",
+ "xn--vhquv",
+ "xn--vuq861b",
+ "xn--w4r85el8fhu5dnra",
+ "xn--w4rs40l",
+ "xn--wgbh1c",
+ "xn--wgbl6a",
+ "xn--xhq521b",
+ "xn--xkc2al3hye2a",
+ "xn--xkc2dl3a5ee0h",
+ "xn--y9a3aq",
+ "xn--yfro4i67o",
+ "xn--ygbi2ammx",
+ "xn--zfr164b",
+ "xxx",
+ "xyz",
+ "yachts",
+ "yahoo",
+ "yamaxun",
+ "yandex",
+ "ye",
+ "yodobashi",
+ "yoga",
+ "yokohama",
+ "you",
+ "youtube",
+ "yt",
+ "yun",
+ "za",
+ "zappos",
+ "zara",
+ "zero",
+ "zip",
+ "zm",
+ "zone",
+ "zuerich",
+ "zw",
+ "skiptocontent",
+ "pullrequests",
+ "issues",
+ "marketplace",
+ "explore",
+ "@andnasnd",
+ "shouldbee/",
+ "reserved-usernames",
+ "public",
+ "code",
+ "issues4",
+ "actions",
+ "projects",
+ "insights",
+ "about",
+ "access",
+ "account",
+ "accounts",
+ "activate",
+ "activities",
+ "activity",
+ "add",
+ "address",
+ "adm",
+ "admin",
+ "administration",
+ "administrator",
+ "advertising",
+ "affiliate",
+ "affiliates",
+ "ajax",
+ "all",
+ "alpha",
+ "analysis",
+ "anon",
+ "anonymous",
+ "api",
+ "apps",
+ "archive",
+ "archives",
+ "article",
+ "asct",
+ "asset",
+ "atom",
+ "auth",
+ "authentication",
+ "avatar",
+ "backup",
+ "balancer-manager",
+ "banner",
+ "banners",
+ "beta",
+ "billing",
+ "bin",
+ "blogs",
+ "board",
+ "bookmark",
+ "bots",
+ "bug",
+ "cache",
+ "cadastro",
+ "calendar",
+ "campaign",
+ "cancel",
+ "captcha",
+ "cart",
+ "categories",
+ "category",
+ "cgi",
+ "cgi-bin",
+ "changelog",
+ "check",
+ "checking",
+ "checkout",
+ "client",
+ "cliente",
+ "clients",
+ "codereview",
+ "comercial",
+ "comment",
+ "comments",
+ "communities",
+ "compras",
+ "config",
+ "configuration",
+ "connect",
+ "contact-us",
+ "contact_us",
+ "contactus",
+ "contest",
+ "contribute",
+ "corp",
+ "create",
+ "css",
+ "dashboard",
+ "db",
+ "default",
+ "delete",
+ "demo",
+ "designer",
+ "destroy",
+ "devel",
+ "developer",
+ "developers",
+ "diagram",
+ "diary",
+ "dict",
+ "dictionary",
+ "die",
+ "dir",
+ "direct_messages",
+ "dist",
+ "doc",
+ "documentation",
+ "domain",
+ "downloads",
+ "ecommerce",
+ "edit",
+ "editor",
+ "employment",
+ "empty",
+ "end",
+ "enterprise",
+ "entries",
+ "entry",
+ "error",
+ "errors",
+ "eval",
+ "event",
+ "everyone",
+ "exit",
+ "facebook",
+ "faq",
+ "favorite",
+ "favorites",
+ "feature",
+ "features",
+ "feed",
+ "feeds",
+ "file",
+ "files",
+ "first",
+ "flash",
+ "fleet",
+ "fleets",
+ "flog",
+ "follow",
+ "followers",
+ "following",
+ "forgot",
+ "form",
+ "forums",
+ "founder",
+ "friend",
+ "friends",
+ "ftp",
+ "gadget",
+ "gadgets",
+ "get",
+ "ghost",
+ "gist",
+ "github",
+ "graph",
+ "groups",
+ "guest",
+ "guests",
+ "home",
+ "homepage",
+ "hostmaster",
+ "hostname",
+ "howto",
+ "hpg",
+ "html",
+ "http",
+ "httpd",
+ "https",
+ "i",
+ "iamges",
+ "icon",
+ "icons",
+ "idea",
+ "ideas",
+ "image",
+ "images",
+ "imap",
+ "img",
+ "index",
+ "indice",
+ "information",
+ "inquiry",
+ "instagram",
+ "intranet",
+ "invitations",
+ "invite",
+ "ipad",
+ "iphone",
+ "irc",
+ "issue",
+ "item",
+ "items",
+ "javascript",
+ "job",
+ "join",
+ "js",
+ "json",
+ "jump",
+ "knowledgebase",
+ "language",
+ "languages",
+ "last",
+ "ldap-status",
+ "license",
+ "links",
+ "linux",
+ "list",
+ "lists",
+ "log",
+ "log-in",
+ "log-out",
+ "log_in",
+ "log_out",
+ "login",
+ "logout",
+ "logs",
+ "m",
+ "mac",
+ "mail",
+ "mail1",
+ "mail2",
+ "mail3",
+ "mail4",
+ "mail5",
+ "mailer",
+ "mailing",
+ "maintenance",
+ "manager",
+ "manual",
+ "maps",
+ "master",
+ "member",
+ "members",
+ "message",
+ "messages",
+ "messenger",
+ "microblog",
+ "microblogs",
+ "mine",
+ "mis",
+ "mob",
+ "movies",
+ "mp3",
+ "msg",
+ "msn",
+ "musicas",
+ "mysql",
+ "named",
+ "nan",
+ "navi",
+ "navigation",
+ "newsletter",
+ "nick",
+ "nickname",
+ "notes",
+ "noticias",
+ "notification",
+ "notifications",
+ "notify",
+ "ns",
+ "ns1",
+ "ns10",
+ "ns2",
+ "ns3",
+ "ns4",
+ "ns5",
+ "ns6",
+ "ns7",
+ "ns8",
+ "ns9",
+ "null",
+ "oauth",
+ "oauth_clients",
+ "offer",
+ "offers",
+ "official",
+ "old",
+ "openid",
+ "operator",
+ "order",
+ "orders",
+ "organization",
+ "organizations",
+ "overview",
+ "owner",
+ "owners",
+ "pager",
+ "pages",
+ "panel",
+ "password",
+ "payment",
+ "perl",
+ "photoalbum",
+ "php",
+ "phpmyadmin",
+ "phppgadmin",
+ "phpredisadmin",
+ "pic",
+ "plan",
+ "plans",
+ "plugin",
+ "plugins",
+ "policy",
+ "pop",
+ "pop3",
+ "popular",
+ "portal",
+ "postfix",
+ "postmaster",
+ "posts",
+ "premium",
+ "price",
+ "pricing",
+ "privacy",
+ "privacy-policy",
+ "privacy_policy",
+ "privacypolicy",
+ "private",
+ "product",
+ "products",
+ "profile",
+ "project",
+ "purpose",
+ "put",
+ "python",
+ "query",
+ "random",
+ "ranking",
+ "readme",
+ "recent",
+ "recruit",
+ "recruitment",
+ "register",
+ "registration",
+ "release",
+ "remove",
+ "replies",
+ "reports",
+ "repositories",
+ "repository",
+ "req",
+ "request",
+ "requests",
+ "reset",
+ "roc",
+ "root",
+ "rss",
+ "ruby",
+ "rule",
+ "sag",
+ "sales",
+ "sample",
+ "samples",
+ "script",
+ "scripts",
+ "self",
+ "send",
+ "server",
+ "server-info",
+ "server-status",
+ "service",
+ "session",
+ "sessions",
+ "setting",
+ "settings",
+ "setup",
+ "share",
+ "sign-in",
+ "sign-up",
+ "sign_in",
+ "sign_up",
+ "signin",
+ "signout",
+ "signup",
+ "sitemap",
+ "sites",
+ "smartphone",
+ "smtp",
+ "soporte",
+ "source",
+ "spec",
+ "special",
+ "sql",
+ "src",
+ "ssh",
+ "ssl",
+ "ssladmin",
+ "ssladministrator",
+ "sslwebmaster",
+ "staff",
+ "stage",
+ "staging",
+ "start",
+ "stat",
+ "state",
+ "static",
+ "stats",
+ "status",
+ "stores",
+ "stories",
+ "styleguide",
+ "stylesheet",
+ "stylesheets",
+ "subdomain",
+ "subscribe",
+ "subscriptions",
+ "suporte",
+ "svn",
+ "swf",
+ "sys",
+ "sysadmin",
+ "sysadministrator",
+ "system",
+ "tablet",
+ "tablets",
+ "tag",
+ "task",
+ "tasks",
+ "teams",
+ "telnet",
+ "term",
+ "terms",
+ "terms-of-service",
+ "terms_of_service",
+ "termsofservice",
+ "test",
+ "test1",
+ "test2",
+ "test3",
+ "teste",
+ "testing",
+ "tests",
+ "theme",
+ "themes",
+ "thread",
+ "threads",
+ "tmp",
+ "todo",
+ "tool",
+ "topic",
+ "topics",
+ "tos",
+ "tour",
+ "translations",
+ "trends",
+ "tutorial",
+ "tux",
+ "twitter",
+ "undef",
+ "unfollow",
+ "unsubscribe",
+ "update",
+ "upload",
+ "uploads",
+ "url",
+ "usage",
+ "user",
+ "username",
+ "users",
+ "usuario",
+ "vendas",
+ "ver",
+ "version",
+ "videos",
+ "visitor",
+ "web",
+ "webhook",
+ "webhooks",
+ "webmail",
+ "webmaster",
+ "websites",
+ "welcome",
+ "widget",
+ "widgets",
+ "word",
+ "workshop",
+ "ww",
+ "wws",
+ "www",
+ "www1",
+ "www2",
+ "www3",
+ "www4",
+ "www5",
+ "www6",
+ "www7",
+ "wwws",
+ "wwww",
+ "xfn",
+ "xml",
+ "xmpp",
+ "xpg",
+ "yaml",
+ "year",
+ "yml",
+ "yourdomain",
+ "yourname",
+ "yoursite",
+ "yourusername",
+ "genesis"
+]
diff --git a/services/blob/src/config.rs b/services/blob/src/config.rs
index bdb166d26..211c96384 100644
--- a/services/blob/src/config.rs
+++ b/services/blob/src/config.rs
@@ -1,68 +1,89 @@
use anyhow::Result;
use clap::{ArgAction, Parser};
use once_cell::sync::Lazy;
+use std::collections::HashSet;
use tracing::info;
use crate::constants::{
DEFAULT_HTTP_PORT, DEFAULT_S3_BUCKET_NAME, S3_BUCKET_ENV_VAR,
};
#[derive(Parser)]
#[command(version, about, long_about = None)]
pub struct AppConfig {
/// HTTP server listening port
#[arg(long, default_value_t = DEFAULT_HTTP_PORT, global = true)]
pub http_port: u16,
/// AWS Localstack service URL
#[arg(env = "LOCALSTACK_ENDPOINT")]
#[arg(long)]
pub localstack_endpoint: Option<String>,
#[arg(env = S3_BUCKET_ENV_VAR)]
#[arg(long, default_value_t = DEFAULT_S3_BUCKET_NAME.to_string())]
pub s3_bucket_name: String,
/// Identity service endpoint
#[arg(env = "IDENTITY_SERVICE_ENDPOINT")]
#[arg(long, default_value = "http://localhost:50054")]
pub identity_endpoint: String,
/// If set, blobs will be deleted instantly after revoking last holder
#[arg(long, global = true, action = ArgAction::SetTrue)]
pub instant_delete: bool,
#[clap(subcommand)]
pub command: Option<Command>,
}
#[derive(clap::Subcommand)]
pub enum Command {
Server,
Cleanup,
}
/// Stores configuration parsed from command-line arguments
/// and environment variables
pub static CONFIG: Lazy<AppConfig> = Lazy::new(AppConfig::parse);
/// Processes the command-line arguments and environment variables.
/// Should be called at the beginning of the `main()` function.
pub(super) fn parse_cmdline_args() -> Result<&'static AppConfig> {
// force evaluation of the lazy initialized config
let cfg = Lazy::force(&CONFIG);
if cfg.s3_bucket_name != DEFAULT_S3_BUCKET_NAME {
info!("Using custom S3 bucket: {}", &cfg.s3_bucket_name);
}
Ok(cfg)
}
/// Provides region/credentials configuration for AWS SDKs
pub async fn load_aws_config() -> aws_config::SdkConfig {
let mut config_builder = aws_config::from_env();
if let Some(endpoint) = &CONFIG.localstack_endpoint {
info!("Using Localstack. AWS endpoint URL: {}", endpoint);
config_builder = config_builder.endpoint_url(endpoint);
}
config_builder.load().await
}
+
+fn get_all_reserved_invite_links() -> HashSet<String> {
+ // All entries in `reserved_usernames.json` must be lowercase and must also be
+ // included in `lib/utils/reserved-users.js`!!
+ let contents = include_str!("../reserved_usernames.json");
+ let reserved_usernames: Vec<String> = serde_json::from_str(contents).unwrap();
+
+ reserved_usernames.into_iter().collect()
+}
+pub static RESERVED_INVITE_LINKS: Lazy<HashSet<String>> =
+ Lazy::new(get_all_reserved_invite_links);
+
+fn get_all_offensive_invite_links() -> HashSet<String> {
+ let contents = include_str!("../third-party/bad-words/words.json");
+ let reserved_usernames: Vec<String> = serde_json::from_str(contents).unwrap();
+
+ reserved_usernames.into_iter().collect()
+}
+pub static OFFENSIVE_INVITE_LINKS: Lazy<HashSet<String>> =
+ Lazy::new(get_all_offensive_invite_links);
diff --git a/services/blob/src/constants.rs b/services/blob/src/constants.rs
index 5c9fdb76f..fdb2a298c 100644
--- a/services/blob/src/constants.rs
+++ b/services/blob/src/constants.rs
@@ -1,41 +1,43 @@
// Assorted constants
pub const DEFAULT_HTTP_PORT: u16 = 50053;
pub const MPSC_CHANNEL_BUFFER_CAPACITY: usize = 1;
// HTTP constants
pub const BLOB_DOWNLOAD_CHUNK_SIZE: u64 = 5 * 1024 * 1024;
// DynamoDB constants
pub mod db {
/// Reserved holder value that indicates the row is a blob item
pub const BLOB_ITEM_ROW_HOLDER_VALUE: &str = "_";
pub const BLOB_TABLE_NAME: &str = "blob-service-blobs";
pub const BLOB_PARTITION_KEY: &str = ATTR_BLOB_HASH;
pub const BLOB_SORT_KEY: &str = ATTR_HOLDER;
pub const UNCHECKED_INDEX_NAME: &str = "unchecked-index";
pub const UNCHECKED_INDEX_PARTITION_KEY: &str = ATTR_UNCHECKED;
pub const UNCHECKED_INDEX_SORT_KEY: &str = ATTR_LAST_MODIFIED;
/// attribute names
pub const ATTR_BLOB_HASH: &str = "blob_hash";
pub const ATTR_HOLDER: &str = "holder";
pub const ATTR_CREATED_AT: &str = "created_at";
pub const ATTR_LAST_MODIFIED: &str = "last_modified";
pub const ATTR_S3_PATH: &str = "s3_path";
pub const ATTR_UNCHECKED: &str = "unchecked";
}
// Environment variables
pub const LOG_LEVEL_ENV_VAR: &str =
tracing_subscriber::filter::EnvFilter::DEFAULT_ENV;
// S3 constants
pub const S3_BUCKET_ENV_VAR: &str = "BLOB_S3_BUCKET_NAME";
pub const DEFAULT_S3_BUCKET_NAME: &str = "commapp-blob";
pub const S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE: u64 = 5 * 1024 * 1024;
+
+pub const INVITE_LINK_BLOB_HASH_PREFIX: &str = "invite_";
diff --git a/services/blob/src/http/errors.rs b/services/blob/src/http/errors.rs
index 3c0cb5724..ae174f9db 100644
--- a/services/blob/src/http/errors.rs
+++ b/services/blob/src/http/errors.rs
@@ -1,73 +1,77 @@
use actix_web::error::{
ErrorBadRequest, ErrorConflict, ErrorInternalServerError, ErrorNotFound,
ErrorServiceUnavailable,
};
use actix_web::{Error as HttpError, HttpResponse, ResponseError};
use aws_sdk_dynamodb::Error as DynamoDBError;
use http::StatusCode;
use tracing::{debug, error, trace, warn};
use crate::database::errors::{BlobDBError, Error as DBError};
use crate::s3::Error as S3Error;
use crate::service::BlobServiceError;
pub(super) fn handle_blob_service_error(err: &BlobServiceError) -> HttpError {
trace!("Handling blob service error: {:?}", err);
match err {
BlobServiceError::BlobNotFound => ErrorNotFound("not found"),
BlobServiceError::BlobAlreadyExists
| BlobServiceError::DB(DBError::ItemAlreadyExists) => {
ErrorConflict("blob already exists")
}
BlobServiceError::DB(db_err) => match db_err {
DBError::AwsSdk(DynamoDBError::InternalServerError(_))
| DBError::AwsSdk(
DynamoDBError::ProvisionedThroughputExceededException(_),
)
| DBError::AwsSdk(DynamoDBError::RequestLimitExceeded(_)) => {
warn!("AWS transient error occurred");
ErrorServiceUnavailable("please retry")
}
DBError::Blob(BlobDBError::InvalidInput(_)) => {
ErrorBadRequest("bad request")
}
unexpected => {
error!("Received an unexpected DB error: {0:?} - {0}", unexpected);
ErrorInternalServerError("server error")
}
},
BlobServiceError::S3(s3_err) => match s3_err {
S3Error::AwsSdk(aws_sdk_s3::Error::NotFound(_))
| S3Error::AwsSdk(aws_sdk_s3::Error::NoSuchKey(_)) => {
error!("Data inconsistency! Blob is present in database but not present in S3!");
ErrorInternalServerError("server error")
}
S3Error::EmptyUpload => ErrorBadRequest("empty upload"),
unexpected => {
error!("Received an unexpected S3 error: {0:?} - {0}", unexpected);
ErrorInternalServerError("server error")
}
},
BlobServiceError::InputError(err) => {
debug!("Received request input error: {0:?} - {0}", err);
ErrorBadRequest("bad request")
}
+ BlobServiceError::InviteLinkError(invite_link_error) => {
+ debug!("Received invite link error: {0}", invite_link_error);
+ ErrorBadRequest("bad request")
+ }
err => {
error!("Received an unexpected error: {0:?} - {0}", err);
ErrorInternalServerError("server error")
}
}
}
/// This allow us to `await?` blob service calls in HTTP handlers
impl ResponseError for BlobServiceError {
fn error_response(&self) -> HttpResponse {
handle_blob_service_error(self).error_response()
}
fn status_code(&self) -> StatusCode {
handle_blob_service_error(self)
.as_response_error()
.status_code()
}
}
diff --git a/services/blob/src/service.rs b/services/blob/src/service.rs
index 07d8a0c0e..cbfa5e5a6 100644
--- a/services/blob/src/service.rs
+++ b/services/blob/src/service.rs
@@ -1,588 +1,628 @@
#![allow(unused)]
+use regex::RegexSet;
use std::collections::{BTreeMap, HashSet};
use std::ops::{Bound, Range, RangeBounds, RangeInclusive};
use std::sync::Arc;
use async_stream::try_stream;
use chrono::Duration;
use comm_lib::http::ByteStream;
use comm_lib::tools::BoxedError;
+use once_cell::sync::Lazy;
use tokio_stream::StreamExt;
use tonic::codegen::futures_core::Stream;
use tracing::{debug, error, info, trace, warn};
-use crate::config::CONFIG;
-use crate::constants::S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE;
+use crate::config::{CONFIG, OFFENSIVE_INVITE_LINKS, RESERVED_INVITE_LINKS};
+use crate::constants::{
+ INVITE_LINK_BLOB_HASH_PREFIX, S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE,
+};
use crate::database::types::{
BlobItemInput, BlobItemRow, PrimaryKey, UncheckedKind,
};
use crate::database::DBError;
use crate::s3::{Error as S3Error, S3Client, S3Path};
use crate::tools::MemOps;
use crate::{constants::BLOB_DOWNLOAD_CHUNK_SIZE, database::DatabaseClient};
+#[derive(
+ Debug, derive_more::Display, derive_more::From, derive_more::Error,
+)]
+pub enum InviteLinkError {
+ Reserved,
+ Offensive,
+}
+
#[derive(
Debug, derive_more::Display, derive_more::From, derive_more::Error,
)]
pub enum BlobServiceError {
BlobNotFound,
BlobAlreadyExists,
InvalidState,
DB(DBError),
S3(S3Error),
InputError(#[error(ignore)] BoxedError),
+ InviteLinkError(InviteLinkError),
}
type BlobServiceResult<T> = Result<T, BlobServiceError>;
#[derive(Clone, Debug)]
pub struct BlobServiceConfig {
/// Blob data is streamed from S3 in chunks of this size.
pub download_chunk_size: usize,
/// If enabled, orphaned blobs will be deleted immediately after
/// last holder is removed. This option should be enabled
/// if maintenance garbage collection tasks are not run.
pub instant_delete_orphaned_blobs: bool,
/// Minimum age that a orphan must stay unmodified
/// before it can be deleted by a garbage collection task
/// This option is ignored if `instant_delete_orphaned_blobs` is `true`
pub orphan_protection_period: chrono::Duration,
}
+static OFFENSIVE_INVITE_LINKS_REGEX_SET: Lazy<RegexSet> = Lazy::new(|| {
+ RegexSet::new(OFFENSIVE_INVITE_LINKS.iter().collect::<Vec<_>>()).unwrap()
+});
+
impl Default for BlobServiceConfig {
fn default() -> Self {
BlobServiceConfig {
download_chunk_size: BLOB_DOWNLOAD_CHUNK_SIZE as usize,
instant_delete_orphaned_blobs: false,
orphan_protection_period: Duration::hours(1),
}
}
}
#[derive(Clone)]
pub struct BlobService {
db: Arc<DatabaseClient>,
s3: S3Client,
config: BlobServiceConfig,
}
impl BlobService {
pub fn new(
db: DatabaseClient,
s3: S3Client,
config: BlobServiceConfig,
) -> Self {
Self {
db: Arc::new(db),
s3,
config,
}
}
/// Retrieves blob object metadata and returns a download object
/// that can be used to download the blob data.
pub async fn create_download(
&self,
blob_hash: impl Into<String>,
) -> BlobServiceResult<BlobDownloadObject> {
// 1. Get S3 path
let s3_path = match self.db.get_blob_item(blob_hash.into()).await {
Ok(Some(BlobItemRow { s3_path, .. })) => Ok(s3_path),
Ok(None) => {
debug!("Blob not found");
Err(BlobServiceError::BlobNotFound)
}
Err(err) => Err(BlobServiceError::DB(err)),
}?;
debug!("S3 path: {:?}", s3_path);
// 2. Get S3 Object metadata
trace!("Getting S3 object metadata...");
let object_metadata = self.s3.get_object_metadata(&s3_path).await?;
let blob_size: u64 =
object_metadata.content_length().try_into().map_err(|err| {
error!("Failed to parse S3 object content length: {:?}", err);
BlobServiceError::InvalidState
})?;
debug!("S3 object size: {} bytes", blob_size);
// 3. Create download session
let session = BlobDownloadObject {
s3_path,
blob_size,
byte_range: 0..blob_size,
chunk_size: self.config.download_chunk_size as u64,
s3_client: self.s3.clone(),
};
Ok(session)
}
+ fn validate_invite_link_blob_hash(
+ invite_secret: &str,
+ ) -> Result<(), BlobServiceError> {
+ let lowercase_secret = invite_secret.to_lowercase();
+ if (RESERVED_INVITE_LINKS.contains(&lowercase_secret)) {
+ debug!("Reserved invite link");
+ return Err(BlobServiceError::InviteLinkError(InviteLinkError::Reserved));
+ }
+ if (OFFENSIVE_INVITE_LINKS_REGEX_SET.is_match(&lowercase_secret)) {
+ debug!("Offensive invite link");
+ return Err(BlobServiceError::InviteLinkError(
+ InviteLinkError::Offensive,
+ ));
+ }
+ Ok(())
+ }
+
pub async fn put_blob(
&self,
blob_hash: impl Into<String>,
mut blob_data_stream: impl ByteStream,
) -> Result<(), BlobServiceError> {
let blob_hash: String = blob_hash.into();
let blob_item = BlobItemInput::new(&blob_hash);
- if self.db.get_blob_item(blob_hash).await?.is_some() {
+ if self.db.get_blob_item(&blob_hash).await?.is_some() {
debug!("Blob already exists");
return Err(BlobServiceError::BlobAlreadyExists);
}
+ if let Some(invite_secret) =
+ blob_hash.strip_prefix(INVITE_LINK_BLOB_HASH_PREFIX)
+ {
+ Self::validate_invite_link_blob_hash(&invite_secret)?;
+ }
+
let mut upload_session =
self.s3.start_upload_session(&blob_item.s3_path).await?;
trace!(?blob_item, "Started S3 upload session");
tokio::pin!(blob_data_stream);
let mut s3_chunk: Vec<u8> = Vec::new();
while let Some(chunk) =
blob_data_stream.try_next().await.map_err(|err| {
warn!("Failed to get data chunk: {:?}", err);
BlobServiceError::InputError(err)
})?
{
s3_chunk.extend_from_slice(&chunk);
// New parts should be added to AWS only if they exceed minimum part size,
// Otherwise AWS returns error
if s3_chunk.len() as u64 > S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE {
trace!(
chunk_size = s3_chunk.len(),
"Chunk size exceeded, adding new S3 part"
);
upload_session
.add_part(s3_chunk.take_out())
.await
.map_err(BlobServiceError::from)?;
}
}
trace!("Upload stream drained");
// add the remaining data as the last S3 part
if !s3_chunk.is_empty() {
trace!("Uploading remaining {} bytes", s3_chunk.len());
upload_session.add_part(s3_chunk).await?;
}
// Complete the upload session
upload_session.finish_upload().await?;
trace!("S3 upload complete, putting item to db");
self.db.put_blob_item(blob_item).await?;
Ok(())
}
pub async fn assign_holder(
&self,
blob_hash: impl Into<String>,
holder: impl Into<String>,
) -> BlobServiceResult<bool> {
let blob_hash: String = blob_hash.into();
trace!(blob_hash, "Attempting to assign holder");
self
.db
.put_holder_assignment(blob_hash.clone(), holder.into())
.await?;
trace!("Holder assigned. Checking if data exists");
let data_exists = self.db.get_blob_item(blob_hash).await?.is_some();
Ok(data_exists)
}
pub async fn revoke_holder(
&self,
blob_hash: impl Into<String>,
holder: impl Into<String>,
instant_delete: bool,
) -> BlobServiceResult<()> {
let blob_hash: String = blob_hash.into();
let holder: String = holder.into();
trace!(blob_hash, holder, "Attempting to revoke holder");
self.db.delete_holder_assignment(&blob_hash, holder).await?;
if instant_delete || self.config.instant_delete_orphaned_blobs {
trace!("Instant orphan deletion enabled. Looking for holders");
let is_orphan = self
.db
.list_blob_holders(&blob_hash, Some(1))
.await?
.is_empty();
if !is_orphan {
trace!("Found holders, nothing to do");
return Ok(());
}
debug!("No holders left, deleting blob if exists");
trace!("Getting blob item");
let Some(blob_item) = self.db.get_blob_item(&blob_hash).await? else {
trace!("Blob item not found, nothing to do");
return Ok(());
};
trace!("Deleting S3 object");
self.s3.delete_object(&blob_item.s3_path).await?;
trace!("Deleting blob item entry from DB");
self.db.delete_blob_item(blob_hash).await?;
}
Ok(())
}
pub async fn perform_cleanup(&self) -> anyhow::Result<()> {
info!("Starting cleanup...");
// 1. Fetch blobs and holders marked as "unchecked"
debug!("Querying for unchecked blobs and holders...");
let protection_periond = self.config.orphan_protection_period;
let (unchecked_blobs, unchecked_holders) = tokio::try_join!(
self
.db
.find_unchecked_items(UncheckedKind::Blob, protection_periond),
self
.db
.find_unchecked_items(UncheckedKind::Holder, protection_periond)
)?;
debug!(
"Found {} unchecked blobs and {} unchecked holders",
unchecked_blobs.len(),
unchecked_holders.len()
);
let mut unchecked_items = UncheckedCollection::new();
// 2. construct structures of possibly orphaned blobs
debug!("Creating structures of possibly orphaned items...");
for PrimaryKey { blob_hash, .. } in unchecked_blobs {
trace!("Creating unchecked item for blob hash '{}'", &blob_hash);
unchecked_items.insert(
blob_hash.clone(),
UncheckedItem {
blob_hash: Some(blob_hash),
holders: Vec::new(),
},
);
}
// 3. iterate over possibly orphaned holders and fill the structs
for PrimaryKey { blob_hash, holder } in unchecked_holders {
if let Some(item) = unchecked_items.get_mut(&blob_hash) {
trace!(
"Inserting holder '{}' for blob hash '{}'",
&holder,
&blob_hash
);
item.holders.push(holder);
} else {
trace!(
"Creating empty item for holder '{}' (blob hash: '{}')",
&holder,
&blob_hash
);
unchecked_items.insert(
blob_hash.clone(),
UncheckedItem {
blob_hash: None,
holders: vec![holder],
},
);
}
}
let mut orphans = HashSet::new();
let mut checked = HashSet::new();
// 4. Filter out items that are for sure not orphaned
let checked_items = unchecked_items.filter_out_checked();
debug!("Filtered out {} checked items", checked_items.len());
checked.extend(checked_items);
// 5. Query DDB for additional blobs and holders to check if they exist
let mut fetch_results = Vec::new();
// 5a. Query holders - Find if possibly orphan blobs have at least one holder
debug!("Querying holders for possibly orphaned blobs...");
for blob_hash in unchecked_items.blobs_to_find_holders() {
let holders = self
.db
.list_blob_holders(blob_hash, Some(1))
.await?
.into_iter()
.map(|holder| PrimaryKey::new(blob_hash.to_string(), holder));
let len_before = fetch_results.len();
fetch_results.extend(holders);
trace!(
"Found {} holders for blob hash '{}'",
fetch_results.len() - len_before,
blob_hash
);
}
// 5b. Query blobs - Find if possibly orphaned holders have blobs
debug!("Querying blobs for possibly orphaned holders...");
let blobs_to_get = unchecked_items.blobs_to_check_existence();
let queried_blobs_len = blobs_to_get.len();
let existing_blobs = self.db.list_existing_keys(blobs_to_get).await?;
debug!(
"Found {} existing blobs out of {} queried",
existing_blobs.len(),
queried_blobs_len
);
fetch_results.extend(existing_blobs);
// 6. Update the struct with query results
// Then do 2nd pass of filtering out checked items (repeat step 4)
debug!("Feeding data structure with query results and filtering again...");
unchecked_items.feed_with_query_results(fetch_results);
let checked_items = unchecked_items.filter_out_checked();
debug!("Filtered out {} checked items", checked_items.len());
checked.extend(checked_items);
// 7. Perform actual cleanup
orphans.extend(unchecked_items.into_primary_keys());
let s3_paths: Vec<S3Path> = orphans
.iter()
.filter(|pk| pk.is_blob_item())
.map(|PrimaryKey { blob_hash, .. }| S3Path {
bucket_name: CONFIG.s3_bucket_name.clone(),
object_name: blob_hash.to_string(),
})
.collect();
let num_orphans = orphans.len();
let num_checked = checked.len();
let num_s3_blobs = s3_paths.len();
// 7a. Make changes to database
debug!("Cleaning up database... Marking {} items as checked and deleting {} orphans", num_checked, num_orphans);
tokio::try_join!(
self.db.batch_delete_rows(orphans),
self.db.batch_mark_checked(checked)
)?;
// 7b. Delete orphaned blobs from S3
debug!("Cleaning up S3... Deleting {} blobs", num_s3_blobs);
self.s3.batch_delete_objects(s3_paths).await?;
info!(
"Cleanup complete. Deleted orphaned {} DB items and marked {} items as checked. {} blobs were deleted from S3",
num_orphans, num_checked, num_s3_blobs
);
Ok(())
}
}
// A B-tree map performs well for both random and sequential access.
type BlobHash = String;
type UncheckedCollection = BTreeMap<BlobHash, UncheckedItem>;
/// Represents an "unchecked" blob entity. It might miss either
/// blob hash or holders.
#[derive(Debug)]
struct UncheckedItem {
blob_hash: Option<BlobHash>,
holders: Vec<String>,
}
impl UncheckedItem {
fn has_blob_hash(&self) -> bool {
self.blob_hash.is_some()
}
fn has_holders(&self) -> bool {
!self.holders.is_empty()
}
/// Returns primary keys for this item. It contains primary heys for holders
/// and for blob item (if it has hash).
/// A fallback hash is required for holders if item's blob hash is None.
fn as_primary_keys(&self, fallback_blob_hash: &str) -> Vec<PrimaryKey> {
if !self.has_holders() && !self.has_blob_hash() {
warn!(
fallback_blob_hash,
"Item has no hash and no holders, this should never happen!"
);
return Vec::new();
}
let hash_for_holders =
self.blob_hash.as_deref().unwrap_or(fallback_blob_hash);
let mut keys = self
.holders
.iter()
.map(|holder| PrimaryKey {
blob_hash: hash_for_holders.to_string(),
holder: holder.to_string(),
})
.collect::<Vec<_>>();
if let Some(blob_hash) = &self.blob_hash {
keys.push(PrimaryKey::for_blob_item(blob_hash.to_string()));
}
keys
}
}
trait CleanupOperations {
/// Retains only items that should remain unchecked
/// (missing blob hash or holders).
///
/// Returns removed items - these items are checked
/// (contain both blob hash and at least one holder).
fn filter_out_checked(&mut self) -> Vec<PrimaryKey>;
/// Returns list of blob hashes for which we need to query if they contain
/// at least one holder
fn blobs_to_find_holders(&self) -> Vec<&BlobHash>;
/// Returns primary keys for blob items that need to be checked if they exist
///
/// Technically, this returns all items that have holders but no hash.
fn blobs_to_check_existence(&self) -> Vec<PrimaryKey>;
/// Updates the structure after fetching additional data from database.
fn feed_with_query_results(
&mut self,
fetched_items: impl IntoIterator<Item = PrimaryKey>,
);
/// Turns this collection into a list of DB primary keys
fn into_primary_keys(self) -> Vec<PrimaryKey>;
}
impl CleanupOperations for UncheckedCollection {
/// Retains only items that should remain unchecked
/// (missing blob hash or holders).
///
/// Returns removed items - these items are checked
/// (contain both blob hash and at least one holder).
fn filter_out_checked(&mut self) -> Vec<PrimaryKey> {
let mut checked = Vec::new();
self.retain(|blob_hash, item| {
if !item.has_blob_hash() || !item.has_holders() {
// blob hash or holder missing, leave unchecked
return true;
}
checked.extend(item.as_primary_keys(blob_hash));
false
});
checked
}
/// Returns list of blob hashes for which we need to query if they contain
/// at least one holder
fn blobs_to_find_holders(&self) -> Vec<&BlobHash> {
self
.iter()
.filter_map(|(blob_hash, item)| {
if item.has_blob_hash() && !item.has_holders() {
Some(blob_hash)
} else {
None
}
})
.collect()
}
/// Returns primary keys for blob items that need to be checked if they exist
///
/// Technically, this returns all blob items that have holders but no hash.
fn blobs_to_check_existence(&self) -> Vec<PrimaryKey> {
self
.iter()
.filter_map(|(blob_hash, item)| {
if item.has_holders() && !item.has_blob_hash() {
Some(PrimaryKey::for_blob_item(blob_hash))
} else {
None
}
})
.collect()
}
/// Updates the structure after fetching additional data from database.
fn feed_with_query_results(
&mut self,
fetched_items: impl IntoIterator<Item = PrimaryKey>,
) {
for pk in fetched_items.into_iter() {
let Some(item) = self.get_mut(&pk.blob_hash) else {
warn!("Got fetched item that was not requested: {:?}", pk);
continue;
};
if pk.is_blob_item() {
item.blob_hash = Some(pk.blob_hash)
} else {
item.holders.push(pk.holder);
}
}
}
fn into_primary_keys(self) -> Vec<PrimaryKey> {
self
.into_iter()
.flat_map(|(blob_hash, item)| item.as_primary_keys(&blob_hash))
.collect()
}
}
pub struct BlobDownloadObject {
/// Size of the whole blob object in bytes.
pub blob_size: u64,
/// Range of bytes to be downloaded (exclusive end).
byte_range: Range<u64>,
chunk_size: u64,
s3_client: S3Client,
s3_path: S3Path,
}
impl BlobDownloadObject {
pub fn set_byte_range(&mut self, range: impl RangeBounds<u64>) {
let range_start = match range.start_bound() {
Bound::Included(&start) => start,
Bound::Excluded(&start) => start + 1,
Bound::Unbounded => 0,
};
let range_end = match range.end_bound() {
Bound::Included(&end) => end + 1,
Bound::Excluded(&end) => end,
Bound::Unbounded => self.blob_size,
};
// Clamp range to blob size
let start = std::cmp::max(range_start, 0);
let end_exclusive = std::cmp::min(range_end, self.blob_size);
self.byte_range = start..end_exclusive;
debug!("Requested byte range: {}..{}", start, end_exclusive);
}
/// Size of the data to be downloaded in bytes.
pub fn download_size(&self) -> u64 {
self.byte_range.end - self.byte_range.start
}
pub fn into_stream(self) -> impl Stream<Item = BlobServiceResult<Vec<u8>>> {
let BlobDownloadObject {
byte_range,
chunk_size,
s3_path,
s3_client,
..
} = self;
try_stream! {
trace!("Starting download stream");
let mut offset: u64 = byte_range.start;
while offset < byte_range.end {
let next_size = std::cmp::min(chunk_size, byte_range.end - offset);
let range = offset..(offset + next_size);
trace!(?range, "Getting {} bytes of data", next_size);
yield s3_client.get_object_bytes(&s3_path, range).await?;
offset += next_size;
}
}
}
}
diff --git a/services/blob/third-party/bad-words/LICENSE b/services/blob/third-party/bad-words/LICENSE
new file mode 100644
index 000000000..da6e7d2a8
--- /dev/null
+++ b/services/blob/third-party/bad-words/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Michael Price
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/services/blob/third-party/bad-words/words.json b/services/blob/third-party/bad-words/words.json
new file mode 100644
index 000000000..849ae0a17
--- /dev/null
+++ b/services/blob/third-party/bad-words/words.json
@@ -0,0 +1,449 @@
+[
+ "ahole",
+ "anus",
+ "ash0le",
+ "ash0les",
+ "asholes",
+ "ass",
+ "Ass Monkey",
+ "Assface",
+ "assh0le",
+ "assh0lez",
+ "asshole",
+ "assholes",
+ "assholz",
+ "asswipe",
+ "azzhole",
+ "bassterds",
+ "bastard",
+ "bastards",
+ "bastardz",
+ "basterds",
+ "basterdz",
+ "Biatch",
+ "bitch",
+ "bitches",
+ "Blow Job",
+ "boffing",
+ "butthole",
+ "buttwipe",
+ "c0ck",
+ "c0cks",
+ "c0k",
+ "Carpet Muncher",
+ "cawk",
+ "cawks",
+ "Clit",
+ "cnts",
+ "cntz",
+ "cock",
+ "cockhead",
+ "cock-head",
+ "cocks",
+ "CockSucker",
+ "cock-sucker",
+ "crap",
+ "cum",
+ "cunt",
+ "cunts",
+ "cuntz",
+ "dick",
+ "dild0",
+ "dild0s",
+ "dildo",
+ "dildos",
+ "dilld0",
+ "dilld0s",
+ "dominatricks",
+ "dominatrics",
+ "dominatrix",
+ "dyke",
+ "enema",
+ "f u c k",
+ "f u c k e r",
+ "fag",
+ "fag1t",
+ "faget",
+ "fagg1t",
+ "faggit",
+ "faggot",
+ "fagg0t",
+ "fagit",
+ "fags",
+ "fagz",
+ "faig",
+ "faigs",
+ "fart",
+ "flipping the bird",
+ "fuck",
+ "fucker",
+ "fuckin",
+ "fucking",
+ "fucks",
+ "Fudge Packer",
+ "fuk",
+ "Fukah",
+ "Fuken",
+ "fuker",
+ "Fukin",
+ "Fukk",
+ "Fukkah",
+ "Fukken",
+ "Fukker",
+ "Fukkin",
+ "g00k",
+ "God-damned",
+ "h00r",
+ "h0ar",
+ "h0re",
+ "hells",
+ "hoar",
+ "hoor",
+ "hoore",
+ "jackoff",
+ "jap",
+ "japs",
+ "jerk-off",
+ "jisim",
+ "jiss",
+ "jizm",
+ "jizz",
+ "knob",
+ "knobs",
+ "knobz",
+ "kunt",
+ "kunts",
+ "kuntz",
+ "Lezzian",
+ "Lipshits",
+ "Lipshitz",
+ "masochist",
+ "masokist",
+ "massterbait",
+ "masstrbait",
+ "masstrbate",
+ "masterbaiter",
+ "masterbate",
+ "masterbates",
+ "Motha Fucker",
+ "Motha Fuker",
+ "Motha Fukkah",
+ "Motha Fukker",
+ "Mother Fucker",
+ "Mother Fukah",
+ "Mother Fuker",
+ "Mother Fukkah",
+ "Mother Fukker",
+ "mother-fucker",
+ "Mutha Fucker",
+ "Mutha Fukah",
+ "Mutha Fuker",
+ "Mutha Fukkah",
+ "Mutha Fukker",
+ "n1gr",
+ "nastt",
+ "nigger;",
+ "nigur;",
+ "niiger;",
+ "niigr;",
+ "orafis",
+ "orgasim;",
+ "orgasm",
+ "orgasum",
+ "oriface",
+ "orifice",
+ "orifiss",
+ "packi",
+ "packie",
+ "packy",
+ "paki",
+ "pakie",
+ "paky",
+ "pecker",
+ "peeenus",
+ "peeenusss",
+ "peenus",
+ "peinus",
+ "pen1s",
+ "penas",
+ "penis",
+ "penis-breath",
+ "penus",
+ "penuus",
+ "Phuc",
+ "Phuck",
+ "Phuk",
+ "Phuker",
+ "Phukker",
+ "polac",
+ "polack",
+ "polak",
+ "Poonani",
+ "pr1c",
+ "pr1ck",
+ "pr1k",
+ "pusse",
+ "pussee",
+ "pussy",
+ "puuke",
+ "puuker",
+ "qweir",
+ "recktum",
+ "rectum",
+ "retard",
+ "sadist",
+ "scank",
+ "schlong",
+ "screwing",
+ "semen",
+ "sex",
+ "sexy",
+ "Sh!t",
+ "sh1t",
+ "sh1ter",
+ "sh1ts",
+ "sh1tter",
+ "sh1tz",
+ "shit",
+ "shits",
+ "shitter",
+ "Shitty",
+ "Shity",
+ "shitz",
+ "Shyt",
+ "Shyte",
+ "Shytty",
+ "Shyty",
+ "skanck",
+ "skank",
+ "skankee",
+ "skankey",
+ "skanks",
+ "Skanky",
+ "slag",
+ "slut",
+ "sluts",
+ "Slutty",
+ "slutz",
+ "son-of-a-bitch",
+ "tit",
+ "turd",
+ "va1jina",
+ "vag1na",
+ "vagiina",
+ "vagina",
+ "vaj1na",
+ "vajina",
+ "vullva",
+ "vulva",
+ "w0p",
+ "wh00r",
+ "wh0re",
+ "whore",
+ "xrated",
+ "xxx",
+ "b!+ch",
+ "bitch",
+ "blowjob",
+ "clit",
+ "arschloch",
+ "fuck",
+ "shit",
+ "ass",
+ "asshole",
+ "b!tch",
+ "b17ch",
+ "b1tch",
+ "bastard",
+ "bi+ch",
+ "boiolas",
+ "buceta",
+ "c0ck",
+ "cawk",
+ "chink",
+ "cipa",
+ "clits",
+ "cock",
+ "cum",
+ "cunt",
+ "dildo",
+ "dirsa",
+ "ejakulate",
+ "fatass",
+ "fcuk",
+ "fuk",
+ "fux0r",
+ "hoer",
+ "hore",
+ "jism",
+ "kawk",
+ "l3itch",
+ "l3i+ch",
+ "masturbate",
+ "masterbat.*",
+ "masterbat3",
+ "motherfucker",
+ "s.o.b.",
+ "mofo",
+ "nazi",
+ "nigga",
+ "nigger",
+ "nutsack",
+ "phuck",
+ "pimpis",
+ "pusse",
+ "pussy",
+ "scrotum",
+ "sh!t",
+ "shemale",
+ "shi+",
+ "sh!+",
+ "slut",
+ "smut",
+ "teets",
+ "tits",
+ "boobs",
+ "b00bs",
+ "teez",
+ "testical",
+ "testicle",
+ "titt",
+ "w00se",
+ "jackoff",
+ "wank",
+ "whoar",
+ "whore",
+ ".*damn",
+ ".*dyke",
+ ".*fuck.*",
+ ".*shit.*",
+ "@$$",
+ "amcik",
+ "andskota",
+ "arse.*",
+ "assrammer",
+ "ayir",
+ "bi7ch",
+ "bitch.*",
+ "bollock.*",
+ "breasts",
+ "butt-pirate",
+ "cabron",
+ "cazzo",
+ "chraa",
+ "chuj",
+ "Cock.*",
+ "cunt.*",
+ "d4mn",
+ "daygo",
+ "dego",
+ "dick.*",
+ "dike.*",
+ "dupa",
+ "dziwka",
+ "ejackulate",
+ "Ekrem.*",
+ "Ekto",
+ "enculer",
+ "faen",
+ "fag.*",
+ "fanculo",
+ "fanny",
+ "feces",
+ "feg",
+ "Felcher",
+ "ficken",
+ "fitt.*",
+ "Flikker",
+ "foreskin",
+ "Fotze",
+ "Fu\\(.*",
+ "fuk.*",
+ "futkretzn",
+ "gook",
+ "guiena",
+ "h0r",
+ "h4x0r",
+ "hell",
+ "helvete",
+ "hoer.*",
+ "honkey",
+ "Huevon",
+ "hui",
+ "injun",
+ "jizz",
+ "kanker.*",
+ "kike",
+ "klootzak",
+ "kraut",
+ "knulle",
+ "kuk",
+ "kuksuger",
+ "Kurac",
+ "kurwa",
+ "kusi.*",
+ "kyrpa.*",
+ "lesbo",
+ "mamhoon",
+ "masturbat.*",
+ "merd.*",
+ "mibun",
+ "monkleigh",
+ "mouliewop",
+ "muie",
+ "mulkku",
+ "muschi",
+ "nazis",
+ "nepesaurio",
+ "nigger.*",
+ "orospu",
+ "paska.*",
+ "perse",
+ "picka",
+ "pierdol.*",
+ "pillu.*",
+ "pimmel",
+ "piss.*",
+ "pizda",
+ "poontsee",
+ "poop",
+ "porn",
+ "p0rn",
+ "pr0n",
+ "preteen",
+ "pula",
+ "pule",
+ "puta",
+ "puto",
+ "qahbeh",
+ "queef.*",
+ "rautenberg",
+ "schaffer",
+ "scheiss.*",
+ "schlampe",
+ "schmuck",
+ "screw",
+ "sh!t.*",
+ "sharmuta",
+ "sharmute",
+ "shipal",
+ "shiz",
+ "skribz",
+ "skurwysyn",
+ "sphencter",
+ "spic",
+ "spierdalaj",
+ "splooge",
+ "suka",
+ "b00b.*",
+ "testicle.*",
+ "titt.*",
+ "twat",
+ "vittu",
+ "wank.*",
+ "wetback.*",
+ "wichser",
+ "wop.*",
+ "yed",
+ "zabourah"
+]
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, Dec 25, 6:01 PM (6 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2695105
Default Alt Text
(181 KB)
Attached To
Mode
rCOMM Comm
Attached
Detach File
Event Timeline
Log In to Comment