Repositorio del curso CCOM4030 el semestre B91 del proyecto Artesanías con el Instituto de Cultura

umd-tough-cookie.js 264KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089
  1. (function webpackUniversalModuleDefinition(root, factory) {
  2. if(typeof exports === 'object' && typeof module === 'object')
  3. module.exports = factory();
  4. else if(typeof define === 'function' && define.amd)
  5. define([], factory);
  6. else if(typeof exports === 'object')
  7. exports["ToughCookie"] = factory();
  8. else
  9. root["ToughCookie"] = factory();
  10. })(this, function() {
  11. return /******/ (function(modules) { // webpackBootstrap
  12. /******/ // The module cache
  13. /******/ var installedModules = {};
  14. /******/ // The require function
  15. /******/ function __webpack_require__(moduleId) {
  16. /******/ // Check if module is in cache
  17. /******/ if(installedModules[moduleId])
  18. /******/ return installedModules[moduleId].exports;
  19. /******/ // Create a new module (and put it into the cache)
  20. /******/ var module = installedModules[moduleId] = {
  21. /******/ exports: {},
  22. /******/ id: moduleId,
  23. /******/ loaded: false
  24. /******/ };
  25. /******/ // Execute the module function
  26. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  27. /******/ // Flag the module as loaded
  28. /******/ module.loaded = true;
  29. /******/ // Return the exports of the module
  30. /******/ return module.exports;
  31. /******/ }
  32. /******/ // expose the modules object (__webpack_modules__)
  33. /******/ __webpack_require__.m = modules;
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/ // __webpack_public_path__
  37. /******/ __webpack_require__.p = "";
  38. /******/ // Load entry module and return exports
  39. /******/ return __webpack_require__(0);
  40. /******/ })
  41. /************************************************************************/
  42. /******/ ([
  43. /* 0 */
  44. /***/ (function(module, exports, __webpack_require__) {
  45. /*!
  46. * Copyright (c) 2015, Salesforce.com, Inc.
  47. * All rights reserved.
  48. *
  49. * Redistribution and use in source and binary forms, with or without
  50. * modification, are permitted provided that the following conditions are met:
  51. *
  52. * 1. Redistributions of source code must retain the above copyright notice,
  53. * this list of conditions and the following disclaimer.
  54. *
  55. * 2. Redistributions in binary form must reproduce the above copyright notice,
  56. * this list of conditions and the following disclaimer in the documentation
  57. * and/or other materials provided with the distribution.
  58. *
  59. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  60. * be used to endorse or promote products derived from this software without
  61. * specific prior written permission.
  62. *
  63. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  64. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  65. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  66. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  67. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  68. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  69. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  70. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  71. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  72. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  73. * POSSIBILITY OF SUCH DAMAGE.
  74. */
  75. 'use strict';
  76. var net = __webpack_require__(1);
  77. var urlParse = __webpack_require__(2).parse;
  78. var util = __webpack_require__(9);
  79. var pubsuffix = __webpack_require__(13);
  80. var Store = __webpack_require__(17).Store;
  81. var MemoryCookieStore = __webpack_require__(18).MemoryCookieStore;
  82. var pathMatch = __webpack_require__(20).pathMatch;
  83. var VERSION = __webpack_require__(21).version;
  84. var punycode;
  85. try {
  86. punycode = __webpack_require__(15);
  87. } catch(e) {
  88. console.warn("tough-cookie: can't load punycode; won't use punycode for domain normalization");
  89. }
  90. // From RFC6265 S4.1.1
  91. // note that it excludes \x3B ";"
  92. var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
  93. var CONTROL_CHARS = /[\x00-\x1F]/;
  94. // From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
  95. // the "relaxed" mode, see:
  96. // https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
  97. var TERMINATORS = ['\n', '\r', '\0'];
  98. // RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
  99. // Note ';' is \x3B
  100. var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;
  101. // date-time parsing constants (RFC6265 S5.1.1)
  102. var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
  103. var MONTH_TO_NUM = {
  104. jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
  105. jul:6, aug:7, sep:8, oct:9, nov:10, dec:11
  106. };
  107. var NUM_TO_MONTH = [
  108. 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
  109. ];
  110. var NUM_TO_DAY = [
  111. 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'
  112. ];
  113. var MAX_TIME = 2147483647000; // 31-bit max
  114. var MIN_TIME = 0; // 31-bit min
  115. /*
  116. * Parses a Natural number (i.e., non-negative integer) with either the
  117. * <min>*<max>DIGIT ( non-digit *OCTET )
  118. * or
  119. * <min>*<max>DIGIT
  120. * grammar (RFC6265 S5.1.1).
  121. *
  122. * The "trailingOK" boolean controls if the grammar accepts a
  123. * "( non-digit *OCTET )" trailer.
  124. */
  125. function parseDigits(token, minDigits, maxDigits, trailingOK) {
  126. var count = 0;
  127. while (count < token.length) {
  128. var c = token.charCodeAt(count);
  129. // "non-digit = %x00-2F / %x3A-FF"
  130. if (c <= 0x2F || c >= 0x3A) {
  131. break;
  132. }
  133. count++;
  134. }
  135. // constrain to a minimum and maximum number of digits.
  136. if (count < minDigits || count > maxDigits) {
  137. return null;
  138. }
  139. if (!trailingOK && count != token.length) {
  140. return null;
  141. }
  142. return parseInt(token.substr(0,count), 10);
  143. }
  144. function parseTime(token) {
  145. var parts = token.split(':');
  146. var result = [0,0,0];
  147. /* RF6256 S5.1.1:
  148. * time = hms-time ( non-digit *OCTET )
  149. * hms-time = time-field ":" time-field ":" time-field
  150. * time-field = 1*2DIGIT
  151. */
  152. if (parts.length !== 3) {
  153. return null;
  154. }
  155. for (var i = 0; i < 3; i++) {
  156. // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
  157. // followed by "( non-digit *OCTET )" so therefore the last time-field can
  158. // have a trailer
  159. var trailingOK = (i == 2);
  160. var num = parseDigits(parts[i], 1, 2, trailingOK);
  161. if (num === null) {
  162. return null;
  163. }
  164. result[i] = num;
  165. }
  166. return result;
  167. }
  168. function parseMonth(token) {
  169. token = String(token).substr(0,3).toLowerCase();
  170. var num = MONTH_TO_NUM[token];
  171. return num >= 0 ? num : null;
  172. }
  173. /*
  174. * RFC6265 S5.1.1 date parser (see RFC for full grammar)
  175. */
  176. function parseDate(str) {
  177. if (!str) {
  178. return;
  179. }
  180. /* RFC6265 S5.1.1:
  181. * 2. Process each date-token sequentially in the order the date-tokens
  182. * appear in the cookie-date
  183. */
  184. var tokens = str.split(DATE_DELIM);
  185. if (!tokens) {
  186. return;
  187. }
  188. var hour = null;
  189. var minute = null;
  190. var second = null;
  191. var dayOfMonth = null;
  192. var month = null;
  193. var year = null;
  194. for (var i=0; i<tokens.length; i++) {
  195. var token = tokens[i].trim();
  196. if (!token.length) {
  197. continue;
  198. }
  199. var result;
  200. /* 2.1. If the found-time flag is not set and the token matches the time
  201. * production, set the found-time flag and set the hour- value,
  202. * minute-value, and second-value to the numbers denoted by the digits in
  203. * the date-token, respectively. Skip the remaining sub-steps and continue
  204. * to the next date-token.
  205. */
  206. if (second === null) {
  207. result = parseTime(token);
  208. if (result) {
  209. hour = result[0];
  210. minute = result[1];
  211. second = result[2];
  212. continue;
  213. }
  214. }
  215. /* 2.2. If the found-day-of-month flag is not set and the date-token matches
  216. * the day-of-month production, set the found-day-of- month flag and set
  217. * the day-of-month-value to the number denoted by the date-token. Skip
  218. * the remaining sub-steps and continue to the next date-token.
  219. */
  220. if (dayOfMonth === null) {
  221. // "day-of-month = 1*2DIGIT ( non-digit *OCTET )"
  222. result = parseDigits(token, 1, 2, true);
  223. if (result !== null) {
  224. dayOfMonth = result;
  225. continue;
  226. }
  227. }
  228. /* 2.3. If the found-month flag is not set and the date-token matches the
  229. * month production, set the found-month flag and set the month-value to
  230. * the month denoted by the date-token. Skip the remaining sub-steps and
  231. * continue to the next date-token.
  232. */
  233. if (month === null) {
  234. result = parseMonth(token);
  235. if (result !== null) {
  236. month = result;
  237. continue;
  238. }
  239. }
  240. /* 2.4. If the found-year flag is not set and the date-token matches the
  241. * year production, set the found-year flag and set the year-value to the
  242. * number denoted by the date-token. Skip the remaining sub-steps and
  243. * continue to the next date-token.
  244. */
  245. if (year === null) {
  246. // "year = 2*4DIGIT ( non-digit *OCTET )"
  247. result = parseDigits(token, 2, 4, true);
  248. if (result !== null) {
  249. year = result;
  250. /* From S5.1.1:
  251. * 3. If the year-value is greater than or equal to 70 and less
  252. * than or equal to 99, increment the year-value by 1900.
  253. * 4. If the year-value is greater than or equal to 0 and less
  254. * than or equal to 69, increment the year-value by 2000.
  255. */
  256. if (year >= 70 && year <= 99) {
  257. year += 1900;
  258. } else if (year >= 0 && year <= 69) {
  259. year += 2000;
  260. }
  261. }
  262. }
  263. }
  264. /* RFC 6265 S5.1.1
  265. * "5. Abort these steps and fail to parse the cookie-date if:
  266. * * at least one of the found-day-of-month, found-month, found-
  267. * year, or found-time flags is not set,
  268. * * the day-of-month-value is less than 1 or greater than 31,
  269. * * the year-value is less than 1601,
  270. * * the hour-value is greater than 23,
  271. * * the minute-value is greater than 59, or
  272. * * the second-value is greater than 59.
  273. * (Note that leap seconds cannot be represented in this syntax.)"
  274. *
  275. * So, in order as above:
  276. */
  277. if (
  278. dayOfMonth === null || month === null || year === null || second === null ||
  279. dayOfMonth < 1 || dayOfMonth > 31 ||
  280. year < 1601 ||
  281. hour > 23 ||
  282. minute > 59 ||
  283. second > 59
  284. ) {
  285. return;
  286. }
  287. return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
  288. }
  289. function formatDate(date) {
  290. var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;
  291. var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;
  292. var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;
  293. var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;
  294. return NUM_TO_DAY[date.getUTCDay()] + ', ' +
  295. d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+
  296. h+':'+m+':'+s+' GMT';
  297. }
  298. // S5.1.2 Canonicalized Host Names
  299. function canonicalDomain(str) {
  300. if (str == null) {
  301. return null;
  302. }
  303. str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading .
  304. // convert to IDN if any non-ASCII characters
  305. if (punycode && /[^\u0001-\u007f]/.test(str)) {
  306. str = punycode.toASCII(str);
  307. }
  308. return str.toLowerCase();
  309. }
  310. // S5.1.3 Domain Matching
  311. function domainMatch(str, domStr, canonicalize) {
  312. if (str == null || domStr == null) {
  313. return null;
  314. }
  315. if (canonicalize !== false) {
  316. str = canonicalDomain(str);
  317. domStr = canonicalDomain(domStr);
  318. }
  319. /*
  320. * "The domain string and the string are identical. (Note that both the
  321. * domain string and the string will have been canonicalized to lower case at
  322. * this point)"
  323. */
  324. if (str == domStr) {
  325. return true;
  326. }
  327. /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */
  328. /* "* The string is a host name (i.e., not an IP address)." */
  329. if (net.isIP(str)) {
  330. return false;
  331. }
  332. /* "* The domain string is a suffix of the string" */
  333. var idx = str.indexOf(domStr);
  334. if (idx <= 0) {
  335. return false; // it's a non-match (-1) or prefix (0)
  336. }
  337. // e.g "a.b.c".indexOf("b.c") === 2
  338. // 5 === 3+2
  339. if (str.length !== domStr.length + idx) { // it's not a suffix
  340. return false;
  341. }
  342. /* "* The last character of the string that is not included in the domain
  343. * string is a %x2E (".") character." */
  344. if (str.substr(idx-1,1) !== '.') {
  345. return false;
  346. }
  347. return true;
  348. }
  349. // RFC6265 S5.1.4 Paths and Path-Match
  350. /*
  351. * "The user agent MUST use an algorithm equivalent to the following algorithm
  352. * to compute the default-path of a cookie:"
  353. *
  354. * Assumption: the path (and not query part or absolute uri) is passed in.
  355. */
  356. function defaultPath(path) {
  357. // "2. If the uri-path is empty or if the first character of the uri-path is not
  358. // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
  359. if (!path || path.substr(0,1) !== "/") {
  360. return "/";
  361. }
  362. // "3. If the uri-path contains no more than one %x2F ("/") character, output
  363. // %x2F ("/") and skip the remaining step."
  364. if (path === "/") {
  365. return path;
  366. }
  367. var rightSlash = path.lastIndexOf("/");
  368. if (rightSlash === 0) {
  369. return "/";
  370. }
  371. // "4. Output the characters of the uri-path from the first character up to,
  372. // but not including, the right-most %x2F ("/")."
  373. return path.slice(0, rightSlash);
  374. }
  375. function trimTerminator(str) {
  376. for (var t = 0; t < TERMINATORS.length; t++) {
  377. var terminatorIdx = str.indexOf(TERMINATORS[t]);
  378. if (terminatorIdx !== -1) {
  379. str = str.substr(0,terminatorIdx);
  380. }
  381. }
  382. return str;
  383. }
  384. function parseCookiePair(cookiePair, looseMode) {
  385. cookiePair = trimTerminator(cookiePair);
  386. var firstEq = cookiePair.indexOf('=');
  387. if (looseMode) {
  388. if (firstEq === 0) { // '=' is immediately at start
  389. cookiePair = cookiePair.substr(1);
  390. firstEq = cookiePair.indexOf('='); // might still need to split on '='
  391. }
  392. } else { // non-loose mode
  393. if (firstEq <= 0) { // no '=' or is at start
  394. return; // needs to have non-empty "cookie-name"
  395. }
  396. }
  397. var cookieName, cookieValue;
  398. if (firstEq <= 0) {
  399. cookieName = "";
  400. cookieValue = cookiePair.trim();
  401. } else {
  402. cookieName = cookiePair.substr(0, firstEq).trim();
  403. cookieValue = cookiePair.substr(firstEq+1).trim();
  404. }
  405. if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
  406. return;
  407. }
  408. var c = new Cookie();
  409. c.key = cookieName;
  410. c.value = cookieValue;
  411. return c;
  412. }
  413. function parse(str, options) {
  414. if (!options || typeof options !== 'object') {
  415. options = {};
  416. }
  417. str = str.trim();
  418. // We use a regex to parse the "name-value-pair" part of S5.2
  419. var firstSemi = str.indexOf(';'); // S5.2 step 1
  420. var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);
  421. var c = parseCookiePair(cookiePair, !!options.loose);
  422. if (!c) {
  423. return;
  424. }
  425. if (firstSemi === -1) {
  426. return c;
  427. }
  428. // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
  429. // (including the %x3B (";") in question)." plus later on in the same section
  430. // "discard the first ";" and trim".
  431. var unparsed = str.slice(firstSemi + 1).trim();
  432. // "If the unparsed-attributes string is empty, skip the rest of these
  433. // steps."
  434. if (unparsed.length === 0) {
  435. return c;
  436. }
  437. /*
  438. * S5.2 says that when looping over the items "[p]rocess the attribute-name
  439. * and attribute-value according to the requirements in the following
  440. * subsections" for every item. Plus, for many of the individual attributes
  441. * in S5.3 it says to use the "attribute-value of the last attribute in the
  442. * cookie-attribute-list". Therefore, in this implementation, we overwrite
  443. * the previous value.
  444. */
  445. var cookie_avs = unparsed.split(';');
  446. while (cookie_avs.length) {
  447. var av = cookie_avs.shift().trim();
  448. if (av.length === 0) { // happens if ";;" appears
  449. continue;
  450. }
  451. var av_sep = av.indexOf('=');
  452. var av_key, av_value;
  453. if (av_sep === -1) {
  454. av_key = av;
  455. av_value = null;
  456. } else {
  457. av_key = av.substr(0,av_sep);
  458. av_value = av.substr(av_sep+1);
  459. }
  460. av_key = av_key.trim().toLowerCase();
  461. if (av_value) {
  462. av_value = av_value.trim();
  463. }
  464. switch(av_key) {
  465. case 'expires': // S5.2.1
  466. if (av_value) {
  467. var exp = parseDate(av_value);
  468. // "If the attribute-value failed to parse as a cookie date, ignore the
  469. // cookie-av."
  470. if (exp) {
  471. // over and underflow not realistically a concern: V8's getTime() seems to
  472. // store something larger than a 32-bit time_t (even with 32-bit node)
  473. c.expires = exp;
  474. }
  475. }
  476. break;
  477. case 'max-age': // S5.2.2
  478. if (av_value) {
  479. // "If the first character of the attribute-value is not a DIGIT or a "-"
  480. // character ...[or]... If the remainder of attribute-value contains a
  481. // non-DIGIT character, ignore the cookie-av."
  482. if (/^-?[0-9]+$/.test(av_value)) {
  483. var delta = parseInt(av_value, 10);
  484. // "If delta-seconds is less than or equal to zero (0), let expiry-time
  485. // be the earliest representable date and time."
  486. c.setMaxAge(delta);
  487. }
  488. }
  489. break;
  490. case 'domain': // S5.2.3
  491. // "If the attribute-value is empty, the behavior is undefined. However,
  492. // the user agent SHOULD ignore the cookie-av entirely."
  493. if (av_value) {
  494. // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
  495. // (".") character."
  496. var domain = av_value.trim().replace(/^\./, '');
  497. if (domain) {
  498. // "Convert the cookie-domain to lower case."
  499. c.domain = domain.toLowerCase();
  500. }
  501. }
  502. break;
  503. case 'path': // S5.2.4
  504. /*
  505. * "If the attribute-value is empty or if the first character of the
  506. * attribute-value is not %x2F ("/"):
  507. * Let cookie-path be the default-path.
  508. * Otherwise:
  509. * Let cookie-path be the attribute-value."
  510. *
  511. * We'll represent the default-path as null since it depends on the
  512. * context of the parsing.
  513. */
  514. c.path = av_value && av_value[0] === "/" ? av_value : null;
  515. break;
  516. case 'secure': // S5.2.5
  517. /*
  518. * "If the attribute-name case-insensitively matches the string "Secure",
  519. * the user agent MUST append an attribute to the cookie-attribute-list
  520. * with an attribute-name of Secure and an empty attribute-value."
  521. */
  522. c.secure = true;
  523. break;
  524. case 'httponly': // S5.2.6 -- effectively the same as 'secure'
  525. c.httpOnly = true;
  526. break;
  527. default:
  528. c.extensions = c.extensions || [];
  529. c.extensions.push(av);
  530. break;
  531. }
  532. }
  533. return c;
  534. }
  535. // avoid the V8 deoptimization monster!
  536. function jsonParse(str) {
  537. var obj;
  538. try {
  539. obj = JSON.parse(str);
  540. } catch (e) {
  541. return e;
  542. }
  543. return obj;
  544. }
  545. function fromJSON(str) {
  546. if (!str) {
  547. return null;
  548. }
  549. var obj;
  550. if (typeof str === 'string') {
  551. obj = jsonParse(str);
  552. if (obj instanceof Error) {
  553. return null;
  554. }
  555. } else {
  556. // assume it's an Object
  557. obj = str;
  558. }
  559. var c = new Cookie();
  560. for (var i=0; i<Cookie.serializableProperties.length; i++) {
  561. var prop = Cookie.serializableProperties[i];
  562. if (obj[prop] === undefined ||
  563. obj[prop] === Cookie.prototype[prop])
  564. {
  565. continue; // leave as prototype default
  566. }
  567. if (prop === 'expires' ||
  568. prop === 'creation' ||
  569. prop === 'lastAccessed')
  570. {
  571. if (obj[prop] === null) {
  572. c[prop] = null;
  573. } else {
  574. c[prop] = obj[prop] == "Infinity" ?
  575. "Infinity" : new Date(obj[prop]);
  576. }
  577. } else {
  578. c[prop] = obj[prop];
  579. }
  580. }
  581. return c;
  582. }
  583. /* Section 5.4 part 2:
  584. * "* Cookies with longer paths are listed before cookies with
  585. * shorter paths.
  586. *
  587. * * Among cookies that have equal-length path fields, cookies with
  588. * earlier creation-times are listed before cookies with later
  589. * creation-times."
  590. */
  591. function cookieCompare(a,b) {
  592. var cmp = 0;
  593. // descending for length: b CMP a
  594. var aPathLen = a.path ? a.path.length : 0;
  595. var bPathLen = b.path ? b.path.length : 0;
  596. cmp = bPathLen - aPathLen;
  597. if (cmp !== 0) {
  598. return cmp;
  599. }
  600. // ascending for time: a CMP b
  601. var aTime = a.creation ? a.creation.getTime() : MAX_TIME;
  602. var bTime = b.creation ? b.creation.getTime() : MAX_TIME;
  603. cmp = aTime - bTime;
  604. if (cmp !== 0) {
  605. return cmp;
  606. }
  607. // break ties for the same millisecond (precision of JavaScript's clock)
  608. cmp = a.creationIndex - b.creationIndex;
  609. return cmp;
  610. }
  611. // Gives the permutation of all possible pathMatch()es of a given path. The
  612. // array is in longest-to-shortest order. Handy for indexing.
  613. function permutePath(path) {
  614. if (path === '/') {
  615. return ['/'];
  616. }
  617. if (path.lastIndexOf('/') === path.length-1) {
  618. path = path.substr(0,path.length-1);
  619. }
  620. var permutations = [path];
  621. while (path.length > 1) {
  622. var lindex = path.lastIndexOf('/');
  623. if (lindex === 0) {
  624. break;
  625. }
  626. path = path.substr(0,lindex);
  627. permutations.push(path);
  628. }
  629. permutations.push('/');
  630. return permutations;
  631. }
  632. function getCookieContext(url) {
  633. if (url instanceof Object) {
  634. return url;
  635. }
  636. // NOTE: decodeURI will throw on malformed URIs (see GH-32).
  637. // Therefore, we will just skip decoding for such URIs.
  638. try {
  639. url = decodeURI(url);
  640. }
  641. catch(err) {
  642. // Silently swallow error
  643. }
  644. return urlParse(url);
  645. }
  646. function Cookie(options) {
  647. options = options || {};
  648. Object.keys(options).forEach(function(prop) {
  649. if (Cookie.prototype.hasOwnProperty(prop) &&
  650. Cookie.prototype[prop] !== options[prop] &&
  651. prop.substr(0,1) !== '_')
  652. {
  653. this[prop] = options[prop];
  654. }
  655. }, this);
  656. this.creation = this.creation || new Date();
  657. // used to break creation ties in cookieCompare():
  658. Object.defineProperty(this, 'creationIndex', {
  659. configurable: false,
  660. enumerable: false, // important for assert.deepEqual checks
  661. writable: true,
  662. value: ++Cookie.cookiesCreated
  663. });
  664. }
  665. Cookie.cookiesCreated = 0; // incremented each time a cookie is created
  666. Cookie.parse = parse;
  667. Cookie.fromJSON = fromJSON;
  668. Cookie.prototype.key = "";
  669. Cookie.prototype.value = "";
  670. // the order in which the RFC has them:
  671. Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity
  672. Cookie.prototype.maxAge = null; // takes precedence over expires for TTL
  673. Cookie.prototype.domain = null;
  674. Cookie.prototype.path = null;
  675. Cookie.prototype.secure = false;
  676. Cookie.prototype.httpOnly = false;
  677. Cookie.prototype.extensions = null;
  678. // set by the CookieJar:
  679. Cookie.prototype.hostOnly = null; // boolean when set
  680. Cookie.prototype.pathIsDefault = null; // boolean when set
  681. Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse
  682. Cookie.prototype.lastAccessed = null; // Date when set
  683. Object.defineProperty(Cookie.prototype, 'creationIndex', {
  684. configurable: true,
  685. enumerable: false,
  686. writable: true,
  687. value: 0
  688. });
  689. Cookie.serializableProperties = Object.keys(Cookie.prototype)
  690. .filter(function(prop) {
  691. return !(
  692. Cookie.prototype[prop] instanceof Function ||
  693. prop === 'creationIndex' ||
  694. prop.substr(0,1) === '_'
  695. );
  696. });
  697. Cookie.prototype.inspect = function inspect() {
  698. var now = Date.now();
  699. return 'Cookie="'+this.toString() +
  700. '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +
  701. '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +
  702. '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +
  703. '"';
  704. };
  705. // Use the new custom inspection symbol to add the custom inspect function if
  706. // available.
  707. if (util.inspect.custom) {
  708. Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;
  709. }
  710. Cookie.prototype.toJSON = function() {
  711. var obj = {};
  712. var props = Cookie.serializableProperties;
  713. for (var i=0; i<props.length; i++) {
  714. var prop = props[i];
  715. if (this[prop] === Cookie.prototype[prop]) {
  716. continue; // leave as prototype default
  717. }
  718. if (prop === 'expires' ||
  719. prop === 'creation' ||
  720. prop === 'lastAccessed')
  721. {
  722. if (this[prop] === null) {
  723. obj[prop] = null;
  724. } else {
  725. obj[prop] = this[prop] == "Infinity" ? // intentionally not ===
  726. "Infinity" : this[prop].toISOString();
  727. }
  728. } else if (prop === 'maxAge') {
  729. if (this[prop] !== null) {
  730. // again, intentionally not ===
  731. obj[prop] = (this[prop] == Infinity || this[prop] == -Infinity) ?
  732. this[prop].toString() : this[prop];
  733. }
  734. } else {
  735. if (this[prop] !== Cookie.prototype[prop]) {
  736. obj[prop] = this[prop];
  737. }
  738. }
  739. }
  740. return obj;
  741. };
  742. Cookie.prototype.clone = function() {
  743. return fromJSON(this.toJSON());
  744. };
  745. Cookie.prototype.validate = function validate() {
  746. if (!COOKIE_OCTETS.test(this.value)) {
  747. return false;
  748. }
  749. if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires)) {
  750. return false;
  751. }
  752. if (this.maxAge != null && this.maxAge <= 0) {
  753. return false; // "Max-Age=" non-zero-digit *DIGIT
  754. }
  755. if (this.path != null && !PATH_VALUE.test(this.path)) {
  756. return false;
  757. }
  758. var cdomain = this.cdomain();
  759. if (cdomain) {
  760. if (cdomain.match(/\.$/)) {
  761. return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
  762. }
  763. var suffix = pubsuffix.getPublicSuffix(cdomain);
  764. if (suffix == null) { // it's a public suffix
  765. return false;
  766. }
  767. }
  768. return true;
  769. };
  770. Cookie.prototype.setExpires = function setExpires(exp) {
  771. if (exp instanceof Date) {
  772. this.expires = exp;
  773. } else {
  774. this.expires = parseDate(exp) || "Infinity";
  775. }
  776. };
  777. Cookie.prototype.setMaxAge = function setMaxAge(age) {
  778. if (age === Infinity || age === -Infinity) {
  779. this.maxAge = age.toString(); // so JSON.stringify() works
  780. } else {
  781. this.maxAge = age;
  782. }
  783. };
  784. // gives Cookie header format
  785. Cookie.prototype.cookieString = function cookieString() {
  786. var val = this.value;
  787. if (val == null) {
  788. val = '';
  789. }
  790. if (this.key === '') {
  791. return val;
  792. }
  793. return this.key+'='+val;
  794. };
  795. // gives Set-Cookie header format
  796. Cookie.prototype.toString = function toString() {
  797. var str = this.cookieString();
  798. if (this.expires != Infinity) {
  799. if (this.expires instanceof Date) {
  800. str += '; Expires='+formatDate(this.expires);
  801. } else {
  802. str += '; Expires='+this.expires;
  803. }
  804. }
  805. if (this.maxAge != null && this.maxAge != Infinity) {
  806. str += '; Max-Age='+this.maxAge;
  807. }
  808. if (this.domain && !this.hostOnly) {
  809. str += '; Domain='+this.domain;
  810. }
  811. if (this.path) {
  812. str += '; Path='+this.path;
  813. }
  814. if (this.secure) {
  815. str += '; Secure';
  816. }
  817. if (this.httpOnly) {
  818. str += '; HttpOnly';
  819. }
  820. if (this.extensions) {
  821. this.extensions.forEach(function(ext) {
  822. str += '; '+ext;
  823. });
  824. }
  825. return str;
  826. };
  827. // TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
  828. // elsewhere)
  829. // S5.3 says to give the "latest representable date" for which we use Infinity
  830. // For "expired" we use 0
  831. Cookie.prototype.TTL = function TTL(now) {
  832. /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
  833. * attribute, the Max-Age attribute has precedence and controls the
  834. * expiration date of the cookie.
  835. * (Concurs with S5.3 step 3)
  836. */
  837. if (this.maxAge != null) {
  838. return this.maxAge<=0 ? 0 : this.maxAge*1000;
  839. }
  840. var expires = this.expires;
  841. if (expires != Infinity) {
  842. if (!(expires instanceof Date)) {
  843. expires = parseDate(expires) || Infinity;
  844. }
  845. if (expires == Infinity) {
  846. return Infinity;
  847. }
  848. return expires.getTime() - (now || Date.now());
  849. }
  850. return Infinity;
  851. };
  852. // expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
  853. // elsewhere)
  854. Cookie.prototype.expiryTime = function expiryTime(now) {
  855. if (this.maxAge != null) {
  856. var relativeTo = now || this.creation || new Date();
  857. var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000;
  858. return relativeTo.getTime() + age;
  859. }
  860. if (this.expires == Infinity) {
  861. return Infinity;
  862. }
  863. return this.expires.getTime();
  864. };
  865. // expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
  866. // elsewhere), except it returns a Date
  867. Cookie.prototype.expiryDate = function expiryDate(now) {
  868. var millisec = this.expiryTime(now);
  869. if (millisec == Infinity) {
  870. return new Date(MAX_TIME);
  871. } else if (millisec == -Infinity) {
  872. return new Date(MIN_TIME);
  873. } else {
  874. return new Date(millisec);
  875. }
  876. };
  877. // This replaces the "persistent-flag" parts of S5.3 step 3
  878. Cookie.prototype.isPersistent = function isPersistent() {
  879. return (this.maxAge != null || this.expires != Infinity);
  880. };
  881. // Mostly S5.1.2 and S5.2.3:
  882. Cookie.prototype.cdomain =
  883. Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() {
  884. if (this.domain == null) {
  885. return null;
  886. }
  887. return canonicalDomain(this.domain);
  888. };
  889. function CookieJar(store, options) {
  890. if (typeof options === "boolean") {
  891. options = {rejectPublicSuffixes: options};
  892. } else if (options == null) {
  893. options = {};
  894. }
  895. if (options.rejectPublicSuffixes != null) {
  896. this.rejectPublicSuffixes = options.rejectPublicSuffixes;
  897. }
  898. if (options.looseMode != null) {
  899. this.enableLooseMode = options.looseMode;
  900. }
  901. if (!store) {
  902. store = new MemoryCookieStore();
  903. }
  904. this.store = store;
  905. }
  906. CookieJar.prototype.store = null;
  907. CookieJar.prototype.rejectPublicSuffixes = true;
  908. CookieJar.prototype.enableLooseMode = false;
  909. var CAN_BE_SYNC = [];
  910. CAN_BE_SYNC.push('setCookie');
  911. CookieJar.prototype.setCookie = function(cookie, url, options, cb) {
  912. var err;
  913. var context = getCookieContext(url);
  914. if (options instanceof Function) {
  915. cb = options;
  916. options = {};
  917. }
  918. var host = canonicalDomain(context.hostname);
  919. var loose = this.enableLooseMode;
  920. if (options.loose != null) {
  921. loose = options.loose;
  922. }
  923. // S5.3 step 1
  924. if (!(cookie instanceof Cookie)) {
  925. cookie = Cookie.parse(cookie, { loose: loose });
  926. }
  927. if (!cookie) {
  928. err = new Error("Cookie failed to parse");
  929. return cb(options.ignoreError ? null : err);
  930. }
  931. // S5.3 step 2
  932. var now = options.now || new Date(); // will assign later to save effort in the face of errors
  933. // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()
  934. // S5.3 step 4: NOOP; domain is null by default
  935. // S5.3 step 5: public suffixes
  936. if (this.rejectPublicSuffixes && cookie.domain) {
  937. var suffix = pubsuffix.getPublicSuffix(cookie.cdomain());
  938. if (suffix == null) { // e.g. "com"
  939. err = new Error("Cookie has domain set to a public suffix");
  940. return cb(options.ignoreError ? null : err);
  941. }
  942. }
  943. // S5.3 step 6:
  944. if (cookie.domain) {
  945. if (!domainMatch(host, cookie.cdomain(), false)) {
  946. err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host);
  947. return cb(options.ignoreError ? null : err);
  948. }
  949. if (cookie.hostOnly == null) { // don't reset if already set
  950. cookie.hostOnly = false;
  951. }
  952. } else {
  953. cookie.hostOnly = true;
  954. cookie.domain = host;
  955. }
  956. //S5.2.4 If the attribute-value is empty or if the first character of the
  957. //attribute-value is not %x2F ("/"):
  958. //Let cookie-path be the default-path.
  959. if (!cookie.path || cookie.path[0] !== '/') {
  960. cookie.path = defaultPath(context.pathname);
  961. cookie.pathIsDefault = true;
  962. }
  963. // S5.3 step 8: NOOP; secure attribute
  964. // S5.3 step 9: NOOP; httpOnly attribute
  965. // S5.3 step 10
  966. if (options.http === false && cookie.httpOnly) {
  967. err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
  968. return cb(options.ignoreError ? null : err);
  969. }
  970. var store = this.store;
  971. if (!store.updateCookie) {
  972. store.updateCookie = function(oldCookie, newCookie, cb) {
  973. this.putCookie(newCookie, cb);
  974. };
  975. }
  976. function withCookie(err, oldCookie) {
  977. if (err) {
  978. return cb(err);
  979. }
  980. var next = function(err) {
  981. if (err) {
  982. return cb(err);
  983. } else {
  984. cb(null, cookie);
  985. }
  986. };
  987. if (oldCookie) {
  988. // S5.3 step 11 - "If the cookie store contains a cookie with the same name,
  989. // domain, and path as the newly created cookie:"
  990. if (options.http === false && oldCookie.httpOnly) { // step 11.2
  991. err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
  992. return cb(options.ignoreError ? null : err);
  993. }
  994. cookie.creation = oldCookie.creation; // step 11.3
  995. cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker
  996. cookie.lastAccessed = now;
  997. // Step 11.4 (delete cookie) is implied by just setting the new one:
  998. store.updateCookie(oldCookie, cookie, next); // step 12
  999. } else {
  1000. cookie.creation = cookie.lastAccessed = now;
  1001. store.putCookie(cookie, next); // step 12
  1002. }
  1003. }
  1004. store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);
  1005. };
  1006. // RFC6365 S5.4
  1007. CAN_BE_SYNC.push('getCookies');
  1008. CookieJar.prototype.getCookies = function(url, options, cb) {
  1009. var context = getCookieContext(url);
  1010. if (options instanceof Function) {
  1011. cb = options;
  1012. options = {};
  1013. }
  1014. var host = canonicalDomain(context.hostname);
  1015. var path = context.pathname || '/';
  1016. var secure = options.secure;
  1017. if (secure == null && context.protocol &&
  1018. (context.protocol == 'https:' || context.protocol == 'wss:'))
  1019. {
  1020. secure = true;
  1021. }
  1022. var http = options.http;
  1023. if (http == null) {
  1024. http = true;
  1025. }
  1026. var now = options.now || Date.now();
  1027. var expireCheck = options.expire !== false;
  1028. var allPaths = !!options.allPaths;
  1029. var store = this.store;
  1030. function matchingCookie(c) {
  1031. // "Either:
  1032. // The cookie's host-only-flag is true and the canonicalized
  1033. // request-host is identical to the cookie's domain.
  1034. // Or:
  1035. // The cookie's host-only-flag is false and the canonicalized
  1036. // request-host domain-matches the cookie's domain."
  1037. if (c.hostOnly) {
  1038. if (c.domain != host) {
  1039. return false;
  1040. }
  1041. } else {
  1042. if (!domainMatch(host, c.domain, false)) {
  1043. return false;
  1044. }
  1045. }
  1046. // "The request-uri's path path-matches the cookie's path."
  1047. if (!allPaths && !pathMatch(path, c.path)) {
  1048. return false;
  1049. }
  1050. // "If the cookie's secure-only-flag is true, then the request-uri's
  1051. // scheme must denote a "secure" protocol"
  1052. if (c.secure && !secure) {
  1053. return false;
  1054. }
  1055. // "If the cookie's http-only-flag is true, then exclude the cookie if the
  1056. // cookie-string is being generated for a "non-HTTP" API"
  1057. if (c.httpOnly && !http) {
  1058. return false;
  1059. }
  1060. // deferred from S5.3
  1061. // non-RFC: allow retention of expired cookies by choice
  1062. if (expireCheck && c.expiryTime() <= now) {
  1063. store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored
  1064. return false;
  1065. }
  1066. return true;
  1067. }
  1068. store.findCookies(host, allPaths ? null : path, function(err,cookies) {
  1069. if (err) {
  1070. return cb(err);
  1071. }
  1072. cookies = cookies.filter(matchingCookie);
  1073. // sorting of S5.4 part 2
  1074. if (options.sort !== false) {
  1075. cookies = cookies.sort(cookieCompare);
  1076. }
  1077. // S5.4 part 3
  1078. var now = new Date();
  1079. cookies.forEach(function(c) {
  1080. c.lastAccessed = now;
  1081. });
  1082. // TODO persist lastAccessed
  1083. cb(null,cookies);
  1084. });
  1085. };
  1086. CAN_BE_SYNC.push('getCookieString');
  1087. CookieJar.prototype.getCookieString = function(/*..., cb*/) {
  1088. var args = Array.prototype.slice.call(arguments,0);
  1089. var cb = args.pop();
  1090. var next = function(err,cookies) {
  1091. if (err) {
  1092. cb(err);
  1093. } else {
  1094. cb(null, cookies
  1095. .sort(cookieCompare)
  1096. .map(function(c){
  1097. return c.cookieString();
  1098. })
  1099. .join('; '));
  1100. }
  1101. };
  1102. args.push(next);
  1103. this.getCookies.apply(this,args);
  1104. };
  1105. CAN_BE_SYNC.push('getSetCookieStrings');
  1106. CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) {
  1107. var args = Array.prototype.slice.call(arguments,0);
  1108. var cb = args.pop();
  1109. var next = function(err,cookies) {
  1110. if (err) {
  1111. cb(err);
  1112. } else {
  1113. cb(null, cookies.map(function(c){
  1114. return c.toString();
  1115. }));
  1116. }
  1117. };
  1118. args.push(next);
  1119. this.getCookies.apply(this,args);
  1120. };
  1121. CAN_BE_SYNC.push('serialize');
  1122. CookieJar.prototype.serialize = function(cb) {
  1123. var type = this.store.constructor.name;
  1124. if (type === 'Object') {
  1125. type = null;
  1126. }
  1127. // update README.md "Serialization Format" if you change this, please!
  1128. var serialized = {
  1129. // The version of tough-cookie that serialized this jar. Generally a good
  1130. // practice since future versions can make data import decisions based on
  1131. // known past behavior. When/if this matters, use `semver`.
  1132. version: 'tough-cookie@'+VERSION,
  1133. // add the store type, to make humans happy:
  1134. storeType: type,
  1135. // CookieJar configuration:
  1136. rejectPublicSuffixes: !!this.rejectPublicSuffixes,
  1137. // this gets filled from getAllCookies:
  1138. cookies: []
  1139. };
  1140. if (!(this.store.getAllCookies &&
  1141. typeof this.store.getAllCookies === 'function'))
  1142. {
  1143. return cb(new Error('store does not support getAllCookies and cannot be serialized'));
  1144. }
  1145. this.store.getAllCookies(function(err,cookies) {
  1146. if (err) {
  1147. return cb(err);
  1148. }
  1149. serialized.cookies = cookies.map(function(cookie) {
  1150. // convert to serialized 'raw' cookies
  1151. cookie = (cookie instanceof Cookie) ? cookie.toJSON() : cookie;
  1152. // Remove the index so new ones get assigned during deserialization
  1153. delete cookie.creationIndex;
  1154. return cookie;
  1155. });
  1156. return cb(null, serialized);
  1157. });
  1158. };
  1159. // well-known name that JSON.stringify calls
  1160. CookieJar.prototype.toJSON = function() {
  1161. return this.serializeSync();
  1162. };
  1163. // use the class method CookieJar.deserialize instead of calling this directly
  1164. CAN_BE_SYNC.push('_importCookies');
  1165. CookieJar.prototype._importCookies = function(serialized, cb) {
  1166. var jar = this;
  1167. var cookies = serialized.cookies;
  1168. if (!cookies || !Array.isArray(cookies)) {
  1169. return cb(new Error('serialized jar has no cookies array'));
  1170. }
  1171. cookies = cookies.slice(); // do not modify the original
  1172. function putNext(err) {
  1173. if (err) {
  1174. return cb(err);
  1175. }
  1176. if (!cookies.length) {
  1177. return cb(err, jar);
  1178. }
  1179. var cookie;
  1180. try {
  1181. cookie = fromJSON(cookies.shift());
  1182. } catch (e) {
  1183. return cb(e);
  1184. }
  1185. if (cookie === null) {
  1186. return putNext(null); // skip this cookie
  1187. }
  1188. jar.store.putCookie(cookie, putNext);
  1189. }
  1190. putNext();
  1191. };
  1192. CookieJar.deserialize = function(strOrObj, store, cb) {
  1193. if (arguments.length !== 3) {
  1194. // store is optional
  1195. cb = store;
  1196. store = null;
  1197. }
  1198. var serialized;
  1199. if (typeof strOrObj === 'string') {
  1200. serialized = jsonParse(strOrObj);
  1201. if (serialized instanceof Error) {
  1202. return cb(serialized);
  1203. }
  1204. } else {
  1205. serialized = strOrObj;
  1206. }
  1207. var jar = new CookieJar(store, serialized.rejectPublicSuffixes);
  1208. jar._importCookies(serialized, function(err) {
  1209. if (err) {
  1210. return cb(err);
  1211. }
  1212. cb(null, jar);
  1213. });
  1214. };
  1215. CookieJar.deserializeSync = function(strOrObj, store) {
  1216. var serialized = typeof strOrObj === 'string' ?
  1217. JSON.parse(strOrObj) : strOrObj;
  1218. var jar = new CookieJar(store, serialized.rejectPublicSuffixes);
  1219. // catch this mistake early:
  1220. if (!jar.store.synchronous) {
  1221. throw new Error('CookieJar store is not synchronous; use async API instead.');
  1222. }
  1223. jar._importCookiesSync(serialized);
  1224. return jar;
  1225. };
  1226. CookieJar.fromJSON = CookieJar.deserializeSync;
  1227. CAN_BE_SYNC.push('clone');
  1228. CookieJar.prototype.clone = function(newStore, cb) {
  1229. if (arguments.length === 1) {
  1230. cb = newStore;
  1231. newStore = null;
  1232. }
  1233. this.serialize(function(err,serialized) {
  1234. if (err) {
  1235. return cb(err);
  1236. }
  1237. CookieJar.deserialize(newStore, serialized, cb);
  1238. });
  1239. };
  1240. // Use a closure to provide a true imperative API for synchronous stores.
  1241. function syncWrap(method) {
  1242. return function() {
  1243. if (!this.store.synchronous) {
  1244. throw new Error('CookieJar store is not synchronous; use async API instead.');
  1245. }
  1246. var args = Array.prototype.slice.call(arguments);
  1247. var syncErr, syncResult;
  1248. args.push(function syncCb(err, result) {
  1249. syncErr = err;
  1250. syncResult = result;
  1251. });
  1252. this[method].apply(this, args);
  1253. if (syncErr) {
  1254. throw syncErr;
  1255. }
  1256. return syncResult;
  1257. };
  1258. }
  1259. // wrap all declared CAN_BE_SYNC methods in the sync wrapper
  1260. CAN_BE_SYNC.forEach(function(method) {
  1261. CookieJar.prototype[method+'Sync'] = syncWrap(method);
  1262. });
  1263. exports.CookieJar = CookieJar;
  1264. exports.Cookie = Cookie;
  1265. exports.Store = Store;
  1266. exports.MemoryCookieStore = MemoryCookieStore;
  1267. exports.parseDate = parseDate;
  1268. exports.formatDate = formatDate;
  1269. exports.parse = parse;
  1270. exports.fromJSON = fromJSON;
  1271. exports.domainMatch = domainMatch;
  1272. exports.defaultPath = defaultPath;
  1273. exports.pathMatch = pathMatch;
  1274. exports.getPublicSuffix = pubsuffix.getPublicSuffix;
  1275. exports.cookieCompare = cookieCompare;
  1276. exports.permuteDomain = __webpack_require__(19).permuteDomain;
  1277. exports.permutePath = permutePath;
  1278. exports.canonicalDomain = canonicalDomain;
  1279. /***/ }),
  1280. /* 1 */
  1281. /***/ (function(module, exports) {
  1282. /*
  1283. * Tests if a given ip or host string is a valid IPv4 or IPv6 address.
  1284. * Regex found at: https://stackoverflow.com/questions/9208814/validate-ipv4-ipv6-and-hostname
  1285. */
  1286. var patternIPv4 = /^\s*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\s*$/g;
  1287. var patternIPv6 = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/g;
  1288. function isIPv4(hostOrIp) {
  1289. return hostOrIp.match(patternIPv4) ? true : false;
  1290. }
  1291. function isIPv6(hostOrIp) {
  1292. return hostOrIp.match(patternIPv6) ? true : false;
  1293. }
  1294. function isIP(hostOrIp) {
  1295. if (isIPv4(hostOrIp)) {
  1296. return 4;
  1297. }
  1298. if (isIPv6(hostOrIp)) {
  1299. return 6;
  1300. }
  1301. return 0;
  1302. }
  1303. module.exports = {
  1304. isIPv4: isIPv4,
  1305. isIPv6: isIPv6,
  1306. isIP: isIP
  1307. };
  1308. /***/ }),
  1309. /* 2 */
  1310. /***/ (function(module, exports, __webpack_require__) {
  1311. // Copyright Joyent, Inc. and other Node contributors.
  1312. //
  1313. // Permission is hereby granted, free of charge, to any person obtaining a
  1314. // copy of this software and associated documentation files (the
  1315. // "Software"), to deal in the Software without restriction, including
  1316. // without limitation the rights to use, copy, modify, merge, publish,
  1317. // distribute, sublicense, and/or sell copies of the Software, and to permit
  1318. // persons to whom the Software is furnished to do so, subject to the
  1319. // following conditions:
  1320. //
  1321. // The above copyright notice and this permission notice shall be included
  1322. // in all copies or substantial portions of the Software.
  1323. //
  1324. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  1325. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  1326. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  1327. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  1328. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  1329. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  1330. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  1331. 'use strict';
  1332. var punycode = __webpack_require__(3);
  1333. var util = __webpack_require__(5);
  1334. exports.parse = urlParse;
  1335. exports.resolve = urlResolve;
  1336. exports.resolveObject = urlResolveObject;
  1337. exports.format = urlFormat;
  1338. exports.Url = Url;
  1339. function Url() {
  1340. this.protocol = null;
  1341. this.slashes = null;
  1342. this.auth = null;
  1343. this.host = null;
  1344. this.port = null;
  1345. this.hostname = null;
  1346. this.hash = null;
  1347. this.search = null;
  1348. this.query = null;
  1349. this.pathname = null;
  1350. this.path = null;
  1351. this.href = null;
  1352. }
  1353. // Reference: RFC 3986, RFC 1808, RFC 2396
  1354. // define these here so at least they only have to be
  1355. // compiled once on the first module load.
  1356. var protocolPattern = /^([a-z0-9.+-]+:)/i,
  1357. portPattern = /:[0-9]*$/,
  1358. // Special case for a simple path URL
  1359. simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
  1360. // RFC 2396: characters reserved for delimiting URLs.
  1361. // We actually just auto-escape these.
  1362. delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
  1363. // RFC 2396: characters not allowed for various reasons.
  1364. unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
  1365. // Allowed by RFCs, but cause of XSS attacks. Always escape these.
  1366. autoEscape = ['\''].concat(unwise),
  1367. // Characters that are never ever allowed in a hostname.
  1368. // Note that any invalid chars are also handled, but these
  1369. // are the ones that are *expected* to be seen, so we fast-path
  1370. // them.
  1371. nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
  1372. hostEndingChars = ['/', '?', '#'],
  1373. hostnameMaxLen = 255,
  1374. hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
  1375. hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
  1376. // protocols that can allow "unsafe" and "unwise" chars.
  1377. unsafeProtocol = {
  1378. 'javascript': true,
  1379. 'javascript:': true
  1380. },
  1381. // protocols that never have a hostname.
  1382. hostlessProtocol = {
  1383. 'javascript': true,
  1384. 'javascript:': true
  1385. },
  1386. // protocols that always contain a // bit.
  1387. slashedProtocol = {
  1388. 'http': true,
  1389. 'https': true,
  1390. 'ftp': true,
  1391. 'gopher': true,
  1392. 'file': true,
  1393. 'http:': true,
  1394. 'https:': true,
  1395. 'ftp:': true,
  1396. 'gopher:': true,
  1397. 'file:': true
  1398. },
  1399. querystring = __webpack_require__(6);
  1400. function urlParse(url, parseQueryString, slashesDenoteHost) {
  1401. if (url && util.isObject(url) && url instanceof Url) return url;
  1402. var u = new Url;
  1403. u.parse(url, parseQueryString, slashesDenoteHost);
  1404. return u;
  1405. }
  1406. Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
  1407. if (!util.isString(url)) {
  1408. throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
  1409. }
  1410. // Copy chrome, IE, opera backslash-handling behavior.
  1411. // Back slashes before the query string get converted to forward slashes
  1412. // See: https://code.google.com/p/chromium/issues/detail?id=25916
  1413. var queryIndex = url.indexOf('?'),
  1414. splitter =
  1415. (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
  1416. uSplit = url.split(splitter),
  1417. slashRegex = /\\/g;
  1418. uSplit[0] = uSplit[0].replace(slashRegex, '/');
  1419. url = uSplit.join(splitter);
  1420. var rest = url;
  1421. // trim before proceeding.
  1422. // This is to support parse stuff like " http://foo.com \n"
  1423. rest = rest.trim();
  1424. if (!slashesDenoteHost && url.split('#').length === 1) {
  1425. // Try fast path regexp
  1426. var simplePath = simplePathPattern.exec(rest);
  1427. if (simplePath) {
  1428. this.path = rest;
  1429. this.href = rest;
  1430. this.pathname = simplePath[1];
  1431. if (simplePath[2]) {
  1432. this.search = simplePath[2];
  1433. if (parseQueryString) {
  1434. this.query = querystring.parse(this.search.substr(1));
  1435. } else {
  1436. this.query = this.search.substr(1);
  1437. }
  1438. } else if (parseQueryString) {
  1439. this.search = '';
  1440. this.query = {};
  1441. }
  1442. return this;
  1443. }
  1444. }
  1445. var proto = protocolPattern.exec(rest);
  1446. if (proto) {
  1447. proto = proto[0];
  1448. var lowerProto = proto.toLowerCase();
  1449. this.protocol = lowerProto;
  1450. rest = rest.substr(proto.length);
  1451. }
  1452. // figure out if it's got a host
  1453. // user@server is *always* interpreted as a hostname, and url
  1454. // resolution will treat //foo/bar as host=foo,path=bar because that's
  1455. // how the browser resolves relative URLs.
  1456. if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
  1457. var slashes = rest.substr(0, 2) === '//';
  1458. if (slashes && !(proto && hostlessProtocol[proto])) {
  1459. rest = rest.substr(2);
  1460. this.slashes = true;
  1461. }
  1462. }
  1463. if (!hostlessProtocol[proto] &&
  1464. (slashes || (proto && !slashedProtocol[proto]))) {
  1465. // there's a hostname.
  1466. // the first instance of /, ?, ;, or # ends the host.
  1467. //
  1468. // If there is an @ in the hostname, then non-host chars *are* allowed
  1469. // to the left of the last @ sign, unless some host-ending character
  1470. // comes *before* the @-sign.
  1471. // URLs are obnoxious.
  1472. //
  1473. // ex:
  1474. // http://a@b@c/ => user:a@b host:c
  1475. // http://a@b?@c => user:a host:c path:/?@c
  1476. // v0.12 TODO(isaacs): This is not quite how Chrome does things.
  1477. // Review our test case against browsers more comprehensively.
  1478. // find the first instance of any hostEndingChars
  1479. var hostEnd = -1;
  1480. for (var i = 0; i < hostEndingChars.length; i++) {
  1481. var hec = rest.indexOf(hostEndingChars[i]);
  1482. if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
  1483. hostEnd = hec;
  1484. }
  1485. // at this point, either we have an explicit point where the
  1486. // auth portion cannot go past, or the last @ char is the decider.
  1487. var auth, atSign;
  1488. if (hostEnd === -1) {
  1489. // atSign can be anywhere.
  1490. atSign = rest.lastIndexOf('@');
  1491. } else {
  1492. // atSign must be in auth portion.
  1493. // http://a@b/c@d => host:b auth:a path:/c@d
  1494. atSign = rest.lastIndexOf('@', hostEnd);
  1495. }
  1496. // Now we have a portion which is definitely the auth.
  1497. // Pull that off.
  1498. if (atSign !== -1) {
  1499. auth = rest.slice(0, atSign);
  1500. rest = rest.slice(atSign + 1);
  1501. this.auth = decodeURIComponent(auth);
  1502. }
  1503. // the host is the remaining to the left of the first non-host char
  1504. hostEnd = -1;
  1505. for (var i = 0; i < nonHostChars.length; i++) {
  1506. var hec = rest.indexOf(nonHostChars[i]);
  1507. if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
  1508. hostEnd = hec;
  1509. }
  1510. // if we still have not hit it, then the entire thing is a host.
  1511. if (hostEnd === -1)
  1512. hostEnd = rest.length;
  1513. this.host = rest.slice(0, hostEnd);
  1514. rest = rest.slice(hostEnd);
  1515. // pull out port.
  1516. this.parseHost();
  1517. // we've indicated that there is a hostname,
  1518. // so even if it's empty, it has to be present.
  1519. this.hostname = this.hostname || '';
  1520. // if hostname begins with [ and ends with ]
  1521. // assume that it's an IPv6 address.
  1522. var ipv6Hostname = this.hostname[0] === '[' &&
  1523. this.hostname[this.hostname.length - 1] === ']';
  1524. // validate a little.
  1525. if (!ipv6Hostname) {
  1526. var hostparts = this.hostname.split(/\./);
  1527. for (var i = 0, l = hostparts.length; i < l; i++) {
  1528. var part = hostparts[i];
  1529. if (!part) continue;
  1530. if (!part.match(hostnamePartPattern)) {
  1531. var newpart = '';
  1532. for (var j = 0, k = part.length; j < k; j++) {
  1533. if (part.charCodeAt(j) > 127) {
  1534. // we replace non-ASCII char with a temporary placeholder
  1535. // we need this to make sure size of hostname is not
  1536. // broken by replacing non-ASCII by nothing
  1537. newpart += 'x';
  1538. } else {
  1539. newpart += part[j];
  1540. }
  1541. }
  1542. // we test again with ASCII char only
  1543. if (!newpart.match(hostnamePartPattern)) {
  1544. var validParts = hostparts.slice(0, i);
  1545. var notHost = hostparts.slice(i + 1);
  1546. var bit = part.match(hostnamePartStart);
  1547. if (bit) {
  1548. validParts.push(bit[1]);
  1549. notHost.unshift(bit[2]);
  1550. }
  1551. if (notHost.length) {
  1552. rest = '/' + notHost.join('.') + rest;
  1553. }
  1554. this.hostname = validParts.join('.');
  1555. break;
  1556. }
  1557. }
  1558. }
  1559. }
  1560. if (this.hostname.length > hostnameMaxLen) {
  1561. this.hostname = '';
  1562. } else {
  1563. // hostnames are always lower case.
  1564. this.hostname = this.hostname.toLowerCase();
  1565. }
  1566. if (!ipv6Hostname) {
  1567. // IDNA Support: Returns a punycoded representation of "domain".
  1568. // It only converts parts of the domain name that
  1569. // have non-ASCII characters, i.e. it doesn't matter if
  1570. // you call it with a domain that already is ASCII-only.
  1571. this.hostname = punycode.toASCII(this.hostname);
  1572. }
  1573. var p = this.port ? ':' + this.port : '';
  1574. var h = this.hostname || '';
  1575. this.host = h + p;
  1576. this.href += this.host;
  1577. // strip [ and ] from the hostname
  1578. // the host field still retains them, though
  1579. if (ipv6Hostname) {
  1580. this.hostname = this.hostname.substr(1, this.hostname.length - 2);
  1581. if (rest[0] !== '/') {
  1582. rest = '/' + rest;
  1583. }
  1584. }
  1585. }
  1586. // now rest is set to the post-host stuff.
  1587. // chop off any delim chars.
  1588. if (!unsafeProtocol[lowerProto]) {
  1589. // First, make 100% sure that any "autoEscape" chars get
  1590. // escaped, even if encodeURIComponent doesn't think they
  1591. // need to be.
  1592. for (var i = 0, l = autoEscape.length; i < l; i++) {
  1593. var ae = autoEscape[i];
  1594. if (rest.indexOf(ae) === -1)
  1595. continue;
  1596. var esc = encodeURIComponent(ae);
  1597. if (esc === ae) {
  1598. esc = escape(ae);
  1599. }
  1600. rest = rest.split(ae).join(esc);
  1601. }
  1602. }
  1603. // chop off from the tail first.
  1604. var hash = rest.indexOf('#');
  1605. if (hash !== -1) {
  1606. // got a fragment string.
  1607. this.hash = rest.substr(hash);
  1608. rest = rest.slice(0, hash);
  1609. }
  1610. var qm = rest.indexOf('?');
  1611. if (qm !== -1) {
  1612. this.search = rest.substr(qm);
  1613. this.query = rest.substr(qm + 1);
  1614. if (parseQueryString) {
  1615. this.query = querystring.parse(this.query);
  1616. }
  1617. rest = rest.slice(0, qm);
  1618. } else if (parseQueryString) {
  1619. // no query string, but parseQueryString still requested
  1620. this.search = '';
  1621. this.query = {};
  1622. }
  1623. if (rest) this.pathname = rest;
  1624. if (slashedProtocol[lowerProto] &&
  1625. this.hostname && !this.pathname) {
  1626. this.pathname = '/';
  1627. }
  1628. //to support http.request
  1629. if (this.pathname || this.search) {
  1630. var p = this.pathname || '';
  1631. var s = this.search || '';
  1632. this.path = p + s;
  1633. }
  1634. // finally, reconstruct the href based on what has been validated.
  1635. this.href = this.format();
  1636. return this;
  1637. };
  1638. // format a parsed object into a url string
  1639. function urlFormat(obj) {
  1640. // ensure it's an object, and not a string url.
  1641. // If it's an obj, this is a no-op.
  1642. // this way, you can call url_format() on strings
  1643. // to clean up potentially wonky urls.
  1644. if (util.isString(obj)) obj = urlParse(obj);
  1645. if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
  1646. return obj.format();
  1647. }
  1648. Url.prototype.format = function() {
  1649. var auth = this.auth || '';
  1650. if (auth) {
  1651. auth = encodeURIComponent(auth);
  1652. auth = auth.replace(/%3A/i, ':');
  1653. auth += '@';
  1654. }
  1655. var protocol = this.protocol || '',
  1656. pathname = this.pathname || '',
  1657. hash = this.hash || '',
  1658. host = false,
  1659. query = '';
  1660. if (this.host) {
  1661. host = auth + this.host;
  1662. } else if (this.hostname) {
  1663. host = auth + (this.hostname.indexOf(':') === -1 ?
  1664. this.hostname :
  1665. '[' + this.hostname + ']');
  1666. if (this.port) {
  1667. host += ':' + this.port;
  1668. }
  1669. }
  1670. if (this.query &&
  1671. util.isObject(this.query) &&
  1672. Object.keys(this.query).length) {
  1673. query = querystring.stringify(this.query);
  1674. }
  1675. var search = this.search || (query && ('?' + query)) || '';
  1676. if (protocol && protocol.substr(-1) !== ':') protocol += ':';
  1677. // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.
  1678. // unless they had them to begin with.
  1679. if (this.slashes ||
  1680. (!protocol || slashedProtocol[protocol]) && host !== false) {
  1681. host = '//' + (host || '');
  1682. if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
  1683. } else if (!host) {
  1684. host = '';
  1685. }
  1686. if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
  1687. if (search && search.charAt(0) !== '?') search = '?' + search;
  1688. pathname = pathname.replace(/[?#]/g, function(match) {
  1689. return encodeURIComponent(match);
  1690. });
  1691. search = search.replace('#', '%23');
  1692. return protocol + host + pathname + search + hash;
  1693. };
  1694. function urlResolve(source, relative) {
  1695. return urlParse(source, false, true).resolve(relative);
  1696. }
  1697. Url.prototype.resolve = function(relative) {
  1698. return this.resolveObject(urlParse(relative, false, true)).format();
  1699. };
  1700. function urlResolveObject(source, relative) {
  1701. if (!source) return relative;
  1702. return urlParse(source, false, true).resolveObject(relative);
  1703. }
  1704. Url.prototype.resolveObject = function(relative) {
  1705. if (util.isString(relative)) {
  1706. var rel = new Url();
  1707. rel.parse(relative, false, true);
  1708. relative = rel;
  1709. }
  1710. var result = new Url();
  1711. var tkeys = Object.keys(this);
  1712. for (var tk = 0; tk < tkeys.length; tk++) {
  1713. var tkey = tkeys[tk];
  1714. result[tkey] = this[tkey];
  1715. }
  1716. // hash is always overridden, no matter what.
  1717. // even href="" will remove it.
  1718. result.hash = relative.hash;
  1719. // if the relative url is empty, then there's nothing left to do here.
  1720. if (relative.href === '') {
  1721. result.href = result.format();
  1722. return result;
  1723. }
  1724. // hrefs like //foo/bar always cut to the protocol.
  1725. if (relative.slashes && !relative.protocol) {
  1726. // take everything except the protocol from relative
  1727. var rkeys = Object.keys(relative);
  1728. for (var rk = 0; rk < rkeys.length; rk++) {
  1729. var rkey = rkeys[rk];
  1730. if (rkey !== 'protocol')
  1731. result[rkey] = relative[rkey];
  1732. }
  1733. //urlParse appends trailing / to urls like http://www.example.com
  1734. if (slashedProtocol[result.protocol] &&
  1735. result.hostname && !result.pathname) {
  1736. result.path = result.pathname = '/';
  1737. }
  1738. result.href = result.format();
  1739. return result;
  1740. }
  1741. if (relative.protocol && relative.protocol !== result.protocol) {
  1742. // if it's a known url protocol, then changing
  1743. // the protocol does weird things
  1744. // first, if it's not file:, then we MUST have a host,
  1745. // and if there was a path
  1746. // to begin with, then we MUST have a path.
  1747. // if it is file:, then the host is dropped,
  1748. // because that's known to be hostless.
  1749. // anything else is assumed to be absolute.
  1750. if (!slashedProtocol[relative.protocol]) {
  1751. var keys = Object.keys(relative);
  1752. for (var v = 0; v < keys.length; v++) {
  1753. var k = keys[v];
  1754. result[k] = relative[k];
  1755. }
  1756. result.href = result.format();
  1757. return result;
  1758. }
  1759. result.protocol = relative.protocol;
  1760. if (!relative.host && !hostlessProtocol[relative.protocol]) {
  1761. var relPath = (relative.pathname || '').split('/');
  1762. while (relPath.length && !(relative.host = relPath.shift()));
  1763. if (!relative.host) relative.host = '';
  1764. if (!relative.hostname) relative.hostname = '';
  1765. if (relPath[0] !== '') relPath.unshift('');
  1766. if (relPath.length < 2) relPath.unshift('');
  1767. result.pathname = relPath.join('/');
  1768. } else {
  1769. result.pathname = relative.pathname;
  1770. }
  1771. result.search = relative.search;
  1772. result.query = relative.query;
  1773. result.host = relative.host || '';
  1774. result.auth = relative.auth;
  1775. result.hostname = relative.hostname || relative.host;
  1776. result.port = relative.port;
  1777. // to support http.request
  1778. if (result.pathname || result.search) {
  1779. var p = result.pathname || '';
  1780. var s = result.search || '';
  1781. result.path = p + s;
  1782. }
  1783. result.slashes = result.slashes || relative.slashes;
  1784. result.href = result.format();
  1785. return result;
  1786. }
  1787. var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
  1788. isRelAbs = (
  1789. relative.host ||
  1790. relative.pathname && relative.pathname.charAt(0) === '/'
  1791. ),
  1792. mustEndAbs = (isRelAbs || isSourceAbs ||
  1793. (result.host && relative.pathname)),
  1794. removeAllDots = mustEndAbs,
  1795. srcPath = result.pathname && result.pathname.split('/') || [],
  1796. relPath = relative.pathname && relative.pathname.split('/') || [],
  1797. psychotic = result.protocol && !slashedProtocol[result.protocol];
  1798. // if the url is a non-slashed url, then relative
  1799. // links like ../.. should be able
  1800. // to crawl up to the hostname, as well. This is strange.
  1801. // result.protocol has already been set by now.
  1802. // Later on, put the first path part into the host field.
  1803. if (psychotic) {
  1804. result.hostname = '';
  1805. result.port = null;
  1806. if (result.host) {
  1807. if (srcPath[0] === '') srcPath[0] = result.host;
  1808. else srcPath.unshift(result.host);
  1809. }
  1810. result.host = '';
  1811. if (relative.protocol) {
  1812. relative.hostname = null;
  1813. relative.port = null;
  1814. if (relative.host) {
  1815. if (relPath[0] === '') relPath[0] = relative.host;
  1816. else relPath.unshift(relative.host);
  1817. }
  1818. relative.host = null;
  1819. }
  1820. mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
  1821. }
  1822. if (isRelAbs) {
  1823. // it's absolute.
  1824. result.host = (relative.host || relative.host === '') ?
  1825. relative.host : result.host;
  1826. result.hostname = (relative.hostname || relative.hostname === '') ?
  1827. relative.hostname : result.hostname;
  1828. result.search = relative.search;
  1829. result.query = relative.query;
  1830. srcPath = relPath;
  1831. // fall through to the dot-handling below.
  1832. } else if (relPath.length) {
  1833. // it's relative
  1834. // throw away the existing file, and take the new path instead.
  1835. if (!srcPath) srcPath = [];
  1836. srcPath.pop();
  1837. srcPath = srcPath.concat(relPath);
  1838. result.search = relative.search;
  1839. result.query = relative.query;
  1840. } else if (!util.isNullOrUndefined(relative.search)) {
  1841. // just pull out the search.
  1842. // like href='?foo'.
  1843. // Put this after the other two cases because it simplifies the booleans
  1844. if (psychotic) {
  1845. result.hostname = result.host = srcPath.shift();
  1846. //occationaly the auth can get stuck only in host
  1847. //this especially happens in cases like
  1848. //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
  1849. var authInHost = result.host && result.host.indexOf('@') > 0 ?
  1850. result.host.split('@') : false;
  1851. if (authInHost) {
  1852. result.auth = authInHost.shift();
  1853. result.host = result.hostname = authInHost.shift();
  1854. }
  1855. }
  1856. result.search = relative.search;
  1857. result.query = relative.query;
  1858. //to support http.request
  1859. if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
  1860. result.path = (result.pathname ? result.pathname : '') +
  1861. (result.search ? result.search : '');
  1862. }
  1863. result.href = result.format();
  1864. return result;
  1865. }
  1866. if (!srcPath.length) {
  1867. // no path at all. easy.
  1868. // we've already handled the other stuff above.
  1869. result.pathname = null;
  1870. //to support http.request
  1871. if (result.search) {
  1872. result.path = '/' + result.search;
  1873. } else {
  1874. result.path = null;
  1875. }
  1876. result.href = result.format();
  1877. return result;
  1878. }
  1879. // if a url ENDs in . or .., then it must get a trailing slash.
  1880. // however, if it ends in anything else non-slashy,
  1881. // then it must NOT get a trailing slash.
  1882. var last = srcPath.slice(-1)[0];
  1883. var hasTrailingSlash = (
  1884. (result.host || relative.host || srcPath.length > 1) &&
  1885. (last === '.' || last === '..') || last === '');
  1886. // strip single dots, resolve double dots to parent dir
  1887. // if the path tries to go above the root, `up` ends up > 0
  1888. var up = 0;
  1889. for (var i = srcPath.length; i >= 0; i--) {
  1890. last = srcPath[i];
  1891. if (last === '.') {
  1892. srcPath.splice(i, 1);
  1893. } else if (last === '..') {
  1894. srcPath.splice(i, 1);
  1895. up++;
  1896. } else if (up) {
  1897. srcPath.splice(i, 1);
  1898. up--;
  1899. }
  1900. }
  1901. // if the path is allowed to go above the root, restore leading ..s
  1902. if (!mustEndAbs && !removeAllDots) {
  1903. for (; up--; up) {
  1904. srcPath.unshift('..');
  1905. }
  1906. }
  1907. if (mustEndAbs && srcPath[0] !== '' &&
  1908. (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
  1909. srcPath.unshift('');
  1910. }
  1911. if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
  1912. srcPath.push('');
  1913. }
  1914. var isAbsolute = srcPath[0] === '' ||
  1915. (srcPath[0] && srcPath[0].charAt(0) === '/');
  1916. // put the host back
  1917. if (psychotic) {
  1918. result.hostname = result.host = isAbsolute ? '' :
  1919. srcPath.length ? srcPath.shift() : '';
  1920. //occationaly the auth can get stuck only in host
  1921. //this especially happens in cases like
  1922. //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
  1923. var authInHost = result.host && result.host.indexOf('@') > 0 ?
  1924. result.host.split('@') : false;
  1925. if (authInHost) {
  1926. result.auth = authInHost.shift();
  1927. result.host = result.hostname = authInHost.shift();
  1928. }
  1929. }
  1930. mustEndAbs = mustEndAbs || (result.host && srcPath.length);
  1931. if (mustEndAbs && !isAbsolute) {
  1932. srcPath.unshift('');
  1933. }
  1934. if (!srcPath.length) {
  1935. result.pathname = null;
  1936. result.path = null;
  1937. } else {
  1938. result.pathname = srcPath.join('/');
  1939. }
  1940. //to support request.http
  1941. if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
  1942. result.path = (result.pathname ? result.pathname : '') +
  1943. (result.search ? result.search : '');
  1944. }
  1945. result.auth = relative.auth || result.auth;
  1946. result.slashes = result.slashes || relative.slashes;
  1947. result.href = result.format();
  1948. return result;
  1949. };
  1950. Url.prototype.parseHost = function() {
  1951. var host = this.host;
  1952. var port = portPattern.exec(host);
  1953. if (port) {
  1954. port = port[0];
  1955. if (port !== ':') {
  1956. this.port = port.substr(1);
  1957. }
  1958. host = host.substr(0, host.length - port.length);
  1959. }
  1960. if (host) this.hostname = host;
  1961. };
  1962. /***/ }),
  1963. /* 3 */
  1964. /***/ (function(module, exports, __webpack_require__) {
  1965. var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.3.2 by @mathias */
  1966. ;(function(root) {
  1967. /** Detect free variables */
  1968. var freeExports = typeof exports == 'object' && exports &&
  1969. !exports.nodeType && exports;
  1970. var freeModule = typeof module == 'object' && module &&
  1971. !module.nodeType && module;
  1972. var freeGlobal = typeof global == 'object' && global;
  1973. if (
  1974. freeGlobal.global === freeGlobal ||
  1975. freeGlobal.window === freeGlobal ||
  1976. freeGlobal.self === freeGlobal
  1977. ) {
  1978. root = freeGlobal;
  1979. }
  1980. /**
  1981. * The `punycode` object.
  1982. * @name punycode
  1983. * @type Object
  1984. */
  1985. var punycode,
  1986. /** Highest positive signed 32-bit float value */
  1987. maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
  1988. /** Bootstring parameters */
  1989. base = 36,
  1990. tMin = 1,
  1991. tMax = 26,
  1992. skew = 38,
  1993. damp = 700,
  1994. initialBias = 72,
  1995. initialN = 128, // 0x80
  1996. delimiter = '-', // '\x2D'
  1997. /** Regular expressions */
  1998. regexPunycode = /^xn--/,
  1999. regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
  2000. regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
  2001. /** Error messages */
  2002. errors = {
  2003. 'overflow': 'Overflow: input needs wider integers to process',
  2004. 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
  2005. 'invalid-input': 'Invalid input'
  2006. },
  2007. /** Convenience shortcuts */
  2008. baseMinusTMin = base - tMin,
  2009. floor = Math.floor,
  2010. stringFromCharCode = String.fromCharCode,
  2011. /** Temporary variable */
  2012. key;
  2013. /*--------------------------------------------------------------------------*/
  2014. /**
  2015. * A generic error utility function.
  2016. * @private
  2017. * @param {String} type The error type.
  2018. * @returns {Error} Throws a `RangeError` with the applicable error message.
  2019. */
  2020. function error(type) {
  2021. throw RangeError(errors[type]);
  2022. }
  2023. /**
  2024. * A generic `Array#map` utility function.
  2025. * @private
  2026. * @param {Array} array The array to iterate over.
  2027. * @param {Function} callback The function that gets called for every array
  2028. * item.
  2029. * @returns {Array} A new array of values returned by the callback function.
  2030. */
  2031. function map(array, fn) {
  2032. var length = array.length;
  2033. var result = [];
  2034. while (length--) {
  2035. result[length] = fn(array[length]);
  2036. }
  2037. return result;
  2038. }
  2039. /**
  2040. * A simple `Array#map`-like wrapper to work with domain name strings or email
  2041. * addresses.
  2042. * @private
  2043. * @param {String} domain The domain name or email address.
  2044. * @param {Function} callback The function that gets called for every
  2045. * character.
  2046. * @returns {Array} A new string of characters returned by the callback
  2047. * function.
  2048. */
  2049. function mapDomain(string, fn) {
  2050. var parts = string.split('@');
  2051. var result = '';
  2052. if (parts.length > 1) {
  2053. // In email addresses, only the domain name should be punycoded. Leave
  2054. // the local part (i.e. everything up to `@`) intact.
  2055. result = parts[0] + '@';
  2056. string = parts[1];
  2057. }
  2058. // Avoid `split(regex)` for IE8 compatibility. See #17.
  2059. string = string.replace(regexSeparators, '\x2E');
  2060. var labels = string.split('.');
  2061. var encoded = map(labels, fn).join('.');
  2062. return result + encoded;
  2063. }
  2064. /**
  2065. * Creates an array containing the numeric code points of each Unicode
  2066. * character in the string. While JavaScript uses UCS-2 internally,
  2067. * this function will convert a pair of surrogate halves (each of which
  2068. * UCS-2 exposes as separate characters) into a single code point,
  2069. * matching UTF-16.
  2070. * @see `punycode.ucs2.encode`
  2071. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  2072. * @memberOf punycode.ucs2
  2073. * @name decode
  2074. * @param {String} string The Unicode input string (UCS-2).
  2075. * @returns {Array} The new array of code points.
  2076. */
  2077. function ucs2decode(string) {
  2078. var output = [],
  2079. counter = 0,
  2080. length = string.length,
  2081. value,
  2082. extra;
  2083. while (counter < length) {
  2084. value = string.charCodeAt(counter++);
  2085. if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  2086. // high surrogate, and there is a next character
  2087. extra = string.charCodeAt(counter++);
  2088. if ((extra & 0xFC00) == 0xDC00) { // low surrogate
  2089. output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  2090. } else {
  2091. // unmatched surrogate; only append this code unit, in case the next
  2092. // code unit is the high surrogate of a surrogate pair
  2093. output.push(value);
  2094. counter--;
  2095. }
  2096. } else {
  2097. output.push(value);
  2098. }
  2099. }
  2100. return output;
  2101. }
  2102. /**
  2103. * Creates a string based on an array of numeric code points.
  2104. * @see `punycode.ucs2.decode`
  2105. * @memberOf punycode.ucs2
  2106. * @name encode
  2107. * @param {Array} codePoints The array of numeric code points.
  2108. * @returns {String} The new Unicode string (UCS-2).
  2109. */
  2110. function ucs2encode(array) {
  2111. return map(array, function(value) {
  2112. var output = '';
  2113. if (value > 0xFFFF) {
  2114. value -= 0x10000;
  2115. output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
  2116. value = 0xDC00 | value & 0x3FF;
  2117. }
  2118. output += stringFromCharCode(value);
  2119. return output;
  2120. }).join('');
  2121. }
  2122. /**
  2123. * Converts a basic code point into a digit/integer.
  2124. * @see `digitToBasic()`
  2125. * @private
  2126. * @param {Number} codePoint The basic numeric code point value.
  2127. * @returns {Number} The numeric value of a basic code point (for use in
  2128. * representing integers) in the range `0` to `base - 1`, or `base` if
  2129. * the code point does not represent a value.
  2130. */
  2131. function basicToDigit(codePoint) {
  2132. if (codePoint - 48 < 10) {
  2133. return codePoint - 22;
  2134. }
  2135. if (codePoint - 65 < 26) {
  2136. return codePoint - 65;
  2137. }
  2138. if (codePoint - 97 < 26) {
  2139. return codePoint - 97;
  2140. }
  2141. return base;
  2142. }
  2143. /**
  2144. * Converts a digit/integer into a basic code point.
  2145. * @see `basicToDigit()`
  2146. * @private
  2147. * @param {Number} digit The numeric value of a basic code point.
  2148. * @returns {Number} The basic code point whose value (when used for
  2149. * representing integers) is `digit`, which needs to be in the range
  2150. * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
  2151. * used; else, the lowercase form is used. The behavior is undefined
  2152. * if `flag` is non-zero and `digit` has no uppercase form.
  2153. */
  2154. function digitToBasic(digit, flag) {
  2155. // 0..25 map to ASCII a..z or A..Z
  2156. // 26..35 map to ASCII 0..9
  2157. return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
  2158. }
  2159. /**
  2160. * Bias adaptation function as per section 3.4 of RFC 3492.
  2161. * http://tools.ietf.org/html/rfc3492#section-3.4
  2162. * @private
  2163. */
  2164. function adapt(delta, numPoints, firstTime) {
  2165. var k = 0;
  2166. delta = firstTime ? floor(delta / damp) : delta >> 1;
  2167. delta += floor(delta / numPoints);
  2168. for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
  2169. delta = floor(delta / baseMinusTMin);
  2170. }
  2171. return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
  2172. }
  2173. /**
  2174. * Converts a Punycode string of ASCII-only symbols to a string of Unicode
  2175. * symbols.
  2176. * @memberOf punycode
  2177. * @param {String} input The Punycode string of ASCII-only symbols.
  2178. * @returns {String} The resulting string of Unicode symbols.
  2179. */
  2180. function decode(input) {
  2181. // Don't use UCS-2
  2182. var output = [],
  2183. inputLength = input.length,
  2184. out,
  2185. i = 0,
  2186. n = initialN,
  2187. bias = initialBias,
  2188. basic,
  2189. j,
  2190. index,
  2191. oldi,
  2192. w,
  2193. k,
  2194. digit,
  2195. t,
  2196. /** Cached calculation results */
  2197. baseMinusT;
  2198. // Handle the basic code points: let `basic` be the number of input code
  2199. // points before the last delimiter, or `0` if there is none, then copy
  2200. // the first basic code points to the output.
  2201. basic = input.lastIndexOf(delimiter);
  2202. if (basic < 0) {
  2203. basic = 0;
  2204. }
  2205. for (j = 0; j < basic; ++j) {
  2206. // if it's not a basic code point
  2207. if (input.charCodeAt(j) >= 0x80) {
  2208. error('not-basic');
  2209. }
  2210. output.push(input.charCodeAt(j));
  2211. }
  2212. // Main decoding loop: start just after the last delimiter if any basic code
  2213. // points were copied; start at the beginning otherwise.
  2214. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
  2215. // `index` is the index of the next character to be consumed.
  2216. // Decode a generalized variable-length integer into `delta`,
  2217. // which gets added to `i`. The overflow checking is easier
  2218. // if we increase `i` as we go, then subtract off its starting
  2219. // value at the end to obtain `delta`.
  2220. for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
  2221. if (index >= inputLength) {
  2222. error('invalid-input');
  2223. }
  2224. digit = basicToDigit(input.charCodeAt(index++));
  2225. if (digit >= base || digit > floor((maxInt - i) / w)) {
  2226. error('overflow');
  2227. }
  2228. i += digit * w;
  2229. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  2230. if (digit < t) {
  2231. break;
  2232. }
  2233. baseMinusT = base - t;
  2234. if (w > floor(maxInt / baseMinusT)) {
  2235. error('overflow');
  2236. }
  2237. w *= baseMinusT;
  2238. }
  2239. out = output.length + 1;
  2240. bias = adapt(i - oldi, out, oldi == 0);
  2241. // `i` was supposed to wrap around from `out` to `0`,
  2242. // incrementing `n` each time, so we'll fix that now:
  2243. if (floor(i / out) > maxInt - n) {
  2244. error('overflow');
  2245. }
  2246. n += floor(i / out);
  2247. i %= out;
  2248. // Insert `n` at position `i` of the output
  2249. output.splice(i++, 0, n);
  2250. }
  2251. return ucs2encode(output);
  2252. }
  2253. /**
  2254. * Converts a string of Unicode symbols (e.g. a domain name label) to a
  2255. * Punycode string of ASCII-only symbols.
  2256. * @memberOf punycode
  2257. * @param {String} input The string of Unicode symbols.
  2258. * @returns {String} The resulting Punycode string of ASCII-only symbols.
  2259. */
  2260. function encode(input) {
  2261. var n,
  2262. delta,
  2263. handledCPCount,
  2264. basicLength,
  2265. bias,
  2266. j,
  2267. m,
  2268. q,
  2269. k,
  2270. t,
  2271. currentValue,
  2272. output = [],
  2273. /** `inputLength` will hold the number of code points in `input`. */
  2274. inputLength,
  2275. /** Cached calculation results */
  2276. handledCPCountPlusOne,
  2277. baseMinusT,
  2278. qMinusT;
  2279. // Convert the input in UCS-2 to Unicode
  2280. input = ucs2decode(input);
  2281. // Cache the length
  2282. inputLength = input.length;
  2283. // Initialize the state
  2284. n = initialN;
  2285. delta = 0;
  2286. bias = initialBias;
  2287. // Handle the basic code points
  2288. for (j = 0; j < inputLength; ++j) {
  2289. currentValue = input[j];
  2290. if (currentValue < 0x80) {
  2291. output.push(stringFromCharCode(currentValue));
  2292. }
  2293. }
  2294. handledCPCount = basicLength = output.length;
  2295. // `handledCPCount` is the number of code points that have been handled;
  2296. // `basicLength` is the number of basic code points.
  2297. // Finish the basic string - if it is not empty - with a delimiter
  2298. if (basicLength) {
  2299. output.push(delimiter);
  2300. }
  2301. // Main encoding loop:
  2302. while (handledCPCount < inputLength) {
  2303. // All non-basic code points < n have been handled already. Find the next
  2304. // larger one:
  2305. for (m = maxInt, j = 0; j < inputLength; ++j) {
  2306. currentValue = input[j];
  2307. if (currentValue >= n && currentValue < m) {
  2308. m = currentValue;
  2309. }
  2310. }
  2311. // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
  2312. // but guard against overflow
  2313. handledCPCountPlusOne = handledCPCount + 1;
  2314. if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
  2315. error('overflow');
  2316. }
  2317. delta += (m - n) * handledCPCountPlusOne;
  2318. n = m;
  2319. for (j = 0; j < inputLength; ++j) {
  2320. currentValue = input[j];
  2321. if (currentValue < n && ++delta > maxInt) {
  2322. error('overflow');
  2323. }
  2324. if (currentValue == n) {
  2325. // Represent delta as a generalized variable-length integer
  2326. for (q = delta, k = base; /* no condition */; k += base) {
  2327. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  2328. if (q < t) {
  2329. break;
  2330. }
  2331. qMinusT = q - t;
  2332. baseMinusT = base - t;
  2333. output.push(
  2334. stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
  2335. );
  2336. q = floor(qMinusT / baseMinusT);
  2337. }
  2338. output.push(stringFromCharCode(digitToBasic(q, 0)));
  2339. bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
  2340. delta = 0;
  2341. ++handledCPCount;
  2342. }
  2343. }
  2344. ++delta;
  2345. ++n;
  2346. }
  2347. return output.join('');
  2348. }
  2349. /**
  2350. * Converts a Punycode string representing a domain name or an email address
  2351. * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
  2352. * it doesn't matter if you call it on a string that has already been
  2353. * converted to Unicode.
  2354. * @memberOf punycode
  2355. * @param {String} input The Punycoded domain name or email address to
  2356. * convert to Unicode.
  2357. * @returns {String} The Unicode representation of the given Punycode
  2358. * string.
  2359. */
  2360. function toUnicode(input) {
  2361. return mapDomain(input, function(string) {
  2362. return regexPunycode.test(string)
  2363. ? decode(string.slice(4).toLowerCase())
  2364. : string;
  2365. });
  2366. }
  2367. /**
  2368. * Converts a Unicode string representing a domain name or an email address to
  2369. * Punycode. Only the non-ASCII parts of the domain name will be converted,
  2370. * i.e. it doesn't matter if you call it with a domain that's already in
  2371. * ASCII.
  2372. * @memberOf punycode
  2373. * @param {String} input The domain name or email address to convert, as a
  2374. * Unicode string.
  2375. * @returns {String} The Punycode representation of the given domain name or
  2376. * email address.
  2377. */
  2378. function toASCII(input) {
  2379. return mapDomain(input, function(string) {
  2380. return regexNonASCII.test(string)
  2381. ? 'xn--' + encode(string)
  2382. : string;
  2383. });
  2384. }
  2385. /*--------------------------------------------------------------------------*/
  2386. /** Define the public API */
  2387. punycode = {
  2388. /**
  2389. * A string representing the current Punycode.js version number.
  2390. * @memberOf punycode
  2391. * @type String
  2392. */
  2393. 'version': '1.3.2',
  2394. /**
  2395. * An object of methods to convert from JavaScript's internal character
  2396. * representation (UCS-2) to Unicode code points, and back.
  2397. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  2398. * @memberOf punycode
  2399. * @type Object
  2400. */
  2401. 'ucs2': {
  2402. 'decode': ucs2decode,
  2403. 'encode': ucs2encode
  2404. },
  2405. 'decode': decode,
  2406. 'encode': encode,
  2407. 'toASCII': toASCII,
  2408. 'toUnicode': toUnicode
  2409. };
  2410. /** Expose `punycode` */
  2411. // Some AMD build optimizers, like r.js, check for specific condition patterns
  2412. // like the following:
  2413. if (
  2414. true
  2415. ) {
  2416. !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
  2417. return punycode;
  2418. }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  2419. } else if (freeExports && freeModule) {
  2420. if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+
  2421. freeModule.exports = punycode;
  2422. } else { // in Narwhal or RingoJS v0.7.0-
  2423. for (key in punycode) {
  2424. punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
  2425. }
  2426. }
  2427. } else { // in Rhino or a web browser
  2428. root.punycode = punycode;
  2429. }
  2430. }(this));
  2431. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module), (function() { return this; }())))
  2432. /***/ }),
  2433. /* 4 */
  2434. /***/ (function(module, exports) {
  2435. module.exports = function(module) {
  2436. if(!module.webpackPolyfill) {
  2437. module.deprecate = function() {};
  2438. module.paths = [];
  2439. // module.parent = undefined by default
  2440. module.children = [];
  2441. module.webpackPolyfill = 1;
  2442. }
  2443. return module;
  2444. }
  2445. /***/ }),
  2446. /* 5 */
  2447. /***/ (function(module, exports) {
  2448. 'use strict';
  2449. module.exports = {
  2450. isString: function(arg) {
  2451. return typeof(arg) === 'string';
  2452. },
  2453. isObject: function(arg) {
  2454. return typeof(arg) === 'object' && arg !== null;
  2455. },
  2456. isNull: function(arg) {
  2457. return arg === null;
  2458. },
  2459. isNullOrUndefined: function(arg) {
  2460. return arg == null;
  2461. }
  2462. };
  2463. /***/ }),
  2464. /* 6 */
  2465. /***/ (function(module, exports, __webpack_require__) {
  2466. 'use strict';
  2467. exports.decode = exports.parse = __webpack_require__(7);
  2468. exports.encode = exports.stringify = __webpack_require__(8);
  2469. /***/ }),
  2470. /* 7 */
  2471. /***/ (function(module, exports) {
  2472. // Copyright Joyent, Inc. and other Node contributors.
  2473. //
  2474. // Permission is hereby granted, free of charge, to any person obtaining a
  2475. // copy of this software and associated documentation files (the
  2476. // "Software"), to deal in the Software without restriction, including
  2477. // without limitation the rights to use, copy, modify, merge, publish,
  2478. // distribute, sublicense, and/or sell copies of the Software, and to permit
  2479. // persons to whom the Software is furnished to do so, subject to the
  2480. // following conditions:
  2481. //
  2482. // The above copyright notice and this permission notice shall be included
  2483. // in all copies or substantial portions of the Software.
  2484. //
  2485. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  2486. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  2487. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  2488. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  2489. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  2490. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  2491. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  2492. 'use strict';
  2493. // If obj.hasOwnProperty has been overridden, then calling
  2494. // obj.hasOwnProperty(prop) will break.
  2495. // See: https://github.com/joyent/node/issues/1707
  2496. function hasOwnProperty(obj, prop) {
  2497. return Object.prototype.hasOwnProperty.call(obj, prop);
  2498. }
  2499. module.exports = function(qs, sep, eq, options) {
  2500. sep = sep || '&';
  2501. eq = eq || '=';
  2502. var obj = {};
  2503. if (typeof qs !== 'string' || qs.length === 0) {
  2504. return obj;
  2505. }
  2506. var regexp = /\+/g;
  2507. qs = qs.split(sep);
  2508. var maxKeys = 1000;
  2509. if (options && typeof options.maxKeys === 'number') {
  2510. maxKeys = options.maxKeys;
  2511. }
  2512. var len = qs.length;
  2513. // maxKeys <= 0 means that we should not limit keys count
  2514. if (maxKeys > 0 && len > maxKeys) {
  2515. len = maxKeys;
  2516. }
  2517. for (var i = 0; i < len; ++i) {
  2518. var x = qs[i].replace(regexp, '%20'),
  2519. idx = x.indexOf(eq),
  2520. kstr, vstr, k, v;
  2521. if (idx >= 0) {
  2522. kstr = x.substr(0, idx);
  2523. vstr = x.substr(idx + 1);
  2524. } else {
  2525. kstr = x;
  2526. vstr = '';
  2527. }
  2528. k = decodeURIComponent(kstr);
  2529. v = decodeURIComponent(vstr);
  2530. if (!hasOwnProperty(obj, k)) {
  2531. obj[k] = v;
  2532. } else if (Array.isArray(obj[k])) {
  2533. obj[k].push(v);
  2534. } else {
  2535. obj[k] = [obj[k], v];
  2536. }
  2537. }
  2538. return obj;
  2539. };
  2540. /***/ }),
  2541. /* 8 */
  2542. /***/ (function(module, exports) {
  2543. // Copyright Joyent, Inc. and other Node contributors.
  2544. //
  2545. // Permission is hereby granted, free of charge, to any person obtaining a
  2546. // copy of this software and associated documentation files (the
  2547. // "Software"), to deal in the Software without restriction, including
  2548. // without limitation the rights to use, copy, modify, merge, publish,
  2549. // distribute, sublicense, and/or sell copies of the Software, and to permit
  2550. // persons to whom the Software is furnished to do so, subject to the
  2551. // following conditions:
  2552. //
  2553. // The above copyright notice and this permission notice shall be included
  2554. // in all copies or substantial portions of the Software.
  2555. //
  2556. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  2557. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  2558. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  2559. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  2560. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  2561. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  2562. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  2563. 'use strict';
  2564. var stringifyPrimitive = function(v) {
  2565. switch (typeof v) {
  2566. case 'string':
  2567. return v;
  2568. case 'boolean':
  2569. return v ? 'true' : 'false';
  2570. case 'number':
  2571. return isFinite(v) ? v : '';
  2572. default:
  2573. return '';
  2574. }
  2575. };
  2576. module.exports = function(obj, sep, eq, name) {
  2577. sep = sep || '&';
  2578. eq = eq || '=';
  2579. if (obj === null) {
  2580. obj = undefined;
  2581. }
  2582. if (typeof obj === 'object') {
  2583. return Object.keys(obj).map(function(k) {
  2584. var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
  2585. if (Array.isArray(obj[k])) {
  2586. return obj[k].map(function(v) {
  2587. return ks + encodeURIComponent(stringifyPrimitive(v));
  2588. }).join(sep);
  2589. } else {
  2590. return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
  2591. }
  2592. }).join(sep);
  2593. }
  2594. if (!name) return '';
  2595. return encodeURIComponent(stringifyPrimitive(name)) + eq +
  2596. encodeURIComponent(stringifyPrimitive(obj));
  2597. };
  2598. /***/ }),
  2599. /* 9 */
  2600. /***/ (function(module, exports, __webpack_require__) {
  2601. /* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
  2602. //
  2603. // Permission is hereby granted, free of charge, to any person obtaining a
  2604. // copy of this software and associated documentation files (the
  2605. // "Software"), to deal in the Software without restriction, including
  2606. // without limitation the rights to use, copy, modify, merge, publish,
  2607. // distribute, sublicense, and/or sell copies of the Software, and to permit
  2608. // persons to whom the Software is furnished to do so, subject to the
  2609. // following conditions:
  2610. //
  2611. // The above copyright notice and this permission notice shall be included
  2612. // in all copies or substantial portions of the Software.
  2613. //
  2614. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  2615. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  2616. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  2617. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  2618. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  2619. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  2620. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  2621. var formatRegExp = /%[sdj%]/g;
  2622. exports.format = function(f) {
  2623. if (!isString(f)) {
  2624. var objects = [];
  2625. for (var i = 0; i < arguments.length; i++) {
  2626. objects.push(inspect(arguments[i]));
  2627. }
  2628. return objects.join(' ');
  2629. }
  2630. var i = 1;
  2631. var args = arguments;
  2632. var len = args.length;
  2633. var str = String(f).replace(formatRegExp, function(x) {
  2634. if (x === '%%') return '%';
  2635. if (i >= len) return x;
  2636. switch (x) {
  2637. case '%s': return String(args[i++]);
  2638. case '%d': return Number(args[i++]);
  2639. case '%j':
  2640. try {
  2641. return JSON.stringify(args[i++]);
  2642. } catch (_) {
  2643. return '[Circular]';
  2644. }
  2645. default:
  2646. return x;
  2647. }
  2648. });
  2649. for (var x = args[i]; i < len; x = args[++i]) {
  2650. if (isNull(x) || !isObject(x)) {
  2651. str += ' ' + x;
  2652. } else {
  2653. str += ' ' + inspect(x);
  2654. }
  2655. }
  2656. return str;
  2657. };
  2658. // Mark that a method should not be used.
  2659. // Returns a modified function which warns once by default.
  2660. // If --no-deprecation is set, then it is a no-op.
  2661. exports.deprecate = function(fn, msg) {
  2662. // Allow for deprecating things in the process of starting up.
  2663. if (isUndefined(global.process)) {
  2664. return function() {
  2665. return exports.deprecate(fn, msg).apply(this, arguments);
  2666. };
  2667. }
  2668. if (process.noDeprecation === true) {
  2669. return fn;
  2670. }
  2671. var warned = false;
  2672. function deprecated() {
  2673. if (!warned) {
  2674. if (process.throwDeprecation) {
  2675. throw new Error(msg);
  2676. } else if (process.traceDeprecation) {
  2677. console.trace(msg);
  2678. } else {
  2679. console.error(msg);
  2680. }
  2681. warned = true;
  2682. }
  2683. return fn.apply(this, arguments);
  2684. }
  2685. return deprecated;
  2686. };
  2687. var debugs = {};
  2688. var debugEnviron;
  2689. exports.debuglog = function(set) {
  2690. if (isUndefined(debugEnviron))
  2691. debugEnviron = process.env.NODE_DEBUG || '';
  2692. set = set.toUpperCase();
  2693. if (!debugs[set]) {
  2694. if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
  2695. var pid = process.pid;
  2696. debugs[set] = function() {
  2697. var msg = exports.format.apply(exports, arguments);
  2698. console.error('%s %d: %s', set, pid, msg);
  2699. };
  2700. } else {
  2701. debugs[set] = function() {};
  2702. }
  2703. }
  2704. return debugs[set];
  2705. };
  2706. /**
  2707. * Echos the value of a value. Trys to print the value out
  2708. * in the best way possible given the different types.
  2709. *
  2710. * @param {Object} obj The object to print out.
  2711. * @param {Object} opts Optional options object that alters the output.
  2712. */
  2713. /* legacy: obj, showHidden, depth, colors*/
  2714. function inspect(obj, opts) {
  2715. // default options
  2716. var ctx = {
  2717. seen: [],
  2718. stylize: stylizeNoColor
  2719. };
  2720. // legacy...
  2721. if (arguments.length >= 3) ctx.depth = arguments[2];
  2722. if (arguments.length >= 4) ctx.colors = arguments[3];
  2723. if (isBoolean(opts)) {
  2724. // legacy...
  2725. ctx.showHidden = opts;
  2726. } else if (opts) {
  2727. // got an "options" object
  2728. exports._extend(ctx, opts);
  2729. }
  2730. // set default options
  2731. if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  2732. if (isUndefined(ctx.depth)) ctx.depth = 2;
  2733. if (isUndefined(ctx.colors)) ctx.colors = false;
  2734. if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  2735. if (ctx.colors) ctx.stylize = stylizeWithColor;
  2736. return formatValue(ctx, obj, ctx.depth);
  2737. }
  2738. exports.inspect = inspect;
  2739. // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
  2740. inspect.colors = {
  2741. 'bold' : [1, 22],
  2742. 'italic' : [3, 23],
  2743. 'underline' : [4, 24],
  2744. 'inverse' : [7, 27],
  2745. 'white' : [37, 39],
  2746. 'grey' : [90, 39],
  2747. 'black' : [30, 39],
  2748. 'blue' : [34, 39],
  2749. 'cyan' : [36, 39],
  2750. 'green' : [32, 39],
  2751. 'magenta' : [35, 39],
  2752. 'red' : [31, 39],
  2753. 'yellow' : [33, 39]
  2754. };
  2755. // Don't use 'blue' not visible on cmd.exe
  2756. inspect.styles = {
  2757. 'special': 'cyan',
  2758. 'number': 'yellow',
  2759. 'boolean': 'yellow',
  2760. 'undefined': 'grey',
  2761. 'null': 'bold',
  2762. 'string': 'green',
  2763. 'date': 'magenta',
  2764. // "name": intentionally not styling
  2765. 'regexp': 'red'
  2766. };
  2767. function stylizeWithColor(str, styleType) {
  2768. var style = inspect.styles[styleType];
  2769. if (style) {
  2770. return '\u001b[' + inspect.colors[style][0] + 'm' + str +
  2771. '\u001b[' + inspect.colors[style][1] + 'm';
  2772. } else {
  2773. return str;
  2774. }
  2775. }
  2776. function stylizeNoColor(str, styleType) {
  2777. return str;
  2778. }
  2779. function arrayToHash(array) {
  2780. var hash = {};
  2781. array.forEach(function(val, idx) {
  2782. hash[val] = true;
  2783. });
  2784. return hash;
  2785. }
  2786. function formatValue(ctx, value, recurseTimes) {
  2787. // Provide a hook for user-specified inspect functions.
  2788. // Check that value is an object with an inspect function on it
  2789. if (ctx.customInspect &&
  2790. value &&
  2791. isFunction(value.inspect) &&
  2792. // Filter out the util module, it's inspect function is special
  2793. value.inspect !== exports.inspect &&
  2794. // Also filter out any prototype objects using the circular check.
  2795. !(value.constructor && value.constructor.prototype === value)) {
  2796. var ret = value.inspect(recurseTimes, ctx);
  2797. if (!isString(ret)) {
  2798. ret = formatValue(ctx, ret, recurseTimes);
  2799. }
  2800. return ret;
  2801. }
  2802. // Primitive types cannot have properties
  2803. var primitive = formatPrimitive(ctx, value);
  2804. if (primitive) {
  2805. return primitive;
  2806. }
  2807. // Look up the keys of the object.
  2808. var keys = Object.keys(value);
  2809. var visibleKeys = arrayToHash(keys);
  2810. if (ctx.showHidden) {
  2811. keys = Object.getOwnPropertyNames(value);
  2812. }
  2813. // IE doesn't make error fields non-enumerable
  2814. // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
  2815. if (isError(value)
  2816. && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
  2817. return formatError(value);
  2818. }
  2819. // Some type of object without properties can be shortcutted.
  2820. if (keys.length === 0) {
  2821. if (isFunction(value)) {
  2822. var name = value.name ? ': ' + value.name : '';
  2823. return ctx.stylize('[Function' + name + ']', 'special');
  2824. }
  2825. if (isRegExp(value)) {
  2826. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  2827. }
  2828. if (isDate(value)) {
  2829. return ctx.stylize(Date.prototype.toString.call(value), 'date');
  2830. }
  2831. if (isError(value)) {
  2832. return formatError(value);
  2833. }
  2834. }
  2835. var base = '', array = false, braces = ['{', '}'];
  2836. // Make Array say that they are Array
  2837. if (isArray(value)) {
  2838. array = true;
  2839. braces = ['[', ']'];
  2840. }
  2841. // Make functions say that they are functions
  2842. if (isFunction(value)) {
  2843. var n = value.name ? ': ' + value.name : '';
  2844. base = ' [Function' + n + ']';
  2845. }
  2846. // Make RegExps say that they are RegExps
  2847. if (isRegExp(value)) {
  2848. base = ' ' + RegExp.prototype.toString.call(value);
  2849. }
  2850. // Make dates with properties first say the date
  2851. if (isDate(value)) {
  2852. base = ' ' + Date.prototype.toUTCString.call(value);
  2853. }
  2854. // Make error with message first say the error
  2855. if (isError(value)) {
  2856. base = ' ' + formatError(value);
  2857. }
  2858. if (keys.length === 0 && (!array || value.length == 0)) {
  2859. return braces[0] + base + braces[1];
  2860. }
  2861. if (recurseTimes < 0) {
  2862. if (isRegExp(value)) {
  2863. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  2864. } else {
  2865. return ctx.stylize('[Object]', 'special');
  2866. }
  2867. }
  2868. ctx.seen.push(value);
  2869. var output;
  2870. if (array) {
  2871. output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  2872. } else {
  2873. output = keys.map(function(key) {
  2874. return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
  2875. });
  2876. }
  2877. ctx.seen.pop();
  2878. return reduceToSingleString(output, base, braces);
  2879. }
  2880. function formatPrimitive(ctx, value) {
  2881. if (isUndefined(value))
  2882. return ctx.stylize('undefined', 'undefined');
  2883. if (isString(value)) {
  2884. var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
  2885. .replace(/'/g, "\\'")
  2886. .replace(/\\"/g, '"') + '\'';
  2887. return ctx.stylize(simple, 'string');
  2888. }
  2889. if (isNumber(value))
  2890. return ctx.stylize('' + value, 'number');
  2891. if (isBoolean(value))
  2892. return ctx.stylize('' + value, 'boolean');
  2893. // For some reason typeof null is "object", so special case here.
  2894. if (isNull(value))
  2895. return ctx.stylize('null', 'null');
  2896. }
  2897. function formatError(value) {
  2898. return '[' + Error.prototype.toString.call(value) + ']';
  2899. }
  2900. function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  2901. var output = [];
  2902. for (var i = 0, l = value.length; i < l; ++i) {
  2903. if (hasOwnProperty(value, String(i))) {
  2904. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  2905. String(i), true));
  2906. } else {
  2907. output.push('');
  2908. }
  2909. }
  2910. keys.forEach(function(key) {
  2911. if (!key.match(/^\d+$/)) {
  2912. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  2913. key, true));
  2914. }
  2915. });
  2916. return output;
  2917. }
  2918. function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  2919. var name, str, desc;
  2920. desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  2921. if (desc.get) {
  2922. if (desc.set) {
  2923. str = ctx.stylize('[Getter/Setter]', 'special');
  2924. } else {
  2925. str = ctx.stylize('[Getter]', 'special');
  2926. }
  2927. } else {
  2928. if (desc.set) {
  2929. str = ctx.stylize('[Setter]', 'special');
  2930. }
  2931. }
  2932. if (!hasOwnProperty(visibleKeys, key)) {
  2933. name = '[' + key + ']';
  2934. }
  2935. if (!str) {
  2936. if (ctx.seen.indexOf(desc.value) < 0) {
  2937. if (isNull(recurseTimes)) {
  2938. str = formatValue(ctx, desc.value, null);
  2939. } else {
  2940. str = formatValue(ctx, desc.value, recurseTimes - 1);
  2941. }
  2942. if (str.indexOf('\n') > -1) {
  2943. if (array) {
  2944. str = str.split('\n').map(function(line) {
  2945. return ' ' + line;
  2946. }).join('\n').substr(2);
  2947. } else {
  2948. str = '\n' + str.split('\n').map(function(line) {
  2949. return ' ' + line;
  2950. }).join('\n');
  2951. }
  2952. }
  2953. } else {
  2954. str = ctx.stylize('[Circular]', 'special');
  2955. }
  2956. }
  2957. if (isUndefined(name)) {
  2958. if (array && key.match(/^\d+$/)) {
  2959. return str;
  2960. }
  2961. name = JSON.stringify('' + key);
  2962. if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
  2963. name = name.substr(1, name.length - 2);
  2964. name = ctx.stylize(name, 'name');
  2965. } else {
  2966. name = name.replace(/'/g, "\\'")
  2967. .replace(/\\"/g, '"')
  2968. .replace(/(^"|"$)/g, "'");
  2969. name = ctx.stylize(name, 'string');
  2970. }
  2971. }
  2972. return name + ': ' + str;
  2973. }
  2974. function reduceToSingleString(output, base, braces) {
  2975. var numLinesEst = 0;
  2976. var length = output.reduce(function(prev, cur) {
  2977. numLinesEst++;
  2978. if (cur.indexOf('\n') >= 0) numLinesEst++;
  2979. return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  2980. }, 0);
  2981. if (length > 60) {
  2982. return braces[0] +
  2983. (base === '' ? '' : base + '\n ') +
  2984. ' ' +
  2985. output.join(',\n ') +
  2986. ' ' +
  2987. braces[1];
  2988. }
  2989. return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
  2990. }
  2991. // NOTE: These type checking functions intentionally don't use `instanceof`
  2992. // because it is fragile and can be easily faked with `Object.create()`.
  2993. function isArray(ar) {
  2994. return Array.isArray(ar);
  2995. }
  2996. exports.isArray = isArray;
  2997. function isBoolean(arg) {
  2998. return typeof arg === 'boolean';
  2999. }
  3000. exports.isBoolean = isBoolean;
  3001. function isNull(arg) {
  3002. return arg === null;
  3003. }
  3004. exports.isNull = isNull;
  3005. function isNullOrUndefined(arg) {
  3006. return arg == null;
  3007. }
  3008. exports.isNullOrUndefined = isNullOrUndefined;
  3009. function isNumber(arg) {
  3010. return typeof arg === 'number';
  3011. }
  3012. exports.isNumber = isNumber;
  3013. function isString(arg) {
  3014. return typeof arg === 'string';
  3015. }
  3016. exports.isString = isString;
  3017. function isSymbol(arg) {
  3018. return typeof arg === 'symbol';
  3019. }
  3020. exports.isSymbol = isSymbol;
  3021. function isUndefined(arg) {
  3022. return arg === void 0;
  3023. }
  3024. exports.isUndefined = isUndefined;
  3025. function isRegExp(re) {
  3026. return isObject(re) && objectToString(re) === '[object RegExp]';
  3027. }
  3028. exports.isRegExp = isRegExp;
  3029. function isObject(arg) {
  3030. return typeof arg === 'object' && arg !== null;
  3031. }
  3032. exports.isObject = isObject;
  3033. function isDate(d) {
  3034. return isObject(d) && objectToString(d) === '[object Date]';
  3035. }
  3036. exports.isDate = isDate;
  3037. function isError(e) {
  3038. return isObject(e) &&
  3039. (objectToString(e) === '[object Error]' || e instanceof Error);
  3040. }
  3041. exports.isError = isError;
  3042. function isFunction(arg) {
  3043. return typeof arg === 'function';
  3044. }
  3045. exports.isFunction = isFunction;
  3046. function isPrimitive(arg) {
  3047. return arg === null ||
  3048. typeof arg === 'boolean' ||
  3049. typeof arg === 'number' ||
  3050. typeof arg === 'string' ||
  3051. typeof arg === 'symbol' || // ES6 symbol
  3052. typeof arg === 'undefined';
  3053. }
  3054. exports.isPrimitive = isPrimitive;
  3055. exports.isBuffer = __webpack_require__(11);
  3056. function objectToString(o) {
  3057. return Object.prototype.toString.call(o);
  3058. }
  3059. function pad(n) {
  3060. return n < 10 ? '0' + n.toString(10) : n.toString(10);
  3061. }
  3062. var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
  3063. 'Oct', 'Nov', 'Dec'];
  3064. // 26 Feb 16:19:34
  3065. function timestamp() {
  3066. var d = new Date();
  3067. var time = [pad(d.getHours()),
  3068. pad(d.getMinutes()),
  3069. pad(d.getSeconds())].join(':');
  3070. return [d.getDate(), months[d.getMonth()], time].join(' ');
  3071. }
  3072. // log is just a thin wrapper to console.log that prepends a timestamp
  3073. exports.log = function() {
  3074. console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
  3075. };
  3076. /**
  3077. * Inherit the prototype methods from one constructor into another.
  3078. *
  3079. * The Function.prototype.inherits from lang.js rewritten as a standalone
  3080. * function (not on Function.prototype). NOTE: If this file is to be loaded
  3081. * during bootstrapping this function needs to be rewritten using some native
  3082. * functions as prototype setup using normal JavaScript does not work as
  3083. * expected during bootstrapping (see mirror.js in r114903).
  3084. *
  3085. * @param {function} ctor Constructor function which needs to inherit the
  3086. * prototype.
  3087. * @param {function} superCtor Constructor function to inherit prototype from.
  3088. */
  3089. exports.inherits = __webpack_require__(12);
  3090. exports._extend = function(origin, add) {
  3091. // Don't do anything if add isn't an object
  3092. if (!add || !isObject(add)) return origin;
  3093. var keys = Object.keys(add);
  3094. var i = keys.length;
  3095. while (i--) {
  3096. origin[keys[i]] = add[keys[i]];
  3097. }
  3098. return origin;
  3099. };
  3100. function hasOwnProperty(obj, prop) {
  3101. return Object.prototype.hasOwnProperty.call(obj, prop);
  3102. }
  3103. /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(10)))
  3104. /***/ }),
  3105. /* 10 */
  3106. /***/ (function(module, exports) {
  3107. // shim for using process in browser
  3108. var process = module.exports = {};
  3109. // cached from whatever global is present so that test runners that stub it
  3110. // don't break things. But we need to wrap it in a try catch in case it is
  3111. // wrapped in strict mode code which doesn't define any globals. It's inside a
  3112. // function because try/catches deoptimize in certain engines.
  3113. var cachedSetTimeout;
  3114. var cachedClearTimeout;
  3115. function defaultSetTimout() {
  3116. throw new Error('setTimeout has not been defined');
  3117. }
  3118. function defaultClearTimeout () {
  3119. throw new Error('clearTimeout has not been defined');
  3120. }
  3121. (function () {
  3122. try {
  3123. if (typeof setTimeout === 'function') {
  3124. cachedSetTimeout = setTimeout;
  3125. } else {
  3126. cachedSetTimeout = defaultSetTimout;
  3127. }
  3128. } catch (e) {
  3129. cachedSetTimeout = defaultSetTimout;
  3130. }
  3131. try {
  3132. if (typeof clearTimeout === 'function') {
  3133. cachedClearTimeout = clearTimeout;
  3134. } else {
  3135. cachedClearTimeout = defaultClearTimeout;
  3136. }
  3137. } catch (e) {
  3138. cachedClearTimeout = defaultClearTimeout;
  3139. }
  3140. } ())
  3141. function runTimeout(fun) {
  3142. if (cachedSetTimeout === setTimeout) {
  3143. //normal enviroments in sane situations
  3144. return setTimeout(fun, 0);
  3145. }
  3146. // if setTimeout wasn't available but was latter defined
  3147. if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  3148. cachedSetTimeout = setTimeout;
  3149. return setTimeout(fun, 0);
  3150. }
  3151. try {
  3152. // when when somebody has screwed with setTimeout but no I.E. maddness
  3153. return cachedSetTimeout(fun, 0);
  3154. } catch(e){
  3155. try {
  3156. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  3157. return cachedSetTimeout.call(null, fun, 0);
  3158. } catch(e){
  3159. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
  3160. return cachedSetTimeout.call(this, fun, 0);
  3161. }
  3162. }
  3163. }
  3164. function runClearTimeout(marker) {
  3165. if (cachedClearTimeout === clearTimeout) {
  3166. //normal enviroments in sane situations
  3167. return clearTimeout(marker);
  3168. }
  3169. // if clearTimeout wasn't available but was latter defined
  3170. if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  3171. cachedClearTimeout = clearTimeout;
  3172. return clearTimeout(marker);
  3173. }
  3174. try {
  3175. // when when somebody has screwed with setTimeout but no I.E. maddness
  3176. return cachedClearTimeout(marker);
  3177. } catch (e){
  3178. try {
  3179. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  3180. return cachedClearTimeout.call(null, marker);
  3181. } catch (e){
  3182. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
  3183. // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  3184. return cachedClearTimeout.call(this, marker);
  3185. }
  3186. }
  3187. }
  3188. var queue = [];
  3189. var draining = false;
  3190. var currentQueue;
  3191. var queueIndex = -1;
  3192. function cleanUpNextTick() {
  3193. if (!draining || !currentQueue) {
  3194. return;
  3195. }
  3196. draining = false;
  3197. if (currentQueue.length) {
  3198. queue = currentQueue.concat(queue);
  3199. } else {
  3200. queueIndex = -1;
  3201. }
  3202. if (queue.length) {
  3203. drainQueue();
  3204. }
  3205. }
  3206. function drainQueue() {
  3207. if (draining) {
  3208. return;
  3209. }
  3210. var timeout = runTimeout(cleanUpNextTick);
  3211. draining = true;
  3212. var len = queue.length;
  3213. while(len) {
  3214. currentQueue = queue;
  3215. queue = [];
  3216. while (++queueIndex < len) {
  3217. if (currentQueue) {
  3218. currentQueue[queueIndex].run();
  3219. }
  3220. }
  3221. queueIndex = -1;
  3222. len = queue.length;
  3223. }
  3224. currentQueue = null;
  3225. draining = false;
  3226. runClearTimeout(timeout);
  3227. }
  3228. process.nextTick = function (fun) {
  3229. var args = new Array(arguments.length - 1);
  3230. if (arguments.length > 1) {
  3231. for (var i = 1; i < arguments.length; i++) {
  3232. args[i - 1] = arguments[i];
  3233. }
  3234. }
  3235. queue.push(new Item(fun, args));
  3236. if (queue.length === 1 && !draining) {
  3237. runTimeout(drainQueue);
  3238. }
  3239. };
  3240. // v8 likes predictible objects
  3241. function Item(fun, array) {
  3242. this.fun = fun;
  3243. this.array = array;
  3244. }
  3245. Item.prototype.run = function () {
  3246. this.fun.apply(null, this.array);
  3247. };
  3248. process.title = 'browser';
  3249. process.browser = true;
  3250. process.env = {};
  3251. process.argv = [];
  3252. process.version = ''; // empty string to avoid regexp issues
  3253. process.versions = {};
  3254. function noop() {}
  3255. process.on = noop;
  3256. process.addListener = noop;
  3257. process.once = noop;
  3258. process.off = noop;
  3259. process.removeListener = noop;
  3260. process.removeAllListeners = noop;
  3261. process.emit = noop;
  3262. process.prependListener = noop;
  3263. process.prependOnceListener = noop;
  3264. process.listeners = function (name) { return [] }
  3265. process.binding = function (name) {
  3266. throw new Error('process.binding is not supported');
  3267. };
  3268. process.cwd = function () { return '/' };
  3269. process.chdir = function (dir) {
  3270. throw new Error('process.chdir is not supported');
  3271. };
  3272. process.umask = function() { return 0; };
  3273. /***/ }),
  3274. /* 11 */
  3275. /***/ (function(module, exports) {
  3276. module.exports = function isBuffer(arg) {
  3277. return arg && typeof arg === 'object'
  3278. && typeof arg.copy === 'function'
  3279. && typeof arg.fill === 'function'
  3280. && typeof arg.readUInt8 === 'function';
  3281. }
  3282. /***/ }),
  3283. /* 12 */
  3284. /***/ (function(module, exports) {
  3285. if (typeof Object.create === 'function') {
  3286. // implementation from standard node.js 'util' module
  3287. module.exports = function inherits(ctor, superCtor) {
  3288. ctor.super_ = superCtor
  3289. ctor.prototype = Object.create(superCtor.prototype, {
  3290. constructor: {
  3291. value: ctor,
  3292. enumerable: false,
  3293. writable: true,
  3294. configurable: true
  3295. }
  3296. });
  3297. };
  3298. } else {
  3299. // old school shim for old browsers
  3300. module.exports = function inherits(ctor, superCtor) {
  3301. ctor.super_ = superCtor
  3302. var TempCtor = function () {}
  3303. TempCtor.prototype = superCtor.prototype
  3304. ctor.prototype = new TempCtor()
  3305. ctor.prototype.constructor = ctor
  3306. }
  3307. }
  3308. /***/ }),
  3309. /* 13 */
  3310. /***/ (function(module, exports, __webpack_require__) {
  3311. /*!
  3312. * Copyright (c) 2018, Salesforce.com, Inc.
  3313. * All rights reserved.
  3314. *
  3315. * Redistribution and use in source and binary forms, with or without
  3316. * modification, are permitted provided that the following conditions are met:
  3317. *
  3318. * 1. Redistributions of source code must retain the above copyright notice,
  3319. * this list of conditions and the following disclaimer.
  3320. *
  3321. * 2. Redistributions in binary form must reproduce the above copyright notice,
  3322. * this list of conditions and the following disclaimer in the documentation
  3323. * and/or other materials provided with the distribution.
  3324. *
  3325. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  3326. * be used to endorse or promote products derived from this software without
  3327. * specific prior written permission.
  3328. *
  3329. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  3330. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  3331. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  3332. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  3333. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  3334. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  3335. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  3336. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  3337. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  3338. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  3339. * POSSIBILITY OF SUCH DAMAGE.
  3340. */
  3341. 'use strict';
  3342. var psl = __webpack_require__(14);
  3343. function getPublicSuffix(domain) {
  3344. return psl.get(domain);
  3345. }
  3346. exports.getPublicSuffix = getPublicSuffix;
  3347. /***/ }),
  3348. /* 14 */
  3349. /***/ (function(module, exports, __webpack_require__) {
  3350. /*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
  3351. 'use strict';
  3352. var Punycode = __webpack_require__(15);
  3353. var internals = {};
  3354. //
  3355. // Read rules from file.
  3356. //
  3357. internals.rules = __webpack_require__(16).map(function (rule) {
  3358. return {
  3359. rule: rule,
  3360. suffix: rule.replace(/^(\*\.|\!)/, ''),
  3361. punySuffix: -1,
  3362. wildcard: rule.charAt(0) === '*',
  3363. exception: rule.charAt(0) === '!'
  3364. };
  3365. });
  3366. //
  3367. // Check is given string ends with `suffix`.
  3368. //
  3369. internals.endsWith = function (str, suffix) {
  3370. return str.indexOf(suffix, str.length - suffix.length) !== -1;
  3371. };
  3372. //
  3373. // Find rule for a given domain.
  3374. //
  3375. internals.findRule = function (domain) {
  3376. var punyDomain = Punycode.toASCII(domain);
  3377. return internals.rules.reduce(function (memo, rule) {
  3378. if (rule.punySuffix === -1){
  3379. rule.punySuffix = Punycode.toASCII(rule.suffix);
  3380. }
  3381. if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
  3382. return memo;
  3383. }
  3384. // This has been commented out as it never seems to run. This is because
  3385. // sub tlds always appear after their parents and we never find a shorter
  3386. // match.
  3387. //if (memo) {
  3388. // var memoSuffix = Punycode.toASCII(memo.suffix);
  3389. // if (memoSuffix.length >= punySuffix.length) {
  3390. // return memo;
  3391. // }
  3392. //}
  3393. return rule;
  3394. }, null);
  3395. };
  3396. //
  3397. // Error codes and messages.
  3398. //
  3399. exports.errorCodes = {
  3400. DOMAIN_TOO_SHORT: 'Domain name too short.',
  3401. DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
  3402. LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
  3403. LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
  3404. LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
  3405. LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
  3406. LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
  3407. };
  3408. //
  3409. // Validate domain name and throw if not valid.
  3410. //
  3411. // From wikipedia:
  3412. //
  3413. // Hostnames are composed of series of labels concatenated with dots, as are all
  3414. // domain names. Each label must be between 1 and 63 characters long, and the
  3415. // entire hostname (including the delimiting dots) has a maximum of 255 chars.
  3416. //
  3417. // Allowed chars:
  3418. //
  3419. // * `a-z`
  3420. // * `0-9`
  3421. // * `-` but not as a starting or ending character
  3422. // * `.` as a separator for the textual portions of a domain name
  3423. //
  3424. // * http://en.wikipedia.org/wiki/Domain_name
  3425. // * http://en.wikipedia.org/wiki/Hostname
  3426. //
  3427. internals.validate = function (input) {
  3428. // Before we can validate we need to take care of IDNs with unicode chars.
  3429. var ascii = Punycode.toASCII(input);
  3430. if (ascii.length < 1) {
  3431. return 'DOMAIN_TOO_SHORT';
  3432. }
  3433. if (ascii.length > 255) {
  3434. return 'DOMAIN_TOO_LONG';
  3435. }
  3436. // Check each part's length and allowed chars.
  3437. var labels = ascii.split('.');
  3438. var label;
  3439. for (var i = 0; i < labels.length; ++i) {
  3440. label = labels[i];
  3441. if (!label.length) {
  3442. return 'LABEL_TOO_SHORT';
  3443. }
  3444. if (label.length > 63) {
  3445. return 'LABEL_TOO_LONG';
  3446. }
  3447. if (label.charAt(0) === '-') {
  3448. return 'LABEL_STARTS_WITH_DASH';
  3449. }
  3450. if (label.charAt(label.length - 1) === '-') {
  3451. return 'LABEL_ENDS_WITH_DASH';
  3452. }
  3453. if (!/^[a-z0-9\-]+$/.test(label)) {
  3454. return 'LABEL_INVALID_CHARS';
  3455. }
  3456. }
  3457. };
  3458. //
  3459. // Public API
  3460. //
  3461. //
  3462. // Parse domain.
  3463. //
  3464. exports.parse = function (input) {
  3465. if (typeof input !== 'string') {
  3466. throw new TypeError('Domain name must be a string.');
  3467. }
  3468. // Force domain to lowercase.
  3469. var domain = input.slice(0).toLowerCase();
  3470. // Handle FQDN.
  3471. // TODO: Simply remove trailing dot?
  3472. if (domain.charAt(domain.length - 1) === '.') {
  3473. domain = domain.slice(0, domain.length - 1);
  3474. }
  3475. // Validate and sanitise input.
  3476. var error = internals.validate(domain);
  3477. if (error) {
  3478. return {
  3479. input: input,
  3480. error: {
  3481. message: exports.errorCodes[error],
  3482. code: error
  3483. }
  3484. };
  3485. }
  3486. var parsed = {
  3487. input: input,
  3488. tld: null,
  3489. sld: null,
  3490. domain: null,
  3491. subdomain: null,
  3492. listed: false
  3493. };
  3494. var domainParts = domain.split('.');
  3495. // Non-Internet TLD
  3496. if (domainParts[domainParts.length - 1] === 'local') {
  3497. return parsed;
  3498. }
  3499. var handlePunycode = function () {
  3500. if (!/xn--/.test(domain)) {
  3501. return parsed;
  3502. }
  3503. if (parsed.domain) {
  3504. parsed.domain = Punycode.toASCII(parsed.domain);
  3505. }
  3506. if (parsed.subdomain) {
  3507. parsed.subdomain = Punycode.toASCII(parsed.subdomain);
  3508. }
  3509. return parsed;
  3510. };
  3511. var rule = internals.findRule(domain);
  3512. // Unlisted tld.
  3513. if (!rule) {
  3514. if (domainParts.length < 2) {
  3515. return parsed;
  3516. }
  3517. parsed.tld = domainParts.pop();
  3518. parsed.sld = domainParts.pop();
  3519. parsed.domain = [parsed.sld, parsed.tld].join('.');
  3520. if (domainParts.length) {
  3521. parsed.subdomain = domainParts.pop();
  3522. }
  3523. return handlePunycode();
  3524. }
  3525. // At this point we know the public suffix is listed.
  3526. parsed.listed = true;
  3527. var tldParts = rule.suffix.split('.');
  3528. var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
  3529. if (rule.exception) {
  3530. privateParts.push(tldParts.shift());
  3531. }
  3532. parsed.tld = tldParts.join('.');
  3533. if (!privateParts.length) {
  3534. return handlePunycode();
  3535. }
  3536. if (rule.wildcard) {
  3537. tldParts.unshift(privateParts.pop());
  3538. parsed.tld = tldParts.join('.');
  3539. }
  3540. if (!privateParts.length) {
  3541. return handlePunycode();
  3542. }
  3543. parsed.sld = privateParts.pop();
  3544. parsed.domain = [parsed.sld, parsed.tld].join('.');
  3545. if (privateParts.length) {
  3546. parsed.subdomain = privateParts.join('.');
  3547. }
  3548. return handlePunycode();
  3549. };
  3550. //
  3551. // Get domain.
  3552. //
  3553. exports.get = function (domain) {
  3554. if (!domain) {
  3555. return null;
  3556. }
  3557. return exports.parse(domain).domain || null;
  3558. };
  3559. //
  3560. // Check whether domain belongs to a known public suffix.
  3561. //
  3562. exports.isValid = function (domain) {
  3563. var parsed = exports.parse(domain);
  3564. return Boolean(parsed.domain && parsed.listed);
  3565. };
  3566. /***/ }),
  3567. /* 15 */
  3568. /***/ (function(module, exports, __webpack_require__) {
  3569. var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.4.1 by @mathias */
  3570. ;(function(root) {
  3571. /** Detect free variables */
  3572. var freeExports = typeof exports == 'object' && exports &&
  3573. !exports.nodeType && exports;
  3574. var freeModule = typeof module == 'object' && module &&
  3575. !module.nodeType && module;
  3576. var freeGlobal = typeof global == 'object' && global;
  3577. if (
  3578. freeGlobal.global === freeGlobal ||
  3579. freeGlobal.window === freeGlobal ||
  3580. freeGlobal.self === freeGlobal
  3581. ) {
  3582. root = freeGlobal;
  3583. }
  3584. /**
  3585. * The `punycode` object.
  3586. * @name punycode
  3587. * @type Object
  3588. */
  3589. var punycode,
  3590. /** Highest positive signed 32-bit float value */
  3591. maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
  3592. /** Bootstring parameters */
  3593. base = 36,
  3594. tMin = 1,
  3595. tMax = 26,
  3596. skew = 38,
  3597. damp = 700,
  3598. initialBias = 72,
  3599. initialN = 128, // 0x80
  3600. delimiter = '-', // '\x2D'
  3601. /** Regular expressions */
  3602. regexPunycode = /^xn--/,
  3603. regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
  3604. regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
  3605. /** Error messages */
  3606. errors = {
  3607. 'overflow': 'Overflow: input needs wider integers to process',
  3608. 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
  3609. 'invalid-input': 'Invalid input'
  3610. },
  3611. /** Convenience shortcuts */
  3612. baseMinusTMin = base - tMin,
  3613. floor = Math.floor,
  3614. stringFromCharCode = String.fromCharCode,
  3615. /** Temporary variable */
  3616. key;
  3617. /*--------------------------------------------------------------------------*/
  3618. /**
  3619. * A generic error utility function.
  3620. * @private
  3621. * @param {String} type The error type.
  3622. * @returns {Error} Throws a `RangeError` with the applicable error message.
  3623. */
  3624. function error(type) {
  3625. throw new RangeError(errors[type]);
  3626. }
  3627. /**
  3628. * A generic `Array#map` utility function.
  3629. * @private
  3630. * @param {Array} array The array to iterate over.
  3631. * @param {Function} callback The function that gets called for every array
  3632. * item.
  3633. * @returns {Array} A new array of values returned by the callback function.
  3634. */
  3635. function map(array, fn) {
  3636. var length = array.length;
  3637. var result = [];
  3638. while (length--) {
  3639. result[length] = fn(array[length]);
  3640. }
  3641. return result;
  3642. }
  3643. /**
  3644. * A simple `Array#map`-like wrapper to work with domain name strings or email
  3645. * addresses.
  3646. * @private
  3647. * @param {String} domain The domain name or email address.
  3648. * @param {Function} callback The function that gets called for every
  3649. * character.
  3650. * @returns {Array} A new string of characters returned by the callback
  3651. * function.
  3652. */
  3653. function mapDomain(string, fn) {
  3654. var parts = string.split('@');
  3655. var result = '';
  3656. if (parts.length > 1) {
  3657. // In email addresses, only the domain name should be punycoded. Leave
  3658. // the local part (i.e. everything up to `@`) intact.
  3659. result = parts[0] + '@';
  3660. string = parts[1];
  3661. }
  3662. // Avoid `split(regex)` for IE8 compatibility. See #17.
  3663. string = string.replace(regexSeparators, '\x2E');
  3664. var labels = string.split('.');
  3665. var encoded = map(labels, fn).join('.');
  3666. return result + encoded;
  3667. }
  3668. /**
  3669. * Creates an array containing the numeric code points of each Unicode
  3670. * character in the string. While JavaScript uses UCS-2 internally,
  3671. * this function will convert a pair of surrogate halves (each of which
  3672. * UCS-2 exposes as separate characters) into a single code point,
  3673. * matching UTF-16.
  3674. * @see `punycode.ucs2.encode`
  3675. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  3676. * @memberOf punycode.ucs2
  3677. * @name decode
  3678. * @param {String} string The Unicode input string (UCS-2).
  3679. * @returns {Array} The new array of code points.
  3680. */
  3681. function ucs2decode(string) {
  3682. var output = [],
  3683. counter = 0,
  3684. length = string.length,
  3685. value,
  3686. extra;
  3687. while (counter < length) {
  3688. value = string.charCodeAt(counter++);
  3689. if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  3690. // high surrogate, and there is a next character
  3691. extra = string.charCodeAt(counter++);
  3692. if ((extra & 0xFC00) == 0xDC00) { // low surrogate
  3693. output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  3694. } else {
  3695. // unmatched surrogate; only append this code unit, in case the next
  3696. // code unit is the high surrogate of a surrogate pair
  3697. output.push(value);
  3698. counter--;
  3699. }
  3700. } else {
  3701. output.push(value);
  3702. }
  3703. }
  3704. return output;
  3705. }
  3706. /**
  3707. * Creates a string based on an array of numeric code points.
  3708. * @see `punycode.ucs2.decode`
  3709. * @memberOf punycode.ucs2
  3710. * @name encode
  3711. * @param {Array} codePoints The array of numeric code points.
  3712. * @returns {String} The new Unicode string (UCS-2).
  3713. */
  3714. function ucs2encode(array) {
  3715. return map(array, function(value) {
  3716. var output = '';
  3717. if (value > 0xFFFF) {
  3718. value -= 0x10000;
  3719. output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
  3720. value = 0xDC00 | value & 0x3FF;
  3721. }
  3722. output += stringFromCharCode(value);
  3723. return output;
  3724. }).join('');
  3725. }
  3726. /**
  3727. * Converts a basic code point into a digit/integer.
  3728. * @see `digitToBasic()`
  3729. * @private
  3730. * @param {Number} codePoint The basic numeric code point value.
  3731. * @returns {Number} The numeric value of a basic code point (for use in
  3732. * representing integers) in the range `0` to `base - 1`, or `base` if
  3733. * the code point does not represent a value.
  3734. */
  3735. function basicToDigit(codePoint) {
  3736. if (codePoint - 48 < 10) {
  3737. return codePoint - 22;
  3738. }
  3739. if (codePoint - 65 < 26) {
  3740. return codePoint - 65;
  3741. }
  3742. if (codePoint - 97 < 26) {
  3743. return codePoint - 97;
  3744. }
  3745. return base;
  3746. }
  3747. /**
  3748. * Converts a digit/integer into a basic code point.
  3749. * @see `basicToDigit()`
  3750. * @private
  3751. * @param {Number} digit The numeric value of a basic code point.
  3752. * @returns {Number} The basic code point whose value (when used for
  3753. * representing integers) is `digit`, which needs to be in the range
  3754. * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
  3755. * used; else, the lowercase form is used. The behavior is undefined
  3756. * if `flag` is non-zero and `digit` has no uppercase form.
  3757. */
  3758. function digitToBasic(digit, flag) {
  3759. // 0..25 map to ASCII a..z or A..Z
  3760. // 26..35 map to ASCII 0..9
  3761. return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
  3762. }
  3763. /**
  3764. * Bias adaptation function as per section 3.4 of RFC 3492.
  3765. * https://tools.ietf.org/html/rfc3492#section-3.4
  3766. * @private
  3767. */
  3768. function adapt(delta, numPoints, firstTime) {
  3769. var k = 0;
  3770. delta = firstTime ? floor(delta / damp) : delta >> 1;
  3771. delta += floor(delta / numPoints);
  3772. for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
  3773. delta = floor(delta / baseMinusTMin);
  3774. }
  3775. return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
  3776. }
  3777. /**
  3778. * Converts a Punycode string of ASCII-only symbols to a string of Unicode
  3779. * symbols.
  3780. * @memberOf punycode
  3781. * @param {String} input The Punycode string of ASCII-only symbols.
  3782. * @returns {String} The resulting string of Unicode symbols.
  3783. */
  3784. function decode(input) {
  3785. // Don't use UCS-2
  3786. var output = [],
  3787. inputLength = input.length,
  3788. out,
  3789. i = 0,
  3790. n = initialN,
  3791. bias = initialBias,
  3792. basic,
  3793. j,
  3794. index,
  3795. oldi,
  3796. w,
  3797. k,
  3798. digit,
  3799. t,
  3800. /** Cached calculation results */
  3801. baseMinusT;
  3802. // Handle the basic code points: let `basic` be the number of input code
  3803. // points before the last delimiter, or `0` if there is none, then copy
  3804. // the first basic code points to the output.
  3805. basic = input.lastIndexOf(delimiter);
  3806. if (basic < 0) {
  3807. basic = 0;
  3808. }
  3809. for (j = 0; j < basic; ++j) {
  3810. // if it's not a basic code point
  3811. if (input.charCodeAt(j) >= 0x80) {
  3812. error('not-basic');
  3813. }
  3814. output.push(input.charCodeAt(j));
  3815. }
  3816. // Main decoding loop: start just after the last delimiter if any basic code
  3817. // points were copied; start at the beginning otherwise.
  3818. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
  3819. // `index` is the index of the next character to be consumed.
  3820. // Decode a generalized variable-length integer into `delta`,
  3821. // which gets added to `i`. The overflow checking is easier
  3822. // if we increase `i` as we go, then subtract off its starting
  3823. // value at the end to obtain `delta`.
  3824. for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
  3825. if (index >= inputLength) {
  3826. error('invalid-input');
  3827. }
  3828. digit = basicToDigit(input.charCodeAt(index++));
  3829. if (digit >= base || digit > floor((maxInt - i) / w)) {
  3830. error('overflow');
  3831. }
  3832. i += digit * w;
  3833. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  3834. if (digit < t) {
  3835. break;
  3836. }
  3837. baseMinusT = base - t;
  3838. if (w > floor(maxInt / baseMinusT)) {
  3839. error('overflow');
  3840. }
  3841. w *= baseMinusT;
  3842. }
  3843. out = output.length + 1;
  3844. bias = adapt(i - oldi, out, oldi == 0);
  3845. // `i` was supposed to wrap around from `out` to `0`,
  3846. // incrementing `n` each time, so we'll fix that now:
  3847. if (floor(i / out) > maxInt - n) {
  3848. error('overflow');
  3849. }
  3850. n += floor(i / out);
  3851. i %= out;
  3852. // Insert `n` at position `i` of the output
  3853. output.splice(i++, 0, n);
  3854. }
  3855. return ucs2encode(output);
  3856. }
  3857. /**
  3858. * Converts a string of Unicode symbols (e.g. a domain name label) to a
  3859. * Punycode string of ASCII-only symbols.
  3860. * @memberOf punycode
  3861. * @param {String} input The string of Unicode symbols.
  3862. * @returns {String} The resulting Punycode string of ASCII-only symbols.
  3863. */
  3864. function encode(input) {
  3865. var n,
  3866. delta,
  3867. handledCPCount,
  3868. basicLength,
  3869. bias,
  3870. j,
  3871. m,
  3872. q,
  3873. k,
  3874. t,
  3875. currentValue,
  3876. output = [],
  3877. /** `inputLength` will hold the number of code points in `input`. */
  3878. inputLength,
  3879. /** Cached calculation results */
  3880. handledCPCountPlusOne,
  3881. baseMinusT,
  3882. qMinusT;
  3883. // Convert the input in UCS-2 to Unicode
  3884. input = ucs2decode(input);
  3885. // Cache the length
  3886. inputLength = input.length;
  3887. // Initialize the state
  3888. n = initialN;
  3889. delta = 0;
  3890. bias = initialBias;
  3891. // Handle the basic code points
  3892. for (j = 0; j < inputLength; ++j) {
  3893. currentValue = input[j];
  3894. if (currentValue < 0x80) {
  3895. output.push(stringFromCharCode(currentValue));
  3896. }
  3897. }
  3898. handledCPCount = basicLength = output.length;
  3899. // `handledCPCount` is the number of code points that have been handled;
  3900. // `basicLength` is the number of basic code points.
  3901. // Finish the basic string - if it is not empty - with a delimiter
  3902. if (basicLength) {
  3903. output.push(delimiter);
  3904. }
  3905. // Main encoding loop:
  3906. while (handledCPCount < inputLength) {
  3907. // All non-basic code points < n have been handled already. Find the next
  3908. // larger one:
  3909. for (m = maxInt, j = 0; j < inputLength; ++j) {
  3910. currentValue = input[j];
  3911. if (currentValue >= n && currentValue < m) {
  3912. m = currentValue;
  3913. }
  3914. }
  3915. // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
  3916. // but guard against overflow
  3917. handledCPCountPlusOne = handledCPCount + 1;
  3918. if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
  3919. error('overflow');
  3920. }
  3921. delta += (m - n) * handledCPCountPlusOne;
  3922. n = m;
  3923. for (j = 0; j < inputLength; ++j) {
  3924. currentValue = input[j];
  3925. if (currentValue < n && ++delta > maxInt) {
  3926. error('overflow');
  3927. }
  3928. if (currentValue == n) {
  3929. // Represent delta as a generalized variable-length integer
  3930. for (q = delta, k = base; /* no condition */; k += base) {
  3931. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  3932. if (q < t) {
  3933. break;
  3934. }
  3935. qMinusT = q - t;
  3936. baseMinusT = base - t;
  3937. output.push(
  3938. stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
  3939. );
  3940. q = floor(qMinusT / baseMinusT);
  3941. }
  3942. output.push(stringFromCharCode(digitToBasic(q, 0)));
  3943. bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
  3944. delta = 0;
  3945. ++handledCPCount;
  3946. }
  3947. }
  3948. ++delta;
  3949. ++n;
  3950. }
  3951. return output.join('');
  3952. }
  3953. /**
  3954. * Converts a Punycode string representing a domain name or an email address
  3955. * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
  3956. * it doesn't matter if you call it on a string that has already been
  3957. * converted to Unicode.
  3958. * @memberOf punycode
  3959. * @param {String} input The Punycoded domain name or email address to
  3960. * convert to Unicode.
  3961. * @returns {String} The Unicode representation of the given Punycode
  3962. * string.
  3963. */
  3964. function toUnicode(input) {
  3965. return mapDomain(input, function(string) {
  3966. return regexPunycode.test(string)
  3967. ? decode(string.slice(4).toLowerCase())
  3968. : string;
  3969. });
  3970. }
  3971. /**
  3972. * Converts a Unicode string representing a domain name or an email address to
  3973. * Punycode. Only the non-ASCII parts of the domain name will be converted,
  3974. * i.e. it doesn't matter if you call it with a domain that's already in
  3975. * ASCII.
  3976. * @memberOf punycode
  3977. * @param {String} input The domain name or email address to convert, as a
  3978. * Unicode string.
  3979. * @returns {String} The Punycode representation of the given domain name or
  3980. * email address.
  3981. */
  3982. function toASCII(input) {
  3983. return mapDomain(input, function(string) {
  3984. return regexNonASCII.test(string)
  3985. ? 'xn--' + encode(string)
  3986. : string;
  3987. });
  3988. }
  3989. /*--------------------------------------------------------------------------*/
  3990. /** Define the public API */
  3991. punycode = {
  3992. /**
  3993. * A string representing the current Punycode.js version number.
  3994. * @memberOf punycode
  3995. * @type String
  3996. */
  3997. 'version': '1.4.1',
  3998. /**
  3999. * An object of methods to convert from JavaScript's internal character
  4000. * representation (UCS-2) to Unicode code points, and back.
  4001. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  4002. * @memberOf punycode
  4003. * @type Object
  4004. */
  4005. 'ucs2': {
  4006. 'decode': ucs2decode,
  4007. 'encode': ucs2encode
  4008. },
  4009. 'decode': decode,
  4010. 'encode': encode,
  4011. 'toASCII': toASCII,
  4012. 'toUnicode': toUnicode
  4013. };
  4014. /** Expose `punycode` */
  4015. // Some AMD build optimizers, like r.js, check for specific condition patterns
  4016. // like the following:
  4017. if (
  4018. true
  4019. ) {
  4020. !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
  4021. return punycode;
  4022. }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  4023. } else if (freeExports && freeModule) {
  4024. if (module.exports == freeExports) {
  4025. // in Node.js, io.js, or RingoJS v0.8.0+
  4026. freeModule.exports = punycode;
  4027. } else {
  4028. // in Narwhal or RingoJS v0.7.0-
  4029. for (key in punycode) {
  4030. punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
  4031. }
  4032. }
  4033. } else {
  4034. // in Rhino or a web browser
  4035. root.punycode = punycode;
  4036. }
  4037. }(this));
  4038. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module), (function() { return this; }())))
  4039. /***/ }),
  4040. /* 16 */
  4041. /***/ (function(module, exports) {
  4042. module.exports = ["ac","com.ac","edu.ac","gov.ac","net.ac","mil.ac","org.ac","ad","nom.ad","ae","co.ae","net.ae","org.ae","sch.ae","ac.ae","gov.ae","mil.ae","aero","accident-investigation.aero","accident-prevention.aero","aerobatic.aero","aeroclub.aero","aerodrome.aero","agents.aero","aircraft.aero","airline.aero","airport.aero","air-surveillance.aero","airtraffic.aero","air-traffic-control.aero","ambulance.aero","amusement.aero","association.aero","author.aero","ballooning.aero","broker.aero","caa.aero","cargo.aero","catering.aero","certification.aero","championship.aero","charter.aero","civilaviation.aero","club.aero","conference.aero","consultant.aero","consulting.aero","control.aero","council.aero","crew.aero","design.aero","dgca.aero","educator.aero","emergency.aero","engine.aero","engineer.aero","entertainment.aero","equipment.aero","exchange.aero","express.aero","federation.aero","flight.aero","freight.aero","fuel.aero","gliding.aero","government.aero","groundhandling.aero","group.aero","hanggliding.aero","homebuilt.aero","insurance.aero","journal.aero","journalist.aero","leasing.aero","logistics.aero","magazine.aero","maintenance.aero","media.aero","microlight.aero","modelling.aero","navigation.aero","parachuting.aero","paragliding.aero","passenger-association.aero","pilot.aero","press.aero","production.aero","recreation.aero","repbody.aero","res.aero","research.aero","rotorcraft.aero","safety.aero","scientist.aero","services.aero","show.aero","skydiving.aero","software.aero","student.aero","trader.aero","trading.aero","trainer.aero","union.aero","workinggroup.aero","works.aero","af","gov.af","com.af","org.af","net.af","edu.af","ag","com.ag","org.ag","net.ag","co.ag","nom.ag","ai","off.ai","com.ai","net.ai","org.ai","al","com.al","edu.al","gov.al","mil.al","net.al","org.al","am","ao","ed.ao","gv.ao","og.ao","co.ao","pb.ao","it.ao","aq","ar","com.ar","edu.ar","gob.ar","gov.ar","int.ar","mil.ar","musica.ar","net.ar","org.ar","tur.ar","arpa","e164.arpa","in-addr.arpa","ip6.arpa","iris.arpa","uri.arpa","urn.arpa","as","gov.as","asia","at","ac.at","co.at","gv.at","or.at","au","com.au","net.au","org.au","edu.au","gov.au","asn.au","id.au","info.au","conf.au","oz.au","act.au","nsw.au","nt.au","qld.au","sa.au","tas.au","vic.au","wa.au","act.edu.au","nsw.edu.au","nt.edu.au","qld.edu.au","sa.edu.au","tas.edu.au","vic.edu.au","wa.edu.au","qld.gov.au","sa.gov.au","tas.gov.au","vic.gov.au","wa.gov.au","aw","com.aw","ax","az","com.az","net.az","int.az","gov.az","org.az","edu.az","info.az","pp.az","mil.az","name.az","pro.az","biz.az","ba","com.ba","edu.ba","gov.ba","mil.ba","net.ba","org.ba","bb","biz.bb","co.bb","com.bb","edu.bb","gov.bb","info.bb","net.bb","org.bb","store.bb","tv.bb","*.bd","be","ac.be","bf","gov.bf","bg","a.bg","b.bg","c.bg","d.bg","e.bg","f.bg","g.bg","h.bg","i.bg","j.bg","k.bg","l.bg","m.bg","n.bg","o.bg","p.bg","q.bg","r.bg","s.bg","t.bg","u.bg","v.bg","w.bg","x.bg","y.bg","z.bg","0.bg","1.bg","2.bg","3.bg","4.bg","5.bg","6.bg","7.bg","8.bg","9.bg","bh","com.bh","edu.bh","net.bh","org.bh","gov.bh","bi","co.bi","com.bi","edu.bi","or.bi","org.bi","biz","bj","asso.bj","barreau.bj","gouv.bj","bm","com.bm","edu.bm","gov.bm","net.bm","org.bm","*.bn","bo","com.bo","edu.bo","gob.bo","int.bo","org.bo","net.bo","mil.bo","tv.bo","web.bo","academia.bo","agro.bo","arte.bo","blog.bo","bolivia.bo","ciencia.bo","cooperativa.bo","democracia.bo","deporte.bo","ecologia.bo","economia.bo","empresa.bo","indigena.bo","industria.bo","info.bo","medicina.bo","movimiento.bo","musica.bo","natural.bo","nombre.bo","noticias.bo","patria.bo","politica.bo","profesional.bo","plurinacional.bo","pueblo.bo","revista.bo","salud.bo","tecnologia.bo","tksat.bo","transporte.bo","wiki.bo","br","9guacu.br","abc.br","adm.br","adv.br","agr.br","aju.br","am.br","anani.br","aparecida.br","arq.br","art.br","ato.br","b.br","barueri.br","belem.br","bhz.br","bio.br","blog.br","bmd.br","boavista.br","bsb.br","campinagrande.br","campinas.br","caxias.br","cim.br","cng.br","cnt.br","com.br","contagem.br","coop.br","cri.br","cuiaba.br","curitiba.br","def.br","ecn.br","eco.br","edu.br","emp.br","eng.br","esp.br","etc.br","eti.br","far.br","feira.br","flog.br","floripa.br","fm.br","fnd.br","fortal.br","fot.br","foz.br","fst.br","g12.br","ggf.br","goiania.br","gov.br","ac.gov.br","al.gov.br","am.gov.br","ap.gov.br","ba.gov.br","ce.gov.br","df.gov.br","es.gov.br","go.gov.br","ma.gov.br","mg.gov.br","ms.gov.br","mt.gov.br","pa.gov.br","pb.gov.br","pe.gov.br","pi.gov.br","pr.gov.br","rj.gov.br","rn.gov.br","ro.gov.br","rr.gov.br","rs.gov.br","sc.gov.br","se.gov.br","sp.gov.br","to.gov.br","gru.br","imb.br","ind.br","inf.br","jab.br","jampa.br","jdf.br","joinville.br","jor.br","jus.br","leg.br","lel.br","londrina.br","macapa.br","maceio.br","manaus.br","maringa.br","mat.br","med.br","mil.br","morena.br","mp.br","mus.br","natal.br","net.br","niteroi.br","*.nom.br","not.br","ntr.br","odo.br","org.br","osasco.br","palmas.br","poa.br","ppg.br","pro.br","psc.br","psi.br","pvh.br","qsl.br","radio.br","rec.br","recife.br","ribeirao.br","rio.br","riobranco.br","riopreto.br","salvador.br","sampa.br","santamaria.br","santoandre.br","saobernardo.br","saogonca.br","sjc.br","slg.br","slz.br","sorocaba.br","srv.br","taxi.br","teo.br","the.br","tmp.br","trd.br","tur.br","tv.br","udi.br","vet.br","vix.br","vlog.br","wiki.br","zlg.br","bs","com.bs","net.bs","org.bs","edu.bs","gov.bs","bt","com.bt","edu.bt","gov.bt","net.bt","org.bt","bv","bw","co.bw","org.bw","by","gov.by","mil.by","com.by","of.by","bz","com.bz","net.bz","org.bz","edu.bz","gov.bz","ca","ab.ca","bc.ca","mb.ca","nb.ca","nf.ca","nl.ca","ns.ca","nt.ca","nu.ca","on.ca","pe.ca","qc.ca","sk.ca","yk.ca","gc.ca","cat","cc","cd","gov.cd","cf","cg","ch","ci","org.ci","or.ci","com.ci","co.ci","edu.ci","ed.ci","ac.ci","net.ci","go.ci","asso.ci","aéroport.ci","int.ci","presse.ci","md.ci","gouv.ci","*.ck","!www.ck","cl","gov.cl","gob.cl","co.cl","mil.cl","cm","co.cm","com.cm","gov.cm","net.cm","cn","ac.cn","com.cn","edu.cn","gov.cn","net.cn","org.cn","mil.cn","公司.cn","网络.cn","網絡.cn","ah.cn","bj.cn","cq.cn","fj.cn","gd.cn","gs.cn","gz.cn","gx.cn","ha.cn","hb.cn","he.cn","hi.cn","hl.cn","hn.cn","jl.cn","js.cn","jx.cn","ln.cn","nm.cn","nx.cn","qh.cn","sc.cn","sd.cn","sh.cn","sn.cn","sx.cn","tj.cn","xj.cn","xz.cn","yn.cn","zj.cn","hk.cn","mo.cn","tw.cn","co","arts.co","com.co","edu.co","firm.co","gov.co","info.co","int.co","mil.co","net.co","nom.co","org.co","rec.co","web.co","com","coop","cr","ac.cr","co.cr","ed.cr","fi.cr","go.cr","or.cr","sa.cr","cu","com.cu","edu.cu","org.cu","net.cu","gov.cu","inf.cu","cv","cw","com.cw","edu.cw","net.cw","org.cw","cx","gov.cx","cy","ac.cy","biz.cy","com.cy","ekloges.cy","gov.cy","ltd.cy","name.cy","net.cy","org.cy","parliament.cy","press.cy","pro.cy","tm.cy","cz","de","dj","dk","dm","com.dm","net.dm","org.dm","edu.dm","gov.dm","do","art.do","com.do","edu.do","gob.do","gov.do","mil.do","net.do","org.do","sld.do","web.do","dz","com.dz","org.dz","net.dz","gov.dz","edu.dz","asso.dz","pol.dz","art.dz","ec","com.ec","info.ec","net.ec","fin.ec","k12.ec","med.ec","pro.ec","org.ec","edu.ec","gov.ec","gob.ec","mil.ec","edu","ee","edu.ee","gov.ee","riik.ee","lib.ee","med.ee","com.ee","pri.ee","aip.ee","org.ee","fie.ee","eg","com.eg","edu.eg","eun.eg","gov.eg","mil.eg","name.eg","net.eg","org.eg","sci.eg","*.er","es","com.es","nom.es","org.es","gob.es","edu.es","et","com.et","gov.et","org.et","edu.et","biz.et","name.et","info.et","net.et","eu","fi","aland.fi","*.fj","*.fk","fm","fo","fr","com.fr","asso.fr","nom.fr","prd.fr","presse.fr","tm.fr","aeroport.fr","assedic.fr","avocat.fr","avoues.fr","cci.fr","chambagri.fr","chirurgiens-dentistes.fr","experts-comptables.fr","geometre-expert.fr","gouv.fr","greta.fr","huissier-justice.fr","medecin.fr","notaires.fr","pharmacien.fr","port.fr","veterinaire.fr","ga","gb","gd","ge","com.ge","edu.ge","gov.ge","org.ge","mil.ge","net.ge","pvt.ge","gf","gg","co.gg","net.gg","org.gg","gh","com.gh","edu.gh","gov.gh","org.gh","mil.gh","gi","com.gi","ltd.gi","gov.gi","mod.gi","edu.gi","org.gi","gl","co.gl","com.gl","edu.gl","net.gl","org.gl","gm","gn","ac.gn","com.gn","edu.gn","gov.gn","org.gn","net.gn","gov","gp","com.gp","net.gp","mobi.gp","edu.gp","org.gp","asso.gp","gq","gr","com.gr","edu.gr","net.gr","org.gr","gov.gr","gs","gt","com.gt","edu.gt","gob.gt","ind.gt","mil.gt","net.gt","org.gt","gu","com.gu","edu.gu","gov.gu","guam.gu","info.gu","net.gu","org.gu","web.gu","gw","gy","co.gy","com.gy","edu.gy","gov.gy","net.gy","org.gy","hk","com.hk","edu.hk","gov.hk","idv.hk","net.hk","org.hk","公司.hk","教育.hk","敎育.hk","政府.hk","個人.hk","个人.hk","箇人.hk","網络.hk","网络.hk","组織.hk","網絡.hk","网絡.hk","组织.hk","組織.hk","組织.hk","hm","hn","com.hn","edu.hn","org.hn","net.hn","mil.hn","gob.hn","hr","iz.hr","from.hr","name.hr","com.hr","ht","com.ht","shop.ht","firm.ht","info.ht","adult.ht","net.ht","pro.ht","org.ht","med.ht","art.ht","coop.ht","pol.ht","asso.ht","edu.ht","rel.ht","gouv.ht","perso.ht","hu","co.hu","info.hu","org.hu","priv.hu","sport.hu","tm.hu","2000.hu","agrar.hu","bolt.hu","casino.hu","city.hu","erotica.hu","erotika.hu","film.hu","forum.hu","games.hu","hotel.hu","ingatlan.hu","jogasz.hu","konyvelo.hu","lakas.hu","media.hu","news.hu","reklam.hu","sex.hu","shop.hu","suli.hu","szex.hu","tozsde.hu","utazas.hu","video.hu","id","ac.id","biz.id","co.id","desa.id","go.id","mil.id","my.id","net.id","or.id","sch.id","web.id","ie","gov.ie","il","ac.il","co.il","gov.il","idf.il","k12.il","muni.il","net.il","org.il","im","ac.im","co.im","com.im","ltd.co.im","net.im","org.im","plc.co.im","tt.im","tv.im","in","co.in","firm.in","net.in","org.in","gen.in","ind.in","nic.in","ac.in","edu.in","res.in","gov.in","mil.in","info","int","eu.int","io","com.io","iq","gov.iq","edu.iq","mil.iq","com.iq","org.iq","net.iq","ir","ac.ir","co.ir","gov.ir","id.ir","net.ir","org.ir","sch.ir","ایران.ir","ايران.ir","is","net.is","com.is","edu.is","gov.is","org.is","int.is","it","gov.it","edu.it","abr.it","abruzzo.it","aosta-valley.it","aostavalley.it","bas.it","basilicata.it","cal.it","calabria.it","cam.it","campania.it","emilia-romagna.it","emiliaromagna.it","emr.it","friuli-v-giulia.it","friuli-ve-giulia.it","friuli-vegiulia.it","friuli-venezia-giulia.it","friuli-veneziagiulia.it","friuli-vgiulia.it","friuliv-giulia.it","friulive-giulia.it","friulivegiulia.it","friulivenezia-giulia.it","friuliveneziagiulia.it","friulivgiulia.it","fvg.it","laz.it","lazio.it","lig.it","liguria.it","lom.it","lombardia.it","lombardy.it","lucania.it","mar.it","marche.it","mol.it","molise.it","piedmont.it","piemonte.it","pmn.it","pug.it","puglia.it","sar.it","sardegna.it","sardinia.it","sic.it","sicilia.it","sicily.it","taa.it","tos.it","toscana.it","trentin-sud-tirol.it","trentin-süd-tirol.it","trentin-sudtirol.it","trentin-südtirol.it","trentin-sued-tirol.it","trentin-suedtirol.it","trentino-a-adige.it","trentino-aadige.it","trentino-alto-adige.it","trentino-altoadige.it","trentino-s-tirol.it","trentino-stirol.it","trentino-sud-tirol.it","trentino-süd-tirol.it","trentino-sudtirol.it","trentino-südtirol.it","trentino-sued-tirol.it","trentino-suedtirol.it","trentino.it","trentinoa-adige.it","trentinoaadige.it","trentinoalto-adige.it","trentinoaltoadige.it","trentinos-tirol.it","trentinostirol.it","trentinosud-tirol.it","trentinosüd-tirol.it","trentinosudtirol.it","trentinosüdtirol.it","trentinosued-tirol.it","trentinosuedtirol.it","trentinsud-tirol.it","trentinsüd-tirol.it","trentinsudtirol.it","trentinsüdtirol.it","trentinsued-tirol.it","trentinsuedtirol.it","tuscany.it","umb.it","umbria.it","val-d-aosta.it","val-daosta.it","vald-aosta.it","valdaosta.it","valle-aosta.it","valle-d-aosta.it","valle-daosta.it","valleaosta.it","valled-aosta.it","valledaosta.it","vallee-aoste.it","vallée-aoste.it","vallee-d-aoste.it","vallée-d-aoste.it","valleeaoste.it","valléeaoste.it","valleedaoste.it","valléedaoste.it","vao.it","vda.it","ven.it","veneto.it","ag.it","agrigento.it","al.it","alessandria.it","alto-adige.it","altoadige.it","an.it","ancona.it","andria-barletta-trani.it","andria-trani-barletta.it","andriabarlettatrani.it","andriatranibarletta.it","ao.it","aosta.it","aoste.it","ap.it","aq.it","aquila.it","ar.it","arezzo.it","ascoli-piceno.it","ascolipiceno.it","asti.it","at.it","av.it","avellino.it","ba.it","balsan-sudtirol.it","balsan-südtirol.it","balsan-suedtirol.it","balsan.it","bari.it","barletta-trani-andria.it","barlettatraniandria.it","belluno.it","benevento.it","bergamo.it","bg.it","bi.it","biella.it","bl.it","bn.it","bo.it","bologna.it","bolzano-altoadige.it","bolzano.it","bozen-sudtirol.it","bozen-südtirol.it","bozen-suedtirol.it","bozen.it","br.it","brescia.it","brindisi.it","bs.it","bt.it","bulsan-sudtirol.it","bulsan-südtirol.it","bulsan-suedtirol.it","bulsan.it","bz.it","ca.it","cagliari.it","caltanissetta.it","campidano-medio.it","campidanomedio.it","campobasso.it","carbonia-iglesias.it","carboniaiglesias.it","carrara-massa.it","carraramassa.it","caserta.it","catania.it","catanzaro.it","cb.it","ce.it","cesena-forli.it","cesena-forlì.it","cesenaforli.it","cesenaforlì.it","ch.it","chieti.it","ci.it","cl.it","cn.it","co.it","como.it","cosenza.it","cr.it","cremona.it","crotone.it","cs.it","ct.it","cuneo.it","cz.it","dell-ogliastra.it","dellogliastra.it","en.it","enna.it","fc.it","fe.it","fermo.it","ferrara.it","fg.it","fi.it","firenze.it","florence.it","fm.it","foggia.it","forli-cesena.it","forlì-cesena.it","forlicesena.it","forlìcesena.it","fr.it","frosinone.it","ge.it","genoa.it","genova.it","go.it","gorizia.it","gr.it","grosseto.it","iglesias-carbonia.it","iglesiascarbonia.it","im.it","imperia.it","is.it","isernia.it","kr.it","la-spezia.it","laquila.it","laspezia.it","latina.it","lc.it","le.it","lecce.it","lecco.it","li.it","livorno.it","lo.it","lodi.it","lt.it","lu.it","lucca.it","macerata.it","mantova.it","massa-carrara.it","massacarrara.it","matera.it","mb.it","mc.it","me.it","medio-campidano.it","mediocampidano.it","messina.it","mi.it","milan.it","milano.it","mn.it","mo.it","modena.it","monza-brianza.it","monza-e-della-brianza.it","monza.it","monzabrianza.it","monzaebrianza.it","monzaedellabrianza.it","ms.it","mt.it","na.it","naples.it","napoli.it","no.it","novara.it","nu.it","nuoro.it","og.it","ogliastra.it","olbia-tempio.it","olbiatempio.it","or.it","oristano.it","ot.it","pa.it","padova.it","padua.it","palermo.it","parma.it","pavia.it","pc.it","pd.it","pe.it","perugia.it","pesaro-urbino.it","pesarourbino.it","pescara.it","pg.it","pi.it","piacenza.it","pisa.it","pistoia.it","pn.it","po.it","pordenone.it","potenza.it","pr.it","prato.it","pt.it","pu.it","pv.it","pz.it","ra.it","ragusa.it","ravenna.it","rc.it","re.it","reggio-calabria.it","reggio-emilia.it","reggiocalabria.it","reggioemilia.it","rg.it","ri.it","rieti.it","rimini.it","rm.it","rn.it","ro.it","roma.it","rome.it","rovigo.it","sa.it","salerno.it","sassari.it","savona.it","si.it","siena.it","siracusa.it","so.it","sondrio.it","sp.it","sr.it","ss.it","suedtirol.it","südtirol.it","sv.it","ta.it","taranto.it","te.it","tempio-olbia.it","tempioolbia.it","teramo.it","terni.it","tn.it","to.it","torino.it","tp.it","tr.it","trani-andria-barletta.it","trani-barletta-andria.it","traniandriabarletta.it","tranibarlettaandria.it","trapani.it","trento.it","treviso.it","trieste.it","ts.it","turin.it","tv.it","ud.it","udine.it","urbino-pesaro.it","urbinopesaro.it","va.it","varese.it","vb.it","vc.it","ve.it","venezia.it","venice.it","verbania.it","vercelli.it","verona.it","vi.it","vibo-valentia.it","vibovalentia.it","vicenza.it","viterbo.it","vr.it","vs.it","vt.it","vv.it","je","co.je","net.je","org.je","*.jm","jo","com.jo","org.jo","net.jo","edu.jo","sch.jo","gov.jo","mil.jo","name.jo","jobs","jp","ac.jp","ad.jp","co.jp","ed.jp","go.jp","gr.jp","lg.jp","ne.jp","or.jp","aichi.jp","akita.jp","aomori.jp","chiba.jp","ehime.jp","fukui.jp","fukuoka.jp","fukushima.jp","gifu.jp","gunma.jp","hiroshima.jp","hokkaido.jp","hyogo.jp","ibaraki.jp","ishikawa.jp","iwate.jp","kagawa.jp","kagoshima.jp","kanagawa.jp","kochi.jp","kumamoto.jp","kyoto.jp","mie.jp","miyagi.jp","miyazaki.jp","nagano.jp","nagasaki.jp","nara.jp","niigata.jp","oita.jp","okayama.jp","okinawa.jp","osaka.jp","saga.jp","saitama.jp","shiga.jp","shimane.jp","shizuoka.jp","tochigi.jp","tokushima.jp","tokyo.jp","tottori.jp","toyama.jp","wakayama.jp","yamagata.jp","yamaguchi.jp","yamanashi.jp","栃木.jp","愛知.jp","愛媛.jp","兵庫.jp","熊本.jp","茨城.jp","北海道.jp","千葉.jp","和歌山.jp","長崎.jp","長野.jp","新潟.jp","青森.jp","静岡.jp","東京.jp","石川.jp","埼玉.jp","三重.jp","京都.jp","佐賀.jp","大分.jp","大阪.jp","奈良.jp","宮城.jp","宮崎.jp","富山.jp","山口.jp","山形.jp","山梨.jp","岩手.jp","岐阜.jp","岡山.jp","島根.jp","広島.jp","徳島.jp","沖縄.jp","滋賀.jp","神奈川.jp","福井.jp","福岡.jp","福島.jp","秋田.jp","群馬.jp","香川.jp","高知.jp","鳥取.jp","鹿児島.jp","*.kawasaki.jp","*.kitakyushu.jp","*.kobe.jp","*.nagoya.jp","*.sapporo.jp","*.sendai.jp","*.yokohama.jp","!city.kawasaki.jp","!city.kitakyushu.jp","!city.kobe.jp","!city.nagoya.jp","!city.sapporo.jp","!city.sendai.jp","!city.yokohama.jp","aisai.aichi.jp","ama.aichi.jp","anjo.aichi.jp","asuke.aichi.jp","chiryu.aichi.jp","chita.aichi.jp","fuso.aichi.jp","gamagori.aichi.jp","handa.aichi.jp","hazu.aichi.jp","hekinan.aichi.jp","higashiura.aichi.jp","ichinomiya.aichi.jp","inazawa.aichi.jp","inuyama.aichi.jp","isshiki.aichi.jp","iwakura.aichi.jp","kanie.aichi.jp","kariya.aichi.jp","kasugai.aichi.jp","kira.aichi.jp","kiyosu.aichi.jp","komaki.aichi.jp","konan.aichi.jp","kota.aichi.jp","mihama.aichi.jp","miyoshi.aichi.jp","nishio.aichi.jp","nisshin.aichi.jp","obu.aichi.jp","oguchi.aichi.jp","oharu.aichi.jp","okazaki.aichi.jp","owariasahi.aichi.jp","seto.aichi.jp","shikatsu.aichi.jp","shinshiro.aichi.jp","shitara.aichi.jp","tahara.aichi.jp","takahama.aichi.jp","tobishima.aichi.jp","toei.aichi.jp","togo.aichi.jp","tokai.aichi.jp","tokoname.aichi.jp","toyoake.aichi.jp","toyohashi.aichi.jp","toyokawa.aichi.jp","toyone.aichi.jp","toyota.aichi.jp","tsushima.aichi.jp","yatomi.aichi.jp","akita.akita.jp","daisen.akita.jp","fujisato.akita.jp","gojome.akita.jp","hachirogata.akita.jp","happou.akita.jp","higashinaruse.akita.jp","honjo.akita.jp","honjyo.akita.jp","ikawa.akita.jp","kamikoani.akita.jp","kamioka.akita.jp","katagami.akita.jp","kazuno.akita.jp","kitaakita.akita.jp","kosaka.akita.jp","kyowa.akita.jp","misato.akita.jp","mitane.akita.jp","moriyoshi.akita.jp","nikaho.akita.jp","noshiro.akita.jp","odate.akita.jp","oga.akita.jp","ogata.akita.jp","semboku.akita.jp","yokote.akita.jp","yurihonjo.akita.jp","aomori.aomori.jp","gonohe.aomori.jp","hachinohe.aomori.jp","hashikami.aomori.jp","hiranai.aomori.jp","hirosaki.aomori.jp","itayanagi.aomori.jp","kuroishi.aomori.jp","misawa.aomori.jp","mutsu.aomori.jp","nakadomari.aomori.jp","noheji.aomori.jp","oirase.aomori.jp","owani.aomori.jp","rokunohe.aomori.jp","sannohe.aomori.jp","shichinohe.aomori.jp","shingo.aomori.jp","takko.aomori.jp","towada.aomori.jp","tsugaru.aomori.jp","tsuruta.aomori.jp","abiko.chiba.jp","asahi.chiba.jp","chonan.chiba.jp","chosei.chiba.jp","choshi.chiba.jp","chuo.chiba.jp","funabashi.chiba.jp","futtsu.chiba.jp","hanamigawa.chiba.jp","ichihara.chiba.jp","ichikawa.chiba.jp","ichinomiya.chiba.jp","inzai.chiba.jp","isumi.chiba.jp","kamagaya.chiba.jp","kamogawa.chiba.jp","kashiwa.chiba.jp","katori.chiba.jp","katsuura.chiba.jp","kimitsu.chiba.jp","kisarazu.chiba.jp","kozaki.chiba.jp","kujukuri.chiba.jp","kyonan.chiba.jp","matsudo.chiba.jp","midori.chiba.jp","mihama.chiba.jp","minamiboso.chiba.jp","mobara.chiba.jp","mutsuzawa.chiba.jp","nagara.chiba.jp","nagareyama.chiba.jp","narashino.chiba.jp","narita.chiba.jp","noda.chiba.jp","oamishirasato.chiba.jp","omigawa.chiba.jp","onjuku.chiba.jp","otaki.chiba.jp","sakae.chiba.jp","sakura.chiba.jp","shimofusa.chiba.jp","shirako.chiba.jp","shiroi.chiba.jp","shisui.chiba.jp","sodegaura.chiba.jp","sosa.chiba.jp","tako.chiba.jp","tateyama.chiba.jp","togane.chiba.jp","tohnosho.chiba.jp","tomisato.chiba.jp","urayasu.chiba.jp","yachimata.chiba.jp","yachiyo.chiba.jp","yokaichiba.chiba.jp","yokoshibahikari.chiba.jp","yotsukaido.chiba.jp","ainan.ehime.jp","honai.ehime.jp","ikata.ehime.jp","imabari.ehime.jp","iyo.ehime.jp","kamijima.ehime.jp","kihoku.ehime.jp","kumakogen.ehime.jp","masaki.ehime.jp","matsuno.ehime.jp","matsuyama.ehime.jp","namikata.ehime.jp","niihama.ehime.jp","ozu.ehime.jp","saijo.ehime.jp","seiyo.ehime.jp","shikokuchuo.ehime.jp","tobe.ehime.jp","toon.ehime.jp","uchiko.ehime.jp","uwajima.ehime.jp","yawatahama.ehime.jp","echizen.fukui.jp","eiheiji.fukui.jp","fukui.fukui.jp","ikeda.fukui.jp","katsuyama.fukui.jp","mihama.fukui.jp","minamiechizen.fukui.jp","obama.fukui.jp","ohi.fukui.jp","ono.fukui.jp","sabae.fukui.jp","sakai.fukui.jp","takahama.fukui.jp","tsuruga.fukui.jp","wakasa.fukui.jp","ashiya.fukuoka.jp","buzen.fukuoka.jp","chikugo.fukuoka.jp","chikuho.fukuoka.jp","chikujo.fukuoka.jp","chikushino.fukuoka.jp","chikuzen.fukuoka.jp","chuo.fukuoka.jp","dazaifu.fukuoka.jp","fukuchi.fukuoka.jp","hakata.fukuoka.jp","higashi.fukuoka.jp","hirokawa.fukuoka.jp","hisayama.fukuoka.jp","iizuka.fukuoka.jp","inatsuki.fukuoka.jp","kaho.fukuoka.jp","kasuga.fukuoka.jp","kasuya.fukuoka.jp","kawara.fukuoka.jp","keisen.fukuoka.jp","koga.fukuoka.jp","kurate.fukuoka.jp","kurogi.fukuoka.jp","kurume.fukuoka.jp","minami.fukuoka.jp","miyako.fukuoka.jp","miyama.fukuoka.jp","miyawaka.fukuoka.jp","mizumaki.fukuoka.jp","munakata.fukuoka.jp","nakagawa.fukuoka.jp","nakama.fukuoka.jp","nishi.fukuoka.jp","nogata.fukuoka.jp","ogori.fukuoka.jp","okagaki.fukuoka.jp","okawa.fukuoka.jp","oki.fukuoka.jp","omuta.fukuoka.jp","onga.fukuoka.jp","onojo.fukuoka.jp","oto.fukuoka.jp","saigawa.fukuoka.jp","sasaguri.fukuoka.jp","shingu.fukuoka.jp","shinyoshitomi.fukuoka.jp","shonai.fukuoka.jp","soeda.fukuoka.jp","sue.fukuoka.jp","tachiarai.fukuoka.jp","tagawa.fukuoka.jp","takata.fukuoka.jp","toho.fukuoka.jp","toyotsu.fukuoka.jp","tsuiki.fukuoka.jp","ukiha.fukuoka.jp","umi.fukuoka.jp","usui.fukuoka.jp","yamada.fukuoka.jp","yame.fukuoka.jp","yanagawa.fukuoka.jp","yukuhashi.fukuoka.jp","aizubange.fukushima.jp","aizumisato.fukushima.jp","aizuwakamatsu.fukushima.jp","asakawa.fukushima.jp","bandai.fukushima.jp","date.fukushima.jp","fukushima.fukushima.jp","furudono.fukushima.jp","futaba.fukushima.jp","hanawa.fukushima.jp","higashi.fukushima.jp","hirata.fukushima.jp","hirono.fukushima.jp","iitate.fukushima.jp","inawashiro.fukushima.jp","ishikawa.fukushima.jp","iwaki.fukushima.jp","izumizaki.fukushima.jp","kagamiishi.fukushima.jp","kaneyama.fukushima.jp","kawamata.fukushima.jp","kitakata.fukushima.jp","kitashiobara.fukushima.jp","koori.fukushima.jp","koriyama.fukushima.jp","kunimi.fukushima.jp","miharu.fukushima.jp","mishima.fukushima.jp","namie.fukushima.jp","nango.fukushima.jp","nishiaizu.fukushima.jp","nishigo.fukushima.jp","okuma.fukushima.jp","omotego.fukushima.jp","ono.fukushima.jp","otama.fukushima.jp","samegawa.fukushima.jp","shimogo.fukushima.jp","shirakawa.fukushima.jp","showa.fukushima.jp","soma.fukushima.jp","sukagawa.fukushima.jp","taishin.fukushima.jp","tamakawa.fukushima.jp","tanagura.fukushima.jp","tenei.fukushima.jp","yabuki.fukushima.jp","yamato.fukushima.jp","yamatsuri.fukushima.jp","yanaizu.fukushima.jp","yugawa.fukushima.jp","anpachi.gifu.jp","ena.gifu.jp","gifu.gifu.jp","ginan.gifu.jp","godo.gifu.jp","gujo.gifu.jp","hashima.gifu.jp","hichiso.gifu.jp","hida.gifu.jp","higashishirakawa.gifu.jp","ibigawa.gifu.jp","ikeda.gifu.jp","kakamigahara.gifu.jp","kani.gifu.jp","kasahara.gifu.jp","kasamatsu.gifu.jp","kawaue.gifu.jp","kitagata.gifu.jp","mino.gifu.jp","minokamo.gifu.jp","mitake.gifu.jp","mizunami.gifu.jp","motosu.gifu.jp","nakatsugawa.gifu.jp","ogaki.gifu.jp","sakahogi.gifu.jp","seki.gifu.jp","sekigahara.gifu.jp","shirakawa.gifu.jp","tajimi.gifu.jp","takayama.gifu.jp","tarui.gifu.jp","toki.gifu.jp","tomika.gifu.jp","wanouchi.gifu.jp","yamagata.gifu.jp","yaotsu.gifu.jp","yoro.gifu.jp","annaka.gunma.jp","chiyoda.gunma.jp","fujioka.gunma.jp","higashiagatsuma.gunma.jp","isesaki.gunma.jp","itakura.gunma.jp","kanna.gunma.jp","kanra.gunma.jp","katashina.gunma.jp","kawaba.gunma.jp","kiryu.gunma.jp","kusatsu.gunma.jp","maebashi.gunma.jp","meiwa.gunma.jp","midori.gunma.jp","minakami.gunma.jp","naganohara.gunma.jp","nakanojo.gunma.jp","nanmoku.gunma.jp","numata.gunma.jp","oizumi.gunma.jp","ora.gunma.jp","ota.gunma.jp","shibukawa.gunma.jp","shimonita.gunma.jp","shinto.gunma.jp","showa.gunma.jp","takasaki.gunma.jp","takayama.gunma.jp","tamamura.gunma.jp","tatebayashi.gunma.jp","tomioka.gunma.jp","tsukiyono.gunma.jp","tsumagoi.gunma.jp","ueno.gunma.jp","yoshioka.gunma.jp","asaminami.hiroshima.jp","daiwa.hiroshima.jp","etajima.hiroshima.jp","fuchu.hiroshima.jp","fukuyama.hiroshima.jp","hatsukaichi.hiroshima.jp","higashihiroshima.hiroshima.jp","hongo.hiroshima.jp","jinsekikogen.hiroshima.jp","kaita.hiroshima.jp","kui.hiroshima.jp","kumano.hiroshima.jp","kure.hiroshima.jp","mihara.hiroshima.jp","miyoshi.hiroshima.jp","naka.hiroshima.jp","onomichi.hiroshima.jp","osakikamijima.hiroshima.jp","otake.hiroshima.jp","saka.hiroshima.jp","sera.hiroshima.jp","seranishi.hiroshima.jp","shinichi.hiroshima.jp","shobara.hiroshima.jp","takehara.hiroshima.jp","abashiri.hokkaido.jp","abira.hokkaido.jp","aibetsu.hokkaido.jp","akabira.hokkaido.jp","akkeshi.hokkaido.jp","asahikawa.hokkaido.jp","ashibetsu.hokkaido.jp","ashoro.hokkaido.jp","assabu.hokkaido.jp","atsuma.hokkaido.jp","bibai.hokkaido.jp","biei.hokkaido.jp","bifuka.hokkaido.jp","bihoro.hokkaido.jp","biratori.hokkaido.jp","chippubetsu.hokkaido.jp","chitose.hokkaido.jp","date.hokkaido.jp","ebetsu.hokkaido.jp","embetsu.hokkaido.jp","eniwa.hokkaido.jp","erimo.hokkaido.jp","esan.hokkaido.jp","esashi.hokkaido.jp","fukagawa.hokkaido.jp","fukushima.hokkaido.jp","furano.hokkaido.jp","furubira.hokkaido.jp","haboro.hokkaido.jp","hakodate.hokkaido.jp","hamatonbetsu.hokkaido.jp","hidaka.hokkaido.jp","higashikagura.hokkaido.jp","higashikawa.hokkaido.jp","hiroo.hokkaido.jp","hokuryu.hokkaido.jp","hokuto.hokkaido.jp","honbetsu.hokkaido.jp","horokanai.hokkaido.jp","horonobe.hokkaido.jp","ikeda.hokkaido.jp","imakane.hokkaido.jp","ishikari.hokkaido.jp","iwamizawa.hokkaido.jp","iwanai.hokkaido.jp","kamifurano.hokkaido.jp","kamikawa.hokkaido.jp","kamishihoro.hokkaido.jp","kamisunagawa.hokkaido.jp","kamoenai.hokkaido.jp","kayabe.hokkaido.jp","kembuchi.hokkaido.jp","kikonai.hokkaido.jp","kimobetsu.hokkaido.jp","kitahiroshima.hokkaido.jp","kitami.hokkaido.jp","kiyosato.hokkaido.jp","koshimizu.hokkaido.jp","kunneppu.hokkaido.jp","kuriyama.hokkaido.jp","kuromatsunai.hokkaido.jp","kushiro.hokkaido.jp","kutchan.hokkaido.jp","kyowa.hokkaido.jp","mashike.hokkaido.jp","matsumae.hokkaido.jp","mikasa.hokkaido.jp","minamifurano.hokkaido.jp","mombetsu.hokkaido.jp","moseushi.hokkaido.jp","mukawa.hokkaido.jp","muroran.hokkaido.jp","naie.hokkaido.jp","nakagawa.hokkaido.jp","nakasatsunai.hokkaido.jp","nakatombetsu.hokkaido.jp","nanae.hokkaido.jp","nanporo.hokkaido.jp","nayoro.hokkaido.jp","nemuro.hokkaido.jp","niikappu.hokkaido.jp","niki.hokkaido.jp","nishiokoppe.hokkaido.jp","noboribetsu.hokkaido.jp","numata.hokkaido.jp","obihiro.hokkaido.jp","obira.hokkaido.jp","oketo.hokkaido.jp","okoppe.hokkaido.jp","otaru.hokkaido.jp","otobe.hokkaido.jp","otofuke.hokkaido.jp","otoineppu.hokkaido.jp","oumu.hokkaido.jp","ozora.hokkaido.jp","pippu.hokkaido.jp","rankoshi.hokkaido.jp","rebun.hokkaido.jp","rikubetsu.hokkaido.jp","rishiri.hokkaido.jp","rishirifuji.hokkaido.jp","saroma.hokkaido.jp","sarufutsu.hokkaido.jp","shakotan.hokkaido.jp","shari.hokkaido.jp","shibecha.hokkaido.jp","shibetsu.hokkaido.jp","shikabe.hokkaido.jp","shikaoi.hokkaido.jp","shimamaki.hokkaido.jp","shimizu.hokkaido.jp","shimokawa.hokkaido.jp","shinshinotsu.hokkaido.jp","shintoku.hokkaido.jp","shiranuka.hokkaido.jp","shiraoi.hokkaido.jp","shiriuchi.hokkaido.jp","sobetsu.hokkaido.jp","sunagawa.hokkaido.jp","taiki.hokkaido.jp","takasu.hokkaido.jp","takikawa.hokkaido.jp","takinoue.hokkaido.jp","teshikaga.hokkaido.jp","tobetsu.hokkaido.jp","tohma.hokkaido.jp","tomakomai.hokkaido.jp","tomari.hokkaido.jp","toya.hokkaido.jp","toyako.hokkaido.jp","toyotomi.hokkaido.jp","toyoura.hokkaido.jp","tsubetsu.hokkaido.jp","tsukigata.hokkaido.jp","urakawa.hokkaido.jp","urausu.hokkaido.jp","uryu.hokkaido.jp","utashinai.hokkaido.jp","wakkanai.hokkaido.jp","wassamu.hokkaido.jp","yakumo.hokkaido.jp","yoichi.hokkaido.jp","aioi.hyogo.jp","akashi.hyogo.jp","ako.hyogo.jp","amagasaki.hyogo.jp","aogaki.hyogo.jp","asago.hyogo.jp","ashiya.hyogo.jp","awaji.hyogo.jp","fukusaki.hyogo.jp","goshiki.hyogo.jp","harima.hyogo.jp","himeji.hyogo.jp","ichikawa.hyogo.jp","inagawa.hyogo.jp","itami.hyogo.jp","kakogawa.hyogo.jp","kamigori.hyogo.jp","kamikawa.hyogo.jp","kasai.hyogo.jp","kasuga.hyogo.jp","kawanishi.hyogo.jp","miki.hyogo.jp","minamiawaji.hyogo.jp","nishinomiya.hyogo.jp","nishiwaki.hyogo.jp","ono.hyogo.jp","sanda.hyogo.jp","sannan.hyogo.jp","sasayama.hyogo.jp","sayo.hyogo.jp","shingu.hyogo.jp","shinonsen.hyogo.jp","shiso.hyogo.jp","sumoto.hyogo.jp","taishi.hyogo.jp","taka.hyogo.jp","takarazuka.hyogo.jp","takasago.hyogo.jp","takino.hyogo.jp","tamba.hyogo.jp","tatsuno.hyogo.jp","toyooka.hyogo.jp","yabu.hyogo.jp","yashiro.hyogo.jp","yoka.hyogo.jp","yokawa.hyogo.jp","ami.ibaraki.jp","asahi.ibaraki.jp","bando.ibaraki.jp","chikusei.ibaraki.jp","daigo.ibaraki.jp","fujishiro.ibaraki.jp","hitachi.ibaraki.jp","hitachinaka.ibaraki.jp","hitachiomiya.ibaraki.jp","hitachiota.ibaraki.jp","ibaraki.ibaraki.jp","ina.ibaraki.jp","inashiki.ibaraki.jp","itako.ibaraki.jp","iwama.ibaraki.jp","joso.ibaraki.jp","kamisu.ibaraki.jp","kasama.ibaraki.jp","kashima.ibaraki.jp","kasumigaura.ibaraki.jp","koga.ibaraki.jp","miho.ibaraki.jp","mito.ibaraki.jp","moriya.ibaraki.jp","naka.ibaraki.jp","namegata.ibaraki.jp","oarai.ibaraki.jp","ogawa.ibaraki.jp","omitama.ibaraki.jp","ryugasaki.ibaraki.jp","sakai.ibaraki.jp","sakuragawa.ibaraki.jp","shimodate.ibaraki.jp","shimotsuma.ibaraki.jp","shirosato.ibaraki.jp","sowa.ibaraki.jp","suifu.ibaraki.jp","takahagi.ibaraki.jp","tamatsukuri.ibaraki.jp","tokai.ibaraki.jp","tomobe.ibaraki.jp","tone.ibaraki.jp","toride.ibaraki.jp","tsuchiura.ibaraki.jp","tsukuba.ibaraki.jp","uchihara.ibaraki.jp","ushiku.ibaraki.jp","yachiyo.ibaraki.jp","yamagata.ibaraki.jp","yawara.ibaraki.jp","yuki.ibaraki.jp","anamizu.ishikawa.jp","hakui.ishikawa.jp","hakusan.ishikawa.jp","kaga.ishikawa.jp","kahoku.ishikawa.jp","kanazawa.ishikawa.jp","kawakita.ishikawa.jp","komatsu.ishikawa.jp","nakanoto.ishikawa.jp","nanao.ishikawa.jp","nomi.ishikawa.jp","nonoichi.ishikawa.jp","noto.ishikawa.jp","shika.ishikawa.jp","suzu.ishikawa.jp","tsubata.ishikawa.jp","tsurugi.ishikawa.jp","uchinada.ishikawa.jp","wajima.ishikawa.jp","fudai.iwate.jp","fujisawa.iwate.jp","hanamaki.iwate.jp","hiraizumi.iwate.jp","hirono.iwate.jp","ichinohe.iwate.jp","ichinoseki.iwate.jp","iwaizumi.iwate.jp","iwate.iwate.jp","joboji.iwate.jp","kamaishi.iwate.jp","kanegasaki.iwate.jp","karumai.iwate.jp","kawai.iwate.jp","kitakami.iwate.jp","kuji.iwate.jp","kunohe.iwate.jp","kuzumaki.iwate.jp","miyako.iwate.jp","mizusawa.iwate.jp","morioka.iwate.jp","ninohe.iwate.jp","noda.iwate.jp","ofunato.iwate.jp","oshu.iwate.jp","otsuchi.iwate.jp","rikuzentakata.iwate.jp","shiwa.iwate.jp","shizukuishi.iwate.jp","sumita.iwate.jp","tanohata.iwate.jp","tono.iwate.jp","yahaba.iwate.jp","yamada.iwate.jp","ayagawa.kagawa.jp","higashikagawa.kagawa.jp","kanonji.kagawa.jp","kotohira.kagawa.jp","manno.kagawa.jp","marugame.kagawa.jp","mitoyo.kagawa.jp","naoshima.kagawa.jp","sanuki.kagawa.jp","tadotsu.kagawa.jp","takamatsu.kagawa.jp","tonosho.kagawa.jp","uchinomi.kagawa.jp","utazu.kagawa.jp","zentsuji.kagawa.jp","akune.kagoshima.jp","amami.kagoshima.jp","hioki.kagoshima.jp","isa.kagoshima.jp","isen.kagoshima.jp","izumi.kagoshima.jp","kagoshima.kagoshima.jp","kanoya.kagoshima.jp","kawanabe.kagoshima.jp","kinko.kagoshima.jp","kouyama.kagoshima.jp","makurazaki.kagoshima.jp","matsumoto.kagoshima.jp","minamitane.kagoshima.jp","nakatane.kagoshima.jp","nishinoomote.kagoshima.jp","satsumasendai.kagoshima.jp","soo.kagoshima.jp","tarumizu.kagoshima.jp","yusui.kagoshima.jp","aikawa.kanagawa.jp","atsugi.kanagawa.jp","ayase.kanagawa.jp","chigasaki.kanagawa.jp","ebina.kanagawa.jp","fujisawa.kanagawa.jp","hadano.kanagawa.jp","hakone.kanagawa.jp","hiratsuka.kanagawa.jp","isehara.kanagawa.jp","kaisei.kanagawa.jp","kamakura.kanagawa.jp","kiyokawa.kanagawa.jp","matsuda.kanagawa.jp","minamiashigara.kanagawa.jp","miura.kanagawa.jp","nakai.kanagawa.jp","ninomiya.kanagawa.jp","odawara.kanagawa.jp","oi.kanagawa.jp","oiso.kanagawa.jp","sagamihara.kanagawa.jp","samukawa.kanagawa.jp","tsukui.kanagawa.jp","yamakita.kanagawa.jp","yamato.kanagawa.jp","yokosuka.kanagawa.jp","yugawara.kanagawa.jp","zama.kanagawa.jp","zushi.kanagawa.jp","aki.kochi.jp","geisei.kochi.jp","hidaka.kochi.jp","higashitsuno.kochi.jp","ino.kochi.jp","kagami.kochi.jp","kami.kochi.jp","kitagawa.kochi.jp","kochi.kochi.jp","mihara.kochi.jp","motoyama.kochi.jp","muroto.kochi.jp","nahari.kochi.jp","nakamura.kochi.jp","nankoku.kochi.jp","nishitosa.kochi.jp","niyodogawa.kochi.jp","ochi.kochi.jp","okawa.kochi.jp","otoyo.kochi.jp","otsuki.kochi.jp","sakawa.kochi.jp","sukumo.kochi.jp","susaki.kochi.jp","tosa.kochi.jp","tosashimizu.kochi.jp","toyo.kochi.jp","tsuno.kochi.jp","umaji.kochi.jp","yasuda.kochi.jp","yusuhara.kochi.jp","amakusa.kumamoto.jp","arao.kumamoto.jp","aso.kumamoto.jp","choyo.kumamoto.jp","gyokuto.kumamoto.jp","kamiamakusa.kumamoto.jp","kikuchi.kumamoto.jp","kumamoto.kumamoto.jp","mashiki.kumamoto.jp","mifune.kumamoto.jp","minamata.kumamoto.jp","minamioguni.kumamoto.jp","nagasu.kumamoto.jp","nishihara.kumamoto.jp","oguni.kumamoto.jp","ozu.kumamoto.jp","sumoto.kumamoto.jp","takamori.kumamoto.jp","uki.kumamoto.jp","uto.kumamoto.jp","yamaga.kumamoto.jp","yamato.kumamoto.jp","yatsushiro.kumamoto.jp","ayabe.kyoto.jp","fukuchiyama.kyoto.jp","higashiyama.kyoto.jp","ide.kyoto.jp","ine.kyoto.jp","joyo.kyoto.jp","kameoka.kyoto.jp","kamo.kyoto.jp","kita.kyoto.jp","kizu.kyoto.jp","kumiyama.kyoto.jp","kyotamba.kyoto.jp","kyotanabe.kyoto.jp","kyotango.kyoto.jp","maizuru.kyoto.jp","minami.kyoto.jp","minamiyamashiro.kyoto.jp","miyazu.kyoto.jp","muko.kyoto.jp","nagaokakyo.kyoto.jp","nakagyo.kyoto.jp","nantan.kyoto.jp","oyamazaki.kyoto.jp","sakyo.kyoto.jp","seika.kyoto.jp","tanabe.kyoto.jp","uji.kyoto.jp","ujitawara.kyoto.jp","wazuka.kyoto.jp","yamashina.kyoto.jp","yawata.kyoto.jp","asahi.mie.jp","inabe.mie.jp","ise.mie.jp","kameyama.mie.jp","kawagoe.mie.jp","kiho.mie.jp","kisosaki.mie.jp","kiwa.mie.jp","komono.mie.jp","kumano.mie.jp","kuwana.mie.jp","matsusaka.mie.jp","meiwa.mie.jp","mihama.mie.jp","minamiise.mie.jp","misugi.mie.jp","miyama.mie.jp","nabari.mie.jp","shima.mie.jp","suzuka.mie.jp","tado.mie.jp","taiki.mie.jp","taki.mie.jp","tamaki.mie.jp","toba.mie.jp","tsu.mie.jp","udono.mie.jp","ureshino.mie.jp","watarai.mie.jp","yokkaichi.mie.jp","furukawa.miyagi.jp","higashimatsushima.miyagi.jp","ishinomaki.miyagi.jp","iwanuma.miyagi.jp","kakuda.miyagi.jp","kami.miyagi.jp","kawasaki.miyagi.jp","marumori.miyagi.jp","matsushima.miyagi.jp","minamisanriku.miyagi.jp","misato.miyagi.jp","murata.miyagi.jp","natori.miyagi.jp","ogawara.miyagi.jp","ohira.miyagi.jp","onagawa.miyagi.jp","osaki.miyagi.jp","rifu.miyagi.jp","semine.miyagi.jp","shibata.miyagi.jp","shichikashuku.miyagi.jp","shikama.miyagi.jp","shiogama.miyagi.jp","shiroishi.miyagi.jp","tagajo.miyagi.jp","taiwa.miyagi.jp","tome.miyagi.jp","tomiya.miyagi.jp","wakuya.miyagi.jp","watari.miyagi.jp","yamamoto.miyagi.jp","zao.miyagi.jp","aya.miyazaki.jp","ebino.miyazaki.jp","gokase.miyazaki.jp","hyuga.miyazaki.jp","kadogawa.miyazaki.jp","kawaminami.miyazaki.jp","kijo.miyazaki.jp","kitagawa.miyazaki.jp","kitakata.miyazaki.jp","kitaura.miyazaki.jp","kobayashi.miyazaki.jp","kunitomi.miyazaki.jp","kushima.miyazaki.jp","mimata.miyazaki.jp","miyakonojo.miyazaki.jp","miyazaki.miyazaki.jp","morotsuka.miyazaki.jp","nichinan.miyazaki.jp","nishimera.miyazaki.jp","nobeoka.miyazaki.jp","saito.miyazaki.jp","shiiba.miyazaki.jp","shintomi.miyazaki.jp","takaharu.miyazaki.jp","takanabe.miyazaki.jp","takazaki.miyazaki.jp","tsuno.miyazaki.jp","achi.nagano.jp","agematsu.nagano.jp","anan.nagano.jp","aoki.nagano.jp","asahi.nagano.jp","azumino.nagano.jp","chikuhoku.nagano.jp","chikuma.nagano.jp","chino.nagano.jp","fujimi.nagano.jp","hakuba.nagano.jp","hara.nagano.jp","hiraya.nagano.jp","iida.nagano.jp","iijima.nagano.jp","iiyama.nagano.jp","iizuna.nagano.jp","ikeda.nagano.jp","ikusaka.nagano.jp","ina.nagano.jp","karuizawa.nagano.jp","kawakami.nagano.jp","kiso.nagano.jp","kisofukushima.nagano.jp","kitaaiki.nagano.jp","komagane.nagano.jp","komoro.nagano.jp","matsukawa.nagano.jp","matsumoto.nagano.jp","miasa.nagano.jp","minamiaiki.nagano.jp","minamimaki.nagano.jp","minamiminowa.nagano.jp","minowa.nagano.jp","miyada.nagano.jp","miyota.nagano.jp","mochizuki.nagano.jp","nagano.nagano.jp","nagawa.nagano.jp","nagiso.nagano.jp","nakagawa.nagano.jp","nakano.nagano.jp","nozawaonsen.nagano.jp","obuse.nagano.jp","ogawa.nagano.jp","okaya.nagano.jp","omachi.nagano.jp","omi.nagano.jp","ookuwa.nagano.jp","ooshika.nagano.jp","otaki.nagano.jp","otari.nagano.jp","sakae.nagano.jp","sakaki.nagano.jp","saku.nagano.jp","sakuho.nagano.jp","shimosuwa.nagano.jp","shinanomachi.nagano.jp","shiojiri.nagano.jp","suwa.nagano.jp","suzaka.nagano.jp","takagi.nagano.jp","takamori.nagano.jp","takayama.nagano.jp","tateshina.nagano.jp","tatsuno.nagano.jp","togakushi.nagano.jp","togura.nagano.jp","tomi.nagano.jp","ueda.nagano.jp","wada.nagano.jp","yamagata.nagano.jp","yamanouchi.nagano.jp","yasaka.nagano.jp","yasuoka.nagano.jp","chijiwa.nagasaki.jp","futsu.nagasaki.jp","goto.nagasaki.jp","hasami.nagasaki.jp","hirado.nagasaki.jp","iki.nagasaki.jp","isahaya.nagasaki.jp","kawatana.nagasaki.jp","kuchinotsu.nagasaki.jp","matsuura.nagasaki.jp","nagasaki.nagasaki.jp","obama.nagasaki.jp","omura.nagasaki.jp","oseto.nagasaki.jp","saikai.nagasaki.jp","sasebo.nagasaki.jp","seihi.nagasaki.jp","shimabara.nagasaki.jp","shinkamigoto.nagasaki.jp","togitsu.nagasaki.jp","tsushima.nagasaki.jp","unzen.nagasaki.jp","ando.nara.jp","gose.nara.jp","heguri.nara.jp","higashiyoshino.nara.jp","ikaruga.nara.jp","ikoma.nara.jp","kamikitayama.nara.jp","kanmaki.nara.jp","kashiba.nara.jp","kashihara.nara.jp","katsuragi.nara.jp","kawai.nara.jp","kawakami.nara.jp","kawanishi.nara.jp","koryo.nara.jp","kurotaki.nara.jp","mitsue.nara.jp","miyake.nara.jp","nara.nara.jp","nosegawa.nara.jp","oji.nara.jp","ouda.nara.jp","oyodo.nara.jp","sakurai.nara.jp","sango.nara.jp","shimoichi.nara.jp","shimokitayama.nara.jp","shinjo.nara.jp","soni.nara.jp","takatori.nara.jp","tawaramoto.nara.jp","tenkawa.nara.jp","tenri.nara.jp","uda.nara.jp","yamatokoriyama.nara.jp","yamatotakada.nara.jp","yamazoe.nara.jp","yoshino.nara.jp","aga.niigata.jp","agano.niigata.jp","gosen.niigata.jp","itoigawa.niigata.jp","izumozaki.niigata.jp","joetsu.niigata.jp","kamo.niigata.jp","kariwa.niigata.jp","kashiwazaki.niigata.jp","minamiuonuma.niigata.jp","mitsuke.niigata.jp","muika.niigata.jp","murakami.niigata.jp","myoko.niigata.jp","nagaoka.niigata.jp","niigata.niigata.jp","ojiya.niigata.jp","omi.niigata.jp","sado.niigata.jp","sanjo.niigata.jp","seiro.niigata.jp","seirou.niigata.jp","sekikawa.niigata.jp","shibata.niigata.jp","tagami.niigata.jp","tainai.niigata.jp","tochio.niigata.jp","tokamachi.niigata.jp","tsubame.niigata.jp","tsunan.niigata.jp","uonuma.niigata.jp","yahiko.niigata.jp","yoita.niigata.jp","yuzawa.niigata.jp","beppu.oita.jp","bungoono.oita.jp","bungotakada.oita.jp","hasama.oita.jp","hiji.oita.jp","himeshima.oita.jp","hita.oita.jp","kamitsue.oita.jp","kokonoe.oita.jp","kuju.oita.jp","kunisaki.oita.jp","kusu.oita.jp","oita.oita.jp","saiki.oita.jp","taketa.oita.jp","tsukumi.oita.jp","usa.oita.jp","usuki.oita.jp","yufu.oita.jp","akaiwa.okayama.jp","asakuchi.okayama.jp","bizen.okayama.jp","hayashima.okayama.jp","ibara.okayama.jp","kagamino.okayama.jp","kasaoka.okayama.jp","kibichuo.okayama.jp","kumenan.okayama.jp","kurashiki.okayama.jp","maniwa.okayama.jp","misaki.okayama.jp","nagi.okayama.jp","niimi.okayama.jp","nishiawakura.okayama.jp","okayama.okayama.jp","satosho.okayama.jp","setouchi.okayama.jp","shinjo.okayama.jp","shoo.okayama.jp","soja.okayama.jp","takahashi.okayama.jp","tamano.okayama.jp","tsuyama.okayama.jp","wake.okayama.jp","yakage.okayama.jp","aguni.okinawa.jp","ginowan.okinawa.jp","ginoza.okinawa.jp","gushikami.okinawa.jp","haebaru.okinawa.jp","higashi.okinawa.jp","hirara.okinawa.jp","iheya.okinawa.jp","ishigaki.okinawa.jp","ishikawa.okinawa.jp","itoman.okinawa.jp","izena.okinawa.jp","kadena.okinawa.jp","kin.okinawa.jp","kitadaito.okinawa.jp","kitanakagusuku.okinawa.jp","kumejima.okinawa.jp","kunigami.okinawa.jp","minamidaito.okinawa.jp","motobu.okinawa.jp","nago.okinawa.jp","naha.okinawa.jp","nakagusuku.okinawa.jp","nakijin.okinawa.jp","nanjo.okinawa.jp","nishihara.okinawa.jp","ogimi.okinawa.jp","okinawa.okinawa.jp","onna.okinawa.jp","shimoji.okinawa.jp","taketomi.okinawa.jp","tarama.okinawa.jp","tokashiki.okinawa.jp","tomigusuku.okinawa.jp","tonaki.okinawa.jp","urasoe.okinawa.jp","uruma.okinawa.jp","yaese.okinawa.jp","yomitan.okinawa.jp","yonabaru.okinawa.jp","yonaguni.okinawa.jp","zamami.okinawa.jp","abeno.osaka.jp","chihayaakasaka.osaka.jp","chuo.osaka.jp","daito.osaka.jp","fujiidera.osaka.jp","habikino.osaka.jp","hannan.osaka.jp","higashiosaka.osaka.jp","higashisumiyoshi.osaka.jp","higashiyodogawa.osaka.jp","hirakata.osaka.jp","ibaraki.osaka.jp","ikeda.osaka.jp","izumi.osaka.jp","izumiotsu.osaka.jp","izumisano.osaka.jp","kadoma.osaka.jp","kaizuka.osaka.jp","kanan.osaka.jp","kashiwara.osaka.jp","katano.osaka.jp","kawachinagano.osaka.jp","kishiwada.osaka.jp","kita.osaka.jp","kumatori.osaka.jp","matsubara.osaka.jp","minato.osaka.jp","minoh.osaka.jp","misaki.osaka.jp","moriguchi.osaka.jp","neyagawa.osaka.jp","nishi.osaka.jp","nose.osaka.jp","osakasayama.osaka.jp","sakai.osaka.jp","sayama.osaka.jp","sennan.osaka.jp","settsu.osaka.jp","shijonawate.osaka.jp","shimamoto.osaka.jp","suita.osaka.jp","tadaoka.osaka.jp","taishi.osaka.jp","tajiri.osaka.jp","takaishi.osaka.jp","takatsuki.osaka.jp","tondabayashi.osaka.jp","toyonaka.osaka.jp","toyono.osaka.jp","yao.osaka.jp","ariake.saga.jp","arita.saga.jp","fukudomi.saga.jp","genkai.saga.jp","hamatama.saga.jp","hizen.saga.jp","imari.saga.jp","kamimine.saga.jp","kanzaki.saga.jp","karatsu.saga.jp","kashima.saga.jp","kitagata.saga.jp","kitahata.saga.jp","kiyama.saga.jp","kouhoku.saga.jp","kyuragi.saga.jp","nishiarita.saga.jp","ogi.saga.jp","omachi.saga.jp","ouchi.saga.jp","saga.saga.jp","shiroishi.saga.jp","taku.saga.jp","tara.saga.jp","tosu.saga.jp","yoshinogari.saga.jp","arakawa.saitama.jp","asaka.saitama.jp","chichibu.saitama.jp","fujimi.saitama.jp","fujimino.saitama.jp","fukaya.saitama.jp","hanno.saitama.jp","hanyu.saitama.jp","hasuda.saitama.jp","hatogaya.saitama.jp","hatoyama.saitama.jp","hidaka.saitama.jp","higashichichibu.saitama.jp","higashimatsuyama.saitama.jp","honjo.saitama.jp","ina.saitama.jp","iruma.saitama.jp","iwatsuki.saitama.jp","kamiizumi.saitama.jp","kamikawa.saitama.jp","kamisato.saitama.jp","kasukabe.saitama.jp","kawagoe.saitama.jp","kawaguchi.saitama.jp","kawajima.saitama.jp","kazo.saitama.jp","kitamoto.saitama.jp","koshigaya.saitama.jp","kounosu.saitama.jp","kuki.saitama.jp","kumagaya.saitama.jp","matsubushi.saitama.jp","minano.saitama.jp","misato.saitama.jp","miyashiro.saitama.jp","miyoshi.saitama.jp","moroyama.saitama.jp","nagatoro.saitama.jp","namegawa.saitama.jp","niiza.saitama.jp","ogano.saitama.jp","ogawa.saitama.jp","ogose.saitama.jp","okegawa.saitama.jp","omiya.saitama.jp","otaki.saitama.jp","ranzan.saitama.jp","ryokami.saitama.jp","saitama.saitama.jp","sakado.saitama.jp","satte.saitama.jp","sayama.saitama.jp","shiki.saitama.jp","shiraoka.saitama.jp","soka.saitama.jp","sugito.saitama.jp","toda.saitama.jp","tokigawa.saitama.jp","tokorozawa.saitama.jp","tsurugashima.saitama.jp","urawa.saitama.jp","warabi.saitama.jp","yashio.saitama.jp","yokoze.saitama.jp","yono.saitama.jp","yorii.saitama.jp","yoshida.saitama.jp","yoshikawa.saitama.jp","yoshimi.saitama.jp","aisho.shiga.jp","gamo.shiga.jp","higashiomi.shiga.jp","hikone.shiga.jp","koka.shiga.jp","konan.shiga.jp","kosei.shiga.jp","koto.shiga.jp","kusatsu.shiga.jp","maibara.shiga.jp","moriyama.shiga.jp","nagahama.shiga.jp","nishiazai.shiga.jp","notogawa.shiga.jp","omihachiman.shiga.jp","otsu.shiga.jp","ritto.shiga.jp","ryuoh.shiga.jp","takashima.shiga.jp","takatsuki.shiga.jp","torahime.shiga.jp","toyosato.shiga.jp","yasu.shiga.jp","akagi.shimane.jp","ama.shimane.jp","gotsu.shimane.jp","hamada.shimane.jp","higashiizumo.shimane.jp","hikawa.shimane.jp","hikimi.shimane.jp","izumo.shimane.jp","kakinoki.shimane.jp","masuda.shimane.jp","matsue.shimane.jp","misato.shimane.jp","nishinoshima.shimane.jp","ohda.shimane.jp","okinoshima.shimane.jp","okuizumo.shimane.jp","shimane.shimane.jp","tamayu.shimane.jp","tsuwano.shimane.jp","unnan.shimane.jp","yakumo.shimane.jp","yasugi.shimane.jp","yatsuka.shimane.jp","arai.shizuoka.jp","atami.shizuoka.jp","fuji.shizuoka.jp","fujieda.shizuoka.jp","fujikawa.shizuoka.jp","fujinomiya.shizuoka.jp","fukuroi.shizuoka.jp","gotemba.shizuoka.jp","haibara.shizuoka.jp","hamamatsu.shizuoka.jp","higashiizu.shizuoka.jp","ito.shizuoka.jp","iwata.shizuoka.jp","izu.shizuoka.jp","izunokuni.shizuoka.jp","kakegawa.shizuoka.jp","kannami.shizuoka.jp","kawanehon.shizuoka.jp","kawazu.shizuoka.jp","kikugawa.shizuoka.jp","kosai.shizuoka.jp","makinohara.shizuoka.jp","matsuzaki.shizuoka.jp","minamiizu.shizuoka.jp","mishima.shizuoka.jp","morimachi.shizuoka.jp","nishiizu.shizuoka.jp","numazu.shizuoka.jp","omaezaki.shizuoka.jp","shimada.shizuoka.jp","shimizu.shizuoka.jp","shimoda.shizuoka.jp","shizuoka.shizuoka.jp","susono.shizuoka.jp","yaizu.shizuoka.jp","yoshida.shizuoka.jp","ashikaga.tochigi.jp","bato.tochigi.jp","haga.tochigi.jp","ichikai.tochigi.jp","iwafune.tochigi.jp","kaminokawa.tochigi.jp","kanuma.tochigi.jp","karasuyama.tochigi.jp","kuroiso.tochigi.jp","mashiko.tochigi.jp","mibu.tochigi.jp","moka.tochigi.jp","motegi.tochigi.jp","nasu.tochigi.jp","nasushiobara.tochigi.jp","nikko.tochigi.jp","nishikata.tochigi.jp","nogi.tochigi.jp","ohira.tochigi.jp","ohtawara.tochigi.jp","oyama.tochigi.jp","sakura.tochigi.jp","sano.tochigi.jp","shimotsuke.tochigi.jp","shioya.tochigi.jp","takanezawa.tochigi.jp","tochigi.tochigi.jp","tsuga.tochigi.jp","ujiie.tochigi.jp","utsunomiya.tochigi.jp","yaita.tochigi.jp","aizumi.tokushima.jp","anan.tokushima.jp","ichiba.tokushima.jp","itano.tokushima.jp","kainan.tokushima.jp","komatsushima.tokushima.jp","matsushige.tokushima.jp","mima.tokushima.jp","minami.tokushima.jp","miyoshi.tokushima.jp","mugi.tokushima.jp","nakagawa.tokushima.jp","naruto.tokushima.jp","sanagochi.tokushima.jp","shishikui.tokushima.jp","tokushima.tokushima.jp","wajiki.tokushima.jp","adachi.tokyo.jp","akiruno.tokyo.jp","akishima.tokyo.jp","aogashima.tokyo.jp","arakawa.tokyo.jp","bunkyo.tokyo.jp","chiyoda.tokyo.jp","chofu.tokyo.jp","chuo.tokyo.jp","edogawa.tokyo.jp","fuchu.tokyo.jp","fussa.tokyo.jp","hachijo.tokyo.jp","hachioji.tokyo.jp","hamura.tokyo.jp","higashikurume.tokyo.jp","higashimurayama.tokyo.jp","higashiyamato.tokyo.jp","hino.tokyo.jp","hinode.tokyo.jp","hinohara.tokyo.jp","inagi.tokyo.jp","itabashi.tokyo.jp","katsushika.tokyo.jp","kita.tokyo.jp","kiyose.tokyo.jp","kodaira.tokyo.jp","koganei.tokyo.jp","kokubunji.tokyo.jp","komae.tokyo.jp","koto.tokyo.jp","kouzushima.tokyo.jp","kunitachi.tokyo.jp","machida.tokyo.jp","meguro.tokyo.jp","minato.tokyo.jp","mitaka.tokyo.jp","mizuho.tokyo.jp","musashimurayama.tokyo.jp","musashino.tokyo.jp","nakano.tokyo.jp","nerima.tokyo.jp","ogasawara.tokyo.jp","okutama.tokyo.jp","ome.tokyo.jp","oshima.tokyo.jp","ota.tokyo.jp","setagaya.tokyo.jp","shibuya.tokyo.jp","shinagawa.tokyo.jp","shinjuku.tokyo.jp","suginami.tokyo.jp","sumida.tokyo.jp","tachikawa.tokyo.jp","taito.tokyo.jp","tama.tokyo.jp","toshima.tokyo.jp","chizu.tottori.jp","hino.tottori.jp","kawahara.tottori.jp","koge.tottori.jp","kotoura.tottori.jp","misasa.tottori.jp","nanbu.tottori.jp","nichinan.tottori.jp","sakaiminato.tottori.jp","tottori.tottori.jp","wakasa.tottori.jp","yazu.tottori.jp","yonago.tottori.jp","asahi.toyama.jp","fuchu.toyama.jp","fukumitsu.toyama.jp","funahashi.toyama.jp","himi.toyama.jp","imizu.toyama.jp","inami.toyama.jp","johana.toyama.jp","kamiichi.toyama.jp","kurobe.toyama.jp","nakaniikawa.toyama.jp","namerikawa.toyama.jp","nanto.toyama.jp","nyuzen.toyama.jp","oyabe.toyama.jp","taira.toyama.jp","takaoka.toyama.jp","tateyama.toyama.jp","toga.toyama.jp","tonami.toyama.jp","toyama.toyama.jp","unazuki.toyama.jp","uozu.toyama.jp","yamada.toyama.jp","arida.wakayama.jp","aridagawa.wakayama.jp","gobo.wakayama.jp","hashimoto.wakayama.jp","hidaka.wakayama.jp","hirogawa.wakayama.jp","inami.wakayama.jp","iwade.wakayama.jp","kainan.wakayama.jp","kamitonda.wakayama.jp","katsuragi.wakayama.jp","kimino.wakayama.jp","kinokawa.wakayama.jp","kitayama.wakayama.jp","koya.wakayama.jp","koza.wakayama.jp","kozagawa.wakayama.jp","kudoyama.wakayama.jp","kushimoto.wakayama.jp","mihama.wakayama.jp","misato.wakayama.jp","nachikatsuura.wakayama.jp","shingu.wakayama.jp","shirahama.wakayama.jp","taiji.wakayama.jp","tanabe.wakayama.jp","wakayama.wakayama.jp","yuasa.wakayama.jp","yura.wakayama.jp","asahi.yamagata.jp","funagata.yamagata.jp","higashine.yamagata.jp","iide.yamagata.jp","kahoku.yamagata.jp","kaminoyama.yamagata.jp","kaneyama.yamagata.jp","kawanishi.yamagata.jp","mamurogawa.yamagata.jp","mikawa.yamagata.jp","murayama.yamagata.jp","nagai.yamagata.jp","nakayama.yamagata.jp","nanyo.yamagata.jp","nishikawa.yamagata.jp","obanazawa.yamagata.jp","oe.yamagata.jp","oguni.yamagata.jp","ohkura.yamagata.jp","oishida.yamagata.jp","sagae.yamagata.jp","sakata.yamagata.jp","sakegawa.yamagata.jp","shinjo.yamagata.jp","shirataka.yamagata.jp","shonai.yamagata.jp","takahata.yamagata.jp","tendo.yamagata.jp","tozawa.yamagata.jp","tsuruoka.yamagata.jp","yamagata.yamagata.jp","yamanobe.yamagata.jp","yonezawa.yamagata.jp","yuza.yamagata.jp","abu.yamaguchi.jp","hagi.yamaguchi.jp","hikari.yamaguchi.jp","hofu.yamaguchi.jp","iwakuni.yamaguchi.jp","kudamatsu.yamaguchi.jp","mitou.yamaguchi.jp","nagato.yamaguchi.jp","oshima.yamaguchi.jp","shimonoseki.yamaguchi.jp","shunan.yamaguchi.jp","tabuse.yamaguchi.jp","tokuyama.yamaguchi.jp","toyota.yamaguchi.jp","ube.yamaguchi.jp","yuu.yamaguchi.jp","chuo.yamanashi.jp","doshi.yamanashi.jp","fuefuki.yamanashi.jp","fujikawa.yamanashi.jp","fujikawaguchiko.yamanashi.jp","fujiyoshida.yamanashi.jp","hayakawa.yamanashi.jp","hokuto.yamanashi.jp","ichikawamisato.yamanashi.jp","kai.yamanashi.jp","kofu.yamanashi.jp","koshu.yamanashi.jp","kosuge.yamanashi.jp","minami-alps.yamanashi.jp","minobu.yamanashi.jp","nakamichi.yamanashi.jp","nanbu.yamanashi.jp","narusawa.yamanashi.jp","nirasaki.yamanashi.jp","nishikatsura.yamanashi.jp","oshino.yamanashi.jp","otsuki.yamanashi.jp","showa.yamanashi.jp","tabayama.yamanashi.jp","tsuru.yamanashi.jp","uenohara.yamanashi.jp","yamanakako.yamanashi.jp","yamanashi.yamanashi.jp","ke","ac.ke","co.ke","go.ke","info.ke","me.ke","mobi.ke","ne.ke","or.ke","sc.ke","kg","org.kg","net.kg","com.kg","edu.kg","gov.kg","mil.kg","*.kh","ki","edu.ki","biz.ki","net.ki","org.ki","gov.ki","info.ki","com.ki","km","org.km","nom.km","gov.km","prd.km","tm.km","edu.km","mil.km","ass.km","com.km","coop.km","asso.km","presse.km","medecin.km","notaires.km","pharmaciens.km","veterinaire.km","gouv.km","kn","net.kn","org.kn","edu.kn","gov.kn","kp","com.kp","edu.kp","gov.kp","org.kp","rep.kp","tra.kp","kr","ac.kr","co.kr","es.kr","go.kr","hs.kr","kg.kr","mil.kr","ms.kr","ne.kr","or.kr","pe.kr","re.kr","sc.kr","busan.kr","chungbuk.kr","chungnam.kr","daegu.kr","daejeon.kr","gangwon.kr","gwangju.kr","gyeongbuk.kr","gyeonggi.kr","gyeongnam.kr","incheon.kr","jeju.kr","jeonbuk.kr","jeonnam.kr","seoul.kr","ulsan.kr","kw","com.kw","edu.kw","emb.kw","gov.kw","ind.kw","net.kw","org.kw","ky","edu.ky","gov.ky","com.ky","org.ky","net.ky","kz","org.kz","edu.kz","net.kz","gov.kz","mil.kz","com.kz","la","int.la","net.la","info.la","edu.la","gov.la","per.la","com.la","org.la","lb","com.lb","edu.lb","gov.lb","net.lb","org.lb","lc","com.lc","net.lc","co.lc","org.lc","edu.lc","gov.lc","li","lk","gov.lk","sch.lk","net.lk","int.lk","com.lk","org.lk","edu.lk","ngo.lk","soc.lk","web.lk","ltd.lk","assn.lk","grp.lk","hotel.lk","ac.lk","lr","com.lr","edu.lr","gov.lr","org.lr","net.lr","ls","co.ls","org.ls","lt","gov.lt","lu","lv","com.lv","edu.lv","gov.lv","org.lv","mil.lv","id.lv","net.lv","asn.lv","conf.lv","ly","com.ly","net.ly","gov.ly","plc.ly","edu.ly","sch.ly","med.ly","org.ly","id.ly","ma","co.ma","net.ma","gov.ma","org.ma","ac.ma","press.ma","mc","tm.mc","asso.mc","md","me","co.me","net.me","org.me","edu.me","ac.me","gov.me","its.me","priv.me","mg","org.mg","nom.mg","gov.mg","prd.mg","tm.mg","edu.mg","mil.mg","com.mg","co.mg","mh","mil","mk","com.mk","org.mk","net.mk","edu.mk","gov.mk","inf.mk","name.mk","ml","com.ml","edu.ml","gouv.ml","gov.ml","net.ml","org.ml","presse.ml","*.mm","mn","gov.mn","edu.mn","org.mn","mo","com.mo","net.mo","org.mo","edu.mo","gov.mo","mobi","mp","mq","mr","gov.mr","ms","com.ms","edu.ms","gov.ms","net.ms","org.ms","mt","com.mt","edu.mt","net.mt","org.mt","mu","com.mu","net.mu","org.mu","gov.mu","ac.mu","co.mu","or.mu","museum","academy.museum","agriculture.museum","air.museum","airguard.museum","alabama.museum","alaska.museum","amber.museum","ambulance.museum","american.museum","americana.museum","americanantiques.museum","americanart.museum","amsterdam.museum","and.museum","annefrank.museum","anthro.museum","anthropology.museum","antiques.museum","aquarium.museum","arboretum.museum","archaeological.museum","archaeology.museum","architecture.museum","art.museum","artanddesign.museum","artcenter.museum","artdeco.museum","arteducation.museum","artgallery.museum","arts.museum","artsandcrafts.museum","asmatart.museum","assassination.museum","assisi.museum","association.museum","astronomy.museum","atlanta.museum","austin.museum","australia.museum","automotive.museum","aviation.museum","axis.museum","badajoz.museum","baghdad.museum","bahn.museum","bale.museum","baltimore.museum","barcelona.museum","baseball.museum","basel.museum","baths.museum","bauern.museum","beauxarts.museum","beeldengeluid.museum","bellevue.museum","bergbau.museum","berkeley.museum","berlin.museum","bern.museum","bible.museum","bilbao.museum","bill.museum","birdart.museum","birthplace.museum","bonn.museum","boston.museum","botanical.museum","botanicalgarden.museum","botanicgarden.museum","botany.museum","brandywinevalley.museum","brasil.museum","bristol.museum","british.museum","britishcolumbia.museum","broadcast.museum","brunel.museum","brussel.museum","brussels.museum","bruxelles.museum","building.museum","burghof.museum","bus.museum","bushey.museum","cadaques.museum","california.museum","cambridge.museum","can.museum","canada.museum","capebreton.museum","carrier.museum","cartoonart.museum","casadelamoneda.museum","castle.museum","castres.museum","celtic.museum","center.museum","chattanooga.museum","cheltenham.museum","chesapeakebay.museum","chicago.museum","children.museum","childrens.museum","childrensgarden.museum","chiropractic.museum","chocolate.museum","christiansburg.museum","cincinnati.museum","cinema.museum","circus.museum","civilisation.museum","civilization.museum","civilwar.museum","clinton.museum","clock.museum","coal.museum","coastaldefence.museum","cody.museum","coldwar.museum","collection.museum","colonialwilliamsburg.museum","coloradoplateau.museum","columbia.museum","columbus.museum","communication.museum","communications.museum","community.museum","computer.museum","computerhistory.museum","comunicações.museum","contemporary.museum","contemporaryart.museum","convent.museum","copenhagen.museum","corporation.museum","correios-e-telecomunicações.museum","corvette.museum","costume.museum","countryestate.museum","county.museum","crafts.museum","cranbrook.museum","creation.museum","cultural.museum","culturalcenter.museum","culture.museum","cyber.museum","cymru.museum","dali.museum","dallas.museum","database.museum","ddr.museum","decorativearts.museum","delaware.museum","delmenhorst.museum","denmark.museum","depot.museum","design.museum","detroit.museum","dinosaur.museum","discovery.museum","dolls.museum","donostia.museum","durham.museum","eastafrica.museum","eastcoast.museum","education.museum","educational.museum","egyptian.museum","eisenbahn.museum","elburg.museum","elvendrell.museum","embroidery.museum","encyclopedic.museum","england.museum","entomology.museum","environment.museum","environmentalconservation.museum","epilepsy.museum","essex.museum","estate.museum","ethnology.museum","exeter.museum","exhibition.museum","family.museum","farm.museum","farmequipment.museum","farmers.museum","farmstead.museum","field.museum","figueres.museum","filatelia.museum","film.museum","fineart.museum","finearts.museum","finland.museum","flanders.museum","florida.museum","force.museum","fortmissoula.museum","fortworth.museum","foundation.museum","francaise.museum","frankfurt.museum","franziskaner.museum","freemasonry.museum","freiburg.museum","fribourg.museum","frog.museum","fundacio.museum","furniture.museum","gallery.museum","garden.museum","gateway.museum","geelvinck.museum","gemological.museum","geology.museum","georgia.museum","giessen.museum","glas.museum","glass.museum","gorge.museum","grandrapids.museum","graz.museum","guernsey.museum","halloffame.museum","hamburg.museum","handson.museum","harvestcelebration.museum","hawaii.museum","health.museum","heimatunduhren.museum","hellas.museum","helsinki.museum","hembygdsforbund.museum","heritage.museum","histoire.museum","historical.museum","historicalsociety.museum","historichouses.museum","historisch.museum","historisches.museum","history.museum","historyofscience.museum","horology.museum","house.museum","humanities.museum","illustration.museum","imageandsound.museum","indian.museum","indiana.museum","indianapolis.museum","indianmarket.museum","intelligence.museum","interactive.museum","iraq.museum","iron.museum","isleofman.museum","jamison.museum","jefferson.museum","jerusalem.museum","jewelry.museum","jewish.museum","jewishart.museum","jfk.museum","journalism.museum","judaica.museum","judygarland.museum","juedisches.museum","juif.museum","karate.museum","karikatur.museum","kids.museum","koebenhavn.museum","koeln.museum","kunst.museum","kunstsammlung.museum","kunstunddesign.museum","labor.museum","labour.museum","lajolla.museum","lancashire.museum","landes.museum","lans.museum","läns.museum","larsson.museum","lewismiller.museum","lincoln.museum","linz.museum","living.museum","livinghistory.museum","localhistory.museum","london.museum","losangeles.museum","louvre.museum","loyalist.museum","lucerne.museum","luxembourg.museum","luzern.museum","mad.museum","madrid.museum","mallorca.museum","manchester.museum","mansion.museum","mansions.museum","manx.museum","marburg.museum","maritime.museum","maritimo.museum","maryland.museum","marylhurst.museum","media.museum","medical.museum","medizinhistorisches.museum","meeres.museum","memorial.museum","mesaverde.museum","michigan.museum","midatlantic.museum","military.museum","mill.museum","miners.museum","mining.museum","minnesota.museum","missile.museum","missoula.museum","modern.museum","moma.museum","money.museum","monmouth.museum","monticello.museum","montreal.museum","moscow.museum","motorcycle.museum","muenchen.museum","muenster.museum","mulhouse.museum","muncie.museum","museet.museum","museumcenter.museum","museumvereniging.museum","music.museum","national.museum","nationalfirearms.museum","nationalheritage.museum","nativeamerican.museum","naturalhistory.museum","naturalhistorymuseum.museum","naturalsciences.museum","nature.museum","naturhistorisches.museum","natuurwetenschappen.museum","naumburg.museum","naval.museum","nebraska.museum","neues.museum","newhampshire.museum","newjersey.museum","newmexico.museum","newport.museum","newspaper.museum","newyork.museum","niepce.museum","norfolk.museum","north.museum","nrw.museum","nuernberg.museum","nuremberg.museum","nyc.museum","nyny.museum","oceanographic.museum","oceanographique.museum","omaha.museum","online.museum","ontario.museum","openair.museum","oregon.museum","oregontrail.museum","otago.museum","oxford.museum","pacific.museum","paderborn.museum","palace.museum","paleo.museum","palmsprings.museum","panama.museum","paris.museum","pasadena.museum","pharmacy.museum","philadelphia.museum","philadelphiaarea.museum","philately.museum","phoenix.museum","photography.museum","pilots.museum","pittsburgh.museum","planetarium.museum","plantation.museum","plants.museum","plaza.museum","portal.museum","portland.museum","portlligat.museum","posts-and-telecommunications.museum","preservation.museum","presidio.museum","press.museum","project.museum","public.museum","pubol.museum","quebec.museum","railroad.museum","railway.museum","research.museum","resistance.museum","riodejaneiro.museum","rochester.museum","rockart.museum","roma.museum","russia.museum","saintlouis.museum","salem.museum","salvadordali.museum","salzburg.museum","sandiego.museum","sanfrancisco.museum","santabarbara.museum","santacruz.museum","santafe.museum","saskatchewan.museum","satx.museum","savannahga.museum","schlesisches.museum","schoenbrunn.museum","schokoladen.museum","school.museum","schweiz.museum","science.museum","scienceandhistory.museum","scienceandindustry.museum","sciencecenter.museum","sciencecenters.museum","science-fiction.museum","sciencehistory.museum","sciences.museum","sciencesnaturelles.museum","scotland.museum","seaport.museum","settlement.museum","settlers.museum","shell.museum","sherbrooke.museum","sibenik.museum","silk.museum","ski.museum","skole.museum","society.museum","sologne.museum","soundandvision.museum","southcarolina.museum","southwest.museum","space.museum","spy.museum","square.museum","stadt.museum","stalbans.museum","starnberg.museum","state.museum","stateofdelaware.museum","station.museum","steam.museum","steiermark.museum","stjohn.museum","stockholm.museum","stpetersburg.museum","stuttgart.museum","suisse.museum","surgeonshall.museum","surrey.museum","svizzera.museum","sweden.museum","sydney.museum","tank.museum","tcm.museum","technology.museum","telekommunikation.museum","television.museum","texas.museum","textile.museum","theater.museum","time.museum","timekeeping.museum","topology.museum","torino.museum","touch.museum","town.museum","transport.museum","tree.museum","trolley.museum","trust.museum","trustee.museum","uhren.museum","ulm.museum","undersea.museum","university.museum","usa.museum","usantiques.museum","usarts.museum","uscountryestate.museum","usculture.museum","usdecorativearts.museum","usgarden.museum","ushistory.museum","ushuaia.museum","uslivinghistory.museum","utah.museum","uvic.museum","valley.museum","vantaa.museum","versailles.museum","viking.museum","village.museum","virginia.museum","virtual.museum","virtuel.museum","vlaanderen.museum","volkenkunde.museum","wales.museum","wallonie.museum","war.museum","washingtondc.museum","watchandclock.museum","watch-and-clock.museum","western.museum","westfalen.museum","whaling.museum","wildlife.museum","williamsburg.museum","windmill.museum","workshop.museum","york.museum","yorkshire.museum","yosemite.museum","youth.museum","zoological.museum","zoology.museum","ירושלים.museum","иком.museum","mv","aero.mv","biz.mv","com.mv","coop.mv","edu.mv","gov.mv","info.mv","int.mv","mil.mv","museum.mv","name.mv","net.mv","org.mv","pro.mv","mw","ac.mw","biz.mw","co.mw","com.mw","coop.mw","edu.mw","gov.mw","int.mw","museum.mw","net.mw","org.mw","mx","com.mx","org.mx","gob.mx","edu.mx","net.mx","my","com.my","net.my","org.my","gov.my","edu.my","mil.my","name.my","mz","ac.mz","adv.mz","co.mz","edu.mz","gov.mz","mil.mz","net.mz","org.mz","na","info.na","pro.na","name.na","school.na","or.na","dr.na","us.na","mx.na","ca.na","in.na","cc.na","tv.na","ws.na","mobi.na","co.na","com.na","org.na","name","nc","asso.nc","nom.nc","ne","net","nf","com.nf","net.nf","per.nf","rec.nf","web.nf","arts.nf","firm.nf","info.nf","other.nf","store.nf","ng","com.ng","edu.ng","gov.ng","i.ng","mil.ng","mobi.ng","name.ng","net.ng","org.ng","sch.ng","ni","ac.ni","biz.ni","co.ni","com.ni","edu.ni","gob.ni","in.ni","info.ni","int.ni","mil.ni","net.ni","nom.ni","org.ni","web.ni","nl","bv.nl","no","fhs.no","vgs.no","fylkesbibl.no","folkebibl.no","museum.no","idrett.no","priv.no","mil.no","stat.no","dep.no","kommune.no","herad.no","aa.no","ah.no","bu.no","fm.no","hl.no","hm.no","jan-mayen.no","mr.no","nl.no","nt.no","of.no","ol.no","oslo.no","rl.no","sf.no","st.no","svalbard.no","tm.no","tr.no","va.no","vf.no","gs.aa.no","gs.ah.no","gs.bu.no","gs.fm.no","gs.hl.no","gs.hm.no","gs.jan-mayen.no","gs.mr.no","gs.nl.no","gs.nt.no","gs.of.no","gs.ol.no","gs.oslo.no","gs.rl.no","gs.sf.no","gs.st.no","gs.svalbard.no","gs.tm.no","gs.tr.no","gs.va.no","gs.vf.no","akrehamn.no","åkrehamn.no","algard.no","ålgård.no","arna.no","brumunddal.no","bryne.no","bronnoysund.no","brønnøysund.no","drobak.no","drøbak.no","egersund.no","fetsund.no","floro.no","florø.no","fredrikstad.no","hokksund.no","honefoss.no","hønefoss.no","jessheim.no","jorpeland.no","jørpeland.no","kirkenes.no","kopervik.no","krokstadelva.no","langevag.no","langevåg.no","leirvik.no","mjondalen.no","mjøndalen.no","mo-i-rana.no","mosjoen.no","mosjøen.no","nesoddtangen.no","orkanger.no","osoyro.no","osøyro.no","raholt.no","råholt.no","sandnessjoen.no","sandnessjøen.no","skedsmokorset.no","slattum.no","spjelkavik.no","stathelle.no","stavern.no","stjordalshalsen.no","stjørdalshalsen.no","tananger.no","tranby.no","vossevangen.no","afjord.no","åfjord.no","agdenes.no","al.no","ål.no","alesund.no","ålesund.no","alstahaug.no","alta.no","áltá.no","alaheadju.no","álaheadju.no","alvdal.no","amli.no","åmli.no","amot.no","åmot.no","andebu.no","andoy.no","andøy.no","andasuolo.no","ardal.no","årdal.no","aremark.no","arendal.no","ås.no","aseral.no","åseral.no","asker.no","askim.no","askvoll.no","askoy.no","askøy.no","asnes.no","åsnes.no","audnedaln.no","aukra.no","aure.no","aurland.no","aurskog-holand.no","aurskog-høland.no","austevoll.no","austrheim.no","averoy.no","averøy.no","balestrand.no","ballangen.no","balat.no","bálát.no","balsfjord.no","bahccavuotna.no","báhccavuotna.no","bamble.no","bardu.no","beardu.no","beiarn.no","bajddar.no","bájddar.no","baidar.no","báidár.no","berg.no","bergen.no","berlevag.no","berlevåg.no","bearalvahki.no","bearalváhki.no","bindal.no","birkenes.no","bjarkoy.no","bjarkøy.no","bjerkreim.no","bjugn.no","bodo.no","bodø.no","badaddja.no","bådåddjå.no","budejju.no","bokn.no","bremanger.no","bronnoy.no","brønnøy.no","bygland.no","bykle.no","barum.no","bærum.no","bo.telemark.no","bø.telemark.no","bo.nordland.no","bø.nordland.no","bievat.no","bievát.no","bomlo.no","bømlo.no","batsfjord.no","båtsfjord.no","bahcavuotna.no","báhcavuotna.no","dovre.no","drammen.no","drangedal.no","dyroy.no","dyrøy.no","donna.no","dønna.no","eid.no","eidfjord.no","eidsberg.no","eidskog.no","eidsvoll.no","eigersund.no","elverum.no","enebakk.no","engerdal.no","etne.no","etnedal.no","evenes.no","evenassi.no","evenášši.no","evje-og-hornnes.no","farsund.no","fauske.no","fuossko.no","fuoisku.no","fedje.no","fet.no","finnoy.no","finnøy.no","fitjar.no","fjaler.no","fjell.no","flakstad.no","flatanger.no","flekkefjord.no","flesberg.no","flora.no","fla.no","flå.no","folldal.no","forsand.no","fosnes.no","frei.no","frogn.no","froland.no","frosta.no","frana.no","fræna.no","froya.no","frøya.no","fusa.no","fyresdal.no","forde.no","førde.no","gamvik.no","gangaviika.no","gáŋgaviika.no","gaular.no","gausdal.no","gildeskal.no","gildeskål.no","giske.no","gjemnes.no","gjerdrum.no","gjerstad.no","gjesdal.no","gjovik.no","gjøvik.no","gloppen.no","gol.no","gran.no","grane.no","granvin.no","gratangen.no","grimstad.no","grong.no","kraanghke.no","kråanghke.no","grue.no","gulen.no","hadsel.no","halden.no","halsa.no","hamar.no","hamaroy.no","habmer.no","hábmer.no","hapmir.no","hápmir.no","hammerfest.no","hammarfeasta.no","hámmárfeasta.no","haram.no","hareid.no","harstad.no","hasvik.no","aknoluokta.no","ákŋoluokta.no","hattfjelldal.no","aarborte.no","haugesund.no","hemne.no","hemnes.no","hemsedal.no","heroy.more-og-romsdal.no","herøy.møre-og-romsdal.no","heroy.nordland.no","herøy.nordland.no","hitra.no","hjartdal.no","hjelmeland.no","hobol.no","hobøl.no","hof.no","hol.no","hole.no","holmestrand.no","holtalen.no","holtålen.no","hornindal.no","horten.no","hurdal.no","hurum.no","hvaler.no","hyllestad.no","hagebostad.no","hægebostad.no","hoyanger.no","høyanger.no","hoylandet.no","høylandet.no","ha.no","hå.no","ibestad.no","inderoy.no","inderøy.no","iveland.no","jevnaker.no","jondal.no","jolster.no","jølster.no","karasjok.no","karasjohka.no","kárášjohka.no","karlsoy.no","galsa.no","gálsá.no","karmoy.no","karmøy.no","kautokeino.no","guovdageaidnu.no","klepp.no","klabu.no","klæbu.no","kongsberg.no","kongsvinger.no","kragero.no","kragerø.no","kristiansand.no","kristiansund.no","krodsherad.no","krødsherad.no","kvalsund.no","rahkkeravju.no","ráhkkerávju.no","kvam.no","kvinesdal.no","kvinnherad.no","kviteseid.no","kvitsoy.no","kvitsøy.no","kvafjord.no","kvæfjord.no","giehtavuoatna.no","kvanangen.no","kvænangen.no","navuotna.no","návuotna.no","kafjord.no","kåfjord.no","gaivuotna.no","gáivuotna.no","larvik.no","lavangen.no","lavagis.no","loabat.no","loabát.no","lebesby.no","davvesiida.no","leikanger.no","leirfjord.no","leka.no","leksvik.no","lenvik.no","leangaviika.no","leaŋgaviika.no","lesja.no","levanger.no","lier.no","lierne.no","lillehammer.no","lillesand.no","lindesnes.no","lindas.no","lindås.no","lom.no","loppa.no","lahppi.no","láhppi.no","lund.no","lunner.no","luroy.no","lurøy.no","luster.no","lyngdal.no","lyngen.no","ivgu.no","lardal.no","lerdal.no","lærdal.no","lodingen.no","lødingen.no","lorenskog.no","lørenskog.no","loten.no","løten.no","malvik.no","masoy.no","måsøy.no","muosat.no","muosát.no","mandal.no","marker.no","marnardal.no","masfjorden.no","meland.no","meldal.no","melhus.no","meloy.no","meløy.no","meraker.no","meråker.no","moareke.no","moåreke.no","midsund.no","midtre-gauldal.no","modalen.no","modum.no","molde.no","moskenes.no","moss.no","mosvik.no","malselv.no","målselv.no","malatvuopmi.no","málatvuopmi.no","namdalseid.no","aejrie.no","namsos.no","namsskogan.no","naamesjevuemie.no","nååmesjevuemie.no","laakesvuemie.no","nannestad.no","narvik.no","narviika.no","naustdal.no","nedre-eiker.no","nes.akershus.no","nes.buskerud.no","nesna.no","nesodden.no","nesseby.no","unjarga.no","unjárga.no","nesset.no","nissedal.no","nittedal.no","nord-aurdal.no","nord-fron.no","nord-odal.no","norddal.no","nordkapp.no","davvenjarga.no","davvenjárga.no","nordre-land.no","nordreisa.no","raisa.no","ráisa.no","nore-og-uvdal.no","notodden.no","naroy.no","nærøy.no","notteroy.no","nøtterøy.no","odda.no","oksnes.no","øksnes.no","oppdal.no","oppegard.no","oppegård.no","orkdal.no","orland.no","ørland.no","orskog.no","ørskog.no","orsta.no","ørsta.no","os.hedmark.no","os.hordaland.no","osen.no","osteroy.no","osterøy.no","ostre-toten.no","østre-toten.no","overhalla.no","ovre-eiker.no","øvre-eiker.no","oyer.no","øyer.no","oygarden.no","øygarden.no","oystre-slidre.no","øystre-slidre.no","porsanger.no","porsangu.no","porsáŋgu.no","porsgrunn.no","radoy.no","radøy.no","rakkestad.no","rana.no","ruovat.no","randaberg.no","rauma.no","rendalen.no","rennebu.no","rennesoy.no","rennesøy.no","rindal.no","ringebu.no","ringerike.no","ringsaker.no","rissa.no","risor.no","risør.no","roan.no","rollag.no","rygge.no","ralingen.no","rælingen.no","rodoy.no","rødøy.no","romskog.no","rømskog.no","roros.no","røros.no","rost.no","røst.no","royken.no","røyken.no","royrvik.no","røyrvik.no","rade.no","råde.no","salangen.no","siellak.no","saltdal.no","salat.no","sálát.no","sálat.no","samnanger.no","sande.more-og-romsdal.no","sande.møre-og-romsdal.no","sande.vestfold.no","sandefjord.no","sandnes.no","sandoy.no","sandøy.no","sarpsborg.no","sauda.no","sauherad.no","sel.no","selbu.no","selje.no","seljord.no","sigdal.no","siljan.no","sirdal.no","skaun.no","skedsmo.no","ski.no","skien.no","skiptvet.no","skjervoy.no","skjervøy.no","skierva.no","skiervá.no","skjak.no","skjåk.no","skodje.no","skanland.no","skånland.no","skanit.no","skánit.no","smola.no","smøla.no","snillfjord.no","snasa.no","snåsa.no","snoasa.no","snaase.no","snåase.no","sogndal.no","sokndal.no","sola.no","solund.no","songdalen.no","sortland.no","spydeberg.no","stange.no","stavanger.no","steigen.no","steinkjer.no","stjordal.no","stjørdal.no","stokke.no","stor-elvdal.no","stord.no","stordal.no","storfjord.no","omasvuotna.no","strand.no","stranda.no","stryn.no","sula.no","suldal.no","sund.no","sunndal.no","surnadal.no","sveio.no","svelvik.no","sykkylven.no","sogne.no","søgne.no","somna.no","sømna.no","sondre-land.no","søndre-land.no","sor-aurdal.no","sør-aurdal.no","sor-fron.no","sør-fron.no","sor-odal.no","sør-odal.no","sor-varanger.no","sør-varanger.no","matta-varjjat.no","mátta-várjjat.no","sorfold.no","sørfold.no","sorreisa.no","sørreisa.no","sorum.no","sørum.no","tana.no","deatnu.no","time.no","tingvoll.no","tinn.no","tjeldsund.no","dielddanuorri.no","tjome.no","tjøme.no","tokke.no","tolga.no","torsken.no","tranoy.no","tranøy.no","tromso.no","tromsø.no","tromsa.no","romsa.no","trondheim.no","troandin.no","trysil.no","trana.no","træna.no","trogstad.no","trøgstad.no","tvedestrand.no","tydal.no","tynset.no","tysfjord.no","divtasvuodna.no","divttasvuotna.no","tysnes.no","tysvar.no","tysvær.no","tonsberg.no","tønsberg.no","ullensaker.no","ullensvang.no","ulvik.no","utsira.no","vadso.no","vadsø.no","cahcesuolo.no","čáhcesuolo.no","vaksdal.no","valle.no","vang.no","vanylven.no","vardo.no","vardø.no","varggat.no","várggát.no","vefsn.no","vaapste.no","vega.no","vegarshei.no","vegårshei.no","vennesla.no","verdal.no","verran.no","vestby.no","vestnes.no","vestre-slidre.no","vestre-toten.no","vestvagoy.no","vestvågøy.no","vevelstad.no","vik.no","vikna.no","vindafjord.no","volda.no","voss.no","varoy.no","værøy.no","vagan.no","vågan.no","voagat.no","vagsoy.no","vågsøy.no","vaga.no","vågå.no","valer.ostfold.no","våler.østfold.no","valer.hedmark.no","våler.hedmark.no","*.np","nr","biz.nr","info.nr","gov.nr","edu.nr","org.nr","net.nr","com.nr","nu","nz","ac.nz","co.nz","cri.nz","geek.nz","gen.nz","govt.nz","health.nz","iwi.nz","kiwi.nz","maori.nz","mil.nz","māori.nz","net.nz","org.nz","parliament.nz","school.nz","om","co.om","com.om","edu.om","gov.om","med.om","museum.om","net.om","org.om","pro.om","onion","org","pa","ac.pa","gob.pa","com.pa","org.pa","sld.pa","edu.pa","net.pa","ing.pa","abo.pa","med.pa","nom.pa","pe","edu.pe","gob.pe","nom.pe","mil.pe","org.pe","com.pe","net.pe","pf","com.pf","org.pf","edu.pf","*.pg","ph","com.ph","net.ph","org.ph","gov.ph","edu.ph","ngo.ph","mil.ph","i.ph","pk","com.pk","net.pk","edu.pk","org.pk","fam.pk","biz.pk","web.pk","gov.pk","gob.pk","gok.pk","gon.pk","gop.pk","gos.pk","info.pk","pl","com.pl","net.pl","org.pl","aid.pl","agro.pl","atm.pl","auto.pl","biz.pl","edu.pl","gmina.pl","gsm.pl","info.pl","mail.pl","miasta.pl","media.pl","mil.pl","nieruchomosci.pl","nom.pl","pc.pl","powiat.pl","priv.pl","realestate.pl","rel.pl","sex.pl","shop.pl","sklep.pl","sos.pl","szkola.pl","targi.pl","tm.pl","tourism.pl","travel.pl","turystyka.pl","gov.pl","ap.gov.pl","ic.gov.pl","is.gov.pl","us.gov.pl","kmpsp.gov.pl","kppsp.gov.pl","kwpsp.gov.pl","psp.gov.pl","wskr.gov.pl","kwp.gov.pl","mw.gov.pl","ug.gov.pl","um.gov.pl","umig.gov.pl","ugim.gov.pl","upow.gov.pl","uw.gov.pl","starostwo.gov.pl","pa.gov.pl","po.gov.pl","psse.gov.pl","pup.gov.pl","rzgw.gov.pl","sa.gov.pl","so.gov.pl","sr.gov.pl","wsa.gov.pl","sko.gov.pl","uzs.gov.pl","wiih.gov.pl","winb.gov.pl","pinb.gov.pl","wios.gov.pl","witd.gov.pl","wzmiuw.gov.pl","piw.gov.pl","wiw.gov.pl","griw.gov.pl","wif.gov.pl","oum.gov.pl","sdn.gov.pl","zp.gov.pl","uppo.gov.pl","mup.gov.pl","wuoz.gov.pl","konsulat.gov.pl","oirm.gov.pl","augustow.pl","babia-gora.pl","bedzin.pl","beskidy.pl","bialowieza.pl","bialystok.pl","bielawa.pl","bieszczady.pl","boleslawiec.pl","bydgoszcz.pl","bytom.pl","cieszyn.pl","czeladz.pl","czest.pl","dlugoleka.pl","elblag.pl","elk.pl","glogow.pl","gniezno.pl","gorlice.pl","grajewo.pl","ilawa.pl","jaworzno.pl","jelenia-gora.pl","jgora.pl","kalisz.pl","kazimierz-dolny.pl","karpacz.pl","kartuzy.pl","kaszuby.pl","katowice.pl","kepno.pl","ketrzyn.pl","klodzko.pl","kobierzyce.pl","kolobrzeg.pl","konin.pl","konskowola.pl","kutno.pl","lapy.pl","lebork.pl","legnica.pl","lezajsk.pl","limanowa.pl","lomza.pl","lowicz.pl","lubin.pl","lukow.pl","malbork.pl","malopolska.pl","mazowsze.pl","mazury.pl","mielec.pl","mielno.pl","mragowo.pl","naklo.pl","nowaruda.pl","nysa.pl","olawa.pl","olecko.pl","olkusz.pl","olsztyn.pl","opoczno.pl","opole.pl","ostroda.pl","ostroleka.pl","ostrowiec.pl","ostrowwlkp.pl","pila.pl","pisz.pl","podhale.pl","podlasie.pl","polkowice.pl","pomorze.pl","pomorskie.pl","prochowice.pl","pruszkow.pl","przeworsk.pl","pulawy.pl","radom.pl","rawa-maz.pl","rybnik.pl","rzeszow.pl","sanok.pl","sejny.pl","slask.pl","slupsk.pl","sosnowiec.pl","stalowa-wola.pl","skoczow.pl","starachowice.pl","stargard.pl","suwalki.pl","swidnica.pl","swiebodzin.pl","swinoujscie.pl","szczecin.pl","szczytno.pl","tarnobrzeg.pl","tgory.pl","turek.pl","tychy.pl","ustka.pl","walbrzych.pl","warmia.pl","warszawa.pl","waw.pl","wegrow.pl","wielun.pl","wlocl.pl","wloclawek.pl","wodzislaw.pl","wolomin.pl","wroclaw.pl","zachpomor.pl","zagan.pl","zarow.pl","zgora.pl","zgorzelec.pl","pm","pn","gov.pn","co.pn","org.pn","edu.pn","net.pn","post","pr","com.pr","net.pr","org.pr","gov.pr","edu.pr","isla.pr","pro.pr","biz.pr","info.pr","name.pr","est.pr","prof.pr","ac.pr","pro","aaa.pro","aca.pro","acct.pro","avocat.pro","bar.pro","cpa.pro","eng.pro","jur.pro","law.pro","med.pro","recht.pro","ps","edu.ps","gov.ps","sec.ps","plo.ps","com.ps","org.ps","net.ps","pt","net.pt","gov.pt","org.pt","edu.pt","int.pt","publ.pt","com.pt","nome.pt","pw","co.pw","ne.pw","or.pw","ed.pw","go.pw","belau.pw","py","com.py","coop.py","edu.py","gov.py","mil.py","net.py","org.py","qa","com.qa","edu.qa","gov.qa","mil.qa","name.qa","net.qa","org.qa","sch.qa","re","asso.re","com.re","nom.re","ro","arts.ro","com.ro","firm.ro","info.ro","nom.ro","nt.ro","org.ro","rec.ro","store.ro","tm.ro","www.ro","rs","ac.rs","co.rs","edu.rs","gov.rs","in.rs","org.rs","ru","ac.ru","edu.ru","gov.ru","int.ru","mil.ru","test.ru","rw","gov.rw","net.rw","edu.rw","ac.rw","com.rw","co.rw","int.rw","mil.rw","gouv.rw","sa","com.sa","net.sa","org.sa","gov.sa","med.sa","pub.sa","edu.sa","sch.sa","sb","com.sb","edu.sb","gov.sb","net.sb","org.sb","sc","com.sc","gov.sc","net.sc","org.sc","edu.sc","sd","com.sd","net.sd","org.sd","edu.sd","med.sd","tv.sd","gov.sd","info.sd","se","a.se","ac.se","b.se","bd.se","brand.se","c.se","d.se","e.se","f.se","fh.se","fhsk.se","fhv.se","g.se","h.se","i.se","k.se","komforb.se","kommunalforbund.se","komvux.se","l.se","lanbib.se","m.se","n.se","naturbruksgymn.se","o.se","org.se","p.se","parti.se","pp.se","press.se","r.se","s.se","t.se","tm.se","u.se","w.se","x.se","y.se","z.se","sg","com.sg","net.sg","org.sg","gov.sg","edu.sg","per.sg","sh","com.sh","net.sh","gov.sh","org.sh","mil.sh","si","sj","sk","sl","com.sl","net.sl","edu.sl","gov.sl","org.sl","sm","sn","art.sn","com.sn","edu.sn","gouv.sn","org.sn","perso.sn","univ.sn","so","com.so","net.so","org.so","sr","st","co.st","com.st","consulado.st","edu.st","embaixada.st","gov.st","mil.st","net.st","org.st","principe.st","saotome.st","store.st","su","sv","com.sv","edu.sv","gob.sv","org.sv","red.sv","sx","gov.sx","sy","edu.sy","gov.sy","net.sy","mil.sy","com.sy","org.sy","sz","co.sz","ac.sz","org.sz","tc","td","tel","tf","tg","th","ac.th","co.th","go.th","in.th","mi.th","net.th","or.th","tj","ac.tj","biz.tj","co.tj","com.tj","edu.tj","go.tj","gov.tj","int.tj","mil.tj","name.tj","net.tj","nic.tj","org.tj","test.tj","web.tj","tk","tl","gov.tl","tm","com.tm","co.tm","org.tm","net.tm","nom.tm","gov.tm","mil.tm","edu.tm","tn","com.tn","ens.tn","fin.tn","gov.tn","ind.tn","intl.tn","nat.tn","net.tn","org.tn","info.tn","perso.tn","tourism.tn","edunet.tn","rnrt.tn","rns.tn","rnu.tn","mincom.tn","agrinet.tn","defense.tn","turen.tn","to","com.to","gov.to","net.to","org.to","edu.to","mil.to","tr","com.tr","info.tr","biz.tr","net.tr","org.tr","web.tr","gen.tr","tv.tr","av.tr","dr.tr","bbs.tr","name.tr","tel.tr","gov.tr","bel.tr","pol.tr","mil.tr","k12.tr","edu.tr","kep.tr","nc.tr","gov.nc.tr","tt","co.tt","com.tt","org.tt","net.tt","biz.tt","info.tt","pro.tt","int.tt","coop.tt","jobs.tt","mobi.tt","travel.tt","museum.tt","aero.tt","name.tt","gov.tt","edu.tt","tv","tw","edu.tw","gov.tw","mil.tw","com.tw","net.tw","org.tw","idv.tw","game.tw","ebiz.tw","club.tw","網路.tw","組織.tw","商業.tw","tz","ac.tz","co.tz","go.tz","hotel.tz","info.tz","me.tz","mil.tz","mobi.tz","ne.tz","or.tz","sc.tz","tv.tz","ua","com.ua","edu.ua","gov.ua","in.ua","net.ua","org.ua","cherkassy.ua","cherkasy.ua","chernigov.ua","chernihiv.ua","chernivtsi.ua","chernovtsy.ua","ck.ua","cn.ua","cr.ua","crimea.ua","cv.ua","dn.ua","dnepropetrovsk.ua","dnipropetrovsk.ua","dominic.ua","donetsk.ua","dp.ua","if.ua","ivano-frankivsk.ua","kh.ua","kharkiv.ua","kharkov.ua","kherson.ua","khmelnitskiy.ua","khmelnytskyi.ua","kiev.ua","kirovograd.ua","km.ua","kr.ua","krym.ua","ks.ua","kv.ua","kyiv.ua","lg.ua","lt.ua","lugansk.ua","lutsk.ua","lv.ua","lviv.ua","mk.ua","mykolaiv.ua","nikolaev.ua","od.ua","odesa.ua","odessa.ua","pl.ua","poltava.ua","rivne.ua","rovno.ua","rv.ua","sb.ua","sebastopol.ua","sevastopol.ua","sm.ua","sumy.ua","te.ua","ternopil.ua","uz.ua","uzhgorod.ua","vinnica.ua","vinnytsia.ua","vn.ua","volyn.ua","yalta.ua","zaporizhzhe.ua","zaporizhzhia.ua","zhitomir.ua","zhytomyr.ua","zp.ua","zt.ua","ug","co.ug","or.ug","ac.ug","sc.ug","go.ug","ne.ug","com.ug","org.ug","uk","ac.uk","co.uk","gov.uk","ltd.uk","me.uk","net.uk","nhs.uk","org.uk","plc.uk","police.uk","*.sch.uk","us","dni.us","fed.us","isa.us","kids.us","nsn.us","ak.us","al.us","ar.us","as.us","az.us","ca.us","co.us","ct.us","dc.us","de.us","fl.us","ga.us","gu.us","hi.us","ia.us","id.us","il.us","in.us","ks.us","ky.us","la.us","ma.us","md.us","me.us","mi.us","mn.us","mo.us","ms.us","mt.us","nc.us","nd.us","ne.us","nh.us","nj.us","nm.us","nv.us","ny.us","oh.us","ok.us","or.us","pa.us","pr.us","ri.us","sc.us","sd.us","tn.us","tx.us","ut.us","vi.us","vt.us","va.us","wa.us","wi.us","wv.us","wy.us","k12.ak.us","k12.al.us","k12.ar.us","k12.as.us","k12.az.us","k12.ca.us","k12.co.us","k12.ct.us","k12.dc.us","k12.de.us","k12.fl.us","k12.ga.us","k12.gu.us","k12.ia.us","k12.id.us","k12.il.us","k12.in.us","k12.ks.us","k12.ky.us","k12.la.us","k12.ma.us","k12.md.us","k12.me.us","k12.mi.us","k12.mn.us","k12.mo.us","k12.ms.us","k12.mt.us","k12.nc.us","k12.ne.us","k12.nh.us","k12.nj.us","k12.nm.us","k12.nv.us","k12.ny.us","k12.oh.us","k12.ok.us","k12.or.us","k12.pa.us","k12.pr.us","k12.ri.us","k12.sc.us","k12.tn.us","k12.tx.us","k12.ut.us","k12.vi.us","k12.vt.us","k12.va.us","k12.wa.us","k12.wi.us","k12.wy.us","cc.ak.us","cc.al.us","cc.ar.us","cc.as.us","cc.az.us","cc.ca.us","cc.co.us","cc.ct.us","cc.dc.us","cc.de.us","cc.fl.us","cc.ga.us","cc.gu.us","cc.hi.us","cc.ia.us","cc.id.us","cc.il.us","cc.in.us","cc.ks.us","cc.ky.us","cc.la.us","cc.ma.us","cc.md.us","cc.me.us","cc.mi.us","cc.mn.us","cc.mo.us","cc.ms.us","cc.mt.us","cc.nc.us","cc.nd.us","cc.ne.us","cc.nh.us","cc.nj.us","cc.nm.us","cc.nv.us","cc.ny.us","cc.oh.us","cc.ok.us","cc.or.us","cc.pa.us","cc.pr.us","cc.ri.us","cc.sc.us","cc.sd.us","cc.tn.us","cc.tx.us","cc.ut.us","cc.vi.us","cc.vt.us","cc.va.us","cc.wa.us","cc.wi.us","cc.wv.us","cc.wy.us","lib.ak.us","lib.al.us","lib.ar.us","lib.as.us","lib.az.us","lib.ca.us","lib.co.us","lib.ct.us","lib.dc.us","lib.fl.us","lib.ga.us","lib.gu.us","lib.hi.us","lib.ia.us","lib.id.us","lib.il.us","lib.in.us","lib.ks.us","lib.ky.us","lib.la.us","lib.ma.us","lib.md.us","lib.me.us","lib.mi.us","lib.mn.us","lib.mo.us","lib.ms.us","lib.mt.us","lib.nc.us","lib.nd.us","lib.ne.us","lib.nh.us","lib.nj.us","lib.nm.us","lib.nv.us","lib.ny.us","lib.oh.us","lib.ok.us","lib.or.us","lib.pa.us","lib.pr.us","lib.ri.us","lib.sc.us","lib.sd.us","lib.tn.us","lib.tx.us","lib.ut.us","lib.vi.us","lib.vt.us","lib.va.us","lib.wa.us","lib.wi.us","lib.wy.us","pvt.k12.ma.us","chtr.k12.ma.us","paroch.k12.ma.us","ann-arbor.mi.us","cog.mi.us","dst.mi.us","eaton.mi.us","gen.mi.us","mus.mi.us","tec.mi.us","washtenaw.mi.us","uy","com.uy","edu.uy","gub.uy","mil.uy","net.uy","org.uy","uz","co.uz","com.uz","net.uz","org.uz","va","vc","com.vc","net.vc","org.vc","gov.vc","mil.vc","edu.vc","ve","arts.ve","co.ve","com.ve","e12.ve","edu.ve","firm.ve","gob.ve","gov.ve","info.ve","int.ve","mil.ve","net.ve","org.ve","rec.ve","store.ve","tec.ve","web.ve","vg","vi","co.vi","com.vi","k12.vi","net.vi","org.vi","vn","com.vn","net.vn","org.vn","edu.vn","gov.vn","int.vn","ac.vn","biz.vn","info.vn","name.vn","pro.vn","health.vn","vu","com.vu","edu.vu","net.vu","org.vu","wf","ws","com.ws","net.ws","org.ws","gov.ws","edu.ws","yt","امارات","հայ","বাংলা","бг","бел","中国","中國","الجزائر","مصر","ею","გე","ελ","香港","公司.香港","教育.香港","政府.香港","個人.香港","網絡.香港","組織.香港","ಭಾರತ","ଭାରତ","ভাৰত","भारतम्","भारोत","ڀارت","ഭാരതം","भारत","بارت","بھارت","భారత్","ભારત","ਭਾਰਤ","ভারত","இந்தியா","ایران","ايران","عراق","الاردن","한국","қаз","ලංකා","இலங்கை","المغرب","мкд","мон","澳門","澳门","مليسيا","عمان","پاکستان","پاكستان","فلسطين","срб","пр.срб","орг.срб","обр.срб","од.срб","упр.срб","ак.срб","рф","قطر","السعودية","السعودیة","السعودیۃ","السعوديه","سودان","新加坡","சிங்கப்பூர்","سورية","سوريا","ไทย","ศึกษา.ไทย","ธุรกิจ.ไทย","รัฐบาล.ไทย","ทหาร.ไทย","เน็ต.ไทย","องค์กร.ไทย","تونس","台灣","台湾","臺灣","укр","اليمن","xxx","*.ye","ac.za","agric.za","alt.za","co.za","edu.za","gov.za","grondar.za","law.za","mil.za","net.za","ngo.za","nis.za","nom.za","org.za","school.za","tm.za","web.za","zm","ac.zm","biz.zm","co.zm","com.zm","edu.zm","gov.zm","info.zm","mil.zm","net.zm","org.zm","sch.zm","zw","ac.zw","co.zw","gov.zw","mil.zw","org.zw","aaa","aarp","abarth","abb","abbott","abbvie","abc","able","abogado","abudhabi","academy","accenture","accountant","accountants","aco","active","actor","adac","ads","adult","aeg","aetna","afamilycompany","afl","africa","agakhan","agency","aig","aigo","airbus","airforce","airtel","akdn","alfaromeo","alibaba","alipay","allfinanz","allstate","ally","alsace","alstom","americanexpress","americanfamily","amex","amfam","amica","amsterdam","analytics","android","anquan","anz","aol","apartments","app","apple","aquarelle","arab","aramco","archi","army","art","arte","asda","associates","athleta","attorney","auction","audi","audible","audio","auspost","author","auto","autos","avianca","aws","axa","azure","baby","baidu","banamex","bananarepublic","band","bank","bar","barcelona","barclaycard","barclays","barefoot","bargains","baseball","basketball","bauhaus","bayern","bbc","bbt","bbva","bcg","bcn","beats","beauty","beer","bentley","berlin","best","bestbuy","bet","bharti","bible","bid","bike","bing","bingo","bio","black","blackfriday","blanco","blockbuster","blog","bloomberg","blue","bms","bmw","bnl","bnpparibas","boats","boehringer","bofa","bom","bond","boo","book","booking","bosch","bostik","boston","bot","boutique","box","bradesco","bridgestone","broadway","broker","brother","brussels","budapest","bugatti","build","builders","business","buy","buzz","bzh","cab","cafe","cal","call","calvinklein","cam","camera","camp","cancerresearch","canon","capetown","capital","capitalone","car","caravan","cards","care","career","careers","cars","cartier","casa","case","caseih","cash","casino","catering","catholic","cba","cbn","cbre","cbs","ceb","center","ceo","cern","cfa","cfd","chanel","channel","charity","chase","chat","cheap","chintai","christmas","chrome","chrysler","church","cipriani","circle","cisco","citadel","citi","citic","city","cityeats","claims","cleaning","click","clinic","clinique","clothing","cloud","club","clubmed","coach","codes","coffee","college","cologne","comcast","commbank","community","company","compare","computer","comsec","condos","construction","consulting","contact","contractors","cooking","cookingchannel","cool","corsica","country","coupon","coupons","courses","credit","creditcard","creditunion","cricket","crown","crs","cruise","cruises","csc","cuisinella","cymru","cyou","dabur","dad","dance","data","date","dating","datsun","day","dclk","dds","deal","dealer","deals","degree","delivery","dell","deloitte","delta","democrat","dental","dentist","desi","design","dev","dhl","diamonds","diet","digital","direct","directory","discount","discover","dish","diy","dnp","docs","doctor","dodge","dog","doha","domains","dot","download","drive","dtv","dubai","duck","dunlop","duns","dupont","durban","dvag","dvr","earth","eat","eco","edeka","education","email","emerck","energy","engineer","engineering","enterprises","epost","epson","equipment","ericsson","erni","esq","estate","esurance","etisalat","eurovision","eus","events","everbank","exchange","expert","exposed","express","extraspace","fage","fail","fairwinds","faith","family","fan","fans","farm","farmers","fashion","fast","fedex","feedback","ferrari","ferrero","fiat","fidelity","fido","film","final","finance","financial","fire","firestone","firmdale","fish","fishing","fit","fitness","flickr","flights","flir","florist","flowers","fly","foo","food","foodnetwork","football","ford","forex","forsale","forum","foundation","fox","free","fresenius","frl","frogans","frontdoor","frontier","ftr","fujitsu","fujixerox","fun","fund","furniture","futbol","fyi","gal","gallery","gallo","gallup","game","games","gap","garden","gbiz","gdn","gea","gent","genting","george","ggee","gift","gifts","gives","giving","glade","glass","gle","global","globo","gmail","gmbh","gmo","gmx","godaddy","gold","goldpoint","golf","goo","goodhands","goodyear","goog","google","gop","got","grainger","graphics","gratis","green","gripe","grocery","group","guardian","gucci","guge","guide","guitars","guru","hair","hamburg","hangout","haus","hbo","hdfc","hdfcbank","health","healthcare","help","helsinki","here","hermes","hgtv","hiphop","hisamitsu","hitachi","hiv","hkt","hockey","holdings","holiday","homedepot","homegoods","homes","homesense","honda","honeywell","horse","hospital","host","hosting","hot","hoteles","hotels","hotmail","house","how","hsbc","hughes","hyatt","hyundai","ibm","icbc","ice","icu","ieee","ifm","ikano","imamat","imdb","immo","immobilien","inc","industries","infiniti","ing","ink","institute","insurance","insure","intel","international","intuit","investments","ipiranga","irish","iselect","ismaili","ist","istanbul","itau","itv","iveco","jaguar","java","jcb","jcp","jeep","jetzt","jewelry","jio","jlc","jll","jmp","jnj","joburg","jot","joy","jpmorgan","jprs","juegos","juniper","kaufen","kddi","kerryhotels","kerrylogistics","kerryproperties","kfh","kia","kim","kinder","kindle","kitchen","kiwi","koeln","komatsu","kosher","kpmg","kpn","krd","kred","kuokgroup","kyoto","lacaixa","ladbrokes","lamborghini","lamer","lancaster","lancia","lancome","land","landrover","lanxess","lasalle","lat","latino","latrobe","law","lawyer","lds","lease","leclerc","lefrak","legal","lego","lexus","lgbt","liaison","lidl","life","lifeinsurance","lifestyle","lighting","like","lilly","limited","limo","lincoln","linde","link","lipsy","live","living","lixil","llc","loan","loans","locker","locus","loft","lol","london","lotte","lotto","love","lpl","lplfinancial","ltd","ltda","lundbeck","lupin","luxe","luxury","macys","madrid","maif","maison","makeup","man","management","mango","map","market","marketing","markets","marriott","marshalls","maserati","mattel","mba","mckinsey","med","media","meet","melbourne","meme","memorial","men","menu","merckmsd","metlife","miami","microsoft","mini","mint","mit","mitsubishi","mlb","mls","mma","mobile","mobily","moda","moe","moi","mom","monash","money","monster","mopar","mormon","mortgage","moscow","moto","motorcycles","mov","movie","movistar","msd","mtn","mtr","mutual","nab","nadex","nagoya","nationwide","natura","navy","nba","nec","netbank","netflix","network","neustar","new","newholland","news","next","nextdirect","nexus","nfl","ngo","nhk","nico","nike","nikon","ninja","nissan","nissay","nokia","northwesternmutual","norton","now","nowruz","nowtv","nra","nrw","ntt","nyc","obi","observer","off","office","okinawa","olayan","olayangroup","oldnavy","ollo","omega","one","ong","onl","online","onyourside","ooo","open","oracle","orange","organic","origins","osaka","otsuka","ott","ovh","page","panasonic","panerai","paris","pars","partners","parts","party","passagens","pay","pccw","pet","pfizer","pharmacy","phd","philips","phone","photo","photography","photos","physio","piaget","pics","pictet","pictures","pid","pin","ping","pink","pioneer","pizza","place","play","playstation","plumbing","plus","pnc","pohl","poker","politie","porn","pramerica","praxi","press","prime","prod","productions","prof","progressive","promo","properties","property","protection","pru","prudential","pub","pwc","qpon","quebec","quest","qvc","racing","radio","raid","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","rightathome","ril","rio","rip","rmit","rocher","rocks","rodeo","rogers","room","rsvp","rugby","ruhr","run","rwe","ryukyu","saarland","safe","safety","sakura","sale","salon","samsclub","samsung","sandvik","sandvikcoromant","sanofi","sap","sarl","sas","save","saxo","sbi","sbs","sca","scb","schaeffler","schmidt","scholarships","school","schule","schwarz","science","scjohnson","scor","scot","search","seat","secure","security","seek","select","sener","services","ses","seven","sew","sex","sexy","sfr","shangrila","sharp","shaw","shell","shia","shiksha","shoes","shop","shopping","shouji","show","showtime","shriram","silk","sina","singles","site","ski","skin","sky","skype","sling","smart","smile","sncf","soccer","social","softbank","software","sohu","solar","solutions","song","sony","soy","space","spiegel","sport","spot","spreadbetting","srl","srt","stada","staples","star","starhub","statebank","statefarm","statoil","stc","stcgroup","stockholm","storage","store","stream","studio","study","style","sucks","supplies","supply","support","surf","surgery","suzuki","swatch","swiftcover","swiss","sydney","symantec","systems","tab","taipei","talk","taobao","target","tatamotors","tatar","tattoo","tax","taxi","tci","tdk","team","tech","technology","telecity","telefonica","temasek","tennis","teva","thd","theater","theatre","tiaa","tickets","tienda","tiffany","tips","tires","tirol","tjmaxx","tjx","tkmaxx","tmall","today","tokyo","tools","top","toray","toshiba","total","tours","town","toyota","toys","trade","trading","training","travel","travelchannel","travelers","travelersinsurance","trust","trv","tube","tui","tunes","tushu","tvs","ubank","ubs","uconnect","unicom","university","uno","uol","ups","vacations","vana","vanguard","vegas","ventures","verisign","versicherung","vet","viajes","video","vig","viking","villas","vin","vip","virgin","visa","vision","vista","vistaprint","viva","vivo","vlaanderen","vodka","volkswagen","volvo","vote","voting","voto","voyage","vuelos","wales","walmart","walter","wang","wanggou","warman","watch","watches","weather","weatherchannel","webcam","weber","website","wed","wedding","weibo","weir","whoswho","wien","wiki","williamhill","win","windows","wine","winners","wme","wolterskluwer","woodside","work","works","world","wow","wtc","wtf","xbox","xerox","xfinity","xihuan","xin","कॉम","セール","佛山","慈善","集团","在线","大众汽车","点看","คอม","八卦","موقع","公益","公司","香格里拉","网站","移动","我爱你","москва","католик","онлайн","сайт","联通","קום","时尚","微博","淡马锡","ファッション","орг","नेट","ストア","삼성","商标","商店","商城","дети","ポイント","新闻","工行","家電","كوم","中文网","中信","娱乐","谷歌","電訊盈科","购物","クラウド","通販","网店","संगठन","餐厅","网络","ком","诺基亚","食品","飞利浦","手表","手机","ارامكو","العليان","اتصالات","بازار","موبايلي","ابوظبي","كاثوليك","همراه","닷컴","政府","شبكة","بيتك","عرب","机构","组织机构","健康","招聘","рус","珠宝","大拿","みんな","グーグル","世界","書籍","网址","닷넷","コム","天主教","游戏","vermögensberater","vermögensberatung","企业","信息","嘉里大酒店","嘉里","广东","政务","xyz","yachts","yahoo","yamaxun","yandex","yodobashi","yoga","yokohama","you","youtube","yun","zappos","zara","zero","zip","zippo","zone","zuerich","cc.ua","inf.ua","ltd.ua","beep.pl","*.compute.estate","*.alces.network","alwaysdata.net","cloudfront.net","*.compute.amazonaws.com","*.compute-1.amazonaws.com","*.compute.amazonaws.com.cn","us-east-1.amazonaws.com","cn-north-1.eb.amazonaws.com.cn","elasticbeanstalk.com","ap-northeast-1.elasticbeanstalk.com","ap-northeast-2.elasticbeanstalk.com","ap-northeast-3.elasticbeanstalk.com","ap-south-1.elasticbeanstalk.com","ap-southeast-1.elasticbeanstalk.com","ap-southeast-2.elasticbeanstalk.com","ca-central-1.elasticbeanstalk.com","eu-central-1.elasticbeanstalk.com","eu-west-1.elasticbeanstalk.com","eu-west-2.elasticbeanstalk.com","eu-west-3.elasticbeanstalk.com","sa-east-1.elasticbeanstalk.com","us-east-1.elasticbeanstalk.com","us-east-2.elasticbeanstalk.com","us-gov-west-1.elasticbeanstalk.com","us-west-1.elasticbeanstalk.com","us-west-2.elasticbeanstalk.com","*.elb.amazonaws.com","*.elb.amazonaws.com.cn","s3.amazonaws.com","s3-ap-northeast-1.amazonaws.com","s3-ap-northeast-2.amazonaws.com","s3-ap-south-1.amazonaws.com","s3-ap-southeast-1.amazonaws.com","s3-ap-southeast-2.amazonaws.com","s3-ca-central-1.amazonaws.com","s3-eu-central-1.amazonaws.com","s3-eu-west-1.amazonaws.com","s3-eu-west-2.amazonaws.com","s3-eu-west-3.amazonaws.com","s3-external-1.amazonaws.com","s3-fips-us-gov-west-1.amazonaws.com","s3-sa-east-1.amazonaws.com","s3-us-gov-west-1.amazonaws.com","s3-us-east-2.amazonaws.com","s3-us-west-1.amazonaws.com","s3-us-west-2.amazonaws.com","s3.ap-northeast-2.amazonaws.com","s3.ap-south-1.amazonaws.com","s3.cn-north-1.amazonaws.com.cn","s3.ca-central-1.amazonaws.com","s3.eu-central-1.amazonaws.com","s3.eu-west-2.amazonaws.com","s3.eu-west-3.amazonaws.com","s3.us-east-2.amazonaws.com","s3.dualstack.ap-northeast-1.amazonaws.com","s3.dualstack.ap-northeast-2.amazonaws.com","s3.dualstack.ap-south-1.amazonaws.com","s3.dualstack.ap-southeast-1.amazonaws.com","s3.dualstack.ap-southeast-2.amazonaws.com","s3.dualstack.ca-central-1.amazonaws.com","s3.dualstack.eu-central-1.amazonaws.com","s3.dualstack.eu-west-1.amazonaws.com","s3.dualstack.eu-west-2.amazonaws.com","s3.dualstack.eu-west-3.amazonaws.com","s3.dualstack.sa-east-1.amazonaws.com","s3.dualstack.us-east-1.amazonaws.com","s3.dualstack.us-east-2.amazonaws.com","s3-website-us-east-1.amazonaws.com","s3-website-us-west-1.amazonaws.com","s3-website-us-west-2.amazonaws.com","s3-website-ap-northeast-1.amazonaws.com","s3-website-ap-southeast-1.amazonaws.com","s3-website-ap-southeast-2.amazonaws.com","s3-website-eu-west-1.amazonaws.com","s3-website-sa-east-1.amazonaws.com","s3-website.ap-northeast-2.amazonaws.com","s3-website.ap-south-1.amazonaws.com","s3-website.ca-central-1.amazonaws.com","s3-website.eu-central-1.amazonaws.com","s3-website.eu-west-2.amazonaws.com","s3-website.eu-west-3.amazonaws.com","s3-website.us-east-2.amazonaws.com","t3l3p0rt.net","tele.amune.org","on-aptible.com","user.party.eus","pimienta.org","poivron.org","potager.org","sweetpepper.org","myasustor.com","myfritz.net","*.awdev.ca","*.advisor.ws","backplaneapp.io","betainabox.com","bnr.la","blackbaudcdn.net","boomla.net","boxfuse.io","square7.ch","bplaced.com","bplaced.de","square7.de","bplaced.net","square7.net","browsersafetymark.io","mycd.eu","ae.org","ar.com","br.com","cn.com","com.de","com.se","de.com","eu.com","gb.com","gb.net","hu.com","hu.net","jp.net","jpn.com","kr.com","mex.com","no.com","qc.com","ru.com","sa.com","se.net","uk.com","uk.net","us.com","uy.com","za.bz","za.com","africa.com","gr.com","in.net","us.org","co.com","c.la","certmgr.org","xenapponazure.com","virtueeldomein.nl","cleverapps.io","c66.me","cloud66.ws","jdevcloud.com","wpdevcloud.com","cloudaccess.host","freesite.host","cloudaccess.net","cloudcontrolled.com","cloudcontrolapp.com","co.ca","*.otap.co","co.cz","c.cdn77.org","cdn77-ssl.net","r.cdn77.net","rsc.cdn77.org","ssl.origin.cdn77-secure.org","cloudns.asia","cloudns.biz","cloudns.club","cloudns.cc","cloudns.eu","cloudns.in","cloudns.info","cloudns.org","cloudns.pro","cloudns.pw","cloudns.us","cloudeity.net","cnpy.gdn","co.nl","co.no","webhosting.be","hosting-cluster.nl","dyn.cosidns.de","dynamisches-dns.de","dnsupdater.de","internet-dns.de","l-o-g-i-n.de","dynamic-dns.info","feste-ip.net","knx-server.net","static-access.net","realm.cz","*.cryptonomic.net","cupcake.is","cyon.link","cyon.site","daplie.me","localhost.daplie.me","dattolocal.com","dattorelay.com","dattoweb.com","mydatto.com","dattolocal.net","mydatto.net","biz.dk","co.dk","firm.dk","reg.dk","store.dk","debian.net","dedyn.io","dnshome.de","drayddns.com","dreamhosters.com","mydrobo.com","drud.io","drud.us","duckdns.org","dy.fi","tunk.org","dyndns-at-home.com","dyndns-at-work.com","dyndns-blog.com","dyndns-free.com","dyndns-home.com","dyndns-ip.com","dyndns-mail.com","dyndns-office.com","dyndns-pics.com","dyndns-remote.com","dyndns-server.com","dyndns-web.com","dyndns-wiki.com","dyndns-work.com","dyndns.biz","dyndns.info","dyndns.org","dyndns.tv","at-band-camp.net","ath.cx","barrel-of-knowledge.info","barrell-of-knowledge.info","better-than.tv","blogdns.com","blogdns.net","blogdns.org","blogsite.org","boldlygoingnowhere.org","broke-it.net","buyshouses.net","cechire.com","dnsalias.com","dnsalias.net","dnsalias.org","dnsdojo.com","dnsdojo.net","dnsdojo.org","does-it.net","doesntexist.com","doesntexist.org","dontexist.com","dontexist.net","dontexist.org","doomdns.com","doomdns.org","dvrdns.org","dyn-o-saur.com","dynalias.com","dynalias.net","dynalias.org","dynathome.net","dyndns.ws","endofinternet.net","endofinternet.org","endoftheinternet.org","est-a-la-maison.com","est-a-la-masion.com","est-le-patron.com","est-mon-blogueur.com","for-better.biz","for-more.biz","for-our.info","for-some.biz","for-the.biz","forgot.her.name","forgot.his.name","from-ak.com","from-al.com","from-ar.com","from-az.net","from-ca.com","from-co.net","from-ct.com","from-dc.com","from-de.com","from-fl.com","from-ga.com","from-hi.com","from-ia.com","from-id.com","from-il.com","from-in.com","from-ks.com","from-ky.com","from-la.net","from-ma.com","from-md.com","from-me.org","from-mi.com","from-mn.com","from-mo.com","from-ms.com","from-mt.com","from-nc.com","from-nd.com","from-ne.com","from-nh.com","from-nj.com","from-nm.com","from-nv.com","from-ny.net","from-oh.com","from-ok.com","from-or.com","from-pa.com","from-pr.com","from-ri.com","from-sc.com","from-sd.com","from-tn.com","from-tx.com","from-ut.com","from-va.com","from-vt.com","from-wa.com","from-wi.com","from-wv.com","from-wy.com","ftpaccess.cc","fuettertdasnetz.de","game-host.org","game-server.cc","getmyip.com","gets-it.net","go.dyndns.org","gotdns.com","gotdns.org","groks-the.info","groks-this.info","ham-radio-op.net","here-for-more.info","hobby-site.com","hobby-site.org","home.dyndns.org","homedns.org","homeftp.net","homeftp.org","homeip.net","homelinux.com","homelinux.net","homelinux.org","homeunix.com","homeunix.net","homeunix.org","iamallama.com","in-the-band.net","is-a-anarchist.com","is-a-blogger.com","is-a-bookkeeper.com","is-a-bruinsfan.org","is-a-bulls-fan.com","is-a-candidate.org","is-a-caterer.com","is-a-celticsfan.org","is-a-chef.com","is-a-chef.net","is-a-chef.org","is-a-conservative.com","is-a-cpa.com","is-a-cubicle-slave.com","is-a-democrat.com","is-a-designer.com","is-a-doctor.com","is-a-financialadvisor.com","is-a-geek.com","is-a-geek.net","is-a-geek.org","is-a-green.com","is-a-guru.com","is-a-hard-worker.com","is-a-hunter.com","is-a-knight.org","is-a-landscaper.com","is-a-lawyer.com","is-a-liberal.com","is-a-libertarian.com","is-a-linux-user.org","is-a-llama.com","is-a-musician.com","is-a-nascarfan.com","is-a-nurse.com","is-a-painter.com","is-a-patsfan.org","is-a-personaltrainer.com","is-a-photographer.com","is-a-player.com","is-a-republican.com","is-a-rockstar.com","is-a-socialist.com","is-a-soxfan.org","is-a-student.com","is-a-teacher.com","is-a-techie.com","is-a-therapist.com","is-an-accountant.com","is-an-actor.com","is-an-actress.com","is-an-anarchist.com","is-an-artist.com","is-an-engineer.com","is-an-entertainer.com","is-by.us","is-certified.com","is-found.org","is-gone.com","is-into-anime.com","is-into-cars.com","is-into-cartoons.com","is-into-games.com","is-leet.com","is-lost.org","is-not-certified.com","is-saved.org","is-slick.com","is-uberleet.com","is-very-bad.org","is-very-evil.org","is-very-good.org","is-very-nice.org","is-very-sweet.org","is-with-theband.com","isa-geek.com","isa-geek.net","isa-geek.org","isa-hockeynut.com","issmarterthanyou.com","isteingeek.de","istmein.de","kicks-ass.net","kicks-ass.org","knowsitall.info","land-4-sale.us","lebtimnetz.de","leitungsen.de","likes-pie.com","likescandy.com","merseine.nu","mine.nu","misconfused.org","mypets.ws","myphotos.cc","neat-url.com","office-on-the.net","on-the-web.tv","podzone.net","podzone.org","readmyblog.org","saves-the-whales.com","scrapper-site.net","scrapping.cc","selfip.biz","selfip.com","selfip.info","selfip.net","selfip.org","sells-for-less.com","sells-for-u.com","sells-it.net","sellsyourhome.org","servebbs.com","servebbs.net","servebbs.org","serveftp.net","serveftp.org","servegame.org","shacknet.nu","simple-url.com","space-to-rent.com","stuff-4-sale.org","stuff-4-sale.us","teaches-yoga.com","thruhere.net","traeumtgerade.de","webhop.biz","webhop.info","webhop.net","webhop.org","worse-than.tv","writesthisblog.com","ddnss.de","dyn.ddnss.de","dyndns.ddnss.de","dyndns1.de","dyn-ip24.de","home-webserver.de","dyn.home-webserver.de","myhome-server.de","ddnss.org","definima.net","definima.io","bci.dnstrace.pro","ddnsfree.com","ddnsgeek.com","giize.com","gleeze.com","kozow.com","loseyourip.com","ooguy.com","theworkpc.com","casacam.net","dynu.net","accesscam.org","camdvr.org","freeddns.org","mywire.org","webredirect.org","myddns.rocks","blogsite.xyz","dynv6.net","e4.cz","mytuleap.com","enonic.io","customer.enonic.io","eu.org","al.eu.org","asso.eu.org","at.eu.org","au.eu.org","be.eu.org","bg.eu.org","ca.eu.org","cd.eu.org","ch.eu.org","cn.eu.org","cy.eu.org","cz.eu.org","de.eu.org","dk.eu.org","edu.eu.org","ee.eu.org","es.eu.org","fi.eu.org","fr.eu.org","gr.eu.org","hr.eu.org","hu.eu.org","ie.eu.org","il.eu.org","in.eu.org","int.eu.org","is.eu.org","it.eu.org","jp.eu.org","kr.eu.org","lt.eu.org","lu.eu.org","lv.eu.org","mc.eu.org","me.eu.org","mk.eu.org","mt.eu.org","my.eu.org","net.eu.org","ng.eu.org","nl.eu.org","no.eu.org","nz.eu.org","paris.eu.org","pl.eu.org","pt.eu.org","q-a.eu.org","ro.eu.org","ru.eu.org","se.eu.org","si.eu.org","sk.eu.org","tr.eu.org","uk.eu.org","us.eu.org","eu-1.evennode.com","eu-2.evennode.com","eu-3.evennode.com","eu-4.evennode.com","us-1.evennode.com","us-2.evennode.com","us-3.evennode.com","us-4.evennode.com","twmail.cc","twmail.net","twmail.org","mymailer.com.tw","url.tw","apps.fbsbx.com","ru.net","adygeya.ru","bashkiria.ru","bir.ru","cbg.ru","com.ru","dagestan.ru","grozny.ru","kalmykia.ru","kustanai.ru","marine.ru","mordovia.ru","msk.ru","mytis.ru","nalchik.ru","nov.ru","pyatigorsk.ru","spb.ru","vladikavkaz.ru","vladimir.ru","abkhazia.su","adygeya.su","aktyubinsk.su","arkhangelsk.su","armenia.su","ashgabad.su","azerbaijan.su","balashov.su","bashkiria.su","bryansk.su","bukhara.su","chimkent.su","dagestan.su","east-kazakhstan.su","exnet.su","georgia.su","grozny.su","ivanovo.su","jambyl.su","kalmykia.su","kaluga.su","karacol.su","karaganda.su","karelia.su","khakassia.su","krasnodar.su","kurgan.su","kustanai.su","lenug.su","mangyshlak.su","mordovia.su","msk.su","murmansk.su","nalchik.su","navoi.su","north-kazakhstan.su","nov.su","obninsk.su","penza.su","pokrovsk.su","sochi.su","spb.su","tashkent.su","termez.su","togliatti.su","troitsk.su","tselinograd.su","tula.su","tuva.su","vladikavkaz.su","vladimir.su","vologda.su","channelsdvr.net","fastlylb.net","map.fastlylb.net","freetls.fastly.net","map.fastly.net","a.prod.fastly.net","global.prod.fastly.net","a.ssl.fastly.net","b.ssl.fastly.net","global.ssl.fastly.net","fastpanel.direct","fastvps-server.com","fhapp.xyz","fedorainfracloud.org","fedorapeople.org","cloud.fedoraproject.org","app.os.fedoraproject.org","app.os.stg.fedoraproject.org","filegear.me","firebaseapp.com","flynnhub.com","flynnhosting.net","freebox-os.com","freeboxos.com","fbx-os.fr","fbxos.fr","freebox-os.fr","freeboxos.fr","freedesktop.org","*.futurecms.at","*.ex.futurecms.at","*.in.futurecms.at","futurehosting.at","futuremailing.at","*.ex.ortsinfo.at","*.kunden.ortsinfo.at","*.statics.cloud","service.gov.uk","github.io","githubusercontent.com","gitlab.io","homeoffice.gov.uk","ro.im","shop.ro","goip.de","*.0emm.com","appspot.com","blogspot.ae","blogspot.al","blogspot.am","blogspot.ba","blogspot.be","blogspot.bg","blogspot.bj","blogspot.ca","blogspot.cf","blogspot.ch","blogspot.cl","blogspot.co.at","blogspot.co.id","blogspot.co.il","blogspot.co.ke","blogspot.co.nz","blogspot.co.uk","blogspot.co.za","blogspot.com","blogspot.com.ar","blogspot.com.au","blogspot.com.br","blogspot.com.by","blogspot.com.co","blogspot.com.cy","blogspot.com.ee","blogspot.com.eg","blogspot.com.es","blogspot.com.mt","blogspot.com.ng","blogspot.com.tr","blogspot.com.uy","blogspot.cv","blogspot.cz","blogspot.de","blogspot.dk","blogspot.fi","blogspot.fr","blogspot.gr","blogspot.hk","blogspot.hr","blogspot.hu","blogspot.ie","blogspot.in","blogspot.is","blogspot.it","blogspot.jp","blogspot.kr","blogspot.li","blogspot.lt","blogspot.lu","blogspot.md","blogspot.mk","blogspot.mr","blogspot.mx","blogspot.my","blogspot.nl","blogspot.no","blogspot.pe","blogspot.pt","blogspot.qa","blogspot.re","blogspot.ro","blogspot.rs","blogspot.ru","blogspot.se","blogspot.sg","blogspot.si","blogspot.sk","blogspot.sn","blogspot.td","blogspot.tw","blogspot.ug","blogspot.vn","cloudfunctions.net","cloud.goog","codespot.com","googleapis.com","googlecode.com","pagespeedmobilizer.com","publishproxy.com","withgoogle.com","withyoutube.com","hashbang.sh","hasura.app","hasura-app.io","hepforge.org","herokuapp.com","herokussl.com","myravendb.com","ravendb.community","ravendb.me","development.run","ravendb.run","moonscale.net","iki.fi","biz.at","info.at","info.cx","ac.leg.br","al.leg.br","am.leg.br","ap.leg.br","ba.leg.br","ce.leg.br","df.leg.br","es.leg.br","go.leg.br","ma.leg.br","mg.leg.br","ms.leg.br","mt.leg.br","pa.leg.br","pb.leg.br","pe.leg.br","pi.leg.br","pr.leg.br","rj.leg.br","rn.leg.br","ro.leg.br","rr.leg.br","rs.leg.br","sc.leg.br","se.leg.br","sp.leg.br","to.leg.br","pixolino.com","ipifony.net","mein-iserv.de","test-iserv.de","myjino.ru","*.hosting.myjino.ru","*.landing.myjino.ru","*.spectrum.myjino.ru","*.vps.myjino.ru","*.triton.zone","*.cns.joyent.com","js.org","keymachine.de","knightpoint.systems","co.krd","edu.krd","git-repos.de","lcube-server.de","svn-repos.de","app.lmpm.com","linkitools.space","linkyard.cloud","linkyard-cloud.ch","we.bs","uklugs.org","glug.org.uk","lug.org.uk","lugs.org.uk","barsy.bg","barsy.co.uk","barsyonline.co.uk","barsycenter.com","barsyonline.com","barsy.club","barsy.de","barsy.eu","barsy.in","barsy.info","barsy.io","barsy.me","barsy.menu","barsy.mobi","barsy.net","barsy.online","barsy.org","barsy.pro","barsy.pub","barsy.shop","barsy.site","barsy.support","barsy.uk","*.magentosite.cloud","mayfirst.info","mayfirst.org","hb.cldmail.ru","miniserver.com","memset.net","cloud.metacentrum.cz","custom.metacentrum.cz","flt.cloud.muni.cz","usr.cloud.muni.cz","meteorapp.com","eu.meteorapp.com","co.pl","azurecontainer.io","azurewebsites.net","azure-mobile.net","cloudapp.net","mozilla-iot.org","bmoattachments.org","net.ru","org.ru","pp.ru","bitballoon.com","netlify.com","4u.com","ngrok.io","nh-serv.co.uk","nfshost.com","dnsking.ch","mypi.co","n4t.co","001www.com","ddnslive.com","myiphost.com","forumz.info","16-b.it","32-b.it","64-b.it","soundcast.me","tcp4.me","dnsup.net","hicam.net","now-dns.net","ownip.net","vpndns.net","dynserv.org","now-dns.org","x443.pw","now-dns.top","ntdll.top","freeddns.us","crafting.xyz","zapto.xyz","nsupdate.info","nerdpol.ovh","blogsyte.com","brasilia.me","cable-modem.org","ciscofreak.com","collegefan.org","couchpotatofries.org","damnserver.com","ddns.me","ditchyourip.com","dnsfor.me","dnsiskinky.com","dvrcam.info","dynns.com","eating-organic.net","fantasyleague.cc","geekgalaxy.com","golffan.us","health-carereform.com","homesecuritymac.com","homesecuritypc.com","hopto.me","ilovecollege.info","loginto.me","mlbfan.org","mmafan.biz","myactivedirectory.com","mydissent.net","myeffect.net","mymediapc.net","mypsx.net","mysecuritycamera.com","mysecuritycamera.net","mysecuritycamera.org","net-freaks.com","nflfan.org","nhlfan.net","no-ip.ca","no-ip.co.uk","no-ip.net","noip.us","onthewifi.com","pgafan.net","point2this.com","pointto.us","privatizehealthinsurance.net","quicksytes.com","read-books.org","securitytactics.com","serveexchange.com","servehumour.com","servep2p.com","servesarcasm.com","stufftoread.com","ufcfan.org","unusualperson.com","workisboring.com","3utilities.com","bounceme.net","ddns.net","ddnsking.com","gotdns.ch","hopto.org","myftp.biz","myftp.org","myvnc.com","no-ip.biz","no-ip.info","no-ip.org","noip.me","redirectme.net","servebeer.com","serveblog.net","servecounterstrike.com","serveftp.com","servegame.com","servehalflife.com","servehttp.com","serveirc.com","serveminecraft.net","servemp3.com","servepics.com","servequake.com","sytes.net","webhop.me","zapto.org","stage.nodeart.io","nodum.co","nodum.io","pcloud.host","nyc.mn","nom.ae","nom.af","nom.ai","nom.al","nym.by","nym.bz","nom.cl","nom.gd","nom.ge","nom.gl","nym.gr","nom.gt","nym.gy","nom.hn","nym.ie","nom.im","nom.ke","nym.kz","nym.la","nym.lc","nom.li","nym.li","nym.lt","nym.lu","nym.me","nom.mk","nym.mn","nym.mx","nom.nu","nym.nz","nym.pe","nym.pt","nom.pw","nom.qa","nym.ro","nom.rs","nom.si","nym.sk","nom.st","nym.su","nym.sx","nom.tj","nym.tw","nom.ug","nom.uy","nom.vc","nom.vg","cya.gg","cloudycluster.net","nid.io","opencraft.hosting","operaunite.com","outsystemscloud.com","ownprovider.com","own.pm","ox.rs","oy.lc","pgfog.com","pagefrontapp.com","art.pl","gliwice.pl","krakow.pl","poznan.pl","wroc.pl","zakopane.pl","pantheonsite.io","gotpantheon.com","mypep.link","on-web.fr","*.platform.sh","*.platformsh.site","xen.prgmr.com","priv.at","protonet.io","chirurgiens-dentistes-en-france.fr","byen.site","ras.ru","qa2.com","dev-myqnapcloud.com","alpha-myqnapcloud.com","myqnapcloud.com","*.quipelements.com","vapor.cloud","vaporcloud.io","rackmaze.com","rackmaze.net","rhcloud.com","resindevice.io","devices.resinstaging.io","hzc.io","wellbeingzone.eu","ptplus.fit","wellbeingzone.co.uk","sandcats.io","logoip.de","logoip.com","schokokeks.net","scrysec.com","firewall-gateway.com","firewall-gateway.de","my-gateway.de","my-router.de","spdns.de","spdns.eu","firewall-gateway.net","my-firewall.org","myfirewall.org","spdns.org","*.s5y.io","*.sensiosite.cloud","biz.ua","co.ua","pp.ua","shiftedit.io","myshopblocks.com","1kapp.com","appchizi.com","applinzi.com","sinaapp.com","vipsinaapp.com","bounty-full.com","alpha.bounty-full.com","beta.bounty-full.com","static.land","dev.static.land","sites.static.land","apps.lair.io","*.stolos.io","spacekit.io","customer.speedpartner.de","storj.farm","utwente.io","temp-dns.com","diskstation.me","dscloud.biz","dscloud.me","dscloud.mobi","dsmynas.com","dsmynas.net","dsmynas.org","familyds.com","familyds.net","familyds.org","i234.me","myds.me","synology.me","vpnplus.to","taifun-dns.de","gda.pl","gdansk.pl","gdynia.pl","med.pl","sopot.pl","gwiddle.co.uk","cust.dev.thingdust.io","cust.disrec.thingdust.io","cust.prod.thingdust.io","cust.testing.thingdust.io","bloxcms.com","townnews-staging.com","12hp.at","2ix.at","4lima.at","lima-city.at","12hp.ch","2ix.ch","4lima.ch","lima-city.ch","trafficplex.cloud","de.cool","12hp.de","2ix.de","4lima.de","lima-city.de","1337.pictures","clan.rip","lima-city.rocks","webspace.rocks","lima.zone","*.transurl.be","*.transurl.eu","*.transurl.nl","tuxfamily.org","dd-dns.de","diskstation.eu","diskstation.org","dray-dns.de","draydns.de","dyn-vpn.de","dynvpn.de","mein-vigor.de","my-vigor.de","my-wan.de","syno-ds.de","synology-diskstation.de","synology-ds.de","uber.space","*.uberspace.de","hk.com","hk.org","ltd.hk","inc.hk","virtualuser.de","virtual-user.de","lib.de.us","2038.io","router.management","v-info.info","wedeploy.io","wedeploy.me","wedeploy.sh","remotewd.com","wmflabs.org","half.host","xnbay.com","u2.xnbay.com","u2-local.xnbay.com","cistron.nl","demon.nl","xs4all.space","official.academy","yolasite.com","ybo.faith","yombo.me","homelink.one","ybo.party","ybo.review","ybo.science","ybo.trade","nohost.me","noho.st","za.net","za.org","now.sh","zone.id"]
  4043. /***/ }),
  4044. /* 17 */
  4045. /***/ (function(module, exports) {
  4046. /*!
  4047. * Copyright (c) 2015, Salesforce.com, Inc.
  4048. * All rights reserved.
  4049. *
  4050. * Redistribution and use in source and binary forms, with or without
  4051. * modification, are permitted provided that the following conditions are met:
  4052. *
  4053. * 1. Redistributions of source code must retain the above copyright notice,
  4054. * this list of conditions and the following disclaimer.
  4055. *
  4056. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4057. * this list of conditions and the following disclaimer in the documentation
  4058. * and/or other materials provided with the distribution.
  4059. *
  4060. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4061. * be used to endorse or promote products derived from this software without
  4062. * specific prior written permission.
  4063. *
  4064. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4065. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4066. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4067. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4068. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4069. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4070. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4071. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4072. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4073. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4074. * POSSIBILITY OF SUCH DAMAGE.
  4075. */
  4076. 'use strict';
  4077. /*jshint unused:false */
  4078. function Store() {
  4079. }
  4080. exports.Store = Store;
  4081. // Stores may be synchronous, but are still required to use a
  4082. // Continuation-Passing Style API. The CookieJar itself will expose a "*Sync"
  4083. // API that converts from synchronous-callbacks to imperative style.
  4084. Store.prototype.synchronous = false;
  4085. Store.prototype.findCookie = function(domain, path, key, cb) {
  4086. throw new Error('findCookie is not implemented');
  4087. };
  4088. Store.prototype.findCookies = function(domain, path, cb) {
  4089. throw new Error('findCookies is not implemented');
  4090. };
  4091. Store.prototype.putCookie = function(cookie, cb) {
  4092. throw new Error('putCookie is not implemented');
  4093. };
  4094. Store.prototype.updateCookie = function(oldCookie, newCookie, cb) {
  4095. // recommended default implementation:
  4096. // return this.putCookie(newCookie, cb);
  4097. throw new Error('updateCookie is not implemented');
  4098. };
  4099. Store.prototype.removeCookie = function(domain, path, key, cb) {
  4100. throw new Error('removeCookie is not implemented');
  4101. };
  4102. Store.prototype.removeCookies = function(domain, path, cb) {
  4103. throw new Error('removeCookies is not implemented');
  4104. };
  4105. Store.prototype.getAllCookies = function(cb) {
  4106. throw new Error('getAllCookies is not implemented (therefore jar cannot be serialized)');
  4107. };
  4108. /***/ }),
  4109. /* 18 */
  4110. /***/ (function(module, exports, __webpack_require__) {
  4111. /*!
  4112. * Copyright (c) 2015, Salesforce.com, Inc.
  4113. * All rights reserved.
  4114. *
  4115. * Redistribution and use in source and binary forms, with or without
  4116. * modification, are permitted provided that the following conditions are met:
  4117. *
  4118. * 1. Redistributions of source code must retain the above copyright notice,
  4119. * this list of conditions and the following disclaimer.
  4120. *
  4121. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4122. * this list of conditions and the following disclaimer in the documentation
  4123. * and/or other materials provided with the distribution.
  4124. *
  4125. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4126. * be used to endorse or promote products derived from this software without
  4127. * specific prior written permission.
  4128. *
  4129. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4130. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4131. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4132. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4133. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4134. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4135. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4136. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4137. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4138. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4139. * POSSIBILITY OF SUCH DAMAGE.
  4140. */
  4141. 'use strict';
  4142. var Store = __webpack_require__(17).Store;
  4143. var permuteDomain = __webpack_require__(19).permuteDomain;
  4144. var pathMatch = __webpack_require__(20).pathMatch;
  4145. var util = __webpack_require__(9);
  4146. function MemoryCookieStore() {
  4147. Store.call(this);
  4148. this.idx = {};
  4149. }
  4150. util.inherits(MemoryCookieStore, Store);
  4151. exports.MemoryCookieStore = MemoryCookieStore;
  4152. MemoryCookieStore.prototype.idx = null;
  4153. // Since it's just a struct in RAM, this Store is synchronous
  4154. MemoryCookieStore.prototype.synchronous = true;
  4155. // force a default depth:
  4156. MemoryCookieStore.prototype.inspect = function() {
  4157. return "{ idx: "+util.inspect(this.idx, false, 2)+' }';
  4158. };
  4159. // Use the new custom inspection symbol to add the custom inspect function if
  4160. // available.
  4161. if (util.inspect.custom) {
  4162. MemoryCookieStore.prototype[util.inspect.custom] = MemoryCookieStore.prototype.inspect;
  4163. }
  4164. MemoryCookieStore.prototype.findCookie = function(domain, path, key, cb) {
  4165. if (!this.idx[domain]) {
  4166. return cb(null,undefined);
  4167. }
  4168. if (!this.idx[domain][path]) {
  4169. return cb(null,undefined);
  4170. }
  4171. return cb(null,this.idx[domain][path][key]||null);
  4172. };
  4173. MemoryCookieStore.prototype.findCookies = function(domain, path, cb) {
  4174. var results = [];
  4175. if (!domain) {
  4176. return cb(null,[]);
  4177. }
  4178. var pathMatcher;
  4179. if (!path) {
  4180. // null means "all paths"
  4181. pathMatcher = function matchAll(domainIndex) {
  4182. for (var curPath in domainIndex) {
  4183. var pathIndex = domainIndex[curPath];
  4184. for (var key in pathIndex) {
  4185. results.push(pathIndex[key]);
  4186. }
  4187. }
  4188. };
  4189. } else {
  4190. pathMatcher = function matchRFC(domainIndex) {
  4191. //NOTE: we should use path-match algorithm from S5.1.4 here
  4192. //(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299)
  4193. Object.keys(domainIndex).forEach(function (cookiePath) {
  4194. if (pathMatch(path, cookiePath)) {
  4195. var pathIndex = domainIndex[cookiePath];
  4196. for (var key in pathIndex) {
  4197. results.push(pathIndex[key]);
  4198. }
  4199. }
  4200. });
  4201. };
  4202. }
  4203. var domains = permuteDomain(domain) || [domain];
  4204. var idx = this.idx;
  4205. domains.forEach(function(curDomain) {
  4206. var domainIndex = idx[curDomain];
  4207. if (!domainIndex) {
  4208. return;
  4209. }
  4210. pathMatcher(domainIndex);
  4211. });
  4212. cb(null,results);
  4213. };
  4214. MemoryCookieStore.prototype.putCookie = function(cookie, cb) {
  4215. if (!this.idx[cookie.domain]) {
  4216. this.idx[cookie.domain] = {};
  4217. }
  4218. if (!this.idx[cookie.domain][cookie.path]) {
  4219. this.idx[cookie.domain][cookie.path] = {};
  4220. }
  4221. this.idx[cookie.domain][cookie.path][cookie.key] = cookie;
  4222. cb(null);
  4223. };
  4224. MemoryCookieStore.prototype.updateCookie = function(oldCookie, newCookie, cb) {
  4225. // updateCookie() may avoid updating cookies that are identical. For example,
  4226. // lastAccessed may not be important to some stores and an equality
  4227. // comparison could exclude that field.
  4228. this.putCookie(newCookie,cb);
  4229. };
  4230. MemoryCookieStore.prototype.removeCookie = function(domain, path, key, cb) {
  4231. if (this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key]) {
  4232. delete this.idx[domain][path][key];
  4233. }
  4234. cb(null);
  4235. };
  4236. MemoryCookieStore.prototype.removeCookies = function(domain, path, cb) {
  4237. if (this.idx[domain]) {
  4238. if (path) {
  4239. delete this.idx[domain][path];
  4240. } else {
  4241. delete this.idx[domain];
  4242. }
  4243. }
  4244. return cb(null);
  4245. };
  4246. MemoryCookieStore.prototype.getAllCookies = function(cb) {
  4247. var cookies = [];
  4248. var idx = this.idx;
  4249. var domains = Object.keys(idx);
  4250. domains.forEach(function(domain) {
  4251. var paths = Object.keys(idx[domain]);
  4252. paths.forEach(function(path) {
  4253. var keys = Object.keys(idx[domain][path]);
  4254. keys.forEach(function(key) {
  4255. if (key !== null) {
  4256. cookies.push(idx[domain][path][key]);
  4257. }
  4258. });
  4259. });
  4260. });
  4261. // Sort by creationIndex so deserializing retains the creation order.
  4262. // When implementing your own store, this SHOULD retain the order too
  4263. cookies.sort(function(a,b) {
  4264. return (a.creationIndex||0) - (b.creationIndex||0);
  4265. });
  4266. cb(null, cookies);
  4267. };
  4268. /***/ }),
  4269. /* 19 */
  4270. /***/ (function(module, exports, __webpack_require__) {
  4271. /*!
  4272. * Copyright (c) 2015, Salesforce.com, Inc.
  4273. * All rights reserved.
  4274. *
  4275. * Redistribution and use in source and binary forms, with or without
  4276. * modification, are permitted provided that the following conditions are met:
  4277. *
  4278. * 1. Redistributions of source code must retain the above copyright notice,
  4279. * this list of conditions and the following disclaimer.
  4280. *
  4281. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4282. * this list of conditions and the following disclaimer in the documentation
  4283. * and/or other materials provided with the distribution.
  4284. *
  4285. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4286. * be used to endorse or promote products derived from this software without
  4287. * specific prior written permission.
  4288. *
  4289. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4290. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4291. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4292. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4293. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4294. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4295. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4296. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4297. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4298. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4299. * POSSIBILITY OF SUCH DAMAGE.
  4300. */
  4301. "use strict";
  4302. var pubsuffix = __webpack_require__(13);
  4303. // Gives the permutation of all possible domainMatch()es of a given domain. The
  4304. // array is in shortest-to-longest order. Handy for indexing.
  4305. function permuteDomain (domain) {
  4306. var pubSuf = pubsuffix.getPublicSuffix(domain);
  4307. if (!pubSuf) {
  4308. return null;
  4309. }
  4310. if (pubSuf == domain) {
  4311. return [domain];
  4312. }
  4313. var prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com"
  4314. var parts = prefix.split('.').reverse();
  4315. var cur = pubSuf;
  4316. var permutations = [cur];
  4317. while (parts.length) {
  4318. cur = parts.shift() + '.' + cur;
  4319. permutations.push(cur);
  4320. }
  4321. return permutations;
  4322. }
  4323. exports.permuteDomain = permuteDomain;
  4324. /***/ }),
  4325. /* 20 */
  4326. /***/ (function(module, exports) {
  4327. /*!
  4328. * Copyright (c) 2015, Salesforce.com, Inc.
  4329. * All rights reserved.
  4330. *
  4331. * Redistribution and use in source and binary forms, with or without
  4332. * modification, are permitted provided that the following conditions are met:
  4333. *
  4334. * 1. Redistributions of source code must retain the above copyright notice,
  4335. * this list of conditions and the following disclaimer.
  4336. *
  4337. * 2. Redistributions in binary form must reproduce the above copyright notice,
  4338. * this list of conditions and the following disclaimer in the documentation
  4339. * and/or other materials provided with the distribution.
  4340. *
  4341. * 3. Neither the name of Salesforce.com nor the names of its contributors may
  4342. * be used to endorse or promote products derived from this software without
  4343. * specific prior written permission.
  4344. *
  4345. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  4346. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  4347. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  4348. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  4349. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  4350. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  4351. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  4352. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  4353. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  4354. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  4355. * POSSIBILITY OF SUCH DAMAGE.
  4356. */
  4357. "use strict";
  4358. /*
  4359. * "A request-path path-matches a given cookie-path if at least one of the
  4360. * following conditions holds:"
  4361. */
  4362. function pathMatch (reqPath, cookiePath) {
  4363. // "o The cookie-path and the request-path are identical."
  4364. if (cookiePath === reqPath) {
  4365. return true;
  4366. }
  4367. var idx = reqPath.indexOf(cookiePath);
  4368. if (idx === 0) {
  4369. // "o The cookie-path is a prefix of the request-path, and the last
  4370. // character of the cookie-path is %x2F ("/")."
  4371. if (cookiePath.substr(-1) === "/") {
  4372. return true;
  4373. }
  4374. // " o The cookie-path is a prefix of the request-path, and the first
  4375. // character of the request-path that is not included in the cookie- path
  4376. // is a %x2F ("/") character."
  4377. if (reqPath.substr(cookiePath.length, 1) === "/") {
  4378. return true;
  4379. }
  4380. }
  4381. return false;
  4382. }
  4383. exports.pathMatch = pathMatch;
  4384. /***/ }),
  4385. /* 21 */
  4386. /***/ (function(module, exports) {
  4387. module.exports = {"_from":"tough-cookie@2.4.3","_id":"tough-cookie@2.4.3","_inBundle":false,"_integrity":"sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==","_location":"/tough-cookie","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"tough-cookie@2.4.3","name":"tough-cookie","escapedName":"tough-cookie","rawSpec":"2.4.3","saveSpec":null,"fetchSpec":"2.4.3"},"_requiredBy":["#DEV:/"],"_resolved":"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz","_shasum":"53f36da3f47783b0925afa06ff9f3b165280f781","_spec":"tough-cookie@2.4.3","_where":"/Users/sefa/Entwicklung/umd-tough-cookie","author":{"name":"Jeremy Stashewsky","email":"jstash@gmail.com"},"bugs":{"url":"https://github.com/salesforce/tough-cookie/issues"},"bundleDependencies":false,"contributors":[{"name":"Alexander Savin"},{"name":"Ian Livingstone"},{"name":"Ivan Nikulin"},{"name":"Lalit Kapoor"},{"name":"Sam Thompson"},{"name":"Sebastian Mayr"}],"dependencies":{"psl":"^1.1.24","punycode":"^1.4.1"},"deprecated":false,"description":"RFC6265 Cookies and Cookie Jar for node.js","devDependencies":{"async":"^1.4.2","nyc":"^11.6.0","string.prototype.repeat":"^0.2.0","vows":"^0.8.1"},"engines":{"node":">=0.8"},"files":["lib"],"homepage":"https://github.com/salesforce/tough-cookie","keywords":["HTTP","cookie","cookies","set-cookie","cookiejar","jar","RFC6265","RFC2965"],"license":"BSD-3-Clause","main":"./lib/cookie","name":"tough-cookie","repository":{"type":"git","url":"git://github.com/salesforce/tough-cookie.git"},"scripts":{"cover":"nyc --reporter=lcov --reporter=html vows test/*_test.js","test":"vows test/*_test.js"},"version":"2.4.3"}
  4388. /***/ })
  4389. /******/ ])
  4390. });
  4391. ;