From 0d05e1b250e1e9c85912bf8f0b2dd85b532048a7 Mon Sep 17 00:00:00 2001 From: Azgaar Date: Mon, 27 Jun 2022 01:07:42 +0300 Subject: [PATCH] refactor(es modules): move all files to src, try vite 3.0 --- .../charts-overview.js_v_1.87.711ec26c.js | 100 + dist/assets/dropbox-sdk.min.f49dfee9.js | 1 + .../heightmap-selection.js_v_1.87.b0b46f49.js | 150 + dist/assets/index.2971cde7.css | 3 + dist/assets/index.73bf34f9.js | 72 + dist/assets/installation.aec0617b.js | 9 + dist/assets/maskable_icon_x192.8df7457d.png | Bin 0 -> 16330 bytes dist/index.html | 7746 +++++++++++++++++ index.html | 164 +- package.json | 2 +- {config => src/config}/heightmap-templates.js | 0 .../config}/precreated-heightmaps.js | 0 icons.css => src/icons.css | 0 index.css => src/index.css | 0 {libs => src/libs}/alea.min.js | 0 {libs => src/libs}/d3.min.js | 0 {libs => src/libs}/delaunator.min.js | 0 {libs => src/libs}/dropbox-sdk.min.js | 0 {libs => src/libs}/jquery-3.1.1.min.js | 0 {libs => src/libs}/jquery-ui.css | 0 {libs => src/libs}/jquery-ui.min.js | 0 .../libs}/jquery.ui.touch-punch.min.js | 0 {libs => src/libs}/jszip.min.js | 0 {libs => src/libs}/objexporter.min.js | 0 {libs => src/libs}/orbitControls.min.js | 0 {libs => src/libs}/polylabel.min.js | 0 {libs => src/libs}/priority-queue.min.js | 0 {libs => src/libs}/rgbquant.min.js | 0 {libs => src/libs}/three.min.js | 0 {libs => src/libs}/umami.js | 0 src/{main.ts => main.js} | 10 +- {modules => src/modules}/activeZooming.js | 0 {modules => src/modules}/biomes.js | 0 {modules => src/modules}/burgs-and-states.js | 0 {modules => src/modules}/coa-generator.js | 0 {modules => src/modules}/coa-renderer.js | 0 .../modules}/cultures-generator.js | 0 {modules => src/modules}/define-globals.js | 0 {modules => src/modules}/define-svg.js | 0 .../modules}/dynamic/auto-update.js | 0 .../dynamic/editors/cultures-editor.js | 0 .../dynamic/editors/religions-editor.js | 0 .../modules}/dynamic/editors/states-editor.js | 0 .../modules}/dynamic/export-json.js | 0 .../modules}/dynamic/heightmap-selection.js | 0 .../modules}/dynamic/hierarchy-tree.js | 0 .../modules}/dynamic/installation.js | 0 .../dynamic/overview/charts-overview.js | 0 .../modules}/dynamic/supporters.js | 4 +- {modules => src/modules}/fonts.js | 0 .../modules}/heightmap-generator.js | 0 {modules => src/modules}/io/cloud.js | 0 {modules => src/modules}/io/export.js | 0 {modules => src/modules}/io/formats.js | 0 {modules => src/modules}/io/load.js | 0 {modules => src/modules}/io/save.js | 0 {modules => src/modules}/lakes.js | 0 src/modules/{legend.ts => legend.js} | 2 +- {modules => src/modules}/markers-generator.js | 0 .../modules}/military-generator.js | 0 {modules => src/modules}/names-generator.js | 0 {modules => src/modules}/ocean-layers.js | 0 {modules => src/modules}/relief-icons.js | 0 .../modules}/religions-generator.js | 0 {modules => src/modules}/river-generator.js | 0 {modules => src/modules}/routes-generator.js | 0 {modules => src/modules}/submap.js | 0 {modules => src/modules}/ui/3d.js | 0 {modules => src/modules}/ui/battle-screen.js | 0 {modules => src/modules}/ui/biomes-editor.js | 0 {modules => src/modules}/ui/burg-editor.js | 0 {modules => src/modules}/ui/burgs-overview.js | 0 .../modules}/ui/coastline-editor.js | 0 .../modules}/ui/diplomacy-editor.js | 0 {modules => src/modules}/ui/editors.js | 0 .../modules}/ui/elevation-profile.js | 0 {modules => src/modules}/ui/emblems-editor.js | 0 {modules => src/modules}/ui/general.js | 0 .../modules}/ui/heightmap-editor.js | 0 {modules => src/modules}/ui/hotkeys.js | 0 {modules => src/modules}/ui/ice-editor.js | 0 {modules => src/modules}/ui/labels-editor.js | 0 {modules => src/modules}/ui/lakes-editor.js | 0 {modules => src/modules}/ui/layers.js | 0 {modules => src/modules}/ui/markers-editor.js | 0 .../modules}/ui/markers-overview.js | 0 .../modules}/ui/military-overview.js | 0 .../modules}/ui/namesbase-editor.js | 0 {modules => src/modules}/ui/notes-editor.js | 0 {modules => src/modules}/ui/options.js | 0 .../modules}/ui/provinces-editor.js | 0 .../modules}/ui/regiment-editor.js | 0 .../modules}/ui/regiments-overview.js | 0 {modules => src/modules}/ui/relief-editor.js | 0 {modules => src/modules}/ui/rivers-creator.js | 0 {modules => src/modules}/ui/rivers-editor.js | 0 .../modules}/ui/rivers-overview.js | 0 {modules => src/modules}/ui/routes-editor.js | 0 {modules => src/modules}/ui/style.js | 0 {modules => src/modules}/ui/stylePresets.js | 0 {modules => src/modules}/ui/submap.js | 0 .../modules}/ui/temperature-graph.js | 0 {modules => src/modules}/ui/tools.js | 0 {modules => src/modules}/ui/units-editor.js | 0 .../modules}/ui/world-configurator.js | 0 {modules => src/modules}/ui/zones-editor.js | 0 {modules => src/modules}/voronoi.js | 0 {modules => src/modules}/zoom.js | 0 src/scripts/{events.ts => events.js} | 8 +- src/scripts/listeners.ts | 3 +- src/scripts/prompt.ts | 2 +- src/utils/arrayUtils.ts | 2 +- src/utils/graphUtils.ts | 1 + src/utils/languageUtils.ts | 2 +- src/utils/probabilityUtils.ts | 2 +- src/utils/stringUtils.ts | 2 +- versioning.js => src/versioning.js | 2 - vite.config.js | 46 +- yarn.lock | 24 +- 119 files changed, 8218 insertions(+), 139 deletions(-) create mode 100644 dist/assets/charts-overview.js_v_1.87.711ec26c.js create mode 100644 dist/assets/dropbox-sdk.min.f49dfee9.js create mode 100644 dist/assets/heightmap-selection.js_v_1.87.b0b46f49.js create mode 100644 dist/assets/index.2971cde7.css create mode 100644 dist/assets/index.73bf34f9.js create mode 100644 dist/assets/installation.aec0617b.js create mode 100644 dist/assets/maskable_icon_x192.8df7457d.png create mode 100644 dist/index.html rename {config => src/config}/heightmap-templates.js (100%) rename {config => src/config}/precreated-heightmaps.js (100%) rename icons.css => src/icons.css (100%) rename index.css => src/index.css (100%) rename {libs => src/libs}/alea.min.js (100%) rename {libs => src/libs}/d3.min.js (100%) rename {libs => src/libs}/delaunator.min.js (100%) rename {libs => src/libs}/dropbox-sdk.min.js (100%) rename {libs => src/libs}/jquery-3.1.1.min.js (100%) rename {libs => src/libs}/jquery-ui.css (100%) rename {libs => src/libs}/jquery-ui.min.js (100%) rename {libs => src/libs}/jquery.ui.touch-punch.min.js (100%) rename {libs => src/libs}/jszip.min.js (100%) rename {libs => src/libs}/objexporter.min.js (100%) rename {libs => src/libs}/orbitControls.min.js (100%) rename {libs => src/libs}/polylabel.min.js (100%) rename {libs => src/libs}/priority-queue.min.js (100%) rename {libs => src/libs}/rgbquant.min.js (100%) rename {libs => src/libs}/three.min.js (100%) rename {libs => src/libs}/umami.js (100%) rename src/{main.ts => main.js} (99%) rename {modules => src/modules}/activeZooming.js (100%) rename {modules => src/modules}/biomes.js (100%) rename {modules => src/modules}/burgs-and-states.js (100%) rename {modules => src/modules}/coa-generator.js (100%) rename {modules => src/modules}/coa-renderer.js (100%) rename {modules => src/modules}/cultures-generator.js (100%) rename {modules => src/modules}/define-globals.js (100%) rename {modules => src/modules}/define-svg.js (100%) rename {modules => src/modules}/dynamic/auto-update.js (100%) rename {modules => src/modules}/dynamic/editors/cultures-editor.js (100%) rename {modules => src/modules}/dynamic/editors/religions-editor.js (100%) rename {modules => src/modules}/dynamic/editors/states-editor.js (100%) rename {modules => src/modules}/dynamic/export-json.js (100%) rename {modules => src/modules}/dynamic/heightmap-selection.js (100%) rename {modules => src/modules}/dynamic/hierarchy-tree.js (100%) rename {modules => src/modules}/dynamic/installation.js (100%) rename {modules => src/modules}/dynamic/overview/charts-overview.js (100%) rename {modules => src/modules}/dynamic/supporters.js (97%) rename {modules => src/modules}/fonts.js (100%) rename {modules => src/modules}/heightmap-generator.js (100%) rename {modules => src/modules}/io/cloud.js (100%) rename {modules => src/modules}/io/export.js (100%) rename {modules => src/modules}/io/formats.js (100%) rename {modules => src/modules}/io/load.js (100%) rename {modules => src/modules}/io/save.js (100%) rename {modules => src/modules}/lakes.js (100%) rename src/modules/{legend.ts => legend.js} (98%) rename {modules => src/modules}/markers-generator.js (100%) rename {modules => src/modules}/military-generator.js (100%) rename {modules => src/modules}/names-generator.js (100%) rename {modules => src/modules}/ocean-layers.js (100%) rename {modules => src/modules}/relief-icons.js (100%) rename {modules => src/modules}/religions-generator.js (100%) rename {modules => src/modules}/river-generator.js (100%) rename {modules => src/modules}/routes-generator.js (100%) rename {modules => src/modules}/submap.js (100%) rename {modules => src/modules}/ui/3d.js (100%) rename {modules => src/modules}/ui/battle-screen.js (100%) rename {modules => src/modules}/ui/biomes-editor.js (100%) rename {modules => src/modules}/ui/burg-editor.js (100%) rename {modules => src/modules}/ui/burgs-overview.js (100%) rename {modules => src/modules}/ui/coastline-editor.js (100%) rename {modules => src/modules}/ui/diplomacy-editor.js (100%) rename {modules => src/modules}/ui/editors.js (100%) rename {modules => src/modules}/ui/elevation-profile.js (100%) rename {modules => src/modules}/ui/emblems-editor.js (100%) rename {modules => src/modules}/ui/general.js (100%) rename {modules => src/modules}/ui/heightmap-editor.js (100%) rename {modules => src/modules}/ui/hotkeys.js (100%) rename {modules => src/modules}/ui/ice-editor.js (100%) rename {modules => src/modules}/ui/labels-editor.js (100%) rename {modules => src/modules}/ui/lakes-editor.js (100%) rename {modules => src/modules}/ui/layers.js (100%) rename {modules => src/modules}/ui/markers-editor.js (100%) rename {modules => src/modules}/ui/markers-overview.js (100%) rename {modules => src/modules}/ui/military-overview.js (100%) rename {modules => src/modules}/ui/namesbase-editor.js (100%) rename {modules => src/modules}/ui/notes-editor.js (100%) rename {modules => src/modules}/ui/options.js (100%) rename {modules => src/modules}/ui/provinces-editor.js (100%) rename {modules => src/modules}/ui/regiment-editor.js (100%) rename {modules => src/modules}/ui/regiments-overview.js (100%) rename {modules => src/modules}/ui/relief-editor.js (100%) rename {modules => src/modules}/ui/rivers-creator.js (100%) rename {modules => src/modules}/ui/rivers-editor.js (100%) rename {modules => src/modules}/ui/rivers-overview.js (100%) rename {modules => src/modules}/ui/routes-editor.js (100%) rename {modules => src/modules}/ui/style.js (100%) rename {modules => src/modules}/ui/stylePresets.js (100%) rename {modules => src/modules}/ui/submap.js (100%) rename {modules => src/modules}/ui/temperature-graph.js (100%) rename {modules => src/modules}/ui/tools.js (100%) rename {modules => src/modules}/ui/units-editor.js (100%) rename {modules => src/modules}/ui/world-configurator.js (100%) rename {modules => src/modules}/ui/zones-editor.js (100%) rename {modules => src/modules}/voronoi.js (100%) rename {modules => src/modules}/zoom.js (100%) rename src/scripts/{events.ts => events.js} (97%) rename versioning.js => src/versioning.js (98%) diff --git a/dist/assets/charts-overview.js_v_1.87.711ec26c.js b/dist/assets/charts-overview.js_v_1.87.711ec26c.js new file mode 100644 index 00000000..63c9a8c5 --- /dev/null +++ b/dist/assets/charts-overview.js_v_1.87.711ec26c.js @@ -0,0 +1,100 @@ +import{r as u,b as c,t as lt,c as pt,i as mt,d as at,e as H,f as T}from"./index.73bf34f9.js";const K={states:{label:"State",getCellsData:()=>pack.cells.state,getName:G("states"),getColors:W("states"),landOnly:!0},cultures:{label:"Culture",getCellsData:()=>pack.cells.culture,getName:G("cultures"),getColors:W("cultures"),landOnly:!0},religions:{label:"Religion",getCellsData:()=>pack.cells.religion,getName:G("religions"),getColors:W("religions"),landOnly:!0},provinces:{label:"Province",getCellsData:()=>pack.cells.province,getName:G("provinces"),getColors:W("provinces"),landOnly:!0},biomes:{label:"Biome",getCellsData:()=>pack.cells.biome,getName:xt,getColors:St,landOnly:!1}},Q={total_population:{label:"Total population",quantize:t=>ot(t)+rt(t),aggregate:t=>u(d3.sum(t)),formatTicks:t=>H(t),stringify:t=>t.toLocaleString(),stackable:!0,landOnly:!0},urban_population:{label:"Urban population",quantize:ot,aggregate:t=>u(d3.sum(t)),formatTicks:t=>H(t),stringify:t=>t.toLocaleString(),stackable:!0,landOnly:!0},rural_population:{label:"Rural population",quantize:rt,aggregate:t=>u(d3.sum(t)),formatTicks:t=>H(t),stringify:t=>t.toLocaleString(),stackable:!0,landOnly:!0},area:{label:"Land area",quantize:t=>getArea(pack.cells.area[t]),aggregate:t=>u(d3.sum(t)),formatTicks:t=>`${H(t)} ${getAreaUnit()}`,stringify:t=>`${t.toLocaleString()} ${getAreaUnit()}`,stackable:!0,landOnly:!0},cells:{label:"Number of cells",quantize:()=>1,aggregate:t=>d3.sum(t),formatTicks:t=>t,stringify:t=>t.toLocaleString(),stackable:!0,landOnly:!0},burgs_number:{label:"Number of burgs",quantize:t=>pack.cells.burg[t]?1:0,aggregate:t=>d3.sum(t),formatTicks:t=>t,stringify:t=>t.toLocaleString(),stackable:!0,landOnly:!0},average_elevation:{label:"Average elevation",quantize:t=>pack.cells.h[t],aggregate:t=>d3.mean(t),formatTicks:t=>getHeight(t),stringify:t=>getHeight(t),stackable:!1,landOnly:!1},max_elevation:{label:"Maximum mean elevation",quantize:t=>pack.cells.h[t],aggregate:t=>d3.max(t),formatTicks:t=>getHeight(t),stringify:t=>getHeight(t),stackable:!1,landOnly:!1},min_elevation:{label:"Minimum mean elevation",quantize:t=>pack.cells.h[t],aggregate:t=>d3.min(t),formatTicks:t=>getHeight(t),stringify:t=>getHeight(t),stackable:!1,landOnly:!1},average_temperature:{label:"Annual mean temperature",quantize:t=>grid.cells.temp[pack.cells.g[t]],aggregate:t=>d3.mean(t),formatTicks:t=>T(t),stringify:t=>T(t),stackable:!1,landOnly:!1},max_temperature:{label:"Mean annual maximum temperature",quantize:t=>grid.cells.temp[pack.cells.g[t]],aggregate:t=>d3.max(t),formatTicks:t=>T(t),stringify:t=>T(t),stackable:!1,landOnly:!1},min_temperature:{label:"Mean annual minimum temperature",quantize:t=>grid.cells.temp[pack.cells.g[t]],aggregate:t=>d3.min(t),formatTicks:t=>T(t),stringify:t=>T(t),stackable:!1,landOnly:!1},average_precipitation:{label:"Annual mean precipitation",quantize:t=>grid.cells.prec[pack.cells.g[t]],aggregate:t=>u(d3.mean(t)),formatTicks:t=>getPrecipitation(u(t)),stringify:t=>getPrecipitation(u(t)),stackable:!1,landOnly:!0},max_precipitation:{label:"Mean annual maximum precipitation",quantize:t=>grid.cells.prec[pack.cells.g[t]],aggregate:t=>u(d3.max(t)),formatTicks:t=>getPrecipitation(u(t)),stringify:t=>getPrecipitation(u(t)),stackable:!1,landOnly:!0},min_precipitation:{label:"Mean annual minimum precipitation",quantize:t=>grid.cells.prec[pack.cells.g[t]],aggregate:t=>u(d3.min(t)),formatTicks:t=>getPrecipitation(u(t)),stringify:t=>getPrecipitation(u(t)),stackable:!1,landOnly:!0},coastal_cells:{label:"Number of coastal cells",quantize:t=>pack.cells.t[t]===1?1:0,aggregate:t=>d3.sum(t),formatTicks:t=>t,stringify:t=>t.toLocaleString(),stackable:!0,landOnly:!0},river_cells:{label:"Number of river cells",quantize:t=>pack.cells.r[t]?1:0,aggregate:t=>d3.sum(t),formatTicks:t=>t,stringify:t=>t.toLocaleString(),stackable:!0,landOnly:!0}},dt={stackedBar:{offset:d3.stackOffsetDiverging},normalizedStackedBar:{offset:d3.stackOffsetExpand,formatX:t=>u(t*100)+"%"}};let L=[],nt=mapId;ft();vt();ht();ct();function Lt(){closeDialogs("#chartsOverview, .stable"),nt!==mapId&&(L=[],nt=mapId),L.length?L.forEach(t=>st(t)):it(),$("#chartsOverview").dialog({title:"Data Charts",position:{my:"center",at:"center",of:"svg"},close:kt})}function ft(){const t=document.createElement("style");t.textContent=` + #chartsOverview { + max-width: 90vw !important; + max-height: 90vh !important; + overflow: hidden; + display: grid; + grid-template-rows: auto 1fr; + } + + #chartsOverview__form { + font-size: 1.1em; + margin: 0.3em 0; + display: grid; + grid-template-columns: auto auto; + grid-gap: 0.3em; + align-items: start; + justify-items: end; + } + + @media (max-width: 600px) { + #chartsOverview__form { + font-size: 1em; + grid-template-columns: 1fr; + justify-items: normal; + } + } + + #chartsOverview__charts { + overflow: auto; + scroll-behavior: smooth; + display: grid; + } + + #chartsOverview__charts figure { + margin: 0; + } + + #chartsOverview__charts figcaption { + font-size: 1.2em; + margin: 0 1% 0 4%; + display: grid; + grid-template-columns: 1fr auto; + } + `,document.head.appendChild(t)}function vt(){const t=Object.entries(K).map(([r,{label:i}])=>[r,i]),a=Object.entries(Q).map(([r,{label:i}])=>[r,i]),n=([r,i])=>``,o=r=>r.map(n).join(""),l=`
+
+
+ + + + + + + + + +
+
+ Type + + + Columns + +
+
+ +
+
`;c("dialogs").insertAdjacentHTML("beforeend",l),c("chartsOverview__entitiesSelect").value="states",c("chartsOverview__plotBySelect").value="total_population",c("chartsOverview__groupBySelect").value="cultures"}function ht(){c("chartsOverview__form").on("submit",it),c("chartsOverview__viewColumns").on("change",ct)}function it(t){t&&t.preventDefault();const a=c("chartsOverview__entitiesSelect").value,n=c("chartsOverview__plotBySelect").value;let o=c("chartsOverview__groupBySelect").value;const l=c("chartsOverview__sortingSelect").value,r=c("chartsOverview__chartType").value,{stackable:i}=Q[n];!i&&o!==a&&(lt(`Grouping is not supported for ${plotByLabel}`,!1,"warn",4e3),o=a);const p={id:Date.now(),entity:a,plotBy:n,groupBy:o,sorting:l,type:r};L.push(p),st(p),tt()}function st({id:t,entity:a,plotBy:n,groupBy:o,sorting:l,type:r}){const{label:i,stringify:p,quantize:d,aggregate:h,formatTicks:z,landOnly:B}=Q[n],C=o===a,{label:N,getName:_,getCellsData:q,landOnly:E}=K[a],{label:g,getName:X,getCellsData:x,getColors:U}=K[o],Y=q(),R=x(),F=`${pt(a)} by ${i}${C?"":" grouped by "+g}`,k=(m,f,v,b)=>{const D=`${N}: ${m}`,S=C?"":`${g}: ${f}`;let w=`${i}: ${p(v)}`;return C||(w+=` (${u(b*100)}%)`),[D,S,w].filter(Boolean)},y={},V=new Set;for(const m of pack.cells.i){if((E||B)&&mt(m))continue;const f=Y[m],v=R[m],b=d(m);y[f]?y[f][v]?y[f][v].push(b):y[f][v]=[b]:y[f]={[v]:[b]},V.add(v)}const Z=Object.entries(y).map(([m,f])=>{const v=_(m);return Object.entries(f).map(([b,D])=>{const S=X(b),w=h(D);return{name:v,group:S,value:w}})}).flat(),O=U(),{offset:j,formatX:J=z}=dt[r],P=yt(Z,{sorting:l,colors:O,tooltip:k,offset:j,formatX:J});bt(t,P,F),c("chartsOverview__charts").lastChild.scrollIntoView()}function yt(t,{sorting:a,colors:n,tooltip:o,offset:l,formatX:r}){const i=Tt(t,a),p=i.map(e=>e.value),d=i.map(e=>e.name),h=i.map(e=>e.group),z=new Set(d),B=new Set(h),C=d3.range(p.length).filter(e=>z.has(d[e])&&B.has(h[e])),N=Array.from(z),_=Array.from(B),q=gt(N),E=Ct(_,A-q-15),g={top:30,right:15,bottom:E*20+10,left:q},X=[g.left,A-g.right],x=z.size*25+g.top+g.bottom,U=[x-g.bottom,g.top],Y=at(C,([e])=>e,e=>d[e],e=>h[e]),R=d3.stack().keys(_).value(([,e],s)=>p[new Map(e).get(s)]).order(d3.stackOrderNone).offset(l)(Y).map(e=>{const M=e.filter(I=>!isNaN(I[1])).map(I=>Object.assign(I,{i:new Map(I.data[1]).get(e.key)}));return{key:e.key,data:M}}),F=d3.extent(R.map(e=>e.data).flat(2)),k=d3.scaleLinear(F,X),y=d3.scaleBand(N,U).paddingInner(Ot),V=d3.axisTop(k).ticks(A/80,null),Z=d3.axisLeft(y).tickSizeOuter(0),O=d3.create("svg").attr("version","1.1").attr("xmlns","http://www.w3.org/2000/svg").attr("viewBox",[0,0,A,x]).attr("style","max-width: 100%; height: auto; height: intrinsic;");O.append("g").attr("transform",`translate(0,${g.top})`).call(V).call(e=>e.select(".domain").remove()).call(e=>e.selectAll("text").text(s=>r(s))).call(e=>e.selectAll(".tick line").clone().attr("y2",x-g.top-g.bottom).attr("stroke-opacity",.1));const j=O.append("g").attr("stroke","#666").attr("stroke-width",.5).selectAll("g").data(R).join("g").attr("fill",e=>n[e.key]).selectAll("rect").data(e=>e.data.filter(([s,M])=>s!==M)).join("rect").attr("x",([e,s])=>Math.min(k(e),k(s))).attr("y",({i:e})=>y(d[e])).attr("width",([e,s])=>Math.abs(k(e)-k(s))).attr("height",y.bandwidth()),J=Object.fromEntries(at(C,([e])=>e,e=>d[e],e=>p[e]).map(([e,s])=>[e,d3.sum(s,M=>M[0])])),P=({i:e})=>o(d[e],h[e],p[e],p[e]/J[d[e]]);j.append("title").text(e=>P(e).join(`\r +`)),j.on("mouseover",e=>lt(P(e).join(". "))),O.append("g").attr("transform",`translate(${k(0)},0)`).call(Z);const m=Math.ceil(_.length/E),f=A/(m+.5),v=20,b=(e,s)=>s%m*f,D=(e,s)=>b(e,s)+ut,S=(e,s)=>Math.floor(s/m)*v,w=O.append("g").attr("stroke","#666").attr("stroke-width",.5).attr("dominant-baseline","central").attr("transform",`translate(${g.left},${x-g.bottom+15})`);return w.selectAll("circle").data(_).join("rect").attr("x",b).attr("y",S).attr("width",10).attr("height",10).attr("transform","translate(-5, -5)").attr("fill",e=>n[e]),w.selectAll("text").data(_).join("text").attr("x",D).attr("y",S).text(e=>e),O.node()}function bt(t,a,n){const o=c("chartsOverview__charts"),l=document.createElement("figure"),r=document.createElement("figcaption"),i=o.childElementCount+1;r.innerHTML=` +
+ Figure ${i}. ${n} +
+
+ + +
+ `,l.appendChild(a),l.appendChild(r),o.appendChild(l);const p=()=>{const h=`${getFileName(n)}.svg`;downloadFile(a.outerHTML,h)},d=()=>{l.remove(),L=L.filter(h=>h.id!==t),tt()};l.querySelector("button.icon-download").on("click",p),l.querySelector("button.icon-trash").on("click",d)}function ct(){const t=c("chartsOverview__viewColumns").value,a=c("chartsOverview__charts");a.style.gridTemplateColumns=`repeat(${t}, 1fr)`,tt()}function tt(){$("#chartsOverview").dialog({position:{my:"center",at:"center",of:"svg"}})}function kt(){const t=c("chartsOverview__charts");t.innerHTML="",$("#chartsOverview").dialog("destroy")}const _t="#ccc",et="no",A=800,Ot=.2,wt=7,ut=10;function gt(t){return d3.max(t.map(a=>a.length))*wt}function Ct(t,a){const n=ut+gt(t),o=Math.floor(a/n);return Math.ceil(t.length/o)}function G(t){return a=>pack[t][a].name||et}function W(t){return()=>Object.fromEntries(pack[t].map(({name:a,color:n})=>[a||et,n||_t]))}function xt(t){return biomesData.name[t]||et}function St(){return Object.fromEntries(biomesData.i.map(t=>[biomesData.name[t],biomesData.color[t]]))}function ot(t){const a=pack.cells.burg[t];return a?pack.burgs[a].population*populationRate*urbanization:0}function rt(t){return pack.cells.pop[t]*populationRate}function Tt(t,a){if(a==="natural")return t;if(a==="name")return t.sort((n,o)=>n.name!==o.name?o.name.localeCompare(n.name):n.group.localeCompare(o.group));if(a==="value"){const n={},o={};for(const{name:l,group:r,value:i}of t)n[l]=(n[l]||0)+i,o[r]=(o[r]||0)+i;return t.sort((l,r)=>l.name!==r.name?n[l.name]-n[r.name]:o[r.group]-o[l.group])}return t}export{Lt as open}; diff --git a/dist/assets/dropbox-sdk.min.f49dfee9.js b/dist/assets/dropbox-sdk.min.f49dfee9.js new file mode 100644 index 00000000..589ae9cc --- /dev/null +++ b/dist/assets/dropbox-sdk.min.f49dfee9.js @@ -0,0 +1 @@ +var $=(l,p)=>()=>(p||l((p={exports:{}}).exports,p),p.exports);var ee=$((L,w)=>{(function(l,p){typeof L=="object"&&typeof w!="undefined"?p(L):typeof define=="function"&&define.amd?define(["exports"],p):p((l=typeof globalThis!="undefined"?globalThis:l||self).Dropbox={})})(globalThis,function(l){function p(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function M(e,r){for(var s=0;r.length>s;s++){var i=r[s];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function P(e,r,s){return r&&M(e.prototype,r),s&&M(e,s),e}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)})(e)}function _(e,r){return(_=Object.setPrototypeOf||function(s,i){return s.__proto__=i,s})(e,r)}function R(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch{return!1}}function F(e,r,s){return(F=R()?Reflect.construct:function(i,o,n){var u=[null];u.push.apply(u,o);var a=new(Function.bind.apply(i,u));return n&&_(a,n.prototype),a}).apply(null,arguments)}function D(e){var r=typeof Map=="function"?new Map:void 0;return(D=function(s){if(s===null||Function.toString.call(s).indexOf("[native code]")===-1)return s;if(typeof s!="function")throw new TypeError("Super expression must either be null or a function");if(r!==void 0){if(r.has(s))return r.get(s);r.set(s,i)}function i(){return F(s,arguments,d(this).constructor)}return i.prototype=Object.create(s.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),_(i,s)})(e)}function z(e,r){return!r||typeof r!="object"&&typeof r!="function"?function(s){if(s===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return s}(e):r}var k="app",h="user",y="team",g="dropboxapi.com",G="dropbox.com",A={api:"api",notify:"bolt",content:"api-content"},t={};function N(e){var r="000".concat(e.charCodeAt(0).toString(16)).slice(-4);return"\\u".concat(r)}t.accountSetProfilePhoto=function(e){return this.request("account/set_profile_photo",e,"user","api","rpc")},t.authTokenFromOauth1=function(e){return this.request("auth/token/from_oauth1",e,"app","api","rpc")},t.authTokenRevoke=function(){return this.request("auth/token/revoke",null,"user","api","rpc")},t.checkApp=function(e){return this.request("check/app",e,"app","api","rpc")},t.checkUser=function(e){return this.request("check/user",e,"user","api","rpc")},t.contactsDeleteManualContacts=function(){return this.request("contacts/delete_manual_contacts",null,"user","api","rpc")},t.contactsDeleteManualContactsBatch=function(e){return this.request("contacts/delete_manual_contacts_batch",e,"user","api","rpc")},t.filePropertiesPropertiesAdd=function(e){return this.request("file_properties/properties/add",e,"user","api","rpc")},t.filePropertiesPropertiesOverwrite=function(e){return this.request("file_properties/properties/overwrite",e,"user","api","rpc")},t.filePropertiesPropertiesRemove=function(e){return this.request("file_properties/properties/remove",e,"user","api","rpc")},t.filePropertiesPropertiesSearch=function(e){return this.request("file_properties/properties/search",e,"user","api","rpc")},t.filePropertiesPropertiesSearchContinue=function(e){return this.request("file_properties/properties/search/continue",e,"user","api","rpc")},t.filePropertiesPropertiesUpdate=function(e){return this.request("file_properties/properties/update",e,"user","api","rpc")},t.filePropertiesTemplatesAddForTeam=function(e){return this.request("file_properties/templates/add_for_team",e,"team","api","rpc")},t.filePropertiesTemplatesAddForUser=function(e){return this.request("file_properties/templates/add_for_user",e,"user","api","rpc")},t.filePropertiesTemplatesGetForTeam=function(e){return this.request("file_properties/templates/get_for_team",e,"team","api","rpc")},t.filePropertiesTemplatesGetForUser=function(e){return this.request("file_properties/templates/get_for_user",e,"user","api","rpc")},t.filePropertiesTemplatesListForTeam=function(){return this.request("file_properties/templates/list_for_team",null,"team","api","rpc")},t.filePropertiesTemplatesListForUser=function(){return this.request("file_properties/templates/list_for_user",null,"user","api","rpc")},t.filePropertiesTemplatesRemoveForTeam=function(e){return this.request("file_properties/templates/remove_for_team",e,"team","api","rpc")},t.filePropertiesTemplatesRemoveForUser=function(e){return this.request("file_properties/templates/remove_for_user",e,"user","api","rpc")},t.filePropertiesTemplatesUpdateForTeam=function(e){return this.request("file_properties/templates/update_for_team",e,"team","api","rpc")},t.filePropertiesTemplatesUpdateForUser=function(e){return this.request("file_properties/templates/update_for_user",e,"user","api","rpc")},t.fileRequestsCount=function(){return this.request("file_requests/count",null,"user","api","rpc")},t.fileRequestsCreate=function(e){return this.request("file_requests/create",e,"user","api","rpc")},t.fileRequestsDelete=function(e){return this.request("file_requests/delete",e,"user","api","rpc")},t.fileRequestsDeleteAllClosed=function(){return this.request("file_requests/delete_all_closed",null,"user","api","rpc")},t.fileRequestsGet=function(e){return this.request("file_requests/get",e,"user","api","rpc")},t.fileRequestsListV2=function(e){return this.request("file_requests/list_v2",e,"user","api","rpc")},t.fileRequestsList=function(){return this.request("file_requests/list",null,"user","api","rpc")},t.fileRequestsListContinue=function(e){return this.request("file_requests/list/continue",e,"user","api","rpc")},t.fileRequestsUpdate=function(e){return this.request("file_requests/update",e,"user","api","rpc")},t.filesAlphaGetMetadata=function(e){return this.request("files/alpha/get_metadata",e,"user","api","rpc")},t.filesAlphaUpload=function(e){return this.request("files/alpha/upload",e,"user","content","upload")},t.filesCopyV2=function(e){return this.request("files/copy_v2",e,"user","api","rpc")},t.filesCopy=function(e){return this.request("files/copy",e,"user","api","rpc")},t.filesCopyBatchV2=function(e){return this.request("files/copy_batch_v2",e,"user","api","rpc")},t.filesCopyBatch=function(e){return this.request("files/copy_batch",e,"user","api","rpc")},t.filesCopyBatchCheckV2=function(e){return this.request("files/copy_batch/check_v2",e,"user","api","rpc")},t.filesCopyBatchCheck=function(e){return this.request("files/copy_batch/check",e,"user","api","rpc")},t.filesCopyReferenceGet=function(e){return this.request("files/copy_reference/get",e,"user","api","rpc")},t.filesCopyReferenceSave=function(e){return this.request("files/copy_reference/save",e,"user","api","rpc")},t.filesCreateFolderV2=function(e){return this.request("files/create_folder_v2",e,"user","api","rpc")},t.filesCreateFolder=function(e){return this.request("files/create_folder",e,"user","api","rpc")},t.filesCreateFolderBatch=function(e){return this.request("files/create_folder_batch",e,"user","api","rpc")},t.filesCreateFolderBatchCheck=function(e){return this.request("files/create_folder_batch/check",e,"user","api","rpc")},t.filesDeleteV2=function(e){return this.request("files/delete_v2",e,"user","api","rpc")},t.filesDelete=function(e){return this.request("files/delete",e,"user","api","rpc")},t.filesDeleteBatch=function(e){return this.request("files/delete_batch",e,"user","api","rpc")},t.filesDeleteBatchCheck=function(e){return this.request("files/delete_batch/check",e,"user","api","rpc")},t.filesDownload=function(e){return this.request("files/download",e,"user","content","download")},t.filesDownloadZip=function(e){return this.request("files/download_zip",e,"user","content","download")},t.filesExport=function(e){return this.request("files/export",e,"user","content","download")},t.filesGetFileLockBatch=function(e){return this.request("files/get_file_lock_batch",e,"user","api","rpc")},t.filesGetMetadata=function(e){return this.request("files/get_metadata",e,"user","api","rpc")},t.filesGetPreview=function(e){return this.request("files/get_preview",e,"user","content","download")},t.filesGetTemporaryLink=function(e){return this.request("files/get_temporary_link",e,"user","api","rpc")},t.filesGetTemporaryUploadLink=function(e){return this.request("files/get_temporary_upload_link",e,"user","api","rpc")},t.filesGetThumbnail=function(e){return this.request("files/get_thumbnail",e,"user","content","download")},t.filesGetThumbnailV2=function(e){return this.request("files/get_thumbnail_v2",e,"app, user","content","download")},t.filesGetThumbnailBatch=function(e){return this.request("files/get_thumbnail_batch",e,"user","content","rpc")},t.filesListFolder=function(e){return this.request("files/list_folder",e,"user","api","rpc")},t.filesListFolderContinue=function(e){return this.request("files/list_folder/continue",e,"user","api","rpc")},t.filesListFolderGetLatestCursor=function(e){return this.request("files/list_folder/get_latest_cursor",e,"user","api","rpc")},t.filesListFolderLongpoll=function(e){return this.request("files/list_folder/longpoll",e,"noauth","notify","rpc")},t.filesListRevisions=function(e){return this.request("files/list_revisions",e,"user","api","rpc")},t.filesLockFileBatch=function(e){return this.request("files/lock_file_batch",e,"user","api","rpc")},t.filesMoveV2=function(e){return this.request("files/move_v2",e,"user","api","rpc")},t.filesMove=function(e){return this.request("files/move",e,"user","api","rpc")},t.filesMoveBatchV2=function(e){return this.request("files/move_batch_v2",e,"user","api","rpc")},t.filesMoveBatch=function(e){return this.request("files/move_batch",e,"user","api","rpc")},t.filesMoveBatchCheckV2=function(e){return this.request("files/move_batch/check_v2",e,"user","api","rpc")},t.filesMoveBatchCheck=function(e){return this.request("files/move_batch/check",e,"user","api","rpc")},t.filesPaperCreate=function(e){return this.request("files/paper/create",e,"user","api","upload")},t.filesPaperUpdate=function(e){return this.request("files/paper/update",e,"user","api","upload")},t.filesPermanentlyDelete=function(e){return this.request("files/permanently_delete",e,"user","api","rpc")},t.filesPropertiesAdd=function(e){return this.request("files/properties/add",e,"user","api","rpc")},t.filesPropertiesOverwrite=function(e){return this.request("files/properties/overwrite",e,"user","api","rpc")},t.filesPropertiesRemove=function(e){return this.request("files/properties/remove",e,"user","api","rpc")},t.filesPropertiesTemplateGet=function(e){return this.request("files/properties/template/get",e,"user","api","rpc")},t.filesPropertiesTemplateList=function(){return this.request("files/properties/template/list",null,"user","api","rpc")},t.filesPropertiesUpdate=function(e){return this.request("files/properties/update",e,"user","api","rpc")},t.filesRestore=function(e){return this.request("files/restore",e,"user","api","rpc")},t.filesSaveUrl=function(e){return this.request("files/save_url",e,"user","api","rpc")},t.filesSaveUrlCheckJobStatus=function(e){return this.request("files/save_url/check_job_status",e,"user","api","rpc")},t.filesSearch=function(e){return this.request("files/search",e,"user","api","rpc")},t.filesSearchV2=function(e){return this.request("files/search_v2",e,"user","api","rpc")},t.filesSearchContinueV2=function(e){return this.request("files/search/continue_v2",e,"user","api","rpc")},t.filesUnlockFileBatch=function(e){return this.request("files/unlock_file_batch",e,"user","api","rpc")},t.filesUpload=function(e){return this.request("files/upload",e,"user","content","upload")},t.filesUploadSessionAppendV2=function(e){return this.request("files/upload_session/append_v2",e,"user","content","upload")},t.filesUploadSessionAppend=function(e){return this.request("files/upload_session/append",e,"user","content","upload")},t.filesUploadSessionFinish=function(e){return this.request("files/upload_session/finish",e,"user","content","upload")},t.filesUploadSessionFinishBatch=function(e){return this.request("files/upload_session/finish_batch",e,"user","api","rpc")},t.filesUploadSessionFinishBatchCheck=function(e){return this.request("files/upload_session/finish_batch/check",e,"user","api","rpc")},t.filesUploadSessionStart=function(e){return this.request("files/upload_session/start",e,"user","content","upload")},t.paperDocsArchive=function(e){return this.request("paper/docs/archive",e,"user","api","rpc")},t.paperDocsCreate=function(e){return this.request("paper/docs/create",e,"user","api","upload")},t.paperDocsDownload=function(e){return this.request("paper/docs/download",e,"user","api","download")},t.paperDocsFolderUsersList=function(e){return this.request("paper/docs/folder_users/list",e,"user","api","rpc")},t.paperDocsFolderUsersListContinue=function(e){return this.request("paper/docs/folder_users/list/continue",e,"user","api","rpc")},t.paperDocsGetFolderInfo=function(e){return this.request("paper/docs/get_folder_info",e,"user","api","rpc")},t.paperDocsList=function(e){return this.request("paper/docs/list",e,"user","api","rpc")},t.paperDocsListContinue=function(e){return this.request("paper/docs/list/continue",e,"user","api","rpc")},t.paperDocsPermanentlyDelete=function(e){return this.request("paper/docs/permanently_delete",e,"user","api","rpc")},t.paperDocsSharingPolicyGet=function(e){return this.request("paper/docs/sharing_policy/get",e,"user","api","rpc")},t.paperDocsSharingPolicySet=function(e){return this.request("paper/docs/sharing_policy/set",e,"user","api","rpc")},t.paperDocsUpdate=function(e){return this.request("paper/docs/update",e,"user","api","upload")},t.paperDocsUsersAdd=function(e){return this.request("paper/docs/users/add",e,"user","api","rpc")},t.paperDocsUsersList=function(e){return this.request("paper/docs/users/list",e,"user","api","rpc")},t.paperDocsUsersListContinue=function(e){return this.request("paper/docs/users/list/continue",e,"user","api","rpc")},t.paperDocsUsersRemove=function(e){return this.request("paper/docs/users/remove",e,"user","api","rpc")},t.paperFoldersCreate=function(e){return this.request("paper/folders/create",e,"user","api","rpc")},t.sharingAddFileMember=function(e){return this.request("sharing/add_file_member",e,"user","api","rpc")},t.sharingAddFolderMember=function(e){return this.request("sharing/add_folder_member",e,"user","api","rpc")},t.sharingCheckJobStatus=function(e){return this.request("sharing/check_job_status",e,"user","api","rpc")},t.sharingCheckRemoveMemberJobStatus=function(e){return this.request("sharing/check_remove_member_job_status",e,"user","api","rpc")},t.sharingCheckShareJobStatus=function(e){return this.request("sharing/check_share_job_status",e,"user","api","rpc")},t.sharingCreateSharedLink=function(e){return this.request("sharing/create_shared_link",e,"user","api","rpc")},t.sharingCreateSharedLinkWithSettings=function(e){return this.request("sharing/create_shared_link_with_settings",e,"user","api","rpc")},t.sharingGetFileMetadata=function(e){return this.request("sharing/get_file_metadata",e,"user","api","rpc")},t.sharingGetFileMetadataBatch=function(e){return this.request("sharing/get_file_metadata/batch",e,"user","api","rpc")},t.sharingGetFolderMetadata=function(e){return this.request("sharing/get_folder_metadata",e,"user","api","rpc")},t.sharingGetSharedLinkFile=function(e){return this.request("sharing/get_shared_link_file",e,"user","content","download")},t.sharingGetSharedLinkMetadata=function(e){return this.request("sharing/get_shared_link_metadata",e,"user","api","rpc")},t.sharingGetSharedLinks=function(e){return this.request("sharing/get_shared_links",e,"user","api","rpc")},t.sharingListFileMembers=function(e){return this.request("sharing/list_file_members",e,"user","api","rpc")},t.sharingListFileMembersBatch=function(e){return this.request("sharing/list_file_members/batch",e,"user","api","rpc")},t.sharingListFileMembersContinue=function(e){return this.request("sharing/list_file_members/continue",e,"user","api","rpc")},t.sharingListFolderMembers=function(e){return this.request("sharing/list_folder_members",e,"user","api","rpc")},t.sharingListFolderMembersContinue=function(e){return this.request("sharing/list_folder_members/continue",e,"user","api","rpc")},t.sharingListFolders=function(e){return this.request("sharing/list_folders",e,"user","api","rpc")},t.sharingListFoldersContinue=function(e){return this.request("sharing/list_folders/continue",e,"user","api","rpc")},t.sharingListMountableFolders=function(e){return this.request("sharing/list_mountable_folders",e,"user","api","rpc")},t.sharingListMountableFoldersContinue=function(e){return this.request("sharing/list_mountable_folders/continue",e,"user","api","rpc")},t.sharingListReceivedFiles=function(e){return this.request("sharing/list_received_files",e,"user","api","rpc")},t.sharingListReceivedFilesContinue=function(e){return this.request("sharing/list_received_files/continue",e,"user","api","rpc")},t.sharingListSharedLinks=function(e){return this.request("sharing/list_shared_links",e,"user","api","rpc")},t.sharingModifySharedLinkSettings=function(e){return this.request("sharing/modify_shared_link_settings",e,"user","api","rpc")},t.sharingMountFolder=function(e){return this.request("sharing/mount_folder",e,"user","api","rpc")},t.sharingRelinquishFileMembership=function(e){return this.request("sharing/relinquish_file_membership",e,"user","api","rpc")},t.sharingRelinquishFolderMembership=function(e){return this.request("sharing/relinquish_folder_membership",e,"user","api","rpc")},t.sharingRemoveFileMember=function(e){return this.request("sharing/remove_file_member",e,"user","api","rpc")},t.sharingRemoveFileMember2=function(e){return this.request("sharing/remove_file_member_2",e,"user","api","rpc")},t.sharingRemoveFolderMember=function(e){return this.request("sharing/remove_folder_member",e,"user","api","rpc")},t.sharingRevokeSharedLink=function(e){return this.request("sharing/revoke_shared_link",e,"user","api","rpc")},t.sharingSetAccessInheritance=function(e){return this.request("sharing/set_access_inheritance",e,"user","api","rpc")},t.sharingShareFolder=function(e){return this.request("sharing/share_folder",e,"user","api","rpc")},t.sharingTransferFolder=function(e){return this.request("sharing/transfer_folder",e,"user","api","rpc")},t.sharingUnmountFolder=function(e){return this.request("sharing/unmount_folder",e,"user","api","rpc")},t.sharingUnshareFile=function(e){return this.request("sharing/unshare_file",e,"user","api","rpc")},t.sharingUnshareFolder=function(e){return this.request("sharing/unshare_folder",e,"user","api","rpc")},t.sharingUpdateFileMember=function(e){return this.request("sharing/update_file_member",e,"user","api","rpc")},t.sharingUpdateFolderMember=function(e){return this.request("sharing/update_folder_member",e,"user","api","rpc")},t.sharingUpdateFolderPolicy=function(e){return this.request("sharing/update_folder_policy",e,"user","api","rpc")},t.teamDevicesListMemberDevices=function(e){return this.request("team/devices/list_member_devices",e,"team","api","rpc")},t.teamDevicesListMembersDevices=function(e){return this.request("team/devices/list_members_devices",e,"team","api","rpc")},t.teamDevicesListTeamDevices=function(e){return this.request("team/devices/list_team_devices",e,"team","api","rpc")},t.teamDevicesRevokeDeviceSession=function(e){return this.request("team/devices/revoke_device_session",e,"team","api","rpc")},t.teamDevicesRevokeDeviceSessionBatch=function(e){return this.request("team/devices/revoke_device_session_batch",e,"team","api","rpc")},t.teamFeaturesGetValues=function(e){return this.request("team/features/get_values",e,"team","api","rpc")},t.teamGetInfo=function(){return this.request("team/get_info",null,"team","api","rpc")},t.teamGroupsCreate=function(e){return this.request("team/groups/create",e,"team","api","rpc")},t.teamGroupsDelete=function(e){return this.request("team/groups/delete",e,"team","api","rpc")},t.teamGroupsGetInfo=function(e){return this.request("team/groups/get_info",e,"team","api","rpc")},t.teamGroupsJobStatusGet=function(e){return this.request("team/groups/job_status/get",e,"team","api","rpc")},t.teamGroupsList=function(e){return this.request("team/groups/list",e,"team","api","rpc")},t.teamGroupsListContinue=function(e){return this.request("team/groups/list/continue",e,"team","api","rpc")},t.teamGroupsMembersAdd=function(e){return this.request("team/groups/members/add",e,"team","api","rpc")},t.teamGroupsMembersList=function(e){return this.request("team/groups/members/list",e,"team","api","rpc")},t.teamGroupsMembersListContinue=function(e){return this.request("team/groups/members/list/continue",e,"team","api","rpc")},t.teamGroupsMembersRemove=function(e){return this.request("team/groups/members/remove",e,"team","api","rpc")},t.teamGroupsMembersSetAccessType=function(e){return this.request("team/groups/members/set_access_type",e,"team","api","rpc")},t.teamGroupsUpdate=function(e){return this.request("team/groups/update",e,"team","api","rpc")},t.teamLegalHoldsCreatePolicy=function(e){return this.request("team/legal_holds/create_policy",e,"team","api","rpc")},t.teamLegalHoldsGetPolicy=function(e){return this.request("team/legal_holds/get_policy",e,"team","api","rpc")},t.teamLegalHoldsListHeldRevisions=function(e){return this.request("team/legal_holds/list_held_revisions",e,"team","api","rpc")},t.teamLegalHoldsListHeldRevisionsContinue=function(e){return this.request("team/legal_holds/list_held_revisions_continue",e,"team","api","rpc")},t.teamLegalHoldsListPolicies=function(e){return this.request("team/legal_holds/list_policies",e,"team","api","rpc")},t.teamLegalHoldsReleasePolicy=function(e){return this.request("team/legal_holds/release_policy",e,"team","api","rpc")},t.teamLegalHoldsUpdatePolicy=function(e){return this.request("team/legal_holds/update_policy",e,"team","api","rpc")},t.teamLinkedAppsListMemberLinkedApps=function(e){return this.request("team/linked_apps/list_member_linked_apps",e,"team","api","rpc")},t.teamLinkedAppsListMembersLinkedApps=function(e){return this.request("team/linked_apps/list_members_linked_apps",e,"team","api","rpc")},t.teamLinkedAppsListTeamLinkedApps=function(e){return this.request("team/linked_apps/list_team_linked_apps",e,"team","api","rpc")},t.teamLinkedAppsRevokeLinkedApp=function(e){return this.request("team/linked_apps/revoke_linked_app",e,"team","api","rpc")},t.teamLinkedAppsRevokeLinkedAppBatch=function(e){return this.request("team/linked_apps/revoke_linked_app_batch",e,"team","api","rpc")},t.teamMemberSpaceLimitsExcludedUsersAdd=function(e){return this.request("team/member_space_limits/excluded_users/add",e,"team","api","rpc")},t.teamMemberSpaceLimitsExcludedUsersList=function(e){return this.request("team/member_space_limits/excluded_users/list",e,"team","api","rpc")},t.teamMemberSpaceLimitsExcludedUsersListContinue=function(e){return this.request("team/member_space_limits/excluded_users/list/continue",e,"team","api","rpc")},t.teamMemberSpaceLimitsExcludedUsersRemove=function(e){return this.request("team/member_space_limits/excluded_users/remove",e,"team","api","rpc")},t.teamMemberSpaceLimitsGetCustomQuota=function(e){return this.request("team/member_space_limits/get_custom_quota",e,"team","api","rpc")},t.teamMemberSpaceLimitsRemoveCustomQuota=function(e){return this.request("team/member_space_limits/remove_custom_quota",e,"team","api","rpc")},t.teamMemberSpaceLimitsSetCustomQuota=function(e){return this.request("team/member_space_limits/set_custom_quota",e,"team","api","rpc")},t.teamMembersAddV2=function(e){return this.request("team/members/add_v2",e,"team","api","rpc")},t.teamMembersAdd=function(e){return this.request("team/members/add",e,"team","api","rpc")},t.teamMembersAddJobStatusGetV2=function(e){return this.request("team/members/add/job_status/get_v2",e,"team","api","rpc")},t.teamMembersAddJobStatusGet=function(e){return this.request("team/members/add/job_status/get",e,"team","api","rpc")},t.teamMembersDeleteProfilePhotoV2=function(e){return this.request("team/members/delete_profile_photo_v2",e,"team","api","rpc")},t.teamMembersDeleteProfilePhoto=function(e){return this.request("team/members/delete_profile_photo",e,"team","api","rpc")},t.teamMembersGetAvailableTeamMemberRoles=function(){return this.request("team/members/get_available_team_member_roles",null,"team","api","rpc")},t.teamMembersGetInfoV2=function(e){return this.request("team/members/get_info_v2",e,"team","api","rpc")},t.teamMembersGetInfo=function(e){return this.request("team/members/get_info",e,"team","api","rpc")},t.teamMembersListV2=function(e){return this.request("team/members/list_v2",e,"team","api","rpc")},t.teamMembersList=function(e){return this.request("team/members/list",e,"team","api","rpc")},t.teamMembersListContinueV2=function(e){return this.request("team/members/list/continue_v2",e,"team","api","rpc")},t.teamMembersListContinue=function(e){return this.request("team/members/list/continue",e,"team","api","rpc")},t.teamMembersMoveFormerMemberFiles=function(e){return this.request("team/members/move_former_member_files",e,"team","api","rpc")},t.teamMembersMoveFormerMemberFilesJobStatusCheck=function(e){return this.request("team/members/move_former_member_files/job_status/check",e,"team","api","rpc")},t.teamMembersRecover=function(e){return this.request("team/members/recover",e,"team","api","rpc")},t.teamMembersRemove=function(e){return this.request("team/members/remove",e,"team","api","rpc")},t.teamMembersRemoveJobStatusGet=function(e){return this.request("team/members/remove/job_status/get",e,"team","api","rpc")},t.teamMembersSecondaryEmailsAdd=function(e){return this.request("team/members/secondary_emails/add",e,"team","api","rpc")},t.teamMembersSecondaryEmailsDelete=function(e){return this.request("team/members/secondary_emails/delete",e,"team","api","rpc")},t.teamMembersSecondaryEmailsResendVerificationEmails=function(e){return this.request("team/members/secondary_emails/resend_verification_emails",e,"team","api","rpc")},t.teamMembersSendWelcomeEmail=function(e){return this.request("team/members/send_welcome_email",e,"team","api","rpc")},t.teamMembersSetAdminPermissionsV2=function(e){return this.request("team/members/set_admin_permissions_v2",e,"team","api","rpc")},t.teamMembersSetAdminPermissions=function(e){return this.request("team/members/set_admin_permissions",e,"team","api","rpc")},t.teamMembersSetProfileV2=function(e){return this.request("team/members/set_profile_v2",e,"team","api","rpc")},t.teamMembersSetProfile=function(e){return this.request("team/members/set_profile",e,"team","api","rpc")},t.teamMembersSetProfilePhotoV2=function(e){return this.request("team/members/set_profile_photo_v2",e,"team","api","rpc")},t.teamMembersSetProfilePhoto=function(e){return this.request("team/members/set_profile_photo",e,"team","api","rpc")},t.teamMembersSuspend=function(e){return this.request("team/members/suspend",e,"team","api","rpc")},t.teamMembersUnsuspend=function(e){return this.request("team/members/unsuspend",e,"team","api","rpc")},t.teamNamespacesList=function(e){return this.request("team/namespaces/list",e,"team","api","rpc")},t.teamNamespacesListContinue=function(e){return this.request("team/namespaces/list/continue",e,"team","api","rpc")},t.teamPropertiesTemplateAdd=function(e){return this.request("team/properties/template/add",e,"team","api","rpc")},t.teamPropertiesTemplateGet=function(e){return this.request("team/properties/template/get",e,"team","api","rpc")},t.teamPropertiesTemplateList=function(){return this.request("team/properties/template/list",null,"team","api","rpc")},t.teamPropertiesTemplateUpdate=function(e){return this.request("team/properties/template/update",e,"team","api","rpc")},t.teamReportsGetActivity=function(e){return this.request("team/reports/get_activity",e,"team","api","rpc")},t.teamReportsGetDevices=function(e){return this.request("team/reports/get_devices",e,"team","api","rpc")},t.teamReportsGetMembership=function(e){return this.request("team/reports/get_membership",e,"team","api","rpc")},t.teamReportsGetStorage=function(e){return this.request("team/reports/get_storage",e,"team","api","rpc")},t.teamTeamFolderActivate=function(e){return this.request("team/team_folder/activate",e,"team","api","rpc")},t.teamTeamFolderArchive=function(e){return this.request("team/team_folder/archive",e,"team","api","rpc")},t.teamTeamFolderArchiveCheck=function(e){return this.request("team/team_folder/archive/check",e,"team","api","rpc")},t.teamTeamFolderCreate=function(e){return this.request("team/team_folder/create",e,"team","api","rpc")},t.teamTeamFolderGetInfo=function(e){return this.request("team/team_folder/get_info",e,"team","api","rpc")},t.teamTeamFolderList=function(e){return this.request("team/team_folder/list",e,"team","api","rpc")},t.teamTeamFolderListContinue=function(e){return this.request("team/team_folder/list/continue",e,"team","api","rpc")},t.teamTeamFolderPermanentlyDelete=function(e){return this.request("team/team_folder/permanently_delete",e,"team","api","rpc")},t.teamTeamFolderRename=function(e){return this.request("team/team_folder/rename",e,"team","api","rpc")},t.teamTeamFolderUpdateSyncSettings=function(e){return this.request("team/team_folder/update_sync_settings",e,"team","api","rpc")},t.teamTokenGetAuthenticatedAdmin=function(){return this.request("team/token/get_authenticated_admin",null,"team","api","rpc")},t.teamLogGetEvents=function(e){return this.request("team_log/get_events",e,"team","api","rpc")},t.teamLogGetEventsContinue=function(e){return this.request("team_log/get_events/continue",e,"team","api","rpc")},t.usersFeaturesGetValues=function(e){return this.request("users/features/get_values",e,"user","api","rpc")},t.usersGetAccount=function(e){return this.request("users/get_account",e,"user","api","rpc")},t.usersGetAccountBatch=function(e){return this.request("users/get_account_batch",e,"user","api","rpc")},t.usersGetCurrentAccount=function(){return this.request("users/get_current_account",null,"user","api","rpc")},t.usersGetSpaceUsage=function(){return this.request("users/get_space_usage",null,"user","api","rpc")};var C=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:g,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";return r!==g&&A[e]!==void 0&&(e=A[e],s="-"),"https://".concat(e).concat(s).concat(r,"/2/")},W=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:G;return e!==G&&(e="meta-".concat(e)),"https://".concat(e,"/oauth2/authorize")},U=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:g,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:".",s="api";return e!==g&&(s=A[s],r="-"),"https://".concat(s).concat(r).concat(e,"/oauth2/token")};function E(e){return JSON.stringify(e).replace(/[\u007f-\uffff]/g,N)}function Y(e){return new Date(Date.now()+1e3*e)}function x(){return typeof WorkerGlobalScope!="undefined"&&self instanceof WorkerGlobalScope||typeof w=="undefined"||typeof window!="undefined"}function q(){return typeof window!="undefined"}function b(e){return e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}var V,m,B,I=function(e){(function(n,u){if(typeof u!="function"&&u!==null)throw new TypeError("Super expression must either be null or a function");n.prototype=Object.create(u&&u.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),u&&_(n,u)})(o,e);var r,s,i=(r=o,s=R(),function(){var n,u=d(r);if(s){var a=d(this).constructor;n=Reflect.construct(u,arguments,a)}else n=u.apply(this,arguments);return z(this,n)});function o(n,u,a){var c;return p(this,o),(c=i.call(this,"Response failed with a ".concat(n," code"))).name="DropboxResponseError",c.status=n,c.headers=u,c.error=a,c}return o}(D(Error)),S=function e(r,s,i){p(this,e),this.status=r,this.headers=s,this.result=i};function O(e){return e.text().then(function(r){var s;try{s=JSON.parse(r)}catch{s=r}throw new I(e.status,e.headers,s)})}function v(e){return e.ok?e.text().then(function(r){var s;try{s=JSON.parse(r)}catch{s=r}return new S(e.status,e.headers,s)}):O(e)}V=q()?window.fetch.bind(window):require("node-fetch"),m=q()?window.crypto||window.msCrypto:require("crypto"),B=typeof TextEncoder=="undefined"?require("util").TextEncoder:TextEncoder;var j,K=["legacy","offline","online"],Q=["code","token"],Z=["none","user","team"],H=function(){function e(r){p(this,e),this.fetch=(r=r||{}).fetch||V,this.accessToken=r.accessToken,this.accessTokenExpiresAt=r.accessTokenExpiresAt,this.refreshToken=r.refreshToken,this.clientId=r.clientId,this.clientSecret=r.clientSecret,this.domain=r.domain,this.domainDelimiter=r.domainDelimiter}return P(e,[{key:"setAccessToken",value:function(r){this.accessToken=r}},{key:"getAccessToken",value:function(){return this.accessToken}},{key:"setClientId",value:function(r){this.clientId=r}},{key:"getClientId",value:function(){return this.clientId}},{key:"setClientSecret",value:function(r){this.clientSecret=r}},{key:"getClientSecret",value:function(){return this.clientSecret}},{key:"getRefreshToken",value:function(){return this.refreshToken}},{key:"setRefreshToken",value:function(r){this.refreshToken=r}},{key:"getAccessTokenExpiresAt",value:function(){return this.accessTokenExpiresAt}},{key:"setAccessTokenExpiresAt",value:function(r){this.accessTokenExpiresAt=r}},{key:"setCodeVerifier",value:function(r){this.codeVerifier=r}},{key:"getCodeVerifier",value:function(){return this.codeVerifier}},{key:"generateCodeChallenge",value:function(){var r,s=this,i=new B().encode(this.codeVerifier);if(q())return m.subtle.digest("SHA-256",i).then(function(n){var u=btoa(String.fromCharCode.apply(null,new Uint8Array(n)));r=b(u).substr(0,128),s.codeChallenge=r});var o=m.createHash("sha256").update(i).digest();return r=b(o),this.codeChallenge=r,Promise.resolve()}},{key:"generatePKCECodes",value:function(){var r;if(q()){var s=new Uint8Array(128),i=m.getRandomValues(s);r=b(btoa(i)).substr(0,128)}else r=b(m.randomBytes(128)).substr(0,128);return this.codeVerifier=r,this.generateCodeChallenge()}},{key:"getAuthenticationUrl",value:function(r,s){var i,o=this,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"token",u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:null,c=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"none",f=arguments.length>6&&arguments[6]!==void 0&&arguments[6],T=this.getClientId(),J=W(this.domain);if(!T)throw Error("A client id is required. You can set the client id using .setClientId().");if(n!=="code"&&!r)throw Error("A redirect uri is required.");if(!Q.includes(n))throw Error("Authorization type must be code or token");if(u&&!K.includes(u))throw Error("Token Access Type must be legacy, offline, or online");if(a&&!(a instanceof Array))throw Error("Scope must be an array of strings");if(!Z.includes(c))throw Error("includeGrantedScopes must be none, user, or team");return i=n==="code"?"".concat(J,"?response_type=code&client_id=").concat(T):"".concat(J,"?response_type=token&client_id=").concat(T),r&&(i+="&redirect_uri=".concat(r)),s&&(i+="&state=".concat(s)),u&&(i+="&token_access_type=".concat(u)),a&&(i+="&scope=".concat(a.join(" "))),c!=="none"&&(i+="&include_granted_scopes=".concat(c)),f?this.generatePKCECodes().then(function(){return i+="&code_challenge_method=S256",i+="&code_challenge=".concat(o.codeChallenge)}):Promise.resolve(i)}},{key:"getAccessTokenFromCode",value:function(r,s){var i=this.getClientId(),o=this.getClientSecret();if(!i)throw Error("A client id is required. You can set the client id using .setClientId().");var n=U(this.domain,this.domainDelimiter);if(n+="?grant_type=authorization_code",n+="&code=".concat(s),n+="&client_id=".concat(i),o)n+="&client_secret=".concat(o);else{if(!this.codeVerifier)throw Error("You must use PKCE when generating the authorization URL to not include a client secret");n+="&code_verifier=".concat(this.codeVerifier)}return r&&(n+="&redirect_uri=".concat(r)),this.fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then(function(u){return v(u)})}},{key:"checkAndRefreshAccessToken",value:function(){var r=this.getRefreshToken()&&this.getClientId(),s=!this.getAccessTokenExpiresAt()||new Date(Date.now()+3e5)>=this.getAccessTokenExpiresAt(),i=!this.getAccessToken();return(s||i)&&r?this.refreshAccessToken():Promise.resolve()}},{key:"refreshAccessToken",value:function(){var r=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,i=U(this.domain,this.domainDelimiter),o=this.getClientId(),n=this.getClientSecret();if(!o)throw Error("A client id is required. You can set the client id using .setClientId().");if(s&&!(s instanceof Array))throw Error("Scope must be an array of strings");var u={"Content-Type":"application/json"};i+="?grant_type=refresh_token&refresh_token=".concat(this.getRefreshToken()),i+="&client_id=".concat(o),n&&(i+="&client_secret=".concat(n)),s&&(i+="&scope=".concat(s.join(" ")));var a={method:"POST"};return a.headers=u,this.fetch(i,a).then(function(c){return v(c)}).then(function(c){r.setAccessToken(c.result.access_token),r.setAccessTokenExpiresAt(Y(c.result.expires_in))})}}]),e}();j=typeof window!="undefined"?window.fetch.bind(window):require("node-fetch");var X=typeof btoa=="undefined"?function(e){return Buffer.from(e).toString("base64")}:btoa;l.Dropbox=function(){function e(r){p(this,e),this.auth=(r=r||{}).auth?r.auth:new H(r),this.fetch=r.fetch||j,this.selectUser=r.selectUser,this.selectAdmin=r.selectAdmin,this.pathRoot=r.pathRoot,this.domain=r.domain,this.domainDelimiter=r.domainDelimiter,Object.assign(this,t)}return P(e,[{key:"request",value:function(r,s,i,o,n){if(i.split(",").length>1){var u=i.replace(" ","").split(",");u.includes(h)&&this.auth.getAccessToken()?i=h:u.includes(y)&&this.auth.getAccessToken()?i=y:u.includes(k)&&(i=k)}switch(n){case"rpc":return this.rpcRequest(r,s,i,o);case"download":return this.downloadRequest(r,s,i,o);case"upload":return this.uploadRequest(r,s,i,o);default:throw Error("Invalid request style: ".concat(n))}}},{key:"rpcRequest",value:function(r,s,i,o){var n=this;return this.auth.checkAndRefreshAccessToken().then(function(){var u,a={method:"POST",body:s?JSON.stringify(s):null,headers:{}};switch(s&&(a.headers["Content-Type"]="application/json"),i){case k:if(!n.auth.clientId||!n.auth.clientSecret)throw Error("A client id and secret is required for this function");u=X("".concat(n.auth.clientId,":").concat(n.auth.clientSecret)),a.headers.Authorization="Basic ".concat(u);break;case y:case h:a.headers.Authorization="Bearer ".concat(n.auth.getAccessToken());break;case"noauth":break;default:throw Error("Unhandled auth type: ".concat(i))}return n.setCommonHeaders(a),a}).then(function(u){return n.fetch(C(o,n.domain,n.domainDelimiter)+r,u)}).then(function(u){return v(u)})}},{key:"downloadRequest",value:function(r,s,i,o){var n=this;return this.auth.checkAndRefreshAccessToken().then(function(){if(i!==h)throw Error("Unexpected auth type: ".concat(i));var u={method:"POST",headers:{Authorization:"Bearer ".concat(n.auth.getAccessToken()),"Dropbox-API-Arg":E(s)}};return n.setCommonHeaders(u),u}).then(function(u){return n.fetch(C(o,n.domain,n.domainDelimiter)+r,u)}).then(function(u){return function(a){return a.ok?new Promise(function(c){x()?a.blob().then(function(f){return c(f)}):a.buffer().then(function(f){return c(f)})}).then(function(c){var f=JSON.parse(a.headers.get("dropbox-api-result"));return x()?f.fileBlob=c:f.fileBinary=c,new S(a.status,a.headers,f)}):O(a)}(u)})}},{key:"uploadRequest",value:function(r,s,i,o){var n=this;return this.auth.checkAndRefreshAccessToken().then(function(){if(i!==h)throw Error("Unexpected auth type: ".concat(i));var u=s.contents;delete s.contents;var a={body:u,method:"POST",headers:{Authorization:"Bearer ".concat(n.auth.getAccessToken()),"Content-Type":"application/octet-stream","Dropbox-API-Arg":E(s)}};return n.setCommonHeaders(a),a}).then(function(u){return n.fetch(C(o,n.domain,n.domainDelimiter)+r,u)}).then(function(u){return v(u)})}},{key:"setCommonHeaders",value:function(r){this.selectUser&&(r.headers["Dropbox-API-Select-User"]=this.selectUser),this.selectAdmin&&(r.headers["Dropbox-API-Select-Admin"]=this.selectAdmin),this.pathRoot&&(r.headers["Dropbox-API-Path-Root"]=this.pathRoot)}}]),e}(),l.DropboxAuth=H,l.DropboxResponse=S,l.DropboxResponseError=I,Object.defineProperty(l,"__esModule",{value:!0})})});export default ee(); diff --git a/dist/assets/heightmap-selection.js_v_1.87.b0b46f49.js b/dist/assets/heightmap-selection.js_v_1.87.b0b46f49.js new file mode 100644 index 00000000..8817ff1d --- /dev/null +++ b/dist/assets/heightmap-selection.js_v_1.87.b0b46f49.js @@ -0,0 +1,150 @@ +import{b as o,s as R,g as k,a as v}from"./index.73bf34f9.js";const p=v();let n=d(grid);O();_();j();function E(){closeDialogs(".stable");const e=o("templateInput");S(e.value),n=d(n),$("#heightmapSelection").dialog({title:"Select Heightmap",resizable:!1,position:{my:"center",at:"center",of:"svg"},buttons:{Cancel:function(){$(this).dialog("close")},Select:function(){const t=g();applyOption(e,t,u(t)),lock("template"),$(this).dialog("close")},"New Map":function(){const t=g();applyOption(e,t,u(t)),lock("template");const i=q();regeneratePrompt({seed:i,graph:n}),$(this).dialog("close")}}})}function O(){const e=document.createElement("style");e.textContent=` + div.dialog > div.heightmap-selection { + width: 70vw; + height: 70vh; + } + + .heightmap-selection_container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + grid-gap: 6px; + } + + @media (max-width: 600px) { + .heightmap-selection_container { + grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); + grid-gap: 4px; + } + } + + @media (min-width: 2000px) { + .heightmap-selection_container { + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + grid-gap: 8px; + } + } + + .heightmap-selection_options { + display: grid; + grid-template-columns: 2fr 1fr; + } + + .heightmap-selection_options > div:first-child { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + align-items: center; + justify-self: start; + justify-items: start; + } + + @media (max-width: 600px) { + .heightmap-selection_options { + grid-template-columns: 3fr 1fr; + } + + .heightmap-selection_options > div:first-child { + display: block; + } + } + + .heightmap-selection_options > div:last-child { + justify-self: end; + } + + .heightmap-selection article { + padding: 4px; + border-radius: 8px; + transition: all 0.1s ease-in-out; + filter: drop-shadow(1px 1px 4px #999); + } + + .heightmap-selection article:hover { + background-color: #ddd; + filter: drop-shadow(1px 1px 8px #999); + cursor: pointer; + } + + .heightmap-selection article.selected { + background-color: #ccc; + outline: 1px solid var(--dark-solid); + filter: drop-shadow(1px 1px 8px #999); + } + + .heightmap-selection article > div { + display: flex; + justify-content: space-between; + padding: 2px 1px; + } + + .heightmap-selection article > img { + width: 100%; + aspect-ratio: ${graphWidth}/${graphHeight}; + border-radius: 8px; + object-fit: fill; + } + + .heightmap-selection article .regeneratePreview { + outline: 1px solid #bbb; + padding: 1px 3px; + border-radius: 4px; + transition: all 0.1s ease-in-out; + } + + .heightmap-selection article .regeneratePreview:hover { + outline: 1px solid #666; + } + + .heightmap-selection article .regeneratePreview:active { + outline: 1px solid #333; + color: #000; + transform: rotate(45deg); + } + `,document.head.appendChild(e)}function _(){const e=`
+
+
+

Heightmap templates

+
+
+
+

Precreated heightmaps

+
+
+
+

Options

+
+
+ +
+ + +
+
+ Color scheme + +
+
+
+ + +
+
+
+
+
`;o("dialogs").insertAdjacentHTML("beforeend",e);const t=document.getElementsByClassName("heightmap-selection_container");t[0].innerHTML=Object.keys(heightmapTemplates).map(i=>{const a=heightmapTemplates[i].name;Math.random=aleaPRNG(p);const c=HeightmapGenerator.fromTemplate(n,i),r=m(c);return`
+ ${a} +
+ ${a} + +
+
`}).join(""),t[1].innerHTML=Object.keys(precreatedHeightmaps).map(i=>{const a=precreatedHeightmaps[i].name;return w(i),`
+ ${a} +
${a}
+
`}).join("")}function j(){o("heightmapSelection").on("click",e=>{const t=e.target.closest("#heightmapSelection article");if(!t)return;const i=t.dataset.id;e.target.matches("span.icon-cw")&&G(t,i),S(i)}),o("heightmapSelectionRenderOcean").on("change",h),o("heightmapSelectionColorScheme").on("change",h),o("heightmapSelectionRedrawPreview").on("click",h),o("heightmapSelectionEditTemplates").on("click",f),o("heightmapSelectionImportHeightmap").on("click",f)}function g(){var e,t;return(t=(e=o("heightmapSelection").querySelector(".selected"))==null?void 0:e.dataset)==null?void 0:t.id}function S(e){var i,a,c,r;const t=o("heightmapSelection");(a=(i=t.querySelector(".selected"))==null?void 0:i.classList)==null||a.remove("selected"),(r=(c=t.querySelector(`[data-id="${e}"]`))==null?void 0:c.classList)==null||r.add("selected")}function q(){var e,t;return(t=(e=o("heightmapSelection").querySelector(".selected"))==null?void 0:e.dataset)==null?void 0:t.seed}function u(e){return e in heightmapTemplates?heightmapTemplates[e].name:precreatedHeightmaps[e].name}function d(e){const t=R(e)?k():structuredClone(e);return delete t.cells.h,t}function m(e){const t=document.createElement("canvas");t.width=n.cellsX,t.height=n.cellsY;const i=t.getContext("2d"),a=i.createImageData(n.cellsX,n.cellsY),c=o("heightmapSelectionColorScheme").value,r=getColorScheme(c),b=o("heightmapSelectionRenderOcean").checked,y=l=>l<20?b?l:0:l;for(let l=0;leditHeightmap({mode:"erase",tool:e})})}export{E as open}; diff --git a/dist/assets/index.2971cde7.css b/dist/assets/index.2971cde7.css new file mode 100644 index 00000000..c65ab0c5 --- /dev/null +++ b/dist/assets/index.2971cde7.css @@ -0,0 +1,3 @@ +input,select,button{font-size:1em}input,select,textarea{border:.5px solid #dbdfe6;border-radius:.5px;box-sizing:border-box}select{height:1.6em;border-top-color:#abadb3;padding:0;text-indent:0px}input{border-top-color:#abadb3;padding:2px;text-indent:1px}input:read-only{cursor:default}input[type=radio]{vertical-align:bottom;cursor:pointer}textarea{padding:3px;box-sizing:border-box;width:100%}iframe{border:0;width:100%}#map{background-color:#000;mask-mode:alpha;mask-clip:no-clip;fill-rule:evenodd;user-select:none}#canvas{position:absolute;pointer-events:none}#preview{position:absolute;bottom:1em;left:1em;cursor:pointer}#pickerContainer{position:absolute;z-index:100}input,button,select,a,textarea{outline:none}button,select,a{cursor:pointer}.pointer{cursor:pointer!important}#prec text{font-size:32px;stroke:none;text-shadow:1px 1px 1px #9daac9;user-select:none}#population,#cells,#compass{fill:none}#biomes{stroke-width:.7}#landmass{mask:url(#land);fill-rule:evenodd}#lakes,#coastline,#armies,#ice,#emblems{cursor:pointer}#temperature{font-family:sans-serif;font-weight:700;text-anchor:middle;dominant-baseline:central;text-shadow:0px 0px 10px white;fill-rule:evenodd}#oceanLayers,#terrs{fill-rule:evenodd}#coastline{fill:none;stroke-linejoin:round}t,#regions,#cults,#relig,#biomes,#provincesBody,#terrs,#tooltip,#temperature,#texture,#landmass,#fogging{pointer-events:none}#armies text{pointer-events:none;user-select:none;stroke:none;fill:#fff;text-shadow:0 0 4px #000;dominant-baseline:central;text-anchor:middle;font-family:Helvetica;fill-opacity:1}#armies text.regimentIcon{font-size:.8em}#statesBody{stroke-width:3}#statesHalo{fill:none;stroke-linecap:round;stroke-linejoin:round}#provincesBody{stroke-width:.2}#statesBody,#provincesBody,#relig,#biomes,#cults{stroke-linejoin:round;fill-rule:evenodd}#statesBody,#provincesBody,#relig,#cults{mask:url(#land)}#borders{stroke-linejoin:round;fill:none}#rivers{stroke:none;mask:url(#land);cursor:pointer;fill-rule:nonzero}#anchors{pointer-events:none}#terrain,#burgIcons{cursor:pointer}.strokes{stroke-width:.08px;width:2px;stroke:#5c5c70;stroke-dasharray:.5,.7;stroke-linecap:round}#routes{fill:none;cursor:pointer}i.icon-lock{cursor:pointer}#routeEditor>*,#labelEditor div{display:inline-block}#labels{text-anchor:start;dominant-baseline:central;cursor:pointer}.chartInfo{text-align:center;font-family:sans-serif;font-style:italic;font-size:12px}#statesTree text,#provincesTree text{pointer-events:none;user-select:none;stroke:none;font-size:11px}#statesTree circle{filter:url(#dropShadow05);stroke:#666;stroke-width:1}#statesTree circle.selected,#provincesTree .selected{stroke:#c13119;stroke-width:2}.regimentDragLine{marker-end:url(#end-arrow);stroke:#333;stroke-dasharray:5;stroke-dashoffset:1000;animation:dash 80s linear backwards}.arrow{marker-end:url(#end-arrow-small);stroke:#555;stroke-width:.5}@keyframes dash{to{stroke-dashoffset:0}}#provinceLabels,#burgLabels{dominant-baseline:alphabetic;text-anchor:middle}#routeLength,#coastlineArea{background-color:#eee;border:1px solid #a5a5a5;line-height:1.3em;cursor:default}#brushCircle{stroke:#373737;stroke-width:1.5px;stroke-dasharray:7;stroke-linecap:butt;fill:none}text.drag{text-shadow:0 0 1px red}#dialogs{background-color:var(--bg-dialogs)}.draggable{cursor:move}.ui-widget-header{border-bottom:1px solid var(--dark-solid);background:var(--header);color:#fff;font-weight:700}.ui-dialog,#optionsContainer{user-select:none}#optionsTrigger{padding:.6em .45em}@media (max-width: 600px){#optionsTrigger{font-size:2em;padding:0;width:1.3em;height:1.6em;border:solid 1px #5e4fa2}}#options{position:absolute;font-family:Consolas,monospace;border:solid 1px #5e4fa2;margin:10px;padding-bottom:.3em;background:var(--bg-light)}#options input,#options select,#options button{font-family:Consolas,monospace}#collapsible{margin:11px;border:0;position:absolute;z-index:2;display:grid;grid-template-columns:2fr 7fr}.tab{border-bottom:1px solid var(--dark-solid);height:2.2em;display:flex;justify-content:space-between}div.tab>button#optionsHide{width:auto;font-family:Arial;padding:.6em .45em}button.options{width:100%;background-color:var(--bg-main);font-weight:700;border:none;transition:.2s}button.active{background-color:var(--header);color:#fff}button.options:hover{background-color:var(--header-active);color:#fff}#options p{font-style:italic;font-weight:700;margin:.8em 0 0}#aboutContent{text-align:justify}#aboutContent p{font-weight:400}#aboutContent a{color:#1d1b1c;font-weight:700;text-decoration:underline}#optionsContent span{font-size:.9em}#options i{color:#31272c;font-size:.85em;cursor:pointer}#options button i.icon-cog{position:absolute;padding:.1em .3em;background-color:var(--bg-lighter);border-radius:50%;visibility:hidden;opacity:0;transition:.4s ease-in-out}#options button i.icon-cog:hover{color:#111;background-color:var(--bg-light);transform:rotate(180deg)}#options button i.icon-cog:active{transform:translateY(1px)}#options button:hover i.icon-cog{visibility:visible;opacity:1}input[type=color]{-webkit-appearance:none;cursor:pointer;border:1px solid #a9a9a9}input[type=color]::-webkit-color-swatch-wrapper{padding:0}#options input[type=color]{width:4.5em;height:1em;border:0}#convertImageDialog input[type=color]{width:38px;padding:0;border:0;background:none;cursor:pointer}#options select{height:1.5em;border:0;cursor:pointer;font-size:smaller}#options input[type=range]{height:8px;background:0;appearance:none;margin-left:0;border:0;padding:0}#options input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border-radius:15%;width:.91em;height:.91em;background:var(--light-solid);border:1px solid var(--dark-solid);cursor:pointer;margin-top:-.4em;box-shadow:.5px .5px 0 var(--dark-solid)}#options input[type=range]::-moz-range-thumb{-moz-appearance:none;border-radius:15%;width:.73em;height:.73em;background:var(--light-solid);border:1px solid var(--dark-solid);cursor:pointer;box-shadow:.5px .5px 0 var(--dark-solid)}#options input[type=range]::-webkit-slider-runnable-track{height:2px;background:#ffffff}#options input[type=range]::-moz-range-track{-moz-appearance:none;background-color:#fff;height:2px}#options input[type=number]{font-size:.8em}#options input[type=text]{border:0px;width:62%;font-size:smaller}#optionsContent output{text-align:right;font-size:smaller}#optionsContent input[type=number]{border:0;text-align:right;background-color:transparent;width:3.3em;-moz-appearance:textfield}#optionsContent input[type=number]::-webkit-inner-spin-button,#optionsContent input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}#optionsContent input[type=number]:hover{outline:1px solid var(--dark-solid)}#optionsContent input.paired{text-align:center;background-color:#fff}#optionsContent input.long{width:100%;background-color:#fff;text-align:left}#optionsContent input[type=range],#optionsContent select{width:100%}#options input[type=color]{width:2em;padding:1px}.tabcontent button.sideButton{border-radius:15%;font-size:.8em;margin-bottom:-1em}#layersContent button.active,#styleContent button:active{transform:translateY(1px)}#styleElements input[type=range],#styleElements select{width:64%}#styleElements input[type=number]{width:6em;border:0}#styleSelectFont>option{font-size:2em}#sticked{display:flex;justify-content:space-evenly;width:100%}#sticked button{background-color:transparent;font-weight:700;border:0}#sticked button:hover{color:#fff}#exitCustomization{right:10px;bottom:10px;position:absolute;display:none}#exitCustomization>div{width:12em;background:var(--dark-solid);cursor:move}#finalizeHeightmap{width:100%;border:none;padding:.45em .75em;margin:.4em 0;font-family:Consolas,monospace;animation:glowing 2s infinite}.glow{animation:glowing 3s infinite ease-in-out}@keyframes glowing{0%{box-shadow:0 0 1px #f44336}50%{box-shadow:0 0 10px #f44336}to{box-shadow:0 0 1px #f44336}}.tabcontent{display:none;padding:0 12px 2px;opacity:.9}.tabcontent button{background-color:var(--bg-lighter);border:none;padding:.45em .75em;margin:.35em 0;transition:.1s;font-size:1em}.tabcontent button.pressed{background-color:var(--header);font-style:italic}.tabcontent button:hover{background-color:var(--header-active)}#toolsContent div{display:grid;grid-template-columns:repeat(4,1fr);margin:.2em 0}#toolsContent button{padding:.35em 0;margin:.16em .12em}#mapLayers{display:inline-block;padding:0;margin:0}#mapFilters>button{width:23%;padding:4px 0}#viewMode>button{padding:.35em;margin:.2em .3em .6em;float:left;width:30.7%}fieldset{border:1px solid var(--dark-solid)}.tabcontent li{list-style-type:none;background-color:var(--bg-main);cursor:pointer;padding:.35em;margin:.2em .3em;float:left;width:28%;text-align:center}.tabcontent .buttonoff{background-color:var(--bg-disabled);color:#444a}.tabcontent li:hover{box-shadow:0 0 2px 2px var(--dark-solid) 17}.tabcontent button:hover{background-color:var(--header)}#optionsContainer span{cursor:default}#cellInfo{user-select:text}#tooltip{position:fixed;text-align:center;bottom:.5vw;width:70%;left:15%;cursor:default;text-shadow:1px 1px 2px #1d0e0f;color:#fff;font-size:calc(12px + .5vw);white-space:pre-line;z-index:99999;background:linear-gradient(.1turn,#ffffff00,#c71d1d66,#ffffff00)}#optionsContent table{border-spacing:0;line-height:1.2em}#optionsContent table td:nth-of-type(1){width:3%}#optionsContent table td:nth-of-type(2){width:40%}#optionsContent table td:nth-of-type(4){text-align:right;width:6%}.emblemShapePreview{width:1.5em;height:1.5em;margin:-.4em .1em;fill:#fff;stroke:#000;stroke-width:5px}#styleContent table{border-spacing:0;margin-left:.2em;width:100%}#styleContent table tr{width:100%;display:table}#styleContent table td:nth-of-type(1){width:34.2%}#styleElements tbody,#styleElements caption{display:none}#styleIsOff{color:#8b0000;font-weight:700;text-align:left}#styleElements .whiteButton{padding:0 .8em;border:0;background-color:#fff!important}.overflow-table{width:100%;text-align:center}.matrix-table{max-height:80vh;max-width:85vw;scrollbar-width:thin;overflow:auto}.matrix-table>table{text-align:center;border-collapse:collapse;font-size:smaller}.matrix-table>table th,.matrix-table>table td{border:1px solid var(--dark-solid);height:2em;padding:.2em;position:relative}.matrix-table>table th{background-color:#302a2a;color:#fff}.matrix-table>table td:hover{outline:2px solid var(--dark-solid);outline-offset:-1px;z-index:1;cursor:pointer}.matrix-table>table td.Ally{background-color:#73ec73;color:#000}.matrix-table>table td.Friendly{background-color:#d4f8aa}.matrix-table>table td.Neutral{background-color:#d8d9d3}.matrix-table>table td.Suspicion{background-color:#eeafaa}.matrix-table>table td.Enemy{background-color:#ffa39c;color:#af0d23}.matrix-table>table td.Unknown{background-color:#c1bfbf}.matrix-table>table td.Rival{background-color:#bd845c}.matrix-table>table td.Vassal{background-color:#87cefa}.matrix-table>table td.Suzerain{background-color:#8f8fe1}.matrix-table>table td.x{background-color:#d4ca94;cursor:initial}#sizeOutput{color:green}.setColors{display:inline-block}#templateTools>button{width:1.8em;height:1.6em;margin:1px;padding:.1em .5em;float:left;font-size:1.2em;font-family:monospace}#brushesButtons>button{padding:.3em}#brushesButtons svg{pointer-events:none}#brushesPanel>div{margin:2px 0}#templateEditor>div{margin:1px 0}#templateEditor #templateTools{display:inline-block;margin-bottom:-.3em}#templateBody>div{border:1px solid #a3a3a3;border-radius:1px;background-image:linear-gradient(to right,#ffffff 0%,#fafafa 51%,#ebebeb 100%);margin:1px;padding:.1em .2em;height:1.2em}#templateBody>div:hover{border-color:gray;background-image:linear-gradient(to right,#fcfcfc 0%,#ededed 51%,#dedede 100%)}#templateBody>div>div{display:inline-block}#templateBody>div>span{float:right;margin:0 1px 0 .5px}#templateBody>div>i{float:right}#templateBody input,#templateBody select{width:4em;height:1em;border:0;font-size:.95em;background-color:#ffffff95;color:#05044d;font-style:italic;font-family:monospace}#templateBody select{width:8em;height:1.4em;cursor:pointer;font-size:.9em}#templateBody .icon-resize-vertical{cursor:row-resize;font-size:.9em;color:#555;margin:1px}#templateBody .icon-check-empty,#templateBody .icon-check{width:1.1em;cursor:pointer;color:#575957;font-size:.9em}#controlPoints{fill:red;stroke:#841f1f;stroke-width:.25;cursor:move;opacity:.8}#controlPoints>path{fill:none;stroke:#0a0909;stroke-width:2;opacity:.4;cursor:pointer}#controlCells{pointer-events:none;fill:#82c8ff80;stroke:none}#vertices>circle{fill:red;stroke:#841f1f;stroke-width:.1;cursor:move;opacity:.8}#vertices>polygon{fill:none;stroke:gray;stroke-width:.1}#controlPoints>circle:hover,#vertices>circle:hover{stroke:#2c0808}#battleBody>table{padding:.2em .6em;border:1px solid #ccc;margin:.2em 0 .4em;display:block;overflow:auto;max-height:34vh;width:100%}#battleBody>table .regiment{width:13em;font-weight:700}tr.battleCasualties,tr.battleSurvivors{font-style:italic;font-size:.9em}#battleBody div.battlePhases,#battleBottom div.battleTypes{position:fixed;background-color:#ffffff30}#battleBody div.battlePhases>button,#battleBottom div.battleTypes>button{width:3.2em;display:block;margin:.2em 0}div#regimentSelectorBody{max-height:50vh;font-size:.9em}div#regimentSelectorBody>div{padding:.1em;border:1px solid #fff}div#regimentSelectorBody>div:hover{border:1px solid #ccc}div#regimentSelectorBody>div.selected{border:1px solid #b28585}div#regimentSelectorBody>div.inactive{background-color:#eee;color:#aaa}div#regimentSelectorBody>div>div{display:inline-block;pointer-events:none}.drag-trigger{border-left:1em solid transparent;border-right:1em solid #000;border-top:1em solid transparent;position:absolute;right:-1px;bottom:-1px;opacity:.3}.drag-trigger:hover{cursor:move;opacity:.6}.tint{filter:sepia(1) hue-rotate(200deg)}.color-div{width:3em;height:1em;display:inline-block;margin:0 .16em;border:1px #c5c5c5 groove;cursor:pointer}#colorsSelect div{height:1.7em;display:inline-block;cursor:pointer}.color-div:hover{border-color:red}.hoveredColor{box-shadow:0 0 1px 1px #717171}.selectedColor{outline:2px solid #f87b66}#colorScheme{margin:6px 1px 4px}#debug path.selected{stroke-width:.8;stroke:#da3126;fill:none}#debug>text{font-size:2px;text-anchor:middle;dominant-baseline:central}.selectedCell{stroke-width:1;stroke:#da3126}i.resetButton{float:left;padding-right:.4em;font-size:.8em;margin-top:.25em;color:#fff;cursor:pointer}i.resetButton:active{color:var(--dark-solid)}.ui-dialog button.pressed{box-shadow:inset 1px 1px #ccc;border-color:#a6a6da;background-color:#ecd8d8;border-radius:10%}.ui-dialog input[type=range]{padding:0;height:2px;background:#d4d4d4;top:-.35em;position:relative;appearance:none;-webkit-appearance:none}.ui-dialog input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border-radius:15%;width:1em;height:1em;background:#e9e9e9;border:1px solid #9b9b9b;cursor:pointer}.ui-dialog input[type=range]::-moz-range-thumb{appearance:none;border-radius:15%;width:1em;height:1em;background:#e9e9e9;border:1px solid #9b9b9b;cursor:pointer}.ui-dialog input[type=number]{width:4.5em}.ui-dialog .disabled{opacity:.2}.ui-dialog:disabled{cursor:default}div.slider{width:40em;margin-top:.2em}div.slider .ui-slider-handle{width:3em;height:1.6em;top:50%;margin-top:-.8em;text-align:center;line-height:1.6em}#saveDropdown{display:none;position:absolute;left:29%;top:100%;border:1px solid #5e4fa2;background-color:#a4879b;width:5em}#loadDropdown{display:none;position:absolute;left:53%;top:100%;border:1px solid #5e4fa2;background-color:#a4879b;width:9em}#loadDropdown>div,#saveDropdown>div{padding:2px 4px;cursor:pointer}#loadDropdown>div:hover,#saveDropdown>div:hover{color:#fff}#brushPower,#brushRadius{width:12em}#rescaleHigher,#rescaleLower,#rescaleModifier{width:3.7em}.italic{font-style:italic}.hidden{display:none!important}.table{max-height:75vh;max-width:75vw;overflow-x:hidden;overflow-y:auto;scrollbar-width:thin}@media screen and (max-width: 600px){.table{max-width:unset}}.dialog::-webkit-scrollbar,#alertMessage::-webkit-scrollbar,.table::-webkit-scrollbar,.matrix-table::-webkit-scrollbar{width:6px;height:6px;background-color:transparent}.dialog::-webkit-scrollbar-thumb,#alertMessage::-webkit-scrollbar-thumb,.table::-webkit-scrollbar-thumb,.matrix-table::-webkit-scrollbar-thumb{background-color:#aaa;border-radius:6px}.dialog::-webkit-scrollbar-thumb:hover,#alertMessage::-webkit-scrollbar-thumb:hover,.table::-webkit-scrollbar-thumb:hover,.matrix-table::-webkit-scrollbar-thumb:hover{background:#666}.dialog{max-width:93vw}.dialog>div{width:max-content}div.header{display:grid;width:0;font-weight:700;font-size:.9em}div.header>div:first-child{margin-left:1.8em}.sortable{cursor:pointer}.totalLine{color:#666;font-style:italic;font-size:.9em;margin-bottom:3px}.totalLine>div{display:inline-block}div.states{border:1px solid #d4d4d4;background-image:linear-gradient(to right,#fafafa80 0%,#f0f0f080 50%,#c8c8c880 100%);margin:.1em 0;padding:0 .2em;font-size:.9em;line-height:1.5em}div.states:hover,div.states.hovered{border:1px solid #c4c4c4;background-image:linear-gradient(to right,#dedede 100%,#f2f2f2 50%,#fcfcfc 0%)}div.states>*,div.states sup,div.totalLine>div{display:inline-block}div.states>input{width:7em;background:none;border:0}div.states div{width:3.2em}div.states .biomeHabitability{width:4em;-moz-appearance:textfield}div.states>.statePopulation{width:3em}div.states:hover>.hiddenIcon{visibility:visible!important}div.states .icon-pencil,div.states .icon-trash-empty,div.states .icon-eye,div.states .icon-pin,div.states .icon-flag-empty,div.states .icon-cw{cursor:pointer}div.states .icon-resize-vertical{cursor:row-resize;font-size:.9em}div.states>[class^=icon-]{color:#6e5e66;padding:0}div.states>.icon-arrows-cw{color:#67575c;font-size:.9em;cursor:pointer}div.states>.before{color:#6e5e66;padding:0 1px 0 0}div.states>.small{font-size:.9em}div.states>select{width:7em;cursor:pointer;border:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}div.states>.burgName,div.states>.burgState,div.states>.burgCulture{width:6em}div.states .burgPopulation{width:4.8em}div.states .burgType{width:3em}div.states .burgType>span{padding:0 1px;color:#6e5e66;transition:.2s}div.states span.inactive{color:#c6c2c2}div.states span.inactive:hover{color:#abaaaa}div.states>.riverName{width:7em}div.states>.riverType{width:5em}.coaIcon{stroke-width:3;width:1.4em;height:1.4em;margin:-.3em 0}.coaIcon>use{pointer-events:none}#diplomacyBodySection>div{cursor:pointer}.changeRelations>*{pointer-events:none;cursor:pointer}#diplomacySelect{width:5em;margin:.1em 0 0 -.3em;position:fixed;background-color:#fff;border:1px solid #1891ff}#diplomacySelect>div{width:100%;padding-left:.3em}#diplomacySelect>div:hover{background-color:#1891ff;color:#fff;width:calc(100% - .3em)}#burgsFooterPopulation{border:0;width:50px;color:#666;font-style:italic;line-height:1.4em}#burgBody div.label{display:inline-block;width:6em}#burgBody>div>div,#riverBody>div,#lakeBody>div{padding:.1em}#riverBody div.label,#riverBody input,#riverBody select,#lakeBody div.label,#lakeBody input,#lakeBody select{display:inline-block;width:7em}#stateNameEditor div.label,#provinceNameEditor div.label,#regimentBody div.label,#markerEditor div.label{display:inline-block;width:5.5em;padding:.3em 0}#saveTilesScreen div.label{display:inline-block;width:5em}#regimentBody input[type=number]{width:5em}.burgFeature{padding:1px;cursor:pointer}.burgFeature.inactive{color:#ddd}.burgFeature.inactive:hover{color:#abaaaa}.placeholder{opacity:0;cursor:default;pointer-events:none}div.states.selected{border-color:#b28585;background-image:linear-gradient(to right,#f2f2f2 0%,#ebe7e7 50%,#e5dadb 100%)}div.states.active{border:1px solid #c4c4c4;background-image:linear-gradient(to right,#dedede 100%,#f2f2f2 50%,#fcfcfc 0%)}div.states.Self{margin-bottom:.2em;cursor:default!important;padding:.2em 0 0 .5em;font-weight:700}div.states button.selectCapital{margin:-1px 21px 0 7px;padding:0 3px}div.states>input.biomeName{width:12em}div.states>div.biomeArea{width:5em}#militaryBody div.states>input{-moz-appearance:textfield}#militaryBody div.states>input,#militaryBody div.states>div,#regimentsBody div.states>div{width:5em}#emblemBody>div{padding:1px 3px;transition:all .3s ease-out}#emblemBody>div.active{background-color:#54ca7728}#emblemArmiger{text-align:center;display:block}#emblemBody .label{width:6em;display:inline-block}#emblemBody select{width:9em}#emblemsBottom{margin-top:4px;text-align:center}#emblemUploadControl,#emblemDownloadControl{margin-top:.3em;text-align:center}div.editorLine{margin:.2em 0;padding:0 .2em;font-size:.9em}#emblemDownloadControl>input{width:4.1em}#picker text{cursor:default}#pickerHeader{fill:var(--header);stroke:var(--dark-solid);cursor:move}#pickerLabel{fill:#f8ffff;font-size:12px;font-weight:700;font-family:Arial,Helvetica,sans-serif;cursor:move!important}#pickerCloseRect{cursor:pointer;fill:var(--header);stroke:#f8ffff}#pickerCloseText{fill:#f8ffff;font-size:10px;font-family:Arial,Helvetica,sans-serif;pointer-events:none}#pickerControls line{stroke:#999;stroke-width:2}#pickerControls circle{fill:#ffeb3b;stroke:#666;cursor:ew-resize}#pickerControls circle:hover{fill:#eca116;stroke:#000}#pickerControls,#pickerSpaces{font-size:11px}#pickerSpaces input{width:22px;font-size:9px;-moz-appearance:textfield}#pickerSpaces input::-webkit-inner-spin-button,#pickerSpaces input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}#pickerColors rect,#pickerHatches rect{cursor:pointer}#picker rect.selected{outline:2px dashed #b90c0c;stroke-width:0}.hoverButton{position:sticky;margin-left:-1.8em;margin-top:1px;background-color:#dedede;font-size:8px;cursor:pointer;padding:0 3px!important}#unitsBody>div>*{display:inline-block;margin-bottom:.2em}.unitsHeader{margin:.8em 0 0 -1.1em;font-weight:700;font-style:italic}#unitsBottom,#reliefBottom{margin:6px 0 0 6px}#unitsBody>div>div{width:9em}#unitsBody>div>input[type=range]{width:7em}#unitsBody>div>select,#unitsBody>div>input[type=text]{width:12em}#unitsBody>div>input[type=number]{width:4.35em}#unitsBody>div>input,#unitsBody>div>select{border:1px solid #e9e9e9}#unitsEditor i.icon-lock-open,#unitsEditor i.icon-lock{color:#626573;font-size:.8em;cursor:pointer;position:fixed;margin:.4em 0 0 -.9em}#barBackColor{width:3.5em;padding:0;height:1.2em}#ruler{cursor:move;fill:none}#ruler .rulerPoints{stroke:#4e5a69;fill:#ff0;cursor:grab}#ruler .rulerPoints .control{fill:#999}#ruler .white{stroke:#fff}#ruler .gray{stroke:#3d3d3d;pointer-events:none}#ruler text{font-family:Georgia;fill:#3d3d3d;text-anchor:middle;text-shadow:0 0 4px white;cursor:pointer}#ruler path.planimeter{fill:#add8e6;fill-rule:evenodd;fill-opacity:.5;stroke:#737373}#scaleBar{stroke:none;fill:none;cursor:pointer}#scaleBar text{fill:#353540;text-anchor:middle;font-family:Georgia}#militaryOptionsTable select{border:1px solid #d4d4d4}#militaryOptionsTable input{width:9em;border:1px solid #d4d4d4}#militaryOptionsTable input[type=number]{width:4em}#militaryOptionsTable button{width:100%}#gridOverlay{fill:none}#coordinateLabels{fill:#333;font-family:monospace;text-shadow:0 0 4px white;stroke-width:0;dominant-baseline:central;text-anchor:middle}ul.share-buttons{margin:4px 0 0;padding-left:8%}ul.share-buttons li{padding:0;background:none!important;width:16%;margin:0}ul.share-buttons img{width:2em}input[type=checkbox]{display:none}.checkbox,.checkbox-label{cursor:pointer}.checkbox+.checkbox-label:before{content:"";display:inline-block;vertical-align:middle;width:.6em;height:.6em;padding:.2em;margin-right:.2em;border:1px solid darkgrey;border-radius:15%;background:white}.checkbox:checked+.checkbox-label:before{line-height:.8em;font-weight:700;content:"\2713";color:#333}div.textual select,div.textual textarea,div.textual input{font-family:monospace}div.textual fieldset{margin:3px 3px 5px 0;border-style:dashed}div.textual span,.textual legend{font-size:.9em;font-weight:700}#namesbaseExamples{font-family:monospace;cursor:pointer}#markers{cursor:pointer;font-family:monospace;user-select:none;text-anchor:middle;dominant-baseline:central}.highlighted{outline-width:2px;outline-style:dashed;outline-color:#0da6ff;outline-offset:100px;fill:none}#notes{display:none;position:fixed;width:28vw;right:1vw;top:1vw;font-size:1.2em;border:1px solid #5e4fa2;background:rgba(255,250,228,.7);box-shadow:2px 2px 5px -3px #3a2804}@media screen and (max-width: 600px){#notes{width:50vw}}#notesHeader{font-weight:700;font-size:1.3em;padding:16px 0 4px 12px;border-bottom:1px solid #5e4fa2}#notesBody{padding:14px 12px;max-height:80vh;overflow:auto}#notesBody>iframe{pointer-events:none;user-select:none}#notesBody p{margin:4px}#notesLegend{height:87%;outline:0;overflow-y:auto;padding:.6em;font-family:monospace;background-color:#fff;border:1px solid #dedede;color:#000}svg.button{position:relative;background-color:transparent;margin:-5px;padding:0}#reliefEditor>div>div{font-style:italic;display:inline-block}#reliefEditor div.reliefEditorLabel{width:4em}#reliefEditor input[type=range]{width:16em}#reliefIconsDiv{margin-top:2px;padding:2px;width:100%}#reliefIconsDiv svg{width:40px;height:40px;background-color:#e7e6e4;border:1px solid #a9a9a9;cursor:pointer}#reliefIconsDiv svg:hover{border-color:#5c5c5c;background-color:#eef6fb;transition:all .3s ease-out 3s;transform:scale(2)}#reliefIconsDiv svg.pressed{border:1px solid #b3352c;background-color:#f2f2f2}#reliefIconsSeletionAny{display:none;text-anchor:middle;dominant-baseline:central}#alertMessage{user-select:text;max-height:70vh;max-width:75vw;overflow:auto}#alertMessage ul{padding-left:1.2em;margin:1em 0}.pseudoLink{cursor:pointer;text-decoration:underline}.info-line{font-size:.9em;font-style:italic;color:gray;user-select:none}.optionsSeedRestore{font-size:12px;cursor:pointer;margin-right:2px}.optionsSeedRestore:hover{color:#00f}#worldControls{width:16em;display:inline-block;vertical-align:top}#worldControls>div{display:block;margin:1px 0;padding:2px 0}#worldControls input[type=number]{border:1px solid #e5e5e5;padding:0;width:3.2em}#worldControls i.icon-lock-open,#worldControls i.icon-lock{color:#626573;font-size:.8em;cursor:pointer}#globe{stroke:#000;stroke-width:1}#globeNoteLines{stroke-dasharray:5;stroke:#bbb}#globaAxisLabels{font-style:italic;font-size:9px;font-family:monospace;stroke:none;fill:#001754}#globeLatLabels{font-size:12px;font-family:monospace;stroke:none;fill:#001754}#globeWindArrows{fill:none;stroke:#6072a3;cursor:pointer}#globeWindArrows path{stroke-width:1.7px;fill:none;stroke:#6072a3;pointer-events:none}#globeWindArrows circle{fill:#fff;fill-opacity:0;stroke-opacity:.05}#globaAxisLabels #restoreWind:hover{cursor:pointer;fill:#00f}#globeOutline{fill:url(#temperatureGradient)}#globeArea{fill:#fff;fill-opacity:.3}#globeGraticule{fill:none;stroke-width:.2}#globeEquator{stroke:red;stroke-width:1.4}#legend{cursor:move;user-select:none}.dontAsk{margin:.9em 0 0 .6em;display:inline-flex;align-items:center}#errorBox{font-size:.9em;font-family:Consolas,monospace;color:#920303;background-color:#dabdbd91;padding:2px;border:1px solid var(--header)}.announcement{background-color:#a18888;color:#fff;padding:.4em .5em;border:dashed 1px var(--dark-solid)}.speaker{font-size:.9em;cursor:pointer}#prompt{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:23em;padding:1.2em;background-color:var(--bg-dialogs);border:solid 1px var(--dark-solid);font-size:1.2em;z-index:1000}#promptText{padding:0 0 .6em;font-weight:700;font-family:sans-serif}#mapOverlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:10;pointer-events:none;text-align:center;background:rgba(0,0,0,.5);font-size:2.4em;color:#fff5da;text-shadow:0px 1px 4px #4c3a35}.epgrid line{stroke:#d3d3d3;stroke-opacity:.5;shape-rendering:crispEdges}.epgrid path{stroke-width:0}#debug{font-size:1px;opacity:.8}@media print{div,canvas{display:none}}@media only screen and (max-width: 420px){table{width:100%}.tabcontent{max-width:100%}.drag-trigger{display:none}}@font-face{font-family:icons;src:url(data:application/font-woff2;base64,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\ ) format("woff2");font-weight:400;font-style:normal}[class^=icon-]:before,[class*=" icon-"]:before,[class^=icon-]:after,[class*=" icon-"]:after{font-family:icons;font-style:normal;font-weight:400;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-size:1em;margin:-1px;padding:0;font-variant:normal;text-transform:none;line-height:1em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-pencil:before{content:"\e800"}.icon-font:before{content:"\e801"}.icon-arrows-cw:before{content:"\e802"}.icon-doc:before{content:"\e803"}.icon-trash-empty:before{content:"\e804"}.icon-ok:before{content:"\e805"}.icon-ok-circled:before{content:"\e806"}.icon-ok-circled2:before{content:"\e807"}.icon-link:before{content:"\e808"}.icon-globe:before{content:"\e809"}.icon-plus:before{content:"\e80a"}.icon-plus-circled:before{content:"\e80b"}.icon-minus-circled:before{content:"\e80c"}.icon-minus:before{content:"\e80d"}.icon-text-height:before{content:"\e80e"}.icon-adjust:before{content:"\e80f"}.icon-tag:before{content:"\e810"}.icon-tags:before{content:"\e811"}.icon-logout:before{content:"\e812"}.icon-download:before{content:"\e813"}.icon-down-circled2:before{content:"\e814"}.icon-upload:before{content:"\e815"}.icon-up-circled2:before{content:"\e816"}.icon-cancel-circled2:before{content:"\e817"}.icon-cancel-circled:before{content:"\e818"}.icon-cancel:before{content:"\e819"}.icon-check:before{content:"\e81a"}.icon-align-left:before{content:"\e81b"}.icon-align-center:before{content:"\e81c"}.icon-align-right:before{content:"\e81d"}.icon-align-justify:before{content:"\e81e"}.icon-star:before{content:"\e81f"}.icon-star-empty:before{content:"\e820"}.icon-search:before{content:"\e821"}.icon-mail:before{content:"\e822"}.icon-eye:before{content:"\e823"}.icon-eye-off:before{content:"\e824"}.icon-pin:before{content:"\e825"}.icon-lock-open:before{content:"\e826"}.icon-lock:before{content:"\e827"}.icon-attach:before{content:"\e828"}.icon-home:before{content:"\e829"}.icon-info-circled:before{content:"\e82a"}.icon-help-circled:before{content:"\e82b"}.icon-shuffle:before{content:"\e82c"}.icon-ccw:before{content:"\e82d"}.icon-cw:before{content:"\e82e"}.icon-play:before{content:"\e82f"}.icon-play-circled2:before{content:"\e830"}.icon-down-big:before{content:"\e831"}.icon-left-big:before{content:"\e832"}.icon-right-big:before{content:"\e833"}.icon-up-big:before{content:"\e834"}.icon-up-open:before{content:"\e835"}.icon-right-open:before{content:"\e836"}.icon-left-open:before{content:"\e837"}.icon-down-open:before{content:"\e838"}.icon-cloud:before{content:"\e839"}.icon-text-width:before{content:"\e83a"}.icon-italic:before{content:"\e83b"}.icon-bold:before{content:"\e83c"}.icon-retweet:before{content:"\e83d"}.icon-user:before{content:"\e83e"}.icon-users:before{content:"\e83f"}.icon-flag:before{content:"\e840"}.icon-heart:before{content:"\e841"}.icon-heart-empty:before{content:"\e842"}.icon-edit:before{content:"\e843"}.icon-export:before{content:"\e844"}.icon-cog:before{content:"\e845"}.icon-cog-alt:before{content:"\e846"}.icon-wrench:before{content:"\e847"}.icon-resize-vertical:before{content:"\e848"}.icon-resize-small:before{content:"\e849"}.icon-resize-full:before{content:"\e84a"}.icon-resize-horizontal:before{content:"\e84b"}.icon-target:before{content:"\e84c"}.icon-signal:before{content:"\e84d"}.icon-umbrella:before{content:"\e84e"}.icon-leaf:before{content:"\e84f"}.icon-book:before{content:"\e850"}.icon-asterisk:before{content:"\e851"}.icon-chart-bar:before{content:"\e852"}.icon-key:before{content:"\e853"}.icon-hammer:before{content:"\e854"}.icon-star-half:before{content:"\e855"}.icon-move:before{content:"\f047"}.icon-expand-1:before{content:"\f065"}.icon-link-ext:before{content:"\f08e"}.icon-check-empty:before{content:"\f096"}.icon-resize-full-alt:before{content:"\f0b2"}.icon-flask:before{content:"\f0c3"}.icon-docs:before{content:"\f0c5"}.icon-list-bullet:before{content:"\f0ca"}.icon-mail-alt:before{content:"\f0e0"}.icon-sitemap:before{content:"\f0e8"}.icon-exchange:before{content:"\f0ec"}.icon-download-cloud:before{content:"\f0ed"}.icon-upload-cloud:before{content:"\f0ee"}.icon-plus-squared:before{content:"\f0fe"}.icon-circle-empty:before{content:"\f10c"}.icon-folder-empty:before{content:"\f114"}.icon-folder-open-empty:before{content:"\f115"}.icon-flag-empty:before{content:"\f11d"}.icon-star-half-alt:before{content:"\f123"}.icon-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-help:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-eraser:before{content:"\f12d"}.icon-rocket:before{content:"\f135"}.icon-anchor:before{content:"\f13d"}.icon-lock-open-alt:before{content:"\f13e"}.icon-play-circled:before{content:"\f144"}.icon-minus-squared:before{content:"\f146"}.icon-minus-squared-alt:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-ok-squared:before{content:"\f14a"}.icon-pencil-squared:before{content:"\f14b"}.icon-compass:before{content:"\f14e"}.icon-expand:before{content:"\f150"}.icon-collapse:before{content:"\f151"}.icon-expand-right:before{content:"\f152"}.icon-sort-alt-up:before{content:"\f160"}.icon-sort-alt-down:before{content:"\f161"}.icon-female:before{content:"\f182"}.icon-male:before{content:"\f183"}.icon-sun:before{content:"\f185"}.icon-box:before{content:"\f187"}.icon-bug:before{content:"\f188"}.icon-right-circled2:before{content:"\f18e"}.icon-left-circled2:before{content:"\f190"}.icon-collapse-left:before{content:"\f191"}.icon-dot-circled:before{content:"\f192"}.icon-plus-squared-alt:before{content:"\f196"}.icon-bank:before{content:"\f19c"}.icon-child:before{content:"\f1ae"}.icon-paw:before{content:"\f1b0"}.icon-tree:before{content:"\f1bb"}.icon-history:before{content:"\f1da"}.icon-header:before{content:"\f1dc"}.icon-sliders:before{content:"\f1de"}.icon-trash:before{content:"\f1f8"}.icon-brush:before{content:"\f1fc"}.icon-chart-area:before{content:"\f1fe"}.icon-chart-pie:before{content:"\f200"}.icon-chart-line:before{content:"\f201"}.icon-ship:before{content:"\f21a"}.icon-user-secret:before{content:"\f21b"}.icon-venus:before{content:"\f221"}.icon-mars:before{content:"\f222"}.icon-venus-mars:before{content:"\f228"}.icon-neuter:before{content:"\f22c"}.icon-user-plus:before{content:"\f234"}.icon-user-times:before{content:"\f235"}.icon-object-ungroup:before{content:"\f248"}.icon-clone:before{content:"\f24d"}.icon-balance-scale:before{content:"\f24e"}.icon-hourglass-1:before{content:"\f251"}.icon-hand-grab-o:before{content:"\f255"}.icon-hand-paper-o:before{content:"\f256"}.icon-wikipedia-w:before{content:"\f266"}.icon-calendar-check-o:before{content:"\f274"}.icon-map-pin:before{content:"\f276"}.icon-map-signs:before{content:"\f277"}.icon-map-o:before{content:"\f278"}.icon-map:before{content:"\f279"}.icon-fort-awesome:before{content:"\f286"}.icon-percent:before{content:"\f295"}.icon-shield-alt:before{content:"\f3ed"}.icon-chess-bishop:before{content:"\f43a"}.icon-chess-king:before{content:"\f43f"}.icon-chess-knight:before{content:"\f441"}.icon-chess-pawn:before{content:"\f443"}.icon-chess-queen:before{content:"\f445"}.icon-chess-rook:before{content:"\f447"}.icon-sign:before{content:"\f4d9"}.icon-user-friends:before{content:"\f500"}.icon-user-shield:before{content:"\f505"}.icon-crow:before{content:"\f520"}.icon-crown:before{content:"\f521"}.icon-ruler:before{content:"\f545"}.icon-store:before{content:"\f54e"}.icon-bezier-curve:before{content:"\f55b"}.icon-drafting-compass:before{content:"\f568"}.icon-globe-africa:before{content:"\f57c"}.icon-monument:before{content:"\f5a6"}.icon-mortar-pestle:before{content:"\f5a7"}.icon-paint-roller:before{content:"\f5aa"}.icon-pen-fancy:before{content:"\f5ac"}.icon-pen-nib:before{content:"\f5ad"}.icon-pencil-ruler:before{content:"\f5ae"}.icon-draw-polygon:before{content:"\f5ee"}.icon-layer-group:before{content:"\f5fd"}.icon-menorah:before{content:"\f676"}.icon-mosque:before{content:"\f678"}.icon-place-of-worship:before{content:"\f67f"}.icon-synagogue:before{content:"\f69b"}.icon-book-dead:before{content:"\f6b7"}.icon-campground:before{content:"\f6bb"}.icon-mountain:before{content:"\f6fc"}.icon-network-wired:before{content:"\f6ff"}.icon-temperature-high:before{content:"\f769"}.icon-temperature-low:before{content:"\f76b"}.icon-sort-name-up:after{font-size:.9em;content:"\f15d"}.icon-sort-name-down:after{font-size:.9em;content:"\f15e"}.icon-sort-number-up:after{font-size:.9em;content:"\f162"}.icon-sort-number-down:after{font-size:.9em;content:"\f163"}.icon-w:before{font-style:italic;content:"w:"}.icon-f:before{font-style:italic;content:"f:"}.icon-n:before{font-style:italic;content:"n:"}.icon-i:before{font-style:italic;content:"i:"}.icon-s:before{font-style:italic;content:"s:"}.icon-r:before{font-style:italic;content:"r:"}.icon-a:before{font-style:italic;content:"a:"}.icon-smooth:before{font-weight:700;content:"\223c"}.icon-disrupt:before{font-weight:700;content:"\2944"}.icon-if:before{font-style:italic;font-weight:700;content:"if"}.icon-coa:before{content:"\f3ed";font-size:.9em;color:#999}.icon-half:before{font-weight:700;content:"\bd"}.icon-voice:before{content:"\1f50a"}.icon-die:before{content:"\1f3b2"}.icon-button-die:before{content:"\1f3b2";padding-right:.4em}.icon-button-power:before{content:"\1f4aa";padding-right:.6em}.icon-button-melee:before{content:"\2694\fe0f";padding-right:.4em}.icon-button-skirmish:before{content:"\1f3af";padding-right:.4em}.icon-button-pursue:before{content:"\1f40e";padding-right:.4em}.icon-button-retreat:before{content:"\1f3f3\fe0f";padding-right:.4em}.icon-button-shelling:before{content:"\1f4a3";padding-right:.4em}.icon-button-boarding:before{content:"\2694\fe0f";padding-right:.4em}.icon-button-chase:before{content:"\26f5";padding-right:.4em}.icon-button-withdrawal:before{content:"\1f3f3\fe0f";padding-right:.4em}.icon-button-bombardment:before{content:"\1f4a3";padding-right:.4em}.icon-button-blockade:before{content:"\23f3";padding-right:.4em}.icon-button-sheltering:before{content:"\1f512";padding-right:.4em}.icon-button-sortie:before{content:"\1f6aa";padding-right:.4em}.icon-button-defense:before{content:"\1f6e1\fe0f";padding-right:.4em}.icon-button-storming:before{content:"\2694\fe0f";padding-right:.4em}.icon-button-looting:before{content:"\2620\fe0f";padding-right:.4em}.icon-button-surrendering:before{content:"\1f3f3\fe0f";padding-right:.4em}.icon-button-surprise:before{content:"\26a1";padding-right:.4em}.icon-button-shock:before{content:"\1f4ab";padding-right:.4em}.icon-button-flee:before{content:"\26f5";padding-right:.4em}.icon-button-waiting:before{content:"\231b";padding-right:.4em}.icon-button-maneuvering:before{content:"\1f4a2";padding-right:.4em}.icon-button-dogfight:before{content:"\1f415";padding-right:.4em}.icon-button-field:before{content:"\1f5e1\fe0f";padding-right:.4em}.icon-button-naval:before{content:"\1f30a";padding-right:.4em}.icon-button-siege:before{content:"\1f3f0";padding-right:.4em}.icon-button-ambush:before{content:"\1f333";padding-right:.4em}.icon-button-landing:before{content:"\2693";padding-right:.4em}.icon-button-air:before{content:"\1f4a8";padding-right:.4em}.icon-button-screenshot:before{content:"\1f5a5\fe0f";padding-right:.4em}/*! jQuery UI - v1.12.1 - 2018-08-15 http://jqueryui.com +* Includes: draggable.css, core.css, resizable.css, sortable.css, button.css, controlgroup.css, checkboxradio.css, dialog.css, theme.css +* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;white-space:nowrap}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item:focus,.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}body .ui-dialog{position:absolute;top:0;left:0;outline:0;padding:0;background-color:inherit}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;font-size:1.2em;min-width:150px}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar button{position:absolute;right:.5em;top:53%;padding:0;width:1.8em;height:1.8em;color:#fff;background:none;font-size:.75em;border:1px solid #c5c5c5}.ui-dialog .ui-dialog-titlebar button.ui-dialog-titlebar-collapse{margin:-1em 2.2em 0 0}.ui-dialog .ui-dialog-titlebar button.ui-dialog-titlebar-close{margin:-1em 0 0}.ui-dialog .ui-dialog-titlebar button:active{border:1px solid #5d4651;color:#5d4651}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow-y:auto;overflow-x:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-widget{font-family:Arial,Helvetica,sans-serif}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget button[class^=icon-]{padding:1px 6px}.ui-widget.ui-widget-content{border:1px solid #5e4fa2;color:#333}.ui-widget-content{border:1px solid #dddddd;color:#333}.ui-widget-content a,.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:400;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545}.ui-button:active{color:#5d4651;border-color:#5d4651}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px #5e9ed6}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a,.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-widget-overlay{background:#aaaaaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0px 0px 5px #666666;box-shadow:0 0 5px #666} diff --git a/dist/assets/index.73bf34f9.js b/dist/assets/index.73bf34f9.js new file mode 100644 index 00000000..f59b33ca --- /dev/null +++ b/dist/assets/index.73bf34f9.js @@ -0,0 +1,72 @@ +var rn=Object.defineProperty;var sn=(e,t,n)=>t in e?rn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oa=(e,t,n)=>(sn(e,typeof t!="symbol"?t+"":t,n),n);const ln=function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const c of r)if(c.type==="childList")for(const f of c.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&i(f)}).observe(document,{childList:!0,subtree:!0});function n(r){const c={};return r.integrity&&(c.integrity=r.integrity),r.referrerpolicy&&(c.referrerPolicy=r.referrerpolicy),r.crossorigin==="use-credentials"?c.credentials="include":r.crossorigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function i(r){if(r.ep)return;r.ep=!0;const c=n(r);fetch(r.href,c)}};ln();const zt=location.hostname&&location.hostname!=="localhost"&&location.hostname!=="127.0.0.1";var da;const cn=window.innerWidth<600||((da=window.navigator.userAgentData)==null?void 0:da.mobile),un=255,Dt=65535,Ht=4294967295,ha=Boolean(localStorage.getItem("debug")),Ft=ha||!zt,Q=ha||!zt,dn=!0;function De(e){return e[e.length-1]}function hn(e){return[...new Set(e)]}function yt({maxValue:e,length:t,from:n}){const i=gn(e);return n?i.from(n):new i(t)}function gn(e){return console.assert(Number.isInteger(e)&&e>=0&&e<=Ht,`Array maxValue must be an integer between 0 and ${Ht}, got ${e}`),e<=un?Uint8Array:e<=Dt?Uint16Array:(e<=Ht,Uint32Array)}function O(e,t=0){const n=Math.pow(10,t);return Math.round(e*n)/n}function Ie(e,t,n){return Math.min(Math.max(e,t),n)}function ga(e,t,n){return Ie((e-t)/(n-t),0,1)}const ne=document.getElementById.bind(document);Node.prototype.on=function(e,t,n){this.addEventListener(e,t,n)};Node.prototype.off=function(e,t){this.removeEventListener(e,t)};function ze(e){return localStorage.getItem(e)||null}function pa(e,t){return localStorage.setItem(e,t)}const pn=window.Delaunator,mn=window.Voronoi,dt=window.graphWidth,ht=window.graphHeight;function fn(e){var c;const t=Number((c=ne("pointsInput"))==null?void 0:c.dataset.cells);if(t!==e.cellsDesired)return!0;const n=O(Math.sqrt(dt*ht/t),2),i=Math.floor((dt+.5*n-1e-10)/n),r=Math.floor((ht+.5*n-1e-10)/n);return e.spacing!==n||e.cellsX!==i||e.cellsY!==r}function yn(){Math.random=aleaPRNG(seed);const{spacing:e,cellsDesired:t,boundary:n,points:i,cellsX:r,cellsY:c}=bn(),{cells:f,vertices:z}=ma(i,n);return{spacing:e,cellsDesired:t,boundary:n,points:i,cellsX:r,cellsY:c,cells:f,vertices:z}}function bn(){Q&&console.time("placePoints");const e=+ne("pointsInput").dataset.cells,t=O(Math.sqrt(dt*ht/e),2),n=vn(dt,ht,t),i=kn(dt,ht,t),r=Math.floor((dt+.5*t-1e-10)/t),c=Math.floor((ht+.5*t-1e-10)/t);return Q&&console.timeEnd("placePoints"),{spacing:t,cellsDesired:e,boundary:n,points:i,cellsX:r,cellsY:c}}function ma(e,t){Q&&console.time("calculateDelaunay");const n=e.concat(t),i=pn.from(n);Q&&console.timeEnd("calculateDelaunay"),Q&&console.time("calculateVoronoi");const r=new mn(i,n,e.length),c=r.cells;c.i=yt({maxValue:e.length,length:e.length}).map((z,m)=>m);const f=r.vertices;return Q&&console.timeEnd("calculateVoronoi"),{cells:c,vertices:f}}function vn(e,t,n){const i=O(-1*n),r=n*2,c=e-i*2,f=t-i*2,z=Math.ceil(c/r)-1,m=Math.ceil(f/r)-1,b=[];for(let A=.5;AMath.random()*c-r;let z=[];for(let m=i;mr[2])}function Zt(e){return pack.cells.v[e].map(t=>pack.vertices.p[t])}function Te(e,t,n=1/0){const i=pack.cells.q.find(e,t,n);return i?i[2]:void 0}function fa(e){return grid.cells.v[e].map(t=>grid.vertices.p[t])}function Sn(e){return pack.cells.h[e]>=20}function Ys(e){return pack.cells.h[e]<20}(function(){const t=function(c,f,z,m,b){this.node=c,this.x0=f,this.y0=z,this.x1=m,this.y1=b},n=function(c,f,z){var m={x:c,y:f,x0:this._x0,y0:this._y0,x3:this._x1,y3:this._y1,quads:[],node:this._root};for(m.node&&m.quads.push(new t(m.node,m.x0,m.y0,m.x3,m.y3)),i(m,z);m.q=m.quads.pop();)if(!(!(m.node=m.q.node)||(m.x1=m.q.x0)>m.x3||(m.y1=m.q.y0)>m.y3||(m.x2=m.q.x1)=A)<<1|c>=b)&&(m.q=m.quads[m.quads.length-1],m.quads[m.quads.length-1]=m.quads[m.quads.length-1-m.i],m.quads[m.quads.length-1-m.i]=m.q)}else{var u=c-+this._x.call(null,m.node.data),C=f-+this._y.call(null,m.node.data),g=u*u+C*C;r(m,g)}return m.result};d3.quadtree.prototype.findAll=n;var i=function(c,f){c.result=[],c.x0=c.x-f,c.y0=c.y-f,c.x3=c.x+f,c.y3=c.y+f,c.radius=f*f},r=function(c,f){if(c.node.data.scanned=!0,f=1?!0:e<=0?!1:Math.random()t%e===0}function Ce(e=100,t=30,n=0,i=300,r=0){const c=An.randomNormal(e,t),f=Ie(c(),n,i);return O(f,r)}function xn(e){return~~e+ +V(e%1)}function ie(e){return e[Math.floor(Math.random()*e.length)]}function he(e){const t=Object.entries(e).map(([n,i])=>new Array(i).fill(n)).flat();return ie(t)}function Ot(e,t,n){return Math.round(e+(t-e)*Math.pow(Math.random(),n))}function et(e){if(typeof e!="string")return console.error("The value should be a string",e),0;const t=Number(e);if(!isNaN(t))return xn(t);const n=e.startsWith("-"),i=n?-1:1;n&&(e=e.substring(1));const[r,c]=e.split("-"),f=be(i*+r,+c);return isNaN(f)||f<0?(console.error("Cannot parse number. Check the format",e),0):f}function Jt(){return String(Math.floor(Math.random()*1e9))}window.HeightmapGenerator=function(){let e=null,t=null,n,i;const r=h=>{const{cellsDesired:v,cells:E,points:P}=h;t=E.h||yt({maxValue:100,length:P.length}),n=u(v),i=C(),e=h},c=()=>t,f=()=>{t=null,e=null},z=(h,v)=>{var T;const P=(((T=heightmapTemplates[v])==null?void 0:T.template)||"").split(` +`);if(!P.length)throw new Error(`Heightmap template: no steps. Template: ${v}. Steps: ${P}`);r(h);for(const R of P){const L=R.trim().split(" ");if(L.length<2)throw new Error(`Heightmap template: steps < 2. Template: ${v}. Step: ${L}`);A(...L)}return t},m=(h,v)=>new Promise(E=>{const P=document.createElement("canvas"),T=P.getContext("2d"),{cellsX:R,cellsY:L}=h;P.width=R,P.height=L;const M=new Image;M.src=`./heightmaps/${v}.png`,M.onload=()=>{T.drawImage(M,0,0,R,L);const I=T.getImageData(0,0,R,L);r(h),S(I.data),P.remove(),M.remove(),E(t)}}),b=async function(h){Q&&console.time("defineHeightmap");const v=ne("templateInput").value;Math.random=aleaPRNG(seed);const P=v in heightmapTemplates?z(h,v):await m(h,v);return Q&&console.timeEnd("defineHeightmap"),f(),P};function A(h,v,E,P,T){if(h==="Hill")return g(v,E,P,T);if(h==="Pit")return p(v,E,P,T);if(h==="Range")return B(v,E,P,T);if(h==="Trough")return k(v,E,P,T);if(h==="Strait")return d(v,E);if(h==="Mask")return l(v);if(h==="Invert")return a(v,E);if(h==="Add")return s(E,+v,1);if(h==="Multiply")return s(E,0,+v);if(h==="Smooth")return o(v)}function u(h){return{1e3:.93,2e3:.95,5e3:.97,1e4:.98,2e4:.99,3e4:.991,4e4:.993,5e4:.994,6e4:.995,7e4:.9955,8e4:.996,9e4:.9964,1e5:.9973}[h]||.98}function C(){return{1e3:.75,2e3:.77,5e3:.79,1e4:.81,2e4:.82,3e4:.83,4e4:.84,5e4:.86,6e4:.87,7e4:.88,8e4:.91,9e4:.92,1e5:.93}[cells]||.81}const g=(h,v,E,P)=>{for(h=et(h);h>0;)T(),h--;function T(){const R=new Uint8Array(t.length);let L=0,M,I=lim(et(v));do{const G=w(E,graphWidth),D=w(P,graphHeight);M=Xe(G,D,e),L++}while(t[M]+I>90&&L<50);R[M]=I;const H=[M];for(;H.length;){const G=H.shift();for(const D of e.cells.c[G])R[D]||(R[D]=R[G]**n*(Math.random()*.2+.9),R[D]>1&&H.push(D))}t=t.map((G,D)=>lim(G+R[D]))}},p=(h,v,E,P)=>{for(h=et(h);h>0;)T(),h--;function T(){const R=new Uint8Array(t.length);let L=0,M,I=lim(et(v));do{const G=w(E,graphWidth),D=w(P,graphHeight);M=Xe(G,D,e),L++}while(t[M]<20&&L<50);const H=[M];for(;H.length;){const G=H.shift();if(I=I**n*(Math.random()*.2+.9),I<1)return;e.cells.c[G].forEach(function(D,U){R[D]||(t[D]=lim(t[D]-I*(Math.random()*.2+.9)),R[D]=1,H.push(D))})}}},B=(h,v,E,P)=>{for(h=et(h);h>0;)T(),h--;function T(){const R=new Uint8Array(t.length);let L=lim(et(v));const M=w(E,graphWidth),I=w(P,graphHeight);let H=0,G=0,D,U;do D=Math.random()*graphWidth*.8+graphWidth*.1,U=Math.random()*graphHeight*.7+graphHeight*.15,H=Math.abs(U-I)+Math.abs(D-M),G++;while((HgraphWidth/3)&&G<50);const F=Xe(M,I,e),j=Xe(D,U,e);let Z=te(F,j);function te(ee,le){const Y=[ee],W=e.points;for(R[ee]=1;ee!==le;){let de=1/0;if(e.cells.c[ee].forEach(function(me){if(R[me])return;let pe=(W[le][0]-W[me][0])**2+(W[le][1]-W[me][1])**2;Math.random()>.85&&(pe=pe/2),pe{t[le]=lim(t[le]+L*(Math.random()*.3+.85))}),L=L**i-1,L<2)break;ee.forEach(le=>{e.cells.c[le].forEach(Y=>{R[Y]||(q.push(Y),R[Y]=1)})})}Z.forEach((ee,le)=>{if(le%6===0)for(const Y of d3.range(X)){const W=e.cells.c[ee][d3.scan(e.cells.c[ee],(de,me)=>t[de]-t[me])];t[W]=(t[ee]*2+t[W])/3,ee=W}})}},k=(h,v,E,P)=>{for(h=et(h);h>0;)T(),h--;function T(){const R=new Uint8Array(t.length);let L=lim(et(v)),M=0,I,H,G,D=0,U,F;do I=w(E,graphWidth),H=w(P,graphHeight),G=Xe(I,H,e),M++;while(t[G]<20&&M<50);M=0;do U=Math.random()*graphWidth*.8+graphWidth*.1,F=Math.random()*graphHeight*.7+graphHeight*.15,D=Math.abs(F-H)+Math.abs(U-I),M++;while((DgraphWidth/2)&&M<50);let j=Z(G,Xe(U,F,e));function Z(X,ee){const le=[X],Y=e.points;for(R[X]=1;X!==ee;){let W=1/0;if(e.cells.c[X].forEach(function(de){if(R[de])return;let me=(Y[ee][0]-Y[de][0])**2+(Y[ee][1]-Y[de][1])**2;Math.random()>.8&&(me=me/2),me{t[ee]=lim(t[ee]-L*(Math.random()*.3+.85))}),L=L**i-1,L<2)break;X.forEach(ee=>{e.cells.c[ee].forEach(le=>{R[le]||(te.push(le),R[le]=1)})})}j.forEach((X,ee)=>{if(ee%6===0)for(const le of d3.range(q)){const Y=e.cells.c[X][d3.scan(e.cells.c[X],(W,de)=>t[W]-t[de])];t[Y]=(t[X]*2+t[Y])/3,X=Y}})}},d=(h,v="vertical")=>{if(h=Math.min(et(h),e.cellsX/3),h<1&&V(h))return;const E=new Uint8Array(t.length),P=v==="vertical",T=P?Math.floor(Math.random()*graphWidth*.4+graphWidth*.3):5,R=P?5:Math.floor(Math.random()*graphHeight*.4+graphHeight*.3),L=P?Math.floor(graphWidth-T-graphWidth*.1+Math.random()*graphWidth*.2):graphWidth-5,M=P?graphHeight-5:Math.floor(graphHeight-R-graphHeight*.1+Math.random()*graphHeight*.2),I=Xe(T,R,e),H=Xe(L,M,e);let G=U(I,H);const D=[];function U(j,Z){const te=[],q=e.points;for(;j!==Z;){let X=1/0;e.cells.c[j].forEach(function(ee){let le=(q[Z][0]-q[ee][0])**2+(q[Z][1]-q[ee][1])**2;Math.random()>.8&&(le=le/2),le0;){const j=.9-F*h;G.forEach(function(Z){e.cells.c[Z].forEach(function(te){E[te]||(E[te]=1,D.push(te),t[te]**=j,t[te]>100&&(t[te]=5))})}),G=D.slice(),h--}},s=(h,v,E,P)=>{const T=h==="land"?20:h==="all"?0:+h.split("-")[0],R=h==="land"||h==="all"?100:+h.split("-")[1],L=T===20;t=t.map(M=>MR?M:(v&&(M=L?Math.max(M+v,20):M+v),E!==1&&(M=L?(M-20)*E+20:M*E),P&&(M=L?(M-20)**P+20:M**P),lim(M)))},o=(h=2,v=0)=>{t=t.map((E,P)=>{const T=[E];return e.cells.c[P].forEach(R=>T.push(t[R])),h===1?d3.mean(T)+v:lim((E*(h-1)+d3.mean(T)+v)/h)})},l=(h=1)=>{const v=h?Math.abs(h):1;t=t.map((E,P)=>{const[T,R]=e.points[P],L=2*T/graphWidth-1,M=2*R/graphHeight-1;let I=(1-L**2)*(1-M**2);h<0&&(I=1-I);const H=E*I;return lim((E*(v-1)+H)/v)})},a=(h,v)=>{if(!V(h))return;const E=v!=="y",P=v!=="x",{cellsX:T,cellsY:R}=e;t=t.map((M,I)=>{const H=I%T,G=Math.floor(I/T),D=E?T-H-1:H,U=P?R-G-1:G,F=D+U*T;return t[F]})};function w(h,v){if(typeof h!="string"){ERROR&&console.error("Range should be a string");return}const E=h.split("-")[0]/100||0,P=h.split("-")[1]/100||E;return be(E*v,P*v)}function S(h){for(let v=0;vt[2]&&(n|=2),e[1]t[3]&&(n|=8),n}const{graphWidth:Mn,graphHeight:En,pack:Ln}=window;function Et(e){return Cn.polygon(e,[0,0,Mn,En])}function In(e,t,n=10){if(e.length===2)return 1;const i=(f,z)=>(f[0]-z[0])**2+(f[1]-z[1])**2;let r=1,c=1/0;for(let f=0;f=c||(c=k,r=f+1)}}return r}function ya(e,t){const{cells:n,vertices:i}=Ln,r=n.v[e].filter(u=>i.c[u].some(C=>C===t)),[c,f]=i.p[r[0]],[z,m]=i.p[r[1]],b=(c+z)/2,A=(f+m)/2;return[b,A]}function it(e,t=1){return e.replace(/[\d\.-][\d\.e-]*/g,n=>String(O(+n,t)))}function ba(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ia(e){const t=e.length/2,n=e.split(" ");if(n.length<2)return n;let i="",r="",c="",f="";return n.forEach((z,m)=>{m+1!==n.length&&(z+=" "),f+=z,!i||f.length{try{JSON.parse(e)}catch{return!1}return!0};window.OceanLayers=function(){let e,t,n,i;const r=function(){const m=oceanLayers.attr("layers");if(m==="none")return;Q&&console.time("drawOceanLayers"),lineGen.curve(d3.curveBasisClosed),e=grid.cells,n=grid.cells.i.length,t=grid.vertices;const b=m==="random"?c():m.split(",").map(g=>+g),A=[],u=O(.4/b.length,2);i=new Uint8Array(n);for(const g of e.i){const p=e.t[g];if(p>0||i[g]||!b.includes(p))continue;const B=C(g,p);if(!B)continue;i[g]=1;const k=f(B,p);if(k.length<4)continue;const d=1+p*-2,s=k.filter((l,a)=>!(a%d)||t.c[l].some(w=>w>=n));if(s.length<4)continue;const o=Et(s.map(l=>t.p[l]));A.push([p,o])}for(const g of b){let B=A.filter(k=>k[0]===g).map(k=>it(lineGen(k[1]))).join("");B&&oceanLayers.append("path").attr("d",B).attr("fill","#ecf2f9").style("opacity",u)}function C(g,p){return e.b[g]?e.v[g].find(B=>t.c[B].some(k=>k>=n)):e.v[g][e.c[g].findIndex(B=>e.t[B]e.t[s]===m).forEach(s=>i[s]=1);const p=t.v[u],B=!e.t[g[0]]||e.t[g[0]]===m-1,k=!e.t[g[1]]||e.t[g[1]]===m-1,d=!e.t[g[2]]||e.t[g[2]]===m-1;if(p[0]!==void 0&&p[0]!==C&&B!==k?u=p[0]:p[1]!==void 0&&p[1]!==C&&k!==d?u=p[1]:p[2]!==void 0&&p[2]!==C&&B!==d&&(u=p[2]),u===b[b.length-1]){ERROR&&console.error("Next vertex is not found");break}}return b.push(b[0]),b}return r}();window.Rivers=function(){const e=function(S=!0){Q&&console.time("generateRivers"),Math.random=aleaPRNG(seed);const{cells:h,features:v}=pack,E={},P={},T=function(U,F){E[F]?E[F].push(U):E[F]=[U]};h.fl=new Uint16Array(h.i.length),h.r=new Uint16Array(h.i.length),h.conf=new Uint8Array(h.i.length);let R=1;const L=t();Lakes.prepareLakeData(L),n(L),M(),H(),D(),Lakes.cleanupLakeData(),S&&(h.h=Uint8Array.from(L),G()),Q&&console.timeEnd("generateRivers");function M(){const F=(pointsInput.dataset.cells/1e4)**.25,j=grid.cells.prec;pack.cells.area;const Z=h.i.filter(q=>L[q]>=20).sort((q,X)=>L[X]-L[q]),te=Lakes.setClimateData(L);Z.forEach(function(q){var Y;h.fl[q]+=j[h.g[q]]/F;const X=te[q]?v.filter(W=>q===W.outCell&&W.flux>W.evaporation):[];for(const W of X){const de=h.c[q].find(me=>L[me]<20&&h.f[me]===W.i);h.fl[de]+=Math.max(W.flux-W.evaporation,0),h.r[de]!==W.river&&(h.c[de].some(pe=>h.r[pe]===W.river)?(h.r[de]=W.river,T(de,W.river)):(h.r[de]=R,T(de,R),R++)),W.outlet=h.r[de],I(q,h.fl[de],W.outlet)}const ee=(Y=X[0])==null?void 0:Y.outlet;for(const W of X)if(!!Array.isArray(W.inlets))for(const de of W.inlets)P[de]=ee;if(h.b[q]&&h.r[q])return T(-1,h.r[q]);let le=null;if(te[q]?le=h.c[q].filter(de=>!X.map(me=>me.i).includes(h.f[de])).sort((de,me)=>L[de]-L[me])[0]:h.haven[q]?le=h.haven[q]:le=h.c[q].sort((W,de)=>L[W]-L[de])[0],!(L[q]<=L[le])){if(h.fl[q]<30){L[le]>=20&&(h.fl[le]+=h.fl[q]);return}h.r[q]||(h.r[q]=R,T(q,R),R++),I(le,h.fl[q],h.r[q])}})}function I(U,F,j){const Z=h.fl[U]-h.conf[U],te=h.r[U];if(te?F>Z?(h.conf[U]+=h.fl[U],L[U]>=20&&(P[te]=j),h.r[U]=j):(h.conf[U]+=F,L[U]>=20&&(P[j]=te)):h.r[U]=j,L[U]<20){const q=v[h.f[U]];q.type==="lake"&&((!q.river||F>q.enteringFlux)&&(q.river=j,q.enteringFlux=F),q.flux=q.flux+F,q.inlets?q.inlets.push(j):q.inlets=[j])}else h.fl[U]+=F;T(U,j)}function H(){h.r=new Uint16Array(h.i.length),h.conf=new Uint16Array(h.i.length),pack.rivers=[];const U=O(1/(pointsInput.dataset.cells/1e4)**.25,2),F=U*1.2;for(const j in E){const Z=E[j];if(Z.length<3)continue;const te=+j;for(const pe of Z)pe<0||h.h[pe]<20||(h.r[pe]?h.conf[pe]=1:h.r[pe]=te);const q=Z[0],X=Z[Z.length-2],ee=P[j]||0,le=!ee||ee===te?F:U,Y=i(Z),W=h.fl[X],de=o(Y),me=l(C(W,Y.length,le,0));pack.rivers.push({i:te,source:q,mouth:X,discharge:W,length:de,width:me,widthFactor:le,sourceWidth:0,parent:ee,cells:Z})}}function G(){for(const F of pack.cells.i){if(h.h[F]<35||!h.fl[F])continue;const j=h.c[F].filter(q=>h.h[q]>h.h[F]),Z=j.reduce((q,X)=>q+h.fl[X],0)/j.length;if(!Z)continue;const te=Math.floor(h.fl[F]/Z);te&&(h.h[F]-=Math.min(te,5))}}function D(){for(const U of h.i){if(!h.conf[U])continue;const F=h.c[U].filter(j=>h.r[j]&&L[j]>L[U]).map(j=>h.fl[j]).sort((j,Z)=>Z-j);h.conf[U]=F.reduce((j,Z,te)=>te?j+Z:j,0)}}},t=()=>{const{h:S,c:h,t:v}=pack.cells;return Array.from(S).map((E,P)=>E<20||v[P]<1?E:E+v[P]/100+d3.mean(h[P].map(T=>v[T]))/1e4)},n=function(S){const{cells:h,features:v}=pack,E=+document.getElementById("resolveDepressionsStepsOutput").value,P=E*.85,T=E*.75,R=D=>v[h.f[D]].height||S[D],L=v.filter(D=>D.type==="lake"),M=h.i.filter(D=>S[D]>=20&&!h.b[D]);M.sort((D,U)=>S[D]-S[U]);const I=[];let H=1/0,G=null;for(let D=0;H&&D5&&d3.sum(I)>0){S=t(),H=I[0];break}if(H=0,DS[j]));if(!(F>=100||U.height>F)){if(D>T){U.shoreline.forEach(j=>S[j]=h.h[j]),U.height=d3.min(U.shoreline.map(j=>S[j]))-1,U.closed=!0;continue}H++,U.height=F+.2}}for(const U of M){const F=d3.min(h.c[U].map(j=>R(j)));F>=100||S[U]>F||(H++,S[U]=F+.1)}G!==null&&I.push(H-G),G=H}H&&WARN&&console.warn(`Unresolved depressions: ${H}. Edit heightmap to fix`)},i=function(S,h=null,v=.5){const{fl:E,conf:P,h:T}=pack.cells,R=[],L=S.length-1,M=r(S,h);let I=T[S[0]]<20?1:10,H=0;const G=(D,U)=>D===L?H:U;for(let D=0;D<=L;D++,I++){const U=S[D],F=D===L,[j,Z]=M[D],te=G(D,E[U]);if(H=te,R.push([j,Z,te]),F)break;const q=S[D+1],[X,ee]=M[D+1];if(q===-1){R.push([X,ee,H]);break}const le=(X-j)**2+(ee-Z)**2;if(le<=25&&S.length>=6)continue;const Y=G(D+1,E[q]),W=P[q]||te===Y,de=v+1/I+Math.max(v-I/100,0),me=Math.atan2(ee-Z,X-j),pe=Math.sin(me)*de,we=Math.cos(me)*de;if(I<10&&(le>64||le>36&&S.length<5)){const ke=(j*2+X)/3+-pe,He=(Z*2+ee)/3+we,Be=(j+X*2)/3+pe/2,Fe=(Z+ee*2)/3-we/2,[_,oe]=W?[te,te]:[(te*2+Y)/3,(te+Y*2)/3];R.push([ke,He,_],[Be,Fe,oe])}else if(le>25||S.length<6){const ke=(j+X)/2+-pe,He=(Z+ee)/2+we,Be=W?te:(te+Y)/2;R.push([ke,He,Be])}}return R},r=(S,h)=>{if(h)return h;const{p:v}=pack.cells;return S.map((E,P)=>E===-1?c(S[P-1]):v[E])},c=S=>{const[h,v]=pack.cells.p[S],E=Math.min(v,graphHeight-v,h,graphWidth-h);return E===v?[h,0]:E===graphHeight-v?[h,graphHeight]:E===h?[0,v]:[graphWidth,v]},A=[1,1,2,3,5,8,13,21,34].map(S=>S/200),u=De(A),C=(S,h,v,E=0)=>{const P=Math.min(S**.9/500,2),T=h*.005+(A[h]||u);return v*(T+P)+E},g=function(S,h,v=0){const E=[],P=[];for(let L=0;LR.length||0).sort((R,L)=>R-L)[T]}const E=h{const h=S.reduce((v,E,P,T)=>v+(P?Math.hypot(E[0]-T[P-1][0],E[1]-T[P-1][1]):0),0);return O(h,2)},l=S=>O((S/1.5)**1.8,2),a=function(S){const h=pack.cells,v=pack.rivers.filter(E=>E.i===S||E.parent===S||E.basin===S).map(E=>E.i);v.forEach(E=>rivers.select("#river"+E).remove()),h.r.forEach((E,P)=>{!E||!v.includes(E)||(h.r[P]=0,h.fl[P]=grid.cells.prec[h.g[P]],h.conf[P]=0)}),pack.rivers=pack.rivers.filter(E=>!v.includes(E.i))},w=function(S){var v;const h=(v=pack.rivers.find(E=>E.i===S))==null?void 0:v.parent;return!h||S===h?S:w(h)};return{generate:e,alterHeights:t,resolveDepressions:n,addMeandering:i,getRiverPath:g,specify:p,getName:B,getType:s,getBasin:w,getWidth:l,getOffset:C,getApproximateLength:o,getRiverPoints:r,remove:a}}();window.Lakes=function(){const e=function(m){const b=pack.cells,A=new Uint16Array(b.i.length);return pack.features.forEach(u=>{if(u.type!=="lake")return;u.flux=u.shoreline.reduce((p,B)=>p+grid.cells.prec[b.g[B]],0),u.temp=u.cells<6?grid.cells.temp[b.g[u.firstCell]]:O(d3.mean(u.shoreline.map(p=>grid.cells.temp[b.g[p]])),1);const C=(u.height-18)**heightExponentInput.value,g=(700*(u.temp+.006*C)/50+75)/(80-u.temp);u.evaporation=O(g*u.cells),!u.closed&&(u.outCell=u.shoreline[d3.scan(u.shoreline,(p,B)=>m[p]-m[B])],A[u.outCell]=u.i)}),A},t=function(m){const b=new Set;m.vertices.forEach(A=>pack.vertices.c[A].forEach(u=>pack.cells.h[u]>=20&&b.add(u))),m.shoreline=[...b]},n=m=>{const b=pack.cells,A=+document.getElementById("lakeElevationLimitOutput").value;pack.features.forEach(u=>{if(u.type!=="lake")return;delete u.flux,delete u.inlets,delete u.outlet,delete u.height,delete u.closed,!u.shoreline&&Lakes.getShoreline(u);const C=u.shoreline.sort((d,s)=>m[d]-m[s])[0];if(u.height=m[C]-.1,A===80){u.closed=!1;return}let g=!0;const p=u.height+A,B=[C],k=[];for(k[C]=!0;g&&B.length;){const d=B.pop();for(const s of b.c[d])if(!k[s]&&!(m[s]>=p)){if(m[s]<20){const o=pack.features[b.f[s]];if(o.type==="ocean"||u.height>o.height){g=!1;break}}k[s]=!0,B.push(s)}}u.closed=g})},i=function(){var m;for(const b of pack.features){if(b.type!=="lake")continue;delete b.river,delete b.enteringFlux,delete b.outCell,delete b.closed,b.height=O(b.height,3);const A=(m=b.inlets)==null?void 0:m.filter(C=>pack.rivers.find(g=>g.i===C));!A||!A.length?delete b.inlets:b.inlets=A,b.outlet&&pack.rivers.find(C=>C.i===b.outlet)||delete b.outlet}},r=function(){for(const m of pack.features){if(m.type!=="lake")continue;const b=lakes.select(`[data-f="${m.i}"]`).node();!b||(m.group=z(m),document.getElementById(m.group).appendChild(b))}},c=function(){Math.random=aleaPRNG(seed);for(const m of pack.features)m.type==="lake"&&(m.name=f(m))},f=function(m){const b=pack.cells.c[m.firstCell].find(u=>pack.cells.h[u]>=20),A=pack.cells.culture[b];return Names.getCulture(A)};function z(m){if(m.temp<-3)return"frozen";if(m.height>60&&m.cells<10&&m.firstCell%10===0)return"lava";if(!m.inlets&&!m.outlet){if(m.evaporation>m.flux*4)return"dry";if(m.cells<3&&m.firstCell%10===0)return"sinkhole"}return!m.outlet&&m.evaporation>m.flux?"salt":"freshwater"}return{setClimateData:e,cleanupLakeData:i,prepareLakeData:n,defineGroup:r,generateName:c,getName:f,getShoreline:t}}();const Je=ne("tooltip"),Tn={info:"linear-gradient(0.1turn, #ffffff00, #5e5c5c80, #ffffff00)",success:"linear-gradient(0.1turn, #ffffff00, #127912cc, #ffffff00)",warn:"linear-gradient(0.1turn, #ffffff00, #be5d08cc, #ffffff00)",error:"linear-gradient(0.1turn, #ffffff00, #e11d1dcc, #ffffff00)"};function se(e,t=!1,n="info",i=0){Je.textContent=e,Je.style.background=Tn[n],t&&(Je.dataset.main=e,Je.dataset.color=Je.style.background),i&&setTimeout(ct,i)}function ct(){Je.dataset.color="",Je.dataset.main="",Je.textContent=""}function Pn(){Je.style.background=Je.dataset.color||"",Je.textContent=Je.dataset.main||""}function Ut(e){if(!e.target)return;const t=e.target,{parentNode:n,dataset:i}=t,r=i.tip,c=n==null?void 0:n.dataset.tip;let f=r||c;!f||(i.shortcut&&!cn&&(f+=`. Shortcut: ${i.shortcut}`),se(f))}function Hn(){var e,t,n;(e=ne("dialogs"))==null||e.on("mousemove",Ut),(t=ne("optionsContainer"))==null||t.on("mousemove",Ut),(n=ne("exitCustomization"))==null||n.on("mousemove",Ut)}function Un(){document.querySelectorAll("[data-locked]").forEach(t=>{t.addEventListener("mouseover",Fn),t.on("click",Nn)})}function Nn(){const e=this.id.slice(5);(this.className==="icon-lock"?On:mt)(e)}const Kn="Click to lock the option and always use the current value on new map generation",Dn="Click to unlock the option and allow it to be randomized on new map generation";function Fn(e){e.stopPropagation();const n=this.className==="icon-lock"?Dn:Kn;se(n)}function mt(e){const t=document.querySelector('[data-stored="'+e+'"]');t&&!(t instanceof HTMLInputElement)&&pa(e,t.value);const n=document.getElementById("lock_"+e);n&&(n.dataset.locked="1",n.className="icon-lock")}function On(e){localStorage.removeItem(e);const t=document.getElementById("lock_"+e);t&&(t.dataset.locked="0",t.className="icon-lock-open")}function Ne(e){const t=document.getElementById("lock_"+e);return Boolean(t&&t.dataset.locked==="1")}const Gn="aeiouy\u0251'\u0259\xF8\u025B\u0153\xE6\u0276\u0252\u0268\u026A\u0254\u0250\u028A\u0264\u026F\u0430\u043E\u0438\u0435\u0451\u044D\u044B\u0443\u044E\u044F\xE0\xE8\xEC\xF2\xF9\u1EF3\u1E81\u0201\u0205\u0209\u020D\u0215\xE1\xE9\xED\xF3\xFA\xFD\u1E83\u0151\u0171\xE2\xEA\xEE\xF4\xFB\u0177\u0175\xE4\xEB\xEF\xF6\xFC\xFF\u1E85\xE3\u1EBD\u0129\xF5\u0169\u1EF9\u0105\u0119\u012F\u01EB\u0173\u0101\u0113\u012B\u014D\u016B\u0233\u0103\u0115\u012D\u014F\u016D\u01CE\u011B\u01D0\u01D2\u01D4\u0227\u0117\u022F\u1E8F\u1E87\u1EA1\u1EB9\u1ECB\u1ECD\u1EE5\u1EF5\u1E89\u1E1B\u1E2D\u1E75\u1E73";function Ze(e){return Gn.includes(e)}function Ke(e,t=3){for(;e.length>t&&e.length&&Ze(e.at(-1));)e=e.slice(0,-1);return e}const jn=[{name:"guo",probability:1,condition:new RegExp(" Guo$"),action:e=>e.slice(0,-4)},{name:"orszag",probability:1,condition:new RegExp("orszag$"),action:e=>e.length<9?e+"ian":e.slice(0,-6)},{name:"stan",probability:1,condition:new RegExp("stan$"),action:e=>e.length<9?e+"i":Ke(e.slice(0,-4))},{name:"land",probability:1,condition:new RegExp("land$"),action:e=>{if(e.length>9)return e.slice(0,-4);const t=Ke(e.slice(0,-4),0);return t.length<3?e+"ic":t.length<4?t+"lish":t+"ish"}},{name:"que",probability:1,condition:new RegExp("que$"),action:e=>e.replace(/que$/,"can")},{name:"a",probability:1,condition:new RegExp("a$"),action:e=>e+"n"},{name:"o",probability:1,condition:new RegExp("o$"),action:e=>e.replace(/o$/,"an")},{name:"u",probability:1,condition:new RegExp("u$"),action:e=>e+"an"},{name:"i",probability:1,condition:new RegExp("i$"),action:e=>e+"an"},{name:"e",probability:1,condition:new RegExp("e$"),action:e=>e+"an"},{name:"ay",probability:1,condition:new RegExp("ay$"),action:e=>e+"an"},{name:"os",probability:1,condition:new RegExp("os$"),action:e=>{const t=Ke(e.slice(0,-2),0);return t.length<4?e.slice(0,-1):t+"ian"}},{name:"es",probability:1,condition:new RegExp("es$"),action:e=>{const t=Ke(e.slice(0,-2),0);return t.length>7?e.slice(0,-1):t+"ian"}},{name:"l",probability:.8,condition:new RegExp("l$"),action:e=>e+"ese"},{name:"n",probability:.8,condition:new RegExp("n$"),action:e=>e+"ese"},{name:"ad",probability:.8,condition:new RegExp("ad$"),action:e=>e+"ian"},{name:"an",probability:.8,condition:new RegExp("an$"),action:e=>e+"ian"},{name:"ish",probability:.25,condition:new RegExp("^[a-zA-Z]{6}$"),action:e=>Ke(e.slice(0,-1))+"ish"},{name:"an",probability:.5,condition:new RegExp("^[a-zA-Z]{0-7}$"),action:e=>Ke(e)+"an"}];function We(e){for(const t of jn)if(V(t.probability)&&t.condition.test(e))return t.action(e);return e}const Wn=e=>e+(["st","nd","rd"][((e+90)%100-10)%10-1]||"th");function bt(e,t=[]){const i=e.replace("Old ","O ").replace(/[()]/g,"").split(" "),r=i.join("");let c=i.length===2?i[0][0]+i[1][0]:r.slice(0,2);for(let f=1;fe[g]=nameBases[g]||nameBases[g].b?t(nameBases[g].b):null,i=()=>e=[],r=function(g,p,B,k){if(g===void 0){ERROR&&console.error("Please define a base");return}e[g]||n(g);const d=e[g];if(!d||d[""]===void 0)return se("Namesbase "+g+" is incorrect. Please check in namesbase editor",!1,"error"),ERROR&&console.error("Namebase "+g+" is incorrect!"),"ERROR";p||(p=nameBases[g].min),B||(B=nameBases[g].max),k!==""&&(k=nameBases[g].d);let s=d[""],o=ie(s),l="";for(let S=0;S<20;S++){if(o==="")if(l.lengthB){l.lengthS.length<2)&&(w=w.split(" ").map((S,h)=>h?S.toLowerCase():S).join("")),w.length<2&&(ERROR&&console.error("Name is too short! Random name will be selected"),w=ie(nameBases[g].b.split(","))),w},c=function(g,p,B,k){if(g===void 0)return ERROR&&console.error("Please define a culture");const d=pack.cultures[g].base;return r(d,p,B,k)},f=function(g){return g===void 0?ERROR&&console.error("Please define a culture"):z(pack.cultures[g].base)},z=function(g){nameBases[g]===void 0&&(se(`Namebase ${g} does not exist. Please upload custom namebases of change the base in Cultures Editor`,!1,"error"),g=1);const p=nameBases[g].min-1,B=Math.max(nameBases[g].max-2,p);return r(g,p,B,"")},m=function(g,p,B){if(g===void 0)return ERROR&&console.error("Please define a base name");if(p===void 0&&B===void 0)return ERROR&&console.error("Please define a culture");if(B===void 0&&(B=pack.cultures[p].base),g.includes(" ")&&(g=ba(g.replace(/ /g,"").toLowerCase())),g.length>6&&g.slice(-4)==="berg"&&(g=g.slice(0,-4)),g.length>5&&g.slice(-3)==="ton"&&(g=g.slice(0,-3)),B===5&&["sk","ev","ov"].includes(g.slice(-2)))g=g.slice(0,-2);else{if(B===12)return Ze(g.slice(-1))?g:g+"u";B===18&&V(.4)&&(g=Ze(g.slice(0,1).toLowerCase())?"Al"+g.toLowerCase():"Al "+g)}if(B>32&&B<42)return g;if(g.length>3&&Ze(g.slice(-1)))if(Ze(g.slice(-2,-1))&&V(.85))g=g.slice(0,-2);else if(V(.7))g=g.slice(0,-1);else return g;else if(V(.4))return g;let k="ia";const d=Math.random(),s=g.length;return B===3&&d<.03&&s<7||B===4&&d<.03&&s<7||B===13&&d<.03&&s<7?k="terra":B===2&&d<.03&&s<7?k="terre":B===0&&d<.5&&s<7||B===1&&d<.4&&s<7||B===6&&d<.3&&s<7||B===32&&d<.1&&s<7?k="land":B===7&&d<.1?k="eia":B===9&&d<.35?k="maa":B===15&&d<.4&&s<6?k="orszag":B===16?k=d<.6?"stan":"ya":B===10?k="guk":B===11?k=" Guo":B===14?k=d<.5&&s<6?"tlan":"co":(B===17&&d<.8||B===18&&d<.8)&&(k="a"),b(g,k)};function b(g,p){if(g.slice(-1*p.length)===p)return g;const B=p.charAt(0);return g.slice(-1)===B&&(g=g.slice(0,-1)),Ze(B)===Ze(g.slice(-1))&&Ze(B)===Ze(g.slice(-2,-1))&&(g=g.slice(0,-1)),g.slice(-1)===B&&(g=g.slice(0,-1)),g+p}const A=function(g){if(!g&&Ne("mapName"))return;g&&Ne("mapName")&&unlock("mapName");const p=V(.7)?2:V(.5)?be(0,6):be(0,31);if(!nameBases[p])return se("Namebase is not found",!1,"error"),"";const B=nameBases[p].min-1,k=Math.max(nameBases[p].max-3,B),d=r(p,B,k,""),s=V(.7)?u(d):d;mapName.value=s};function u(g){const p=V(.8)?"ia":"land";return p==="ia"&&g.length>6?g=g.slice(0,-(g.length-3)):p==="land"&&g.length>6&&(g=g.slice(0,-(g.length-5))),b(g,p)}return{getBase:r,getCulture:c,getCultureShort:f,getBaseShort:z,getState:m,updateChain:n,clearChains:i,getNameBases:function(){return[{name:"German",i:0,min:5,max:12,d:"lt",m:0,b:"Achern,Aichhalden,Aitern,Albbruck,Alpirsbach,Altensteig,Althengstett,Appenweier,Auggen,Wildbad,Badenen,Badenweiler,Baiersbronn,Ballrechten,Bellingen,Berghaupten,Bernau,Biberach,Biederbach,Binzen,Birkendorf,Birkenfeld,Bischweier,Blumberg,Bollen,Bollschweil,Bonndorf,Bosingen,Braunlingen,Breisach,Breisgau,Breitnau,Brigachtal,Buchenbach,Buggingen,Buhl,Buhlertal,Calw,Dachsberg,Dobel,Donaueschingen,Dornhan,Dornstetten,Dottingen,Dunningen,Durbach,Durrheim,Ebhausen,Ebringen,Efringen,Egenhausen,Ehrenkirchen,Ehrsberg,Eimeldingen,Eisenbach,Elzach,Elztal,Emmendingen,Endingen,Engelsbrand,Enz,Enzklosterle,Eschbronn,Ettenheim,Ettlingen,Feldberg,Fischerbach,Fischingen,Fluorn,Forbach,Freiamt,Freiburg,Freudenstadt,Friedenweiler,Friesenheim,Frohnd,Furtwangen,Gaggenau,Geisingen,Gengenbach,Gernsbach,Glatt,Glatten,Glottertal,Gorwihl,Gottenheim,Grafenhausen,Grenzach,Griesbach,Gutach,Gutenbach,Hag,Haiterbach,Hardt,Harmersbach,Hasel,Haslach,Hausach,Hausen,Hausern,Heitersheim,Herbolzheim,Herrenalb,Herrischried,Hinterzarten,Hochenschwand,Hofen,Hofstetten,Hohberg,Horb,Horben,Hornberg,Hufingen,Ibach,Ihringen,Inzlingen,Kandern,Kappel,Kappelrodeck,Karlsbad,Karlsruhe,Kehl,Keltern,Kippenheim,Kirchzarten,Konigsfeld,Krozingen,Kuppenheim,Kussaberg,Lahr,Lauchringen,Lauf,Laufenburg,Lautenbach,Lauterbach,Lenzkirch,Liebenzell,Loffenau,Loffingen,Lorrach,Lossburg,Mahlberg,Malsburg,Malsch,March,Marxzell,Marzell,Maulburg,Monchweiler,Muhlenbach,Mullheim,Munstertal,Murg,Nagold,Neubulach,Neuenburg,Neuhausen,Neuried,Neuweiler,Niedereschach,Nordrach,Oberharmersbach,Oberkirch,Oberndorf,Oberbach,Oberried,Oberwolfach,Offenburg,Ohlsbach,Oppenau,Ortenberg,otigheim,Ottenhofen,Ottersweier,Peterstal,Pfaffenweiler,Pfalzgrafenweiler,Pforzheim,Rastatt,Renchen,Rheinau,Rheinfelden,Rheinmunster,Rickenbach,Rippoldsau,Rohrdorf,Rottweil,Rummingen,Rust,Sackingen,Sasbach,Sasbachwalden,Schallbach,Schallstadt,Schapbach,Schenkenzell,Schiltach,Schliengen,Schluchsee,Schomberg,Schonach,Schonau,Schonenberg,Schonwald,Schopfheim,Schopfloch,Schramberg,Schuttertal,Schwenningen,Schworstadt,Seebach,Seelbach,Seewald,Sexau,Simmersfeld,Simonswald,Sinzheim,Solden,Staufen,Stegen,Steinach,Steinen,Steinmauern,Straubenhardt,Stuhlingen,Sulz,Sulzburg,Teinach,Tiefenbronn,Tiengen,Titisee,Todtmoos,Todtnau,Todtnauberg,Triberg,Tunau,Tuningen,uhlingen,Unterkirnach,Reichenbach,Utzenfeld,Villingen,Villingendorf,Vogtsburg,Vohrenbach,Waldachtal,Waldbronn,Waldkirch,Waldshut,Wehr,Weil,Weilheim,Weisenbach,Wembach,Wieden,Wiesental,Wildberg,Winzeln,Wittlingen,Wittnau,Wolfach,Wutach,Wutoschingen,Wyhlen,Zavelstein"},{name:"English",i:1,min:6,max:11,d:"",m:.1,b:"Abingdon,Albrighton,Alcester,Almondbury,Altrincham,Amersham,Andover,Appleby,Ashboume,Atherstone,Aveton,Axbridge,Aylesbury,Baldock,Bamburgh,Barton,Basingstoke,Berden,Bere,Berkeley,Berwick,Betley,Bideford,Bingley,Birmingham,Blandford,Blechingley,Bodmin,Bolton,Bootham,Boroughbridge,Boscastle,Bossinney,Bramber,Brampton,Brasted,Bretford,Bridgetown,Bridlington,Bromyard,Bruton,Buckingham,Bungay,Burton,Calne,Cambridge,Canterbury,Carlisle,Castleton,Caus,Charmouth,Chawleigh,Chichester,Chillington,Chinnor,Chipping,Chisbury,Cleobury,Clifford,Clifton,Clitheroe,Cockermouth,Coleshill,Combe,Congleton,Crafthole,Crediton,Cuddenbeck,Dalton,Darlington,Dodbrooke,Drax,Dudley,Dunstable,Dunster,Dunwich,Durham,Dymock,Exeter,Exning,Faringdon,Felton,Fenny,Finedon,Flookburgh,Fowey,Frampton,Gateshead,Gatton,Godmanchester,Grampound,Grantham,Guildford,Halesowen,Halton,Harbottle,Harlow,Hatfield,Hatherleigh,Haydon,Helston,Henley,Hertford,Heytesbury,Hinckley,Hitchin,Holme,Hornby,Horsham,Kendal,Kenilworth,Kilkhampton,Kineton,Kington,Kinver,Kirby,Knaresborough,Knutsford,Launceston,Leighton,Lewes,Linton,Louth,Luton,Lyme,Lympstone,Macclesfield,Madeley,Malborough,Maldon,Manchester,Manningtree,Marazion,Marlborough,Marshfield,Mere,Merryfield,Middlewich,Midhurst,Milborne,Mitford,Modbury,Montacute,Mousehole,Newbiggin,Newborough,Newbury,Newenden,Newent,Norham,Northleach,Noss,Oakham,Olney,Orford,Ormskirk,Oswestry,Padstow,Paignton,Penkneth,Penrith,Penzance,Pershore,Petersfield,Pevensey,Pickering,Pilton,Pontefract,Portsmouth,Preston,Quatford,Reading,Redcliff,Retford,Rockingham,Romney,Rothbury,Rothwell,Salisbury,Saltash,Seaford,Seasalter,Sherston,Shifnal,Shoreham,Sidmouth,Skipsea,Skipton,Solihull,Somerton,Southam,Southwark,Standon,Stansted,Stapleton,Stottesdon,Sudbury,Swavesey,Tamerton,Tarporley,Tetbury,Thatcham,Thaxted,Thetford,Thornbury,Tintagel,Tiverton,Torksey,Totnes,Towcester,Tregoney,Trematon,Tutbury,Uxbridge,Wallingford,Wareham,Warenmouth,Wargrave,Warton,Watchet,Watford,Wendover,Westbury,Westcheap,Weymouth,Whitford,Wickwar,Wigan,Wigmore,Winchelsea,Winkleigh,Wiscombe,Witham,Witheridge,Wiveliscombe,Woodbury,Yeovil"},{name:"French",i:2,min:5,max:13,d:"nlrs",m:.1,b:"Adon,Aillant,Amilly,Andonville,Ardon,Artenay,Ascheres,Ascoux,Attray,Aubin,Audeville,Aulnay,Autruy,Auvilliers,Auxy,Aveyron,Baccon,Bardon,Barville,Batilly,Baule,Bazoches,Beauchamps,Beaugency,Beaulieu,Beaune,Bellegarde,Boesses,Boigny,Boiscommun,Boismorand,Boisseaux,Bondaroy,Bonnee,Bonny,Bordes,Bou,Bougy,Bouilly,Boulay,Bouzonville,Bouzy,Boynes,Bray,Breteau,Briare,Briarres,Bricy,Bromeilles,Bucy,Cepoy,Cercottes,Cerdon,Cernoy,Cesarville,Chailly,Chaingy,Chalette,Chambon,Champoulet,Chanteau,Chantecoq,Chapell,Charme,Charmont,Charsonville,Chateau,Chateauneuf,Chatel,Chatenoy,Chatillon,Chaussy,Checy,Chevannes,Chevillon,Chevilly,Chevry,Chilleurs,Choux,Chuelles,Clery,Coinces,Coligny,Combleux,Combreux,Conflans,Corbeilles,Corquilleroy,Cortrat,Coudroy,Coullons,Coulmiers,Courcelles,Courcy,Courtemaux,Courtempierre,Courtenay,Cravant,Crottes,Dadonville,Dammarie,Dampierre,Darvoy,Desmonts,Dimancheville,Donnery,Dordives,Dossainville,Douchy,Dry,Echilleuses,Egry,Engenville,Epieds,Erceville,Ervauville,Escrennes,Escrignelles,Estouy,Faverelles,Fay,Feins,Ferolles,Ferrieres,Fleury,Fontenay,Foret,Foucherolles,Freville,Gatinais,Gaubertin,Gemigny,Germigny,Gidy,Gien,Girolles,Givraines,Gondreville,Grangermont,Greneville,Griselles,Guigneville,Guilly,Gyleslonains,Huetre,Huisseau,Ingrannes,Ingre,Intville,Isdes,Jargeau,Jouy,Juranville,Bussiere,Laas,Ladon,Lailly,Langesse,Leouville,Ligny,Lombreuil,Lorcy,Lorris,Loury,Louzouer,Malesherbois,Marcilly,Mardie,Mareau,Marigny,Marsainvilliers,Melleroy,Menestreau,Merinville,Messas,Meung,Mezieres,Migneres,Mignerette,Mirabeau,Montargis,Montbarrois,Montbouy,Montcresson,Montereau,Montigny,Montliard,Mormant,Morville,Moulinet,Moulon,Nancray,Nargis,Nesploy,Neuville,Neuvy,Nevoy,Nibelle,Nogent,Noyers,Ocre,Oison,Olivet,Ondreville,Onzerain,Orleans,Ormes,Orville,Oussoy,Outarville,Ouzouer,Pannecieres,Pannes,Patay,Paucourt,Pers,Pierrefitte,Pithiverais,Pithiviers,Poilly,Potier,Prefontaines,Presnoy,Pressigny,Puiseaux,Quiers,Ramoulu,Rebrechien,Rouvray,Rozieres,Rozoy,Ruan,Sandillon,Santeau,Saran,Sceaux,Seichebrieres,Semoy,Sennely,Sermaises,Sigloy,Solterre,Sougy,Sully,Sury,Tavers,Thignonville,Thimory,Thorailles,Thou,Tigy,Tivernon,Tournoisis,Trainou,Treilles,Trigueres,Trinay,Vannes,Varennes,Vennecy,Vieilles,Vienne,Viglain,Vignes,Villamblain,Villemandeur,Villemoutiers,Villemurlin,Villeneuve,Villereau,Villevoques,Villorceau,Vimory,Vitry,Vrigny,Ivre"},{name:"Italian",i:3,min:5,max:12,d:"cltr",m:.1,b:"Accumoli,Acquafondata,Acquapendente,Acuto,Affile,Agosta,Alatri,Albano,Allumiere,Alvito,Amaseno,Amatrice,Anagni,Anguillara,Anticoli,Antrodoco,Anzio,Aprilia,Aquino,Arce,Arcinazzo,Ardea,Ariccia,Arlena,Arnara,Arpino,Arsoli,Artena,Ascrea,Atina,Ausonia,Bagnoregio,Barbarano,Bassano,Bassiano,Bellegra,Belmonte,Blera,Bolsena,Bomarzo,Borbona,Borgo,Borgorose,Boville,Bracciano,Broccostella,Calcata,Camerata,Campagnano,Campodimele,Campoli,Canale,Canepina,Canino,Cantalice,Cantalupo,Canterano,Capena,Capodimonte,Capranica,Caprarola,Carbognano,Casalattico,Casalvieri,Casape,Casaprota,Casperia,Cassino,Castelforte,Castelliri,Castello,Castelnuovo,Castiglione,Castro,Castrocielo,Cave,Ceccano,Celleno,Cellere,Ceprano,Cerreto,Cervara,Cervaro,Cerveteri,Ciampino,Ciciliano,Cineto,Cisterna,Cittaducale,Cittareale,Civita,Civitavecchia,Civitella,Colfelice,Collalto,Colle,Colleferro,Collegiove,Collepardo,Collevecchio,Colli,Colonna,Concerviano,Configni,Contigliano,Corchiano,Coreno,Cori,Cottanello,Esperia,Fabrica,Faleria,Fara,Farnese,Ferentino,Fiamignano,Fiano,Filacciano,Filettino,Fiuggi,Fiumicino,Fondi,Fontana,Fonte,Fontechiari,Forano,Formello,Formia,Frascati,Frasso,Frosinone,Fumone,Gaeta,Gallese,Gallicano,Gallinaro,Gavignano,Genazzano,Genzano,Gerano,Giuliano,Gorga,Gradoli,Graffignano,Greccio,Grottaferrata,Grotte,Guarcino,Guidonia,Ischia,Isola,Itri,Jenne,Labico,Labro,Ladispoli,Lanuvio,Lariano,Latera,Lenola,Leonessa,Licenza,Longone,Lubriano,Maenza,Magliano,Mandela,Manziana,Marano,Marcellina,Marcetelli,Marino,Marta,Mazzano,Mentana,Micigliano,Minturno,Mompeo,Montalto,Montasola,Monte,Montebuono,Montefiascone,Monteflavio,Montelanico,Monteleone,Montelibretti,Montenero,Monterosi,Monterotondo,Montopoli,Montorio,Moricone,Morlupo,Morolo,Morro,Nazzano,Nemi,Nepi,Nerola,Nespolo,Nettuno,Norma,Olevano,Onano,Oriolo,Orte,Orvinio,Paganico,Palestrina,Paliano,Palombara,Pastena,Patrica,Percile,Pescorocchiano,Pescosolido,Petrella,Piansano,Picinisco,Pico,Piedimonte,Piglio,Pignataro,Pisoniano,Pofi,Poggio,Poli,Pomezia,Pontecorvo,Pontinia,Ponza,Ponzano,Posta,Pozzaglia,Priverno,Proceno,Prossedi,Riano,Rieti,Rignano,Riofreddo,Ripi,Rivodutri,Rocca,Roccagiovine,Roccagorga,Roccantica,Roccasecca,Roiate,Ronciglione,Roviano,Sabaudia,Sacrofano,Salisano,Sambuci,Santa,Santi,Santopadre,Saracinesco,Scandriglia,Segni,Selci,Sermoneta,Serrone,Settefrati,Sezze,Sgurgola,Sonnino,Sora,Soriano,Sperlonga,Spigno,Stimigliano,Strangolagalli,Subiaco,Supino,Sutri,Tarano,Tarquinia,Terelle,Terracina,Tessennano,Tivoli,Toffia,Tolfa,Torre,Torri,Torrice,Torricella,Torrita,Trevi,Trevignano,Trivigliano,Turania,Tuscania,Vacone,Valentano,Vallecorsa,Vallemaio,Vallepietra,Vallerano,Vallerotonda,Vallinfreda,Valmontone,Varco,Vasanello,Vejano,Velletri,Ventotene,Veroli,Vetralla,Vicalvi,Vico,Vicovaro,Vignanello,Viterbo,Viticuso,Vitorchiano,Vivaro,Zagarolo"},{name:"Castillian",i:4,min:5,max:11,d:"lr",m:0,b:"Abanades,Ablanque,Adobes,Ajofrin,Alameda,Alaminos,Alarilla,Albalate,Albares,Albarreal,Albendiego,Alcabon,Alcanizo,Alcaudete,Alcocer,Alcolea,Alcoroches,Aldea,Aldeanueva,Algar,Algora,Alhondiga,Alique,Almadrones,Almendral,Almoguera,Almonacid,Almorox,Alocen,Alovera,Alustante,Angon,Anguita,Anover,Anquela,Arbancon,Arbeteta,Arcicollar,Argecilla,Arges,Armallones,Armuna,Arroyo,Atanzon,Atienza,Aunon,Azuqueca,Azutan,Baides,Banos,Banuelos,Barcience,Bargas,Barriopedro,Belvis,Berninches,Borox,Brihuega,Budia,Buenaventura,Bujalaro,Burguillos,Burujon,Bustares,Cabanas,Cabanillas,Calera,Caleruela,Calzada,Camarena,Campillo,Camunas,Canizar,Canredondo,Cantalojas,Cardiel,Carmena,Carranque,Carriches,Casa,Casarrubios,Casas,Casasbuenas,Caspuenas,Castejon,Castellar,Castilforte,Castillo,Castilnuevo,Cazalegas,Cebolla,Cedillo,Cendejas,Centenera,Cervera,Checa,Chequilla,Chillaron,Chiloeches,Chozas,Chueca,Cifuentes,Cincovillas,Ciruelas,Ciruelos,Cobeja,Cobeta,Cobisa,Cogollor,Cogolludo,Condemios,Congostrina,Consuegra,Copernal,Corduente,Corral,Cuerva,Domingo,Dosbarrios,Driebes,Duron,El,Embid,Erustes,Escalona,Escalonilla,Escamilla,Escariche,Escopete,Espinosa,Espinoso,Esplegares,Esquivias,Estables,Estriegana,Fontanar,Fuembellida,Fuensalida,Fuentelsaz,Gajanejos,Galve,Galvez,Garciotum,Gascuena,Gerindote,Guadamur,Henche,Heras,Herreria,Herreruela,Hijes,Hinojosa,Hita,Hombrados,Hontanar,Hontoba,Horche,Hormigos,Huecas,Huermeces,Huerta,Hueva,Humanes,Illan,Illana,Illescas,Iniestola,Irueste,Jadraque,Jirueque,Lagartera,Las,Layos,Ledanca,Lillo,Lominchar,Loranca,Los,Lucillos,Lupiana,Luzaga,Luzon,Madridejos,Magan,Majaelrayo,Malaga,Malaguilla,Malpica,Mandayona,Mantiel,Manzaneque,Maqueda,Maranchon,Marchamalo,Marjaliza,Marrupe,Mascaraque,Masegoso,Matarrubia,Matillas,Mazarete,Mazuecos,Medranda,Megina,Mejorada,Mentrida,Mesegar,Miedes,Miguel,Millana,Milmarcos,Mirabueno,Miralrio,Mocejon,Mochales,Mohedas,Molina,Monasterio,Mondejar,Montarron,Mora,Moratilla,Morenilla,Muduex,Nambroca,Navalcan,Negredo,Noblejas,Noez,Nombela,Noves,Numancia,Nuno,Ocana,Ocentejo,Olias,Olmeda,Ontigola,Orea,Orgaz,Oropesa,Otero,Palmaces,Palomeque,Pantoja,Pardos,Paredes,Pareja,Parrillas,Pastrana,Pelahustan,Penalen,Penalver,Pepino,Peralejos,Peralveche,Pinilla,Pioz,Piqueras,Polan,Portillo,Poveda,Pozo,Pradena,Prados,Puebla,Puerto,Pulgar,Quer,Quero,Quintanar,Quismondo,Rebollosa,Recas,Renera,Retamoso,Retiendas,Riba,Rielves,Rillo,Riofrio,Robledillo,Robledo,Romanillos,Romanones,Rueda,Sacecorbo,Sacedon,Saelices,Salmeron,San,Santa,Santiuste,Santo,Sartajada,Sauca,Sayaton,Segurilla,Selas,Semillas,Sesena,Setiles,Sevilleja,Sienes,Siguenza,Solanillos,Somolinos,Sonseca,Sotillo,Sotodasos,Talavera,Tamajon,Taragudo,Taravilla,Tartanedo,Tembleque,Tendilla,Terzaga,Tierzo,Tordellego,Tordelrabano,Tordesilos,Torija,Torralba,Torre,Torrecilla,Torrecuadrada,Torrejon,Torremocha,Torrico,Torrijos,Torrubia,Tortola,Tortuera,Tortuero,Totanes,Traid,Trijueque,Trillo,Turleque,Uceda,Ugena,Ujados,Urda,Utande,Valdarachas,Valdesotos,Valhermoso,Valtablado,Valverde,Velada,Viana,Vinuelas,Yebes,Yebra,Yelamos,Yeles,Yepes,Yuncler,Yunclillos,Yuncos,Yunquera,Zaorejas,Zarzuela,Zorita"},{name:"Ruthenian",i:5,min:5,max:10,d:"",m:0,b:"Belgorod,Beloberezhye,Belyi,Belz,Berestiy,Berezhets,Berezovets,Berezutsk,Bobruisk,Bolonets,Borisov,Borovsk,Bozhesk,Bratslav,Bryansk,Brynsk,Buryn,Byhov,Chechersk,Chemesov,Cheremosh,Cherlen,Chern,Chernigov,Chernitsa,Chernobyl,Chernogorod,Chertoryesk,Chetvertnia,Demyansk,Derevesk,Devyagoresk,Dichin,Dmitrov,Dorogobuch,Dorogobuzh,Drestvin,Drokov,Drutsk,Dubechin,Dubichi,Dubki,Dubkov,Dveren,Galich,Glebovo,Glinsk,Goloty,Gomiy,Gorodets,Gorodische,Gorodno,Gorohovets,Goroshin,Gorval,Goryshon,Holm,Horobor,Hoten,Hotin,Hotmyzhsk,Ilovech,Ivan,Izborsk,Izheslavl,Kamenets,Kanev,Karachev,Karna,Kavarna,Klechesk,Klyapech,Kolomyya,Kolyvan,Kopyl,Korec,Kornik,Korochunov,Korshev,Korsun,Koshkin,Kotelno,Kovyla,Kozelsk,Kozelsk,Kremenets,Krichev,Krylatsk,Ksniatin,Kulatsk,Kursk,Kursk,Lebedev,Lida,Logosko,Lomihvost,Loshesk,Loshichi,Lubech,Lubno,Lubutsk,Lutsk,Luchin,Luki,Lukoml,Luzha,Lvov,Mtsensk,Mdin,Medniki,Melecha,Merech,Meretsk,Mescherskoe,Meshkovsk,Metlitsk,Mezetsk,Mglin,Mihailov,Mikitin,Mikulino,Miloslavichi,Mogilev,Mologa,Moreva,Mosalsk,Moschiny,Mozyr,Mstislav,Mstislavets,Muravin,Nemech,Nemiza,Nerinsk,Nichan,Novgorod,Novogorodok,Obolichi,Obolensk,Obolensk,Oleshsk,Olgov,Omelnik,Opoka,Opoki,Oreshek,Orlets,Osechen,Oster,Ostrog,Ostrov,Perelai,Peremil,Peremyshl,Pererov,Peresechen,Perevitsk,Pereyaslav,Pinsk,Ples,Polotsk,Pronsk,Proposhesk,Punia,Putivl,Rechitsa,Rodno,Rogachev,Romanov,Romny,Roslavl,Rostislavl,Rostovets,Rsha,Ruza,Rybchesk,Rylsk,Rzhavesk,Rzhev,Rzhischev,Sambor,Serensk,Serensk,Serpeysk,Shilov,Shuya,Sinech,Sizhka,Skala,Slovensk,Slutsk,Smedin,Sneporod,Snitin,Snovsk,Sochevo,Sokolec,Starica,Starodub,Stepan,Sterzh,Streshin,Sutesk,Svinetsk,Svisloch,Terebovl,Ternov,Teshilov,Teterin,Tiversk,Torchevsk,Toropets,Torzhok,Tripolye,Trubchevsk,Tur,Turov,Usvyaty,Uteshkov,Vasilkov,Velil,Velye,Venev,Venicha,Verderev,Vereya,Veveresk,Viazma,Vidbesk,Vidychev,Voino,Volodimer,Volok,Volyn,Vorobesk,Voronich,Voronok,Vorotynsk,Vrev,Vruchiy,Vselug,Vyatichsk,Vyatka,Vyshegorod,Vyshgorod,Vysokoe,Yagniatin,Yaropolch,Yasenets,Yuryev,Yuryevets,Zaraysk,Zhitomel,Zholvazh,Zizhech,Zubkov,Zudechev,Zvenigorod"},{name:"Nordic",i:6,min:6,max:10,d:"kln",m:.1,b:"Akureyri,Aldra,Alftanes,Andenes,Austbo,Auvog,Bakkafjordur,Ballangen,Bardal,Beisfjord,Bifrost,Bildudalur,Bjerka,Bjerkvik,Bjorkosen,Bliksvaer,Blokken,Blonduos,Bolga,Bolungarvik,Borg,Borgarnes,Bosmoen,Bostad,Bostrand,Botsvika,Brautarholt,Breiddalsvik,Bringsli,Brunahlid,Budardalur,Byggdakjarni,Dalvik,Djupivogur,Donnes,Drageid,Drangsnes,Egilsstadir,Eiteroga,Elvenes,Engavogen,Ertenvog,Eskifjordur,Evenes,Eyrarbakki,Fagernes,Fallmoen,Fellabaer,Fenes,Finnoya,Fjaer,Fjelldal,Flakstad,Flateyri,Flostrand,Fludir,Gardaber,Gardur,Gimstad,Givaer,Gjeroy,Gladstad,Godoya,Godoynes,Granmoen,Gravdal,Grenivik,Grimsey,Grindavik,Grytting,Hafnir,Halsa,Hauganes,Haugland,Hauknes,Hella,Helland,Hellissandur,Hestad,Higrav,Hnifsdalur,Hofn,Hofsos,Holand,Holar,Holen,Holkestad,Holmavik,Hopen,Hovden,Hrafnagil,Hrisey,Husavik,Husvik,Hvammstangi,Hvanneyri,Hveragerdi,Hvolsvollur,Igeroy,Indre,Inndyr,Innhavet,Innes,Isafjordur,Jarklaustur,Jarnsreykir,Junkerdal,Kaldvog,Kanstad,Karlsoy,Kavosen,Keflavik,Kjelde,Kjerstad,Klakk,Kopasker,Kopavogur,Korgen,Kristnes,Krutoga,Krystad,Kvina,Lande,Laugar,Laugaras,Laugarbakki,Laugarvatn,Laupstad,Leines,Leira,Leiren,Leland,Lenvika,Loding,Lodingen,Lonsbakki,Lopsmarka,Lovund,Luroy,Maela,Melahverfi,Meloy,Mevik,Misvaer,Mornes,Mosfellsber,Moskenes,Myken,Naurstad,Nesberg,Nesjahverfi,Nesset,Nevernes,Obygda,Ofoten,Ogskardet,Okervika,Oknes,Olafsfjordur,Oldervika,Olstad,Onstad,Oppeid,Oresvika,Orsnes,Orsvog,Osmyra,Overdal,Prestoya,Raudalaekur,Raufarhofn,Reipo,Reykholar,Reykholt,Reykjahlid,Rif,Rinoya,Rodoy,Rognan,Rosvika,Rovika,Salhus,Sanden,Sandgerdi,Sandoker,Sandset,Sandvika,Saudarkrokur,Selfoss,Selsoya,Sennesvik,Setso,Siglufjordur,Silvalen,Skagastrond,Skjerstad,Skonland,Skorvogen,Skrova,Sleneset,Snubba,Softing,Solheim,Solheimar,Sorarnoy,Sorfugloy,Sorland,Sormela,Sorvaer,Sovika,Stamsund,Stamsvika,Stave,Stokka,Stokkseyri,Storjord,Storo,Storvika,Strand,Straumen,Strendene,Sudavik,Sudureyri,Sundoya,Sydalen,Thingeyri,Thorlakshofn,Thorshofn,Tjarnabyggd,Tjotta,Tosbotn,Traelnes,Trofors,Trones,Tverro,Ulvsvog,Unnstad,Utskor,Valla,Vandved,Varmahlid,Vassos,Vevelstad,Vidrek,Vik,Vikholmen,Vogar,Vogehamn,Vopnafjordur"},{name:"Greek",i:7,min:5,max:11,d:"s",m:.1,b:"Abdera,Abila,Abydos,Acanthus,Acharnae,Actium,Adramyttium,Aegae,Aegina,Aegium,Aenus,Agrinion,Aigosthena,Akragas,Akrai,Akrillai,Akroinon,Akrotiri,Alalia,Alexandreia,Alexandretta,Alexandria,Alinda,Amarynthos,Amaseia,Ambracia,Amida,Amisos,Amnisos,Amphicaea,Amphigeneia,Amphipolis,Amphissa,Ankon,Antigona,Antipatrea,Antioch,Antioch,Antiochia,Andros,Apamea,Aphidnae,Apollonia,Argos,Arsuf,Artanes,Artemita,Argyroupoli,Asine,Asklepios,Aspendos,Assus,Astacus,Athenai,Athmonia,Aytos,Ancient,Baris,Bhrytos,Borysthenes,Berge,Boura,Bouthroton,Brauron,Byblos,Byllis,Byzantium,Bythinion,Callipolis,Cebrene,Chalcedon,Calydon,Carystus,Chamaizi,Chalcis,Chersonesos,Chios,Chytri,Clazomenae,Cleonae,Cnidus,Colosse,Corcyra,Croton,Cyme,Cyrene,Cythera,Decelea,Delos,Delphi,Demetrias,Dicaearchia,Dimale,Didyma,Dion,Dioscurias,Dodona,Dorylaion,Dyme,Edessa,Elateia,Eleusis,Eleutherna,Emporion,Ephesus,Ephyra,Epidamnos,Epidauros,Eresos,Eretria,Erythrae,Eubea,Gangra,Gaza,Gela,Golgi,Gonnos,Gorgippia,Gournia,Gortyn,Gythium,Hagios,Hagia,Halicarnassus,Halieis,Helike,Heliopolis,Hellespontos,Helorus,Hemeroskopeion,Heraclea,Hermione,Hermonassa,Hierapetra,Hierapolis,Himera,Histria,Hubla,Hyele,Ialysos,Iasus,Idalium,Imbros,Iolcus,Itanos,Ithaca,Juktas,Kallipolis,Kamares,Kameiros,Kannia,Kamarina,Kasmenai,Katane,Kerkinitida,Kepoi,Kimmerikon,Kios,Klazomenai,Knidos,Knossos,Korinthos,Kos,Kourion,Kume,Kydonia,Kynos,Kyrenia,Lamia,Lampsacus,Laodicea,Lapithos,Larissa,Lato,Laus,Lebena,Lefkada,Lekhaion,Leibethra,Leontinoi,Lepreum,Lessa,Lilaea,Lindus,Lissus,Epizephyrian,Madytos,Magnesia,Mallia,Mantineia,Marathon,Marmara,Maroneia,Masis,Massalia,Megalopolis,Megara,Mesembria,Messene,Metapontum,Methana,Methone,Methumna,Miletos,Misenum,Mochlos,Monastiraki,Morgantina,Mulai,Mukenai,Mylasa,Myndus,Myonia,Myra,Myrmekion,Mutilene,Myos,Nauplios,Naucratis,Naupactus,Naxos,Neapoli,Neapolis,Nemea,Nicaea,Nicopolis,Nirou,Nymphaion,Nysa,Oenoe,Oenus,Odessos,Olbia,Olous,Olympia,Olynthus,Opus,Orchomenus,Oricos,Orestias,Oreus,Oropus,Onchesmos,Pactye,Pagasae,Palaikastro,Pandosia,Panticapaeum,Paphos,Parium,Paros,Parthenope,Patrae,Pavlopetri,Pegai,Pelion,Peiraies,Pella,Percote,Pergamum,Petsofa,Phaistos,Phaleron,Phanagoria,Pharae,Pharnacia,Pharos,Phaselis,Philippi,Pithekussa,Philippopolis,Platanos,Phlius,Pherae,Phocaea,Pinara,Pisa,Pitane,Pitiunt,Pixous,Plataea,Poseidonia,Potidaea,Priapus,Priene,Prousa,Pseira,Psychro,Pteleum,Pydna,Pylos,Pyrgos,Rhamnus,Rhegion,Rhithymna,Rhodes,Rhypes,Rizinia,Salamis,Same,Samos,Scyllaeum,Selinus,Seleucia,Semasus,Sestos,Scidrus,Sicyon,Side,Sidon,Siteia,Sinope,Siris,Sklavokampos,Smyrna,Soli,Sozopolis,Sparta,Stagirus,Stratos,Stymphalos,Sybaris,Surakousai,Taras,Tanagra,Tanais,Tauromenion,Tegea,Temnos,Tenedos,Tenea,Teos,Thapsos,Thassos,Thebai,Theodosia,Therma,Thespiae,Thronion,Thoricus,Thurii,Thyreum,Thyria,Tiruns,Tithoraea,Tomis,Tragurion,Trapeze,Trapezus,Tripolis,Troizen,Troliton,Troy,Tylissos,Tyras,Tyros,Tyritake,Vasiliki,Vathypetros,Zakynthos,Zakros,Zankle"},{name:"Roman",i:8,min:6,max:11,d:"ln",m:.1,b:"Abila,Adflexum,Adnicrem,Aelia,Aelius,Aeminium,Aequum,Agrippina,Agrippinae,Ala,Albanianis,Ambianum,Andautonia,Apulum,Aquae,Aquaegranni,Aquensis,Aquileia,Aquincum,Arae,Argentoratum,Ariminum,Ascrivium,Atrebatum,Atuatuca,Augusta,Aurelia,Aurelianorum,Batavar,Batavorum,Belum,Biriciana,Blestium,Bonames,Bonna,Bononia,Borbetomagus,Bovium,Bracara,Brigantium,Burgodunum,Caesaraugusta,Caesarea,Caesaromagus,Calleva,Camulodunum,Cannstatt,Cantiacorum,Capitolina,Castellum,Castra,Castrum,Cibalae,Clausentum,Colonia,Concangis,Condate,Confluentes,Conimbriga,Corduba,Coria,Corieltauvorum,Corinium,Coriovallum,Cornoviorum,Danum,Deva,Divodurum,Dobunnorum,Drusi,Dubris,Dumnoniorum,Durnovaria,Durocobrivis,Durocornovium,Duroliponte,Durovernum,Durovigutum,Eboracum,Edetanorum,Emerita,Emona,Euracini,Faventia,Flaviae,Florentia,Forum,Gerulata,Gerunda,Glevensium,Hadriani,Herculanea,Isca,Italica,Iulia,Iuliobrigensium,Iuvavum,Lactodurum,Lagentium,Lauri,Legionis,Lemanis,Lentia,Lepidi,Letocetum,Lindinis,Lindum,Londinium,Lopodunum,Lousonna,Lucus,Lugdunum,Luguvalium,Lutetia,Mancunium,Marsonia,Martius,Massa,Matilo,Mattiacorum,Mediolanum,Mod,Mogontiacum,Moridunum,Mursa,Naissus,Nervia,Nida,Nigrum,Novaesium,Noviomagus,Olicana,Ovilava,Parisiorum,Partiscum,Paterna,Pistoria,Placentia,Pollentia,Pomaria,Pons,Portus,Praetoria,Praetorium,Pullum,Ragusium,Ratae,Raurica,Regina,Regium,Regulbium,Rigomagus,Roma,Romula,Rutupiae,Salassorum,Salernum,Salona,Scalabis,Segovia,Silurum,Sirmium,Siscia,Sorviodurum,Sumelocenna,Tarraco,Taurinorum,Theranda,Traiectum,Treverorum,Tungrorum,Turicum,Ulpia,Valentia,Venetiae,Venta,Verulamium,Vesontio,Vetera,Victoriae,Victrix,Villa,Viminacium,Vindelicorum,Vindobona,Vinovia,Viroconium"},{name:"Finnic",i:9,min:5,max:11,d:"akiut",m:0,b:"Aanekoski,Abjapaluoja,Ahlainen,Aholanvaara,Ahtari,Aijala,Aimala,Akaa,Alajarvi,Alatornio,Alavus,Antsla,Aspo,Bennas,Bjorkoby,Elva,Emasalo,Espoo,Esse,Evitskog,Forssa,Haapajarvi,Haapamaki,Haapavesi,Haapsalu,Haavisto,Hameenlinna,Hameenmaki,Hamina,Hanko,Harjavalta,Hattuvaara,Haukipudas,Hautajarvi,Havumaki,Heinola,Hetta,Hinkabole,Hirmula,Hossa,Huittinen,Husula,Hyryla,Hyvinkaa,Iisalmi,Ikaalinen,Ilmola,Imatra,Inari,Iskmo,Itakoski,Jamsa,Jarvenpaa,Jeppo,Jioesuu,Jiogeva,Joensuu,Jokela,Jokikyla,Jokisuu,Jormua,Juankoski,Jungsund,Jyvaskyla,Kaamasmukka,Kaarina,Kajaani,Kalajoki,Kallaste,Kankaanpaa,Kannus,Kardla,Karesuvanto,Karigasniemi,Karkkila,Karkku,Karksinuia,Karpankyla,Kaskinen,Kasnas,Kauhajoki,Kauhava,Kauniainen,Kauvatsa,Kehra,Keila,Kellokoski,Kelottijarvi,Kemi,Kemijarvi,Kerava,Keuruu,Kiikka,Kiipu,Kilinginiomme,Kiljava,Kilpisjarvi,Kitee,Kiuruvesi,Kivesjarvi,Kiviioli,Kivisuo,Klaukkala,Klovskog,Kohtlajarve,Kokemaki,Kokkola,Kolho,Koria,Koskue,Kotka,Kouva,Kouvola,Kristiina,Kaupunki,Kuhmo,Kunda,Kuopio,Kuressaare,Kurikka,Kusans,Kuusamo,Kylmalankyla,Lahti,Laitila,Lankipohja,Lansikyla,Lappeenranta,Lapua,Laurila,Lautiosaari,Lepsama,Liedakkala,Lieksa,Lihula,Littoinen,Lohja,Loimaa,Loksa,Loviisa,Luohuanylipaa,Lusi,Maardu,Maarianhamina,Malmi,Mantta,Masaby,Masala,Matasvaara,Maula,Miiluranta,Mikkeli,Mioisakula,Munapirtti,Mustvee,Muurahainen,Naantali,Nappa,Narpio,Nickby,Niinimaa,Niinisalo,Nikkila,Nilsia,Nivala,Nokia,Nummela,Nuorgam,Nurmes,Nuvvus,Obbnas,Oitti,Ojakkala,Ollola,onningeby,Orimattila,Orivesi,Otanmaki,Otava,Otepaa,Oulainen,Oulu,Outokumpu,Paavola,Paide,Paimio,Pakankyla,Paldiski,Parainen,Parkano,Parkumaki,Parola,Perttula,Pieksamaki,Pietarsaari,Pioltsamaa,Piolva,Pohjavaara,Porhola,Pori,Porrasa,Porvoo,Pudasjarvi,Purmo,Pussi,Pyhajarvi,Raahe,Raasepori,Raisio,Rajamaki,Rakvere,Rapina,Rapla,Rauma,Rautio,Reposaari,Riihimaki,Rovaniemi,Roykka,Ruonala,Ruottala,Rutalahti,Saarijarvi,Salo,Sastamala,Saue,Savonlinna,Seinajoki,Sillamae,Sindi,Siuntio,Somero,Sompujarvi,Suonenjoki,Suurejaani,Syrjantaka,Tampere,Tamsalu,Tapa,Temmes,Tiorva,Tormasenvaara,Tornio,Tottijarvi,Tulppio,Turenki,Turi,Tuukkala,Tuurala,Tuuri,Tuuski,Ulvila,Unari,Upinniemi,Utti,Uusikaarlepyy,Uusikaupunki,Vaaksy,Vaalimaa,Vaarinmaja,Vaasa,Vainikkala,Valga,Valkeakoski,Vantaa,Varkaus,Vehkapera,Vehmasmaki,Vieki,Vierumaki,Viitasaari,Viljandi,Vilppula,Viohma,Vioru,Virrat,Ylike,Ylivieska,Ylojarvi"},{name:"Korean",i:10,min:5,max:11,d:"",m:0,b:"Aewor,Andong,Angang,Anjung,Anmyeon,Ansan,Anseong,Anyang,Aphae,Apo,Asan,Baebang,Baekseok,Baeksu,Beobwon,Beolgyo,Beomseo,Boeun,Bongdam,Bongdong,Bonghwa,Bongyang,Boryeong,Boseong,Buan,Bubal,Bucheon,Buksam,Busan,Busan,Busan,Buyeo,Changnyeong,Changwon,Cheonan,Cheongdo,Cheongjin,Cheongju,Cheongju,Cheongsong,Cheongyang,Cheorwon,Chirwon,Chowol,Chuncheon,Chuncheon,Chungju,Chungmu,Daecheon,Daedeok,Daegaya,Daegu,Daegu,Daegu,Daejeon,Daejeon,Daejeon,Daejeong,Daesan,Damyang,Dangjin,Danyang,Dasa,Dogye,Dolsan,Dong,Dongducheon,Donggwangyang,Donghae,Dongsong,Doyang,Eonyang,Eumseong,Gaeseong,Galmal,Gampo,Ganam,Ganggyeong,Ganghwa,Gangjin,Gangneung,Ganseong,Gapyeong,Gaun,Gaya,Geochang,Geoje,Geojin,Geoncheon,Geumho,Geumil,Geumsan,Geumseong,Geumwang,Gijang,Gimcheon,Gimhae,Gimhwa,Gimje,Gimpo,Goa,Gochang,Gochon,Goesan,Gohan,Goheung,Gokseong,Gongdo,Gongju,Gonjiam,Goseong,Goyang,Gujwa,Gumi,Gungnae,Gunpo,Gunsan,Gunsan,Gunwi,Guri,Gurye,Guryongpo,Gwacheon,Gwangcheon,Gwangju,Gwangju,Gwangju,Gwangju,Gwangmyeong,Gwangyang,Gwansan,Gyeongju,Gyeongsan,Gyeongseong,Gyeongseong,Gyeryong,Hadong,Haeju,Haenam,Hamchang,Hamheung,Hampyeong,Hamyang,Hamyeol,Hanam,Hanrim,Hapcheon,Hapdeok,Hayang,Heunghae,Heungnam,Hoengseong,Hongcheon,Hongnong,Hongseong,Hwacheon,Hwado,Hwando,Hwaseong,Hwasun,Hwawon,Hyangnam,Icheon,Iksan,Illo,Imsil,Incheon,Incheon,Incheon,Inje,Iri,Iri,Jangan,Janghang,Jangheung,Janghowon,Jangseong,Jangseungpo,Jangsu,Jecheon,Jeju,Jeomchon,Jeongeup,Jeonggwan,Jeongju,Jeongok,Jeongseon,Jeonju,Jeonju,Jeungpyeong,Jido,Jiksan,Jillyang,Jinan,Jincheon,Jindo,Jingeon,Jinhae,Jinjeop,Jinju,Jinju,Jinnampo,Jinyeong,Jocheon,Jochiwon,Jori,Judeok,Jumunjin,Maepo,Mangyeong,Masan,Masan,Migeum,Miryang,Mokcheon,Mokpo,Mokpo,Muan,Muju,Mungyeong,Munmak,Munsan,Munsan,Naeseo,Naesu,Najin,Naju,Namhae,Namji,Nampyeong,Namwon,Namyang,Namyangju,Nohwa,Nongong,Nonsan,Ochang,Ocheon,Oedong,Okcheon,Okgu,Onam,Onsan,Onyang,Opo,Osan,Osong,Paengseong,Paju,Pocheon,Pogok,Pohang,Poseung,Punggi,Pungsan,Pyeongchang,Pyeonghae,Pyeongtaek,Pyeongyang,Sabi,Sabuk,Sacheon,Samcheok,Samcheonpo,Samho,Samhyang,Samnangjin,Samrye,Sancheong,Sangdong,Sangju,Sanyang,Sapgyo,Sariwon,Sejong,Seocheon,Seogwipo,Seokjeok,Seonggeo,Seonghwan,Seongjin,Seongju,Seongnam,Seongsan,Seonsan,Seosan,Seoul,Seungju,Siheung,Sinbuk,Sindong,Sineuiju,Sintaein,Soheul,Sokcho,Songak,Songjeong,Songnim,Songtan,Sunchang,Suncheon,Suwon,Taean,Taebaek,Tongjin,Tongyeong,Uijeongbu,Uiryeong,Uiseong,Uiwang,Ujeong,Uljin,Ulleung,Ulsan,Ulsan,Unbong,Ungcheon,Ungjin,Wabu,Waegwan,Wando,Wanggeomseong,Wiryeseong,Wondeok,Wonju,Wonsan,Yangchon,Yanggu,Yangju,Yangpyeong,Yangsan,Yangyang,Yecheon,Yeocheon,Yeoju,Yeomchi,Yeoncheon,Yeongam,Yeongcheon,Yeongdeok,Yeongdong,Yeonggwang,Yeongju,Yeongwol,Yeongyang,Yeonil,Yeonmu,Yeosu,Yesan,Yongin,Yongjin,Yugu,Wayang"},{name:"Chinese",i:11,min:5,max:10,d:"",m:0,b:"Anding,Anlu,Anqing,Anshun,Baan,Baixing,Banyang,Baoding,Baoqing,Binzhou,Caozhou,Changbai,Changchun,Changde,Changling,Changsha,Changtu,Changzhou,Chaozhou,Cheli,Chengde,Chengdu,Chenzhou,Chizhou,Chongqing,Chuxiong,Chuzhou,Dading,Dali,Daming,Datong,Daxing,Dean,Dengke,Dengzhou,Deqing,Dexing,Dihua,Dingli,Dongan,Dongchang,Dongchuan,Dongping,Duyun,Fengtian,Fengxiang,Fengyang,Fenzhou,Funing,Fuzhou,Ganzhou,Gaoyao,Gaozhou,Gongchang,Guangnan,Guangning,Guangping,Guangxin,Guangzhou,Guide,Guilin,Guiyang,Hailong,Hailun,Hangzhou,Hanyang,Hanzhong,Heihe,Hejian,Henan,Hengzhou,Hezhong,Huaian,Huaide,Huaiqing,Huanglong,Huangzhou,Huining,Huizhou,Hulan,Huzhou,Jiading,Jian,Jianchang,Jiande,Jiangning,Jiankang,Jianning,Jiaxing,Jiayang,Jilin,Jinan,Jingjiang,Jingzhao,Jingzhou,Jinhua,Jinzhou,Jiujiang,Kaifeng,Kaihua,Kangding,Kuizhou,Laizhou,Lanzhou,Leizhou,Liangzhou,Lianzhou,Liaoyang,Lijiang,Linan,Linhuang,Linjiang,Lintao,Liping,Liuzhou,Longan,Longjiang,Longqing,Longxing,Luan,Lubin,Lubin,Luzhou,Mishan,Nanan,Nanchang,Nandian,Nankang,Nanning,Nanyang,Nenjiang,Ningan,Ningbo,Ningguo,Ninguo,Ningwu,Ningxia,Ningyuan,Pingjiang,Pingle,Pingliang,Pingyang,Puer,Puzhou,Qianzhou,Qingyang,Qingyuan,Qingzhou,Qiongzhou,Qujing,Quzhou,Raozhou,Rende,Ruian,Ruizhou,Runing,Shafeng,Shajing,Shaoqing,Shaowu,Shaoxing,Shaozhou,Shinan,Shiqian,Shouchun,Shuangcheng,Shulei,Shunde,Shunqing,Shuntian,Shuoping,Sicheng,Sien,Sinan,Sizhou,Songjiang,Suiding,Suihua,Suining,Suzhou,Taian,Taibei,Tainan,Taiping,Taiwan,Taiyuan,Taizhou,Taonan,Tengchong,Tieli,Tingzhou,Tongchuan,Tongqing,Tongren,Tongzhou,Weihui,Wensu,Wenzhou,Wuchang,Wuding,Wuzhou,Xian,Xianchun,Xianping,Xijin,Xiliang,Xincheng,Xingan,Xingde,Xinghua,Xingjing,Xingqing,Xingyi,Xingyuan,Xingzhong,Xining,Xinmen,Xiping,Xuanhua,Xunzhou,Xuzhou,Yanan,Yangzhou,Yanji,Yanping,Yanqi,Yanzhou,Yazhou,Yichang,Yidu,Yilan,Yili,Yingchang,Yingde,Yingtian,Yingzhou,Yizhou,Yongchang,Yongping,Yongshun,Yongzhou,Yuanzhou,Yuezhou,Yulin,Yunnan,Yunyang,Zezhou,Zhangde,Zhangzhou,Zhaoqing,Zhaotong,Zhenan,Zhending,Zhengding,Zhenhai,Zhenjiang,Zhenxi,Zhenyun,Zhongshan,Zunyi"},{name:"Japanese",i:12,min:4,max:10,d:"",m:0,b:"Abira,Aga,Aikawa,Aizumisato,Ajigasawa,Akkeshi,Amagi,Ami,Anan,Ando,Asakawa,Ashikita,Bandai,Biratori,China,Chonan,Esashi,Fuchu,Fujimi,Funagata,Genkai,Godo,Goka,Gonohe,Gyokuto,Haboro,Hamatonbetsu,Happo,Harima,Hashikami,Hayashima,Heguri,Hidaka,Higashiagatsuma,Higashiura,Hiranai,Hirogawa,Hiroo,Hodatsushimizu,Hoki,Hokuei,Hokuryu,Horokanai,Ibigawa,Ichikai,Ichikawamisato,Ichinohe,Iide,Iijima,Iizuna,Ikawa,Inagawa,Itakura,Iwaizumi,Iwate,Kagamino,Kaisei,Kamifurano,Kamiita,Kamijima,Kamikawa,Kamikawa,Kamikawa,Kaminokawa,Kamishihoro,Kamitonda,Kamiyama,Kanda,Kanna,Kasagi,Kasuya,Katsuura,Kawabe,Kawagoe,Kawajima,Kawamata,Kawamoto,Kawanehon,Kawanishi,Kawara,Kawasaki,Kawasaki,Kawatana,Kawazu,Kihoku,Kikonai,Kin,Kiso,Kitagata,Kitajima,Kiyama,Kiyosato,Kofu,Koge,Kohoku,Kokonoe,Kora,Kosa,Kosaka,Kotohira,Kudoyama,Kumejima,Kumenan,Kumiyama,Kunitomi,Kurate,Kushimoto,Kutchan,Kyonan,Kyotamba,Mashike,Matsumae,Mifune,Mihama,Minabe,Minami,Minamiechizen,Minamioguni,Minamiosumi,Minamitane,Misaki,Misasa,Misato,Miyashiro,Miyoshi,Mori,Moseushi,Mutsuzawa,Nagaizumi,Nagatoro,Nagayo,Nagomi,Nakadomari,Nakanojo,Nakashibetsu,Nakatosa,Namegawa,Namie,Nanbu,Nanporo,Naoshima,Nasu,Niseko,Nishihara,Nishiizu,Nishikatsura,Nishikawa,Nishinoshima,Nishiwaga,Nogi,Noto,Nyuzen,Oarai,Obuse,Odai,Ogawara,Oharu,Oi,Oirase,Oishida,Oiso,Oizumi,Oji,Okagaki,Oketo,Okutama,Omu,Ono,Osaki,Osakikamijima,Otobe,Otsuki,Owani,Reihoku,Rifu,Rikubetsu,Rishiri,Rokunohe,Ryuo,Saka,Sakuho,Samani,Satsuma,Sayo,Saza,Setana,Shakotan,Shibayama,Shikama,Shimamoto,Shimizu,Shimokawa,Shintomi,Shirakawa,Shisui,Shitara,Sobetsu,Sue,Sumita,Suooshima,Suttsu,Tabuse,Tachiarai,Tadami,Tadaoka,Taiji,Taiki,Takachiho,Takahama,Taketoyo,Tako,Taragi,Tateshina,Tatsugo,Tawaramoto,Teshikaga,Tobe,Toin,Tokigawa,Toma,Tomioka,Tonosho,Tosa,Toyo,Toyokoro,Toyotomi,Toyoyama,Tsubata,Tsubetsu,Tsukigata,Tsunan,Tsuno,Tsuwano,Umi,Wakasa,Yamamoto,Yamanobe,Yamatsuri,Yanaizu,Yasuda,Yoichi,Yonaguni,Yoro,Yoshino,Yubetsu,Yugawara,Yuni,Yusuhara,Yuza"},{name:"Portuguese",i:13,min:5,max:11,d:"",m:.1,b:"Abrigada,Afonsoeiro,Agueda,Aguiar,Aguilada,Alagoas,Alagoinhas,Albufeira,Alcacovas,Alcanhoes,Alcobaca,Alcochete,Alcoutim,Aldoar,Alexania,Alfeizerao,Algarve,Alenquer,Almada,Almagreira,Almeirim,Alpalhao,Alpedrinha,Alvalade,Alverca,Alvor,Alvorada,Amadora,Amapa,Amieira,Anapolis,Anhangueira,Ansiaes,Apelacao,Aracaju,Aranhas,Arega,Areira,Araguaina,Araruama,Arganil,Armacao,Arouca,Asfontes,Assenceira,Avelar,Aveiro,Azambuja,Azinheira,Azueira,Bahia,Bairros,Balsas,Barcarena,Barreiras,Barreiro,Barretos,Batalha,Beira,Beja,Benavente,Betim,Boticas,Braga,Braganca,Brasilia,Brejo,Cabecao,Cabeceiras,Cabedelo,Cabofrio,Cachoeiras,Cadafais,Calheta,Calihandriz,Calvao,Camacha,Caminha,Campinas,Canidelo,Canha,Canoas,Capinha,Carmoes,Cartaxo,Carvalhal,Carvoeiro,Cascavel,Castanhal,Castelobranco,Caueira,Caxias,Chapadinha,Chaves,Celheiras,Cocais,Coimbra,Comporta,Coentral,Conde,Copacabana,Coqueirinho,Coruche,Corumba,Couco,Cubatao,Curitiba,Damaia,Doisportos,Douradilho,Dourados,Enxames,Enxara,Erada,Erechim,Ericeira,Ermidasdosado,Ervidel,Escalhao,Escariz,Esmoriz,Estombar,Espinhal,Espinho,Esposende,Esquerdinha,Estela,Estoril,Eunapolis,Evora,Famalicao,Famoes,Fanhoes,Fanzeres,Fatela,Fatima,Faro,Felgueiras,Ferreira,Figueira,Flecheiras,Florianopolis,Fornalhas,Fortaleza,Freiria,Freixeira,Frielas,Fronteira,Funchal,Fundao,Gaeiras,Gafanhadaboahora,Goa,Goiania,Gracas,Gradil,Grainho,Gralheira,Guarulhos,Guetim,Guimaraes,Horta,Iguacu,Igrejanova,Ilhavo,Ilheus,Ipanema,Iraja,Itaboral,Itacuruca,Itaguai,Itanhaem,Itapevi,Juazeiro,Lagos,Lavacolchos,Laies,Lamego,Laranjeiras,Leiria,Limoeiro,Linhares,Lisboa,Lomba,Lorvao,Lourencomarques,Lourical,Lourinha,Luziania,Macao,Macapa,Macedo,Machava,Malveira,Manaus,Mangabeira,Mangaratiba,Marambaia,Maranhao,Maringue,Marinhais,Matacaes,Matosinhos,Maxial,Maxias,Mealhada,Meimoa,Meires,Milharado,Mira,Miranda,Mirandela,Mogadouro,Montalegre,Montesinho,Moura,Mourao,Mozelos,Negroes,Neiva,Nespereira,Nilopolis,Niteroi,Nordeste,Obidos,Odemira,Odivelas,Oeiras,Oleiros,Olhao,Olhalvo,Olhomarinho,Olinda,Olival,Oliveira,Oliveirinha,Oporto,Ourem,Ovar,Palhais,Palheiros,Palmeira,Palmela,Palmital,Pampilhosa,Pantanal,Paradinha,Parelheiros,Paripueira,Paudalho,Pedrosinho,Penafiel,Peniche,Pedrogao,Pegoes,Pinhao,Pinheiro,Pinhel,Pombal,Pontal,Pontinha,Portel,Portimao,Poxim,Quarteira,Queijas,Queluz,Quiaios,Ramalhal,Reboleira,Recife,Redinha,Ribadouro,Ribeira,Ribeirao,Rosais,Roteiro,Sabugal,Sacavem,Sagres,Sandim,Sangalhos,Santarem,Santos,Sarilhos,Sarzedas,Satao,Satuba,Seixal,Seixas,Seixezelo,Seixo,Selmes,Sepetiba,Serta,Setubal,Silvares,Silveira,Sinhaem,Sintra,Sobral,Sobralinho,Sorocaba,Tabuacotavir,Tabuleiro,Taveiro,Teixoso,Telhado,Telheiro,Tomar,Torrao,Torreira,Torresvedras,Tramagal,Trancoso,Troviscal,Vagos,Valpacos,Varzea,Vassouras,Velas,Viana,Vidigal,Vidigueira,Vidual,Viladerei,Vilamar,Vimeiro,Vinhais,Vinhos,Viseu,Vitoria,Vlamao,Vouzela"},{name:"Nahuatl",i:14,min:6,max:13,d:"l",m:0,b:"Acaltepec,Acaltepecatl,Acapulco,Acatlan,Acaxochitlan,Ajuchitlan,Atotonilco,Azcapotzalco,Camotlan,Campeche,Chalco,Chapultepec,Chiapan,Chiapas,Chihuahua,Cihuatlan,Cihuatlancihuatl,Coahuila,Coatepec,Coatlan,Coatzacoalcos,Colima,Colotlan,Coyoacan,Cuauhillan,Cuauhnahuac,Cuauhtemoc,Cuernavaca,Ecatepec,Epatlan,Guanajuato,Huaxacac,Huehuetlan,Hueyapan,Ixtapa,Iztaccihuatl,Iztapalapa,Jalisco,Jocotepec,Jocotepecxocotl,Matixco,Mazatlan,Michhuahcan,Michoacan,Michoacanmichin,Minatitlan,Naucalpan,Nayarit,Nezahualcoyotl,Oaxaca,Ocotepec,Ocotlan,Olinalan,Otompan,Popocatepetl,Queretaro,Sonora,Tabasco,Tamaulipas,Tecolotlan,Tenochtitlan,Teocuitlatlan,Teocuitlatlanteotl,Teotlalco,Teotlalcoteotl,Tepotzotlan,Tepoztlantepoztli,Texcoco,Tlachco,Tlalocan,Tlaxcala,Tlaxcallan,Tollocan,Tolutepetl,Tonanytlan,Tototlan,Tuchtlan,Tuxpan,Uaxacac,Xalapa,Xochimilco,Xolotlan,Yaotlan,Yopico,Yucatan,Yztac,Zacatecas,Zacualco"},{name:"Hungarian",i:15,min:6,max:13,d:"",m:.1,b:"Aba,Abadszalok,Abony,Adony,Ajak,Albertirsa,Alsozsolca,Aszod,Babolna,Bacsalmas,Baktaloranthaza,Balassagyarmat,Balatonalmadi,Balatonboglar,Balatonfured,Balatonfuzfo,Balkany,Balmazujvaros,Barcs,Bataszek,Batonyterenye,Battonya,Bekes,Berettyoujfalu,Berhida,Biatorbagy,Bicske,Biharkeresztes,Bodajk,Boly,Bonyhad,Budakalasz,Budakeszi,Celldomolk,Csakvar,Csenger,Csongrad,Csorna,Csorvas,Csurgo,Dabas,Demecser,Derecske,Devavanya,Devecser,Dombovar,Dombrad,Dorogullo,Dunafoldvar,Dunaharaszti,Dunavarsany,Dunavecse,Edeleny,Elek,Emod,Encs,Enying,Ercsi,Fegyvernek,Fehergyarmat,Felsozsolca,Fertoszentmiklos,Fonyod,Fot,Fuzesabony,Fuzesgyarmat,Gardony,God,Gyal,Gyomaendrod,Gyomro,Hajdudorog,Hajduhadhaz,Hajdunanas,Hajdusamson,Hajduszoboszlo,Halasztelek,Harkany,Hatvan,Heves,Heviz,Ibrany,Isaszeg,Izsak,Janoshalma,Janossomorja,Jaszapati,Jaszarokszallas,Jaszfenyszaru,Jaszkiser,Kaba,Kalocsa,Kapuvar,Karcag,Kecel,Kemecse,Kenderes,Kerekegyhaza,Kerepes,Keszthely,Kisber,Kiskoros,Kiskunmajsa,Kistarcsa,Kistelek,Kisujszallas,Kisvarda,Komadi,Komarom,Komlo,Kormend,Korosladany,Koszeg,Kozarmisleny,Kunhegyes,Kunszentmarton,Kunszentmiklos,Labatlan,Lajosmizse,Lenti,Letavertes,Letenye,Lorinci,Maglod,Mako,Mandok,Marcali,Martfu,Martonvasar,Mateszalka,Melykut,Mezobereny,Mezocsat,Mezohegyes,Mezokeresztes,Mezokovacshaza,Mezokovesd,Mezotur,Mindszent,Mohacs,Monor,Mor,Morahalom,Nadudvar,Nagyatad,Nagyecsed,Nagyhalasz,Nagykallo,Nagykata,Nagykoros,Nagymaros,Nyekladhaza,Nyergesujfalu,Nyiradony,Nyirbator,Nyirmada,Nyirtelek,Ocsa,Orkeny,Oroszlany,Paks,Pannonhalma,Paszto,Pecel,Pecsvarad,Pilis,Pilisvorosvar,Polgar,Polgardi,Pomaz,Puspokladany,Pusztaszabolcs,Putnok,Racalmas,Rackeve,Rakamaz,Rakoczifalva,Sajoszentpeter,Sandorfalva,Sarbogard,Sarkad,Sarospatak,Sarvar,Satoraljaujhely,Siklos,Simontornya,Solt,Soltvadkert,Sumeg,Szabadszallas,Szarvas,Szazhalombatta,Szecseny,Szeghalom,Szendro,Szentgotthard,Szentlorinc,Szerencs,Szigethalom,Szigetvar,Szikszo,Tab,Tamasi,Tapioszele,Tapolca,Tat,Tata,Teglas,Tet,Tiszacsege,Tiszafoldvar,Tiszafured,Tiszakecske,Tiszalok,Tiszaujvaros,Tiszavasvari,Tokaj,Tokol,Tolna,Tompa,Torokbalint,Torokszentmiklos,Totkomlos,Tura,Turkeve,Ujkigyos,ujszasz,Vamospercs,Varpalota,Vasarosnameny,Vasvar,Vecses,Velence,Veresegyhaz,Verpelet,Veszto,Zahony,Zalaszentgrot,Zirc,Zsambek"},{name:"Turkish",i:16,min:4,max:10,d:"",m:0,b:"Adapazari,Adiyaman,Afshin,Afyon,Ari,Akchaabat,Akchakale,Akchakoca,Akdamadeni,Akhisar,Aksaray,Akshehir,Alaca,Alanya,Alapli,Alashehir,Amasya,Anamur,Antakya,Ardeshen,Artvin,Aydin,Ayvalik,Babaeski,Bafra,Balikesir,Bandirma,Bartin,Bashiskele,Batman,Bayburt,Belen,Bergama,Besni,Beypazari,Beyshehir,Biga,Bilecik,Bingul,Birecik,Bismil,Bitlis,Bodrum,Bolu,Bolvadin,Bor,Bostanichi,Boyabat,Bozuyuk,Bucak,Bulancak,Bulanik,Burdur,Burhaniye,Chan,Chanakkale,Chankiri,Charshamba,Chaycuma,Chayeli,Chayirova,Cherkezkuy,Cheshme,Ceyhan,Ceylanpinar,Chine,Chivril,Cizre,Chorlu,Chumra,Dalaman,Darica,Denizli,Derik,Derince,Develi,Devrek,Didim,Dilovasi,Dinar,Diyadin,Diyarbakir,Doubayazit,Durtyol,Duzce,Duzichi,Edirne,Edremit,Elazi,Elbistan,Emirda,Erbaa,Ercish,Erdek,Erdemli,Ereli,Ergani,Erzin,Erzincan,Erzurum,Eskishehir,Fatsa,Fethiye,Gazipasha,Gebze,Gelibolu,Gerede,Geyve,Giresun,Guksun,Gulbashi,Gulcuk,Gurnen,Gumushhane,Guroymak,Hakkari,Harbiye,Havza,Hayrabolu,Hilvan,Idil,Idir,Ilgin,Imamolu,Incirliova,Inegul,Iskenderun,Iskilip,Islahiye,Isparta,Izmit,Iznik,Kadirli,Kahramanmarash,Kahta,Kaman,Kapakli,Karabuk,Karacabey,Karadeniz Ereli,Karakupru,Karaman,Karamursel,Karapinar,Karasu,Kars,Kartepe,Kastamonu,Kemer,Keshan,Kilimli,Kilis,Kirikhan,Kirikkale,Kirklareli,Kirshehir,Kiziltepe,Kurfez,Korkuteli,Kovancilar,Kozan,Kozlu,Kozluk,Kulu,Kumluca,Kurtalan,Kushadasi,Kutahya,Luleburgaz,Malatya,Malazgirt,Malkara,Manavgat,Manisa,Mardin,Marmaris,Mersin,Merzifon,Midyat,Milas,Mula,Muratli,Mush,Mut,Nazilli,Nevshehir,Nide,Niksar,Nizip,Nusaybin,udemish,Oltu,Ordu,Orhangazi,Ortaca,Osmancik,Osmaniye,Patnos,Payas,Pazarcik,Polatli,Reyhanli,Rize,Safranbolu,Salihli,Samanda,Samsun,Sandikli,shanliurfa,Saray,Sarikamish,Sarikaya,sharkishla,shereflikochhisar,Serik,Serinyol,Seydishehir,Siirt,Silifke,Silopi,Silvan,Simav,Sinop,shirnak,Sivas,Siverek,Surke,Soma,Sorgun,Suluova,Sungurlu,Suruch,Susurluk,Tarsus,Tatvan,Tavshanli,Tekirda,Terme,Tire,Tokat,Tosya,Trabzon,Tunceli,Turgutlu,Turhal,Unye,Ushak,Uzunkurpru,Van,Vezirkurpru,Viranshehir,Yahyali,Yalova,Yenishehir,Yerkury,Yozgat,Yuksekova,Zile,Zonguldak"},{name:"Berber",i:17,min:4,max:10,d:"s",m:.2,b:"Abkhouch,Adrar,Agadir,Agelmam,Aghmat,Agrakal,Agulmam,Ahaggar,Almou,Anfa,Annaba,Aousja,Arbat,Argoub,Arif,Asfi,Assamer,Assif,Azaghar,Azmour,Azrou,Beccar,Beja,Bennour,Benslimane,Berkane,Berrechid,Bizerte,Bouskoura,Boutferda,Dar Bouazza,Darallouch,Darchaabane,Dcheira,Denden,Djebel,Djedeida,Drargua,Essaouira,Ezzahra,Fas,Fnideq,Ghezeze,Goubellat,Grisaffen,Guelmim,Guercif,Hammamet,Harrouda,Hoceima,Idurar,Ifendassen,Ifoghas,Imilchil,Inezgane,Izoughar,Jendouba,Kacem,Kelibia,Kenitra,Kerrando,Khalidia,Khemisset,Khenifra,Khouribga,Kidal,Korba,Korbous,Lahraouyine,Larache,Leyun,Lqliaa,Manouba,Martil,Mazagan,Mcherga,Mdiq,Megrine,Mellal,Melloul,Midelt,Mohammedia,Mornag,Mrrakc,Nabeul,Nadhour,Nador,Nawaksut,Nefza,Ouarzazate,Ouazzane,Oued Zem,Oujda,Ouladteima,Qsentina,Rades,Rafraf,Safi,Sefrou,Sejnane,Settat,Sijilmassa,Skhirat,Slimane,Somaa,Sraghna,Susa,Tabarka,Taferka,Tafza,Tagbalut,Tagerdayt,Takelsa,Tanja,Tantan,Taourirt,Taroudant,Tasfelalayt,Tattiwin,Taza,Tazerka,Tazizawt,Tebourba,Teboursouk,Temara,Testour,Tetouan,Tibeskert,Tifelt,Tinariwen,Tinduf,Tinja,Tiznit,Toubkal,Trables,Tubqal,Tunes,Urup,Watlas,Wehran,Wejda,Youssoufia,Zaghouan,Zahret,Zemmour,Zriba"},{name:"Arabic",i:18,min:4,max:9,d:"ae",m:.2,b:"Abadilah,Abayt,Abha,Abud,Aden,Ahwar,Ajman,Alabadilah,Alabar,Alahjer,Alain,Alaraq,Alarish,Alarjam,Alashraf,Alaswaaq,Alawali,Albarar,Albawadi,Albirk,Aldhabiyah,Alduwaid,Alfareeq,Algayed,Alhada,Alhafirah,Alhamar,Alharam,Alharidhah,Alhawtah,Alhazim,Alhrateem,Alhudaydah,Alhujun,Alhuwaya,Aljahra,Aljohar,Aljubail,Alkawd,Alkhalas,Alkhawaneej,Alkhen,Alkhhafah,Alkhobar,Alkhuznah,Alkiranah,Allisafah,Allith,Almadeed,Almardamah,Almarwah,Almasnaah,Almejammah,Almojermah,Almshaykh,Almurjan,Almuwayh,Almuzaylif,Alnaheem,Alnashifah,Alqadeimah,Alqah,Alqahma,Alqalh,Alqouz,Alquaba,Alqunfudhah,Alqurayyat,Alradha,Alraqmiah,Alsadyah,Alsafa,Alshagab,Alshoqiq,Alshuqaiq,Alsilaa,Althafeer,Alwakrah,Alwasqah,Amaq,Amran,Annaseem,Aqbiyah,Arafat,Arar,Ardah,Arrawdah,Asfan,Ashayrah,Ashshahaniyah,Askar,Assaffaniyah,Ayaar,Aziziyah,Baesh,Bahrah,Baish,Balhaf,Banizayd,Baqaa,Baqal,Bidiyah,Bisha,Biyatah,Buqhayq,Burayda,Dafiyat,Damad,Dammam,Dariyah,Daynah,Dhafar,Dhahran,Dhalkut,Dhamar,Dhubab,Dhurma,Dibab,Dirab,Doha,Dukhan,Duwaibah,Enaker,Fadhla,Fahaheel,Fanateer,Farasan,Fardah,Fujairah,Ghalilah,Ghar,Ghizlan,Ghomgyah,Ghran,Hababah,Habil,Hadiyah,Haffah,Hajanbah,Hajrah,Halban,Haqqaq,Haradh,Hasar,Hathah,Hawarwar,Hawaya,Hawiyah,Hebaa,Hefar,Hijal,Husnah,Huwailat,Huwaitah,Irqah,Isharah,Ithrah,Jamalah,Jarab,Jareef,Jarwal,Jash,Jazan,Jeddah,Jiblah,Jihanah,Jilah,Jizan,Joha,Joraibah,Juban,Jubbah,Juddah,Jumeirah,Kamaran,Keyad,Khab,Khabtsaeed,Khaiybar,Khasab,Khathirah,Khawarah,Khulais,Khulays,Klayah,Kumzar,Limah,Linah,Mabar,Madrak,Mahab,Mahalah,Makhtar,Makshosh,Manfuhah,Manifah,Manshabah,Mareah,Masdar,Mashwar,Masirah,Maskar,Masliyah,Mastabah,Maysaan,Mazhar,Mdina,Meeqat,Mirbah,Mirbat,Mokhtara,Muharraq,Muladdah,Musandam,Musaykah,Muscat,Mushayrif,Musrah,Mussafah,Mutrah,Nafhan,Nahdah,Nahwa,Najran,Nakhab,Nizwa,Oman,Qadah,Qalhat,Qamrah,Qasam,Qatabah,Qawah,Qosmah,Qurain,Quraydah,Quriyat,Qurwa,Rabigh,Radaa,Rafha,Rahlah,Rakamah,Rasheedah,Rasmadrakah,Risabah,Rustaq,Ryadh,Saabah,Saabar,Sabtaljarah,Sabya,Sadad,Sadah,Safinah,Saham,Sahlat,Saihat,Salalah,Salmalzwaher,Salmiya,Sanaa,Sanaban,Sayaa,Sayyan,Shabayah,Shabwah,Shafa,Shalim,Shaqra,Sharjah,Sharkat,Sharurah,Shatifiyah,Shibam,Shidah,Shifiyah,Shihar,Shoqra,Shoqsan,Shuwaq,Sibah,Sihmah,Sinaw,Sirwah,Sohar,Suhailah,Sulaibiya,Sunbah,Tabuk,Taif,Taqah,Tarif,Tharban,Thumrait,Thuqbah,Thuwal,Tubarjal,Turaif,Turbah,Tuwaiq,Ubar,Umaljerem,Urayarah,Urwah,Wabrah,Warbah,Yabreen,Yadamah,Yafur,Yarim,Yemen,Yiyallah,Zabid,Zahwah,Zallaq,Zinjibar,Zulumah"},{name:"Inuit",i:19,min:5,max:15,d:"alutsn",m:0,b:"Aaluik,Aappilattoq,Aasiaat,Agdleruussakasit,Aggas,Akia,Akilia,Akuliaruseq,Akuliarutsip,Akunnaaq,Agissat,Agssaussat,Alluitsup,Alluttoq,Aluit,Aluk,Ammassalik,Amarortalik,Amitsorsuaq,Anarusuk,Angisorsuaq,Anguniartarfik,Annertussoq,Annikitsoq,Anoraliuirsoq,Appat,Apparsuit,Apusiaajik,Arsivik,Arsuk,Ataa,Atammik,Ateqanngitsorsuaq,Atilissuaq,Attu,Aukarnersuaq,Augpalugtoq, Aumat,Auvilikavsak,Auvilkikavsaup,Avadtlek,Avallersuaq,Bjornesk,Blabaerdalen,Blomsterdalen,Brattalhid,Bredebrae,Brededal,Claushavn,Edderfulegoer,Egger,Eqalugalinnguit,Eqalugarssuit,Eqaluit,Eqqua,Etah,Graah,Hakluyt,Haredalen,Hareoen,Hundeo,Igdlorssuit,Igaliku,Igdlugdlip,Igdluluarssuk,Iginniafik,Ikamiuk,Ikamiut,Ikarissat,Ikateq,Ikeq,Ikerasak,Ikerasaarsuk,Ikermiut,Ikermoissuaq,Ikertivaq,Ikorfarssuit,Ikorfat,Ilimanaq,Illorsuit,Iluileq,Iluiteq,Ilulissat,Illunnguit,Imaarsivik,Imartunarssuk,Immikkoortukajik,Innaarsuit,Ingjald,Inneruulalik,Inussullissuaq,Iqek,Ikerasakassak,Iperaq,Ippik,Isortok,Isungartussoq,Itileq,Itivdleq,Itissaalik,Ittit,Ittoqqortoormiit,Ivingmiut,Ivittuut,Kanajoorartuut,Kangaamiut,Kangaarsuk,Kangaatsiaq,Kangeq,Kangerluk,Kangerlussuaq,Kanglinnguit,Kapisillit,Karrat,Kekertamiut,Kiatak,Kiatassuaq,Kiataussaq,Kigatak,Kigdlussat,Kinaussak,Kingittorsuaq,Kitak,Kitsissuarsuit,Kitsissut,Klenczner,Kook,Kraulshavn,Kujalleq,Kullorsuaq,Kulusuk,Kuurmiit,Kuusuaq,Laksedalen,Maniitsoq,Marrakajik,Mattaangassut,Mernoq,Mittivakkat,Moriusaq,Myggbukta,Naajaat,Nako,Nangissat,Nanortalik,Nanuuseq,Nappassoq,Narsarmijt,Narssaq,Narsarsuaq,Narssarssuk,Nasaussaq,Nasiffik,Natsiarsiorfik,Naujanguit,Niaqornaarsuk,Niaqornat,Nordfjordspasset,Nugatsiaq,Nuluuk,Nunaa,Nunarssit,Nunarsuaq,Nunataaq,Nunatakavsaup,Nutaarmiut,Nuugaatsiaq,Nuuk,Nuukullak,Nuuluk,Nuussuaq,Olonkinbyen,Oqaatsut,Oqaits\xFAnguit,Oqonermiut,Oodaaq,Paagussat,Palungataq,Pamialluk,Paamiut,Paatuut,Patuersoq,Perserajoq,Paornivik,Pituffik,Puugutaa,Puulkuip,Qaanaq,Qaarsorsuaq,Qaarsorsuatsiaq,Qaasuitsup,Qaersut,Qajartalik,Qallunaat,Qaneq,Qaqaarissorsuaq,Qaqit,Qaqortok,Qasigiannguit,Qasse,Qassimiut,Qeertartivaq,Qeertartivatsiaq,Qeqertaq,Qeqertarssdaq,Qeqertarsuaq,Qeqertasussuk,Qeqertarsuatsiaat,Qeqertat,Qeqqata,Qernertoq,Qernertunnguit,Qianarreq,Qilalugkiarfik,Qingagssat,Qingaq,Qoornuup,Qorlortorsuaq,Qullikorsuit,Qunnerit,Qutdleq,Ravnedalen,Ritenbenk,Rypedalen,Sarfannguit,Saarlia,Saarloq,Saatoq,Saatorsuaq,Saatup,Saattut,Sadeloe,Salleq,Salliaruseq,Sammeqqat,Sammisoq,Sanningassoq,Saqqaq,Saqqarlersuaq,Saqqarliit,Sarqaq,Sattiaatteq,Savissivik,Serfanguaq,Sermersooq,Sermersut,Sermilik,Sermiligaaq,Sermitsiaq,Simitakaja,Simiutaq,Singamaq,Siorapaluk,Sisimiut,Sisuarsuit,Skal,Skarvefjeld,Skjoldungen,Storoen,Sullorsuaq,Suunikajik,Sverdrup,Taartoq,Takiseeq,Talerua,Tarqo,Tasirliaq,Tasiusak,Tiilerilaaq,Timilersua,Timmiarmiut,Tingmjarmiut,Traill,Tukingassoq,Tuttorqortooq,Tuujuk,Tuttulissuup,Tussaaq,Uigordlit,Uigorlersuaq,Uilortussoq,Uiivaq,Ujuaakajiip,Ukkusissat,Umanat,Upernavik,Upernattivik,Upepnagssivik,Upernivik,Uttorsiutit,Uumannaq,Uummannaarsuk,Uunartoq,Uvkusigssat,Ymer"},{name:"Basque",i:20,min:4,max:11,d:"r",m:.1,b:"Abadio,Abaltzisketa,Abanto Zierbena,Aduna,Agurain,Aia,Aiara,Aizarnazabal,Ajangiz,Albiztur,Alegia,Alkiza,Alonsotegi,Altzaga,Altzo,Amezketa,Amorebieta,Amoroto,Amurrio,Andoain,Anoeta,Antzuola,Arakaldo,Arama,Aramaio,Arantzazu,Arbatzegi ,Areatza,Aretxabaleta,Arraia,Arrankudiaga,Arrasate,Arratzu,Arratzua,Arrieta,Arrigorriaga,Artea,Artzentales,Artziniega,Asparrena,Asteasu,Astigarraga,Ataun,Atxondo,Aulesti,Azkoitia,Azpeitia,Bakio,Baliarrain,Balmaseda,Barakaldo,Barrika,Barrundia,Basauri,Bastida,Beasain,Bedia,Beizama,Belauntza,Berango,Berantevilla,Berastegi,Bergara,Bermeo,Bernedo,Berriatua,Berriz,Berrobi,Bidania,Bilar,Bilbao,Burgelu,Busturia,Deba,Derio,Dima,Donemiliaga,Donostia,Dulantzi,Durango,Ea,Eibar,Elantxobe,Elduain,Elgeta,Elgoibar,Elorrio,Erandio,Ereno,Ermua,Errenteria,Errezil,Erribera Beitia,Erriberagoitia,Errigoiti,Eskoriatza,Eskuernaga,Etxebarri,Etxebarria,Ezkio,Fika,Forua,Fruiz,Gabiria,Gaintza,Galdakao,Galdames,Gamiz,Garai,Gasteiz,Gatika,Gatzaga,Gaubea,Gauna,Gautegiz Arteaga,Gaztelu,Gernika,Gerrikaitz,Getaria,Getxo,Gizaburuaga,Goiatz,Gordexola,Gorliz,Harana,Hernani,Hernialde,Hondarribia,Ibarra,Ibarrangelu,Idiazabal,Iekora,Igorre,Ikaztegieta,Iruna Oka,Irun,Irura,Iruraiz,Ispaster,Itsaso,Itsasondo,Iurreta,Izurtza,Jatabe,Kanpezu,Karrantza Harana,Kortezubi,Kripan,Kuartango,Lanestosa,Lantziego,Larrabetzu,Larraul,Lasarte,Laudio,Laukiz,Lazkao,Leaburu,Legazpi,Legorreta,Legutio,Leintz,Leioa,Lekeitio,Lemoa,Lemoiz,Leza,Lezama,Lezo,Lizartza,Loiu,Lumo,Manaria,Maeztu,Mallabia,Markina,Maruri,Manueta,Menaka,Mendaro,Mendata,Mendexa,Moreda Araba,Morga,Mundaka,Mungia,Munitibar,Murueta,Muskiz,Mutiloa,Mutriku,Muxika,Nabarniz,Onati,Oiartzun,Oion,Okondo,Olaberria,Ondarroa,Ordizia,Orendain,Orexa,Oria,Orio,Ormaiztegi,Orozko,Ortuella,Otxandio,Pasaia,Plentzia,Portugalete,Samaniego,Santurtzi,Segura,Sestao,Sondika,Sopela,Sopuerta,Soraluze,Sukarrieta,Tolosa,Trapagaran,Turtzioz,Ubarrundia,Ubide,Ugao,Urdua,Urduliz,Urizaharra,Urkabustaiz,Urnieta,Urretxu,Usurbil,Xemein,Zaia,Zaldibar,Zaldibia,Zalduondo,Zambrana,Zamudio,Zaratamo,Zarautz,Zeanuri,Zeberio,Zegama,Zerain,Zestoa,Zierbena,Zigoitia,Ziortza,Zizurkil,Zuia,Zumaia,Zumarraga"},{name:"Nigerian",i:21,min:4,max:10,d:"",m:.3,b:"Abadogo,Abafon,Abdu,Acharu,Adaba,Adealesu,Adeto,Adyongo,Afaga,Afamju,Afuje,Agbelagba,Agigbigi,Agogoke,Ahute,Aiyelaboro,Ajebe,Ajola,Akarekwu,Akessan,Akunuba,Alawode,Alkaijji,Amangam,Amaoji,Amgbaye,Amtasa,Amunigun,Anase,Aniho,Animahun,Antul,Anyoko,Apekaa,Arapagi,Asamagidi,Asande,Ataibang,Awgbagba,Awhum,Awodu,Babanana,Babateduwa,Bagu,Bakura,Bandakwai,Bangdi,Barbo,Barkeje,Basa,Basabra,Basansagawa,Bieleshin,Bilikani,Birnindodo,Braidu,Bulakawa,Buriburi,Burisidna,Busum,Bwoi,Cainnan,Chakum,Charati,Chondugh,Dabibikiri,Dagwarga,Dallok,Danalili,Dandala,Darpi,Dhayaki,Dokatofa,Doma,Dozere,Duci,Dugan,Ebelibri,Efem,Efoi,Egudu,Egundugbo,Ekoku,Ekpe,Ekwere,Erhua,Eteu,Etikagbene,Ewhoeviri,Ewhotie,Ezemaowa,Fatima,Gadege,Galakura,Galea,Gamai,Gamen,Ganjin,Gantetudu,Garangamawa,Garema,Gargar,Gari,Garinbode,Garkuwa,Garu Kime,Gazabu,Gbure,Gerti,Gidan,Giringwe,Gitabaremu,Giyagiri,Giyawa,Gmawa,Golakochi,Golumba,Guchi,Gudugu,Gunji,Gusa,Gwambula,Gwamgwam,Gwodoti,Hayinlere,Hayinmaialewa,Hirishi,Hombo,Ibefum,Iberekodo,Ibodeipa,Icharge,Ideoro,Idofin,Idofinoka,Idya,Iganmeji,Igbetar,Igbogo,Ijoko,Ijuwa,Ikawga,Ikekogbe,Ikhin,Ikoro,Ikotefe,Ikotokpora,Ikpakidout,Ikpeoniong,Ilofa,Imuogo,Inyeneke,Iorsugh,Ipawo,Ipinlerere,Isicha,Itakpa,Itoki,Iyedeame,Jameri,Jangi,Jara,Jare,Jataudakum,Jaurogomki,Jepel,Jibam,Jirgu,Jirkange,Kafinmalama,Kamkem,Katab,Katanga,Katinda,Katirije,Kaurakimba,Keffinshanu,Kellumiri,Kiagbodor,Kibiare,Kingking,Kirbutu,Kita,Kogbo,Kogogo,Kopje,Koriga,Koroko,Korokorosei,Kotoku,Kuata,Kujum,Kukau,Kunboon,Kuonubogbene,Kurawe,Kushinahu,Kwaramakeri,Ladimeji,Lafiaro,Lahaga,Laindebajanle,Laindegoro,Lajere,Lakati,Ligeri,Litenswa,Lokobimagaji,Lusabe,Maba,Madarzai,Magoi,Maialewa,Maianita,Maijuja,Mairakuni,Maleh,Malikansaa,Mallamkola,Mallammaduri,Marmara,Masagu,Masoma,Mata,Matankali,Mbalare,Megoyo,Meku,Miama,Mige,Mkporagwu,Modi,Molafa,Mshi,Msugh,Muduvu,Murnachehu,Namnai,Nanumawa,Nasudu,Ndagawo,Ndamanma,Ndiebeleagu,Ndiwulunbe,Ndonutim,Ngaruwa,Ngbande,Nguengu,Nto Ekpe,Nubudi,Nyajo,Nyido,Nyior,Obafor,Obazuwa,Odajie,Odiama,Ofunatam,Ogali,Ogan,Ogbaga,Ogbahu,Ogultu,Ogunbunmi,Ogunmakin,Ojaota,Ojirami,Ojopode,Okehin,Olugunna,Omotunde,Onipede,Onisopi,Onma,Orhere,Orya,Oshotan,Otukwang,Otunade,Pepegbene,Poros,Rafin,Rampa,Rimi,Rinjim,Robertkiri,Rugan,Rumbukawa,Sabiu,Sabon,Sabongari,Sai,Salmatappare,Sangabama,Sarabe,Seboregetore,Seibiri,Sendowa,Shafar,Shagwa,Shata,Shefunda,Shengu,Sokoron,Sunnayu,Taberlma,Tafoki,Takula,Talontan,Taraku,Tarhemba,Tayu,Ter,Timtim,Timyam,Tindirke,Tirkalou,Tokunbo,Tonga,Torlwam,Tseakaadza,Tseanongo,Tseavungu,Tsebeeve,Tsekov,Tsepaegh,Tuba,Tumbo,Tungalombo,Tungamasu,Tunganrati,Tunganyakwe,Tungenzuri,Ubimimi,Uhkirhi,Umoru,Umuabai,Umuaja,Umuajuju,Umuimo,Umuojala,Unchida,Ungua,Unguwar,Unongo,Usha,Ute,Utongbo,Vembera,Vorokotok,Wachin,Walebaga,Wurawura,Wuro,Yanbashi,Yanmedi,Yenaka,Yoku,Zamangera,Zarunkwari,Zilumo,Zulika"},{name:"Celtic",i:22,min:4,max:12,d:"nld",m:0,b:"Aberaman,Aberangell,Aberarth,Aberavon,Aberbanc,Aberbargoed,Aberbeeg,Abercanaid,Abercarn,Abercastle,Abercegir,Abercraf,Abercregan,Abercych,Abercynon,Aberdare,Aberdaron,Aberdaugleddau,Aberdeen,Aberdulais,Aberdyfi,Aberedw,Abereiddy,Abererch,Abereron,Aberfan,Aberffraw,Aberffrwd,Abergavenny,Abergele,Aberglasslyn,Abergorlech,Abergwaun,Abergwesyn,Abergwili,Abergwynfi,Abergwyngregyn,Abergynolwyn,Aberhafesp,Aberhonddu,Aberkenfig,Aberllefenni,Abermain,Abermaw,Abermorddu,Abermule,Abernant,Aberpennar,Aberporth,Aberriw,Abersoch,Abersychan,Abertawe,Aberteifi,Aberthin,Abertillery,Abertridwr,Aberystwyth,Achininver,Afonhafren,Alisaha,Antinbhearmor,Ardenna,Attacon,Beira,Bhrura,Boioduro,Bona,Boudobriga,Bravon,Brigant,Briganta,Briva,Cambodunum,Cambra,Caracta,Catumagos,Centobriga,Ceredigion,Chalain,Dinn,Diwa,Dubingen,Duro,Ebora,Ebruac,Eburodunum,Eccles,Eighe,Eireann,Ferkunos,Genua,Ghrainnse,Inbhear,Inbhir,Inbhirair,Innerleithen,Innerleven,Innerwick,Inver,Inveraldie,Inverallan,Inveralmond,Inveramsay,Inveran,Inveraray,Inverarnan,Inverbervie,Inverclyde,Inverell,Inveresk,Inverfarigaig,Invergarry,Invergordon,Invergowrie,Inverhaddon,Inverkeilor,Inverkeithing,Inverkeithney,Inverkip,Inverleigh,Inverleith,Inverloch,Inverlochlarig,Inverlochy,Invermay,Invermoriston,Inverness,Inveroran,Invershin,Inversnaid,Invertrossachs,Inverugie,Inveruglas,Inverurie,Kilninver,Kirkcaldy,Kirkintilloch,Krake,Latense,Leming,Lindomagos,Llanaber,Lochinver,Lugduno,Magoduro,Monmouthshire,Narann,Novioduno,Nowijonago,Octoduron,Penning,Pheofharain,Ricomago,Rossinver,Salodurum,Seguia,Sentica,Theorsa,Uige,Vitodurum,Windobona"},{name:"Mesopotamian",i:23,min:4,max:9,d:"srpl",m:.1,b:"Adab,Akkad,Akshak,Amnanum,Arbid,Arpachiyah,Arrapha,Assur,Babilim,Badtibira,Balawat,Barsip,Borsippa,Carchemish,Chagar Bazar,Chuera,Ctesiphon ,Der,Dilbat,Diniktum,Doura,Durkurigalzu,Ekallatum,Emar,Erbil,Eridu,Eshnunn,Fakhariya ,Gawra,Girsu,Hadatu,Hamoukar,Haradum,Harran,Hatra,Idu,Irisagrig,Isin,Jemdet,Kahat,Kartukulti,Khaiber,Kish ,Kisurra,Kuara,Kutha,Lagash,Larsa ,Leilan,Marad,Mardaman,Mari,Mashkan,Mumbaqat ,Nabada,Nagar,Nerebtum,Nimrud,Nineveh,Nippur,Nuzi,Qalatjarmo,Qatara,Rawda,Seleucia,Shaduppum,Shanidar,Sharrukin,Shemshara,Shibaniba,Shuruppak,Sippar,Tarbisu,Tellagrab,Tellessawwan,Tellessweyhat,Tellhassuna,Telltaya,Telul,Terqa,Thalathat,Tutub,Ubaid ,Umma,Ur,Urfa,Urkesh,Uruk,Urum,Zabalam,Zenobia"},{name:"Iranian",i:24,min:5,max:11,d:"",m:.1,b:"Abali,Abrisham,Absard,Abuzeydabad,Afus,Alavicheh,Alikosh,Amol,Anarak,Anbar,Andisheh,Anshan,Aran,Ardabil,Arderica,Ardestan,Arjomand,Asgaran,Asgharabad,Ashian,Awan,Babajan,Badrud,Bafran,Baghestan,Baghshad,Bahadoran,Baharan Shahr,Baharestan,Bakun,Bam,Baqershahr,Barzok,Bastam,Behistun,Bitistar,Bumahen,Bushehr,Chadegan,Chahardangeh,Chamgardan,Chermahin,Choghabonut,Chugan,Damaneh,Damavand,Darabgard,Daran,Dastgerd,Dehaq,Dehaqan,Dezful,Dizicheh,Dorcheh,Dowlatabad,Duruntash,Ecbatana,Eslamshahr,Estakhr,Ezhiyeh,Falavarjan,Farrokhi,Fasham,Ferdowsieh,Fereydunshahr,Ferunabad,Firuzkuh,Fuladshahr,Ganjdareh,Ganzak,Gaz,Geoy,Godin,Goldasht,Golestan,Golpayegan,Golshahr,Golshan,Gorgab,Guged,Habibabad,Hafshejan,Hajjifiruz,Hana,Harand,Hasanabad,Hasanlu,Hashtgerd,Hecatompylos,Hormirzad,Imanshahr,Isfahan,Jandaq,Javadabad,Jiroft,Jowsheqan ,Jowzdan,Kabnak,Kahriz Sang,Kahrizak,Kangavar,Karaj,Karkevand,Kashan,Kelishad,Kermanshah,Khaledabad,Khansar,Khorramabad,Khur,Khvorzuq,Kilan,Komeh,Komeshcheh,Konar,Kuhpayeh,Kul,Kushk,Lavasan,Laybid,Liyan,Lyan,Mahabad,Mahallat,Majlesi,Malard,Manzariyeh,Marlik,Meshkat,Meymeh,Miandasht,Mish,Mobarakeh,Nahavand,Nain,Najafabad,Naqshe,Narezzash,Nasimshahr,Nasirshahr,Nasrabad,Natanz,Neyasar,Nikabad,Nimvar,Nushabad,Pakdasht,Parand,Pardis,Parsa,Pasargadai,Patigrabana,Pir Bakran,Pishva,Qahderijan,Qahjaverestan,Qamsar,Qarchak,Qods,Rabat,Ray-shahr,Rezvanshahr,Rhages,Robat Karim,Rozveh,Rudehen,Sabashahr,Safadasht,Sagzi,Salehieh,Sandal,Sarvestan,Sedeh,Sefidshahr,Semirom,Semnan,Shadpurabad,Shah,Shahdad,Shahedshahr,Shahin,Shahpour,Shahr,Shahreza,Shahriar,Sharifabad,Shemshak,Shiraz,Shushan,Shushtar,Sialk,Sin,Sukhteh,Tabas,Tabriz,Takhte,Talkhuncheh,Talli,Tarq,Temukan,Tepe,Tiran,Tudeshk,Tureng,Urmia,Vahidieh,Vahrkana,Vanak,Varamin,Varnamkhast,Varzaneh,Vazvan,Yahya,Yarim,Yasuj,Zarrin Shahr,Zavareh,Zayandeh,Zazeran,Ziar,Zibashahr,Zranka"},{name:"Hawaiian",i:25,min:5,max:10,d:"auo",m:1,b:"Aapueo,Ahoa,Ahuakaio,Ahuakamalii,Ahuakeio,Ahupau,Aki,Alaakua,Alae,Alaeloa,Alaenui,Alamihi,Aleamai,Alena,Alio,Aupokopoko,Auwahi,Hahakea,Haiku,Halakaa,Halehaku,Halehana,Halemano,Haleu,Haliimaile,Hamakuapoko,Hamoa,Hanakaoo,Hanaulu,Hanawana,Hanehoi,Haneoo,Haou,Hikiaupea,Hoalua,Hokuula,Honohina,Honokahua,Honokala,Honokalani,Honokeana,Honokohau,Honokowai,Honolua,Honolulu,Honolulunui,Honomaele,Honomanu,Hononana,Honopou,Hoolawa,Hopenui,Hualele,Huelo,Hulaia,Ihuula,Ilikahi,Kaalaea,Kaalelehinale,Kaapahu,Kaehoeho,Kaeleku,Kaeo,Kahakuloa,Kahalawe,Kahalawe,Kahalehili,Kahana,Kahilo,Kahuai,Kaiaula,Kailihiakoko,Kailua,Kainehe,Kakalahale,Kakanoni,Kakio,Kakiweka,Kalena,Kalenanui,Kaleoaihe,Kalepa,Kaliae,Kalialinui,Kalihi,Kalihi,Kalihi,Kalimaohe,Kaloi,Kamani,Kamaole,Kamehame,Kanahena,Kanaio,Kaniaula,Kaonoulu,Kaopa,Kapaloa,Kapaula,Kapewakua,Kapohue,Kapuaikini,Kapunakea,Kapuuomahuka,Kauau,Kauaula,Kaukuhalahala,Kaulalo,Kaulanamoa,Kauluohana,Kaumahalua,Kaumakani,Kaumanu,Kaunauhane,Kaunuahane,Kaupakulua,Kawaipapa,Kawaloa,Kawaloa,Kawalua,Kawela,Keaa,Keaalii,Keaaula,Keahua,Keahuapono,Keakuapauaela,Kealahou,Keanae,Keauhou,Kekuapawela,Kelawea,Keokea,Keopuka,Kepio,Kihapuhala,Kikoo,Kilolani,Kipapa,Koakupuna,Koali,Koananai,Koheo,Kolea,Kolokolo,Kooka,Kopili,Kou,Kualapa,Kuhiwa,Kuholilea,Kuhua,Kuia,Kuiaha,Kuikui,Kukoae,Kukohia,Kukuiaeo,Kukuioolu,Kukuipuka,Kukuiula,Kulahuhu,Kumunui,Lapakea,Lapalapaiki,Lapueo,Launiupoko,Loiloa,Lole,Lualailua,Maalo,Mahinahina,Mahulua,Maiana,Mailepai,Makaakini,Makaalae,Makaehu,Makaiwa,Makaliua,Makapipi,Makapuu,Makawao,Makila,Mala,Maluaka,Mamalu,Manawaiapiki,Manawainui,Maulili,Mehamenui,Miana,Mikimiki,Moalii,Moanui,Mohopili,Mohopilo,Mokae,Mokuia,Mokupapa,Mooiki,Mooloa,Moomuku,Muolea,Nahuakamalii,Nailiilipoko,Nakaaha,Nakalepo,Nakaohu,Nakapehu,Nakula,Napili,Niniau,Niumalu,Nuu,Ohia,Oloewa,Olowalu,Omaopio,Onau,Onouli,Opaeula,Opana,Opikoula,Paakea,Paeahu,Paehala,Paeohi,Pahoa,Paia,Pakakia,Pakala,Palauea,Palemo,Panaewa,Paniau,Papaaea,Papaanui,Papaauhau,Papahawahawa,Papaka,Papauluana,Pauku,Paunau,Pauwalu,Pauwela,Peahi,Piapia,Pohakanele,Pohoula,Polaiki,Polanui,Polapola,Polua,Poopoo,Popoiwi,Popoloa,Poponui,Poupouwela,Puaa,Puaaluu,Puahoowali,Puakea,Puako,Pualaea,Puehuehu,Puekahi,Pueokauiki,Pukaauhuhu,Pukalani,Pukuilua,Pulehu,Pulehuiki,Pulehunui,Punaluu,Puolua,Puou,Puuhaehae,Puuhaoa,Puuiki,Puuki,Puukohola,Puulani,Puumaneoneo,Puunau,Puunoa,Puuomaiai,Puuomaile,Uaoa,Uhao,Ukumehame,Ulaino,Ulumalu,Wahikuli,Waiahole,Waiakoa,Waianae,Waianu,Waiawa,Waiehu,Waieli,Waihee,Waikapu,Wailamoa,Wailaulau,Wailua,Wailuku,Wainee,Waiohole,Waiohonu,Waiohue,Waiohuli,Waiokama,Waiokila,Waiopai,Waiopua,Waipao,Waipio,Waipioiki,Waipionui,Waipouli,Wakiu,Wananalua"},{name:"Karnataka",i:26,min:5,max:11,d:"tnl",m:0,b:"Adityapatna,Adyar,Afzalpur,Aland,Alnavar,Alur,Ambikanagara,Anekal,Ankola,Annigeri,Arkalgud,Arsikere,Athni,Aurad,Badami,Bagalkot,Bagepalli,Bail,Bajpe,Bangalore,Bangarapet,Bankapura,Bannur,Bantval,Basavakalyan,Basavana,Belgaum,Beltangadi,Belur,Bhadravati,Bhalki,Bhatkal,Bhimarayanagudi,Bidar,Bijapur,Bilgi,Birur,Bommasandra,Byadgi,Challakere,Chamarajanagar,Channagiri,Channapatna,Channarayapatna,Chik,Chikmagalur,Chiknayakanhalli,Chikodi,Chincholi,Chintamani,Chitapur,Chitgoppa,Chitradurga,Dandeli,Dargajogihalli,Devadurga,Devanahalli,Dod,Donimalai,Gadag,Gajendragarh,Gangawati,Gauribidanur,Gokak,Gonikoppal,Gubbi,Gudibanda,Gulbarga,Guledgudda,Gundlupet,Gurmatkal,Haliyal,Hangal,Harapanahalli,Harihar,Hassan,Hatti,Haveri,Hebbagodi,Heggadadevankote,Hirekerur,Holalkere,Hole,Homnabad,Honavar,Honnali,Hoovina,Hosakote,Hosanagara,Hosdurga,Hospet,Hubli,Hukeri,Hungund,Hunsur,Ilkal,Indi,Jagalur,Jamkhandi,Jevargi,Jog,Kadigenahalli,Kadur,Kalghatgi,Kamalapuram,Kampli,Kanakapura,Karkal,Karwar,Khanapur,Kodiyal,Kolar,Kollegal,Konnur,Koppa,Koppal,Koratagere,Kotturu,Krishnarajanagara,Krishnarajasagara,Krishnarajpet,Kudchi,Kudligi,Kudremukh,Kumta,Kundapura,Kundgol,Kunigal,Kurgunta,Kushalnagar,Kushtagi,Lakshmeshwar,Lingsugur,Londa,Maddur,Madhugiri,Madikeri,Mahalingpur,Malavalli,Mallar,Malur,Mandya,Mangalore,Manvi,Molakalmuru,Mudalgi,Mudbidri,Muddebihal,Mudgal,Mudhol,Mudigere,Mulbagal,Mulgund,Mulki,Mulur,Mundargi,Mundgod,Munirabad,Mysore,Nagamangala,Nanjangud,Narasimharajapura,Naregal,Nargund,Navalgund,Nipani,Pandavapura,Pavagada,Piriyapatna,Pudu,Puttur,Rabkavi,Raichur,Ramanagaram,Ramdurg,Ranibennur,Raybag,Robertson,Ron,Sadalgi,Sagar,Sakleshpur,Saligram,Sandur,Sankeshwar,Saundatti,Savanur,Sedam,Shahabad,Shahpur,Shaktinagar,Shiggaon,Shikarpur,Shirhatti,Shorapur,Shrirangapattana,Siddapur,Sidlaghatta,Sindgi,Sindhnur,Sira,Siralkoppa,Sirsi,Siruguppa,Somvarpet,Sorab,Sringeri,Srinivaspur,Sulya,Talikota,Tarikere,Tekkalakote,Terdal,Thumbe,Tiptur,Tirthahalli,Tirumakudal,Tumkur,Turuvekere,Udupi,Vijayapura,Wadi,Yadgir,Yelandur,Yelbarga,Yellapur,Yenagudde"},{name:"Quechua",i:27,min:6,max:12,d:"l",m:0,b:"Altomisayoq,Ancash,Andahuaylas,Apachekta,Apachita,Apu\xA0,Apurimac,Arequipa,Atahuallpa,Atawalpa,Atico,Ayacucho,Ayllu,Cajamarca,Carhuac,Carhuacatac,Cashan,Caullaraju,Caxamalca,Cayesh,Chacchapunta,Chacraraju,Champara,Chanchan,Chekiacraju,Chinchey,Chontah,Chopicalqui,Chucuito,Chuito,Chullo,Chumpi,Chuncho,Chuquiapo,Churup,Cochapata,Cojup,Collota,Conococha,Copa,Corihuayrachina,Cusichaca,Despacho,Haika,Hanpiq,Hatun,Haywarisqa,Huaca,Hualcan,Huamanga,Huamashraju,Huancarhuas,Huandoy,Huantsan,Huarmihuanusca,Huascaran,Huaylas,Huayllabamba,Huichajanca,Huinayhuayna,Huinioch,Illiasca,Intipunku,Ishinca,Jahuacocha,Jirishanca,Juli,Jurau,Kakananpunta,Kamasqa,Karpay,Kausay,Khuya\xA0,Kuelap,Llaca,Llactapata,Llanganuco,Llaqta,Llupachayoc,Machu,Mallku,Matarraju,Mikhuy,Milluacocha,Munay,Ocshapalca,Ollantaytambo,Pacamayo,Paccharaju,Pachacamac,Pachakamaq,Pachakuteq,Pachakuti,Pachamama\xA0\xA0,Paititi,Pajaten,Palcaraju,Pampa,Panaka,Paqarina,Paqo,Parap,Paria,Patallacta,Phuyupatamarca,Pisac,Pongos,Pucahirca,Pucaranra,Puscanturpa,Putaca,Qawaq\xA0,Qayqa,Qochamoqo,Qollana,Qorihuayrachina,Qorimoqo,Quenuaracra,Queshque,Quillcayhuanca,Quillya,Quitaracsa,Quitaraju,Qusqu,Rajucolta,Rajutakanan,Rajutuna,Ranrahirca,Ranrapalca,Raria,Rasac,Rimarima,Riobamba,Runkuracay,Rurec,Sacsa,Saiwa,Sarapo,Sayacmarca,Sinakara,TamboColorado,Tamboccocha,Taripaypacha,Taulliraju,Tawantinsuyu,Taytanchis,Tiwanaku,Tocllaraju,Tsacra,Tuco,Tullparaju,Tumbes,Ulta,Uruashraju,Vallunaraju,Vilcabamba,Wacho\xA0,Wankawillka,Wayra,Yachay,Yahuarraju,Yanamarey,Yanesha,Yerupaja"},{name:"Swahili",i:28,min:4,max:9,d:"",m:0,b:"Abim,Adjumani,Alebtong,Amolatar,Amuria,Amuru,Apac,Arua,Arusha,Babati,Baragoi,Bombo,Budaka,Bugembe,Bugiri,Buikwe,Bukedea,Bukoba,Bukomansimbi,Bukungu,Buliisa,Bundibugyo,Bungoma,Busembatya,Bushenyi,Busia,Busia,Busolwe,Butaleja,Butambala,Butere,Buwenge,Buyende,Dadaab,Dodoma,Dokolo,Eldoret,Elegu,Emali,Embu,Entebbe,Garissa,Gede,Gulu,Handeni,Hima,Hoima,Hola,Ibanda,Iganga,Iringa,Isingiro,Isiolo,Jinja,Kaabong,Kabale,Kaberamaido,Kabuyanda,Kabwohe,Kagadi,Kahama,Kajiado,Kakamega,Kakinga,Kakira,Kakiri,Kakuma,Kalangala,Kaliro,Kalisizo,Kalongo,Kalungu,Kampala,Kamuli,Kamwenge,Kanoni,Kanungu,Kapchorwa,Kapenguria,Kasese,Kasulu,Katakwi,Kayunga,Kericho,Keroka,Kiambu,Kibaale,Kibaha,Kibingo,Kiboga,Kibwezi,Kigoma,Kihiihi,Kilifi,Kira,Kiruhura,Kiryandongo,Kisii,Kisoro,Kisumu,Kitale,Kitgum,Kitui,Koboko,Korogwe,Kotido,Kumi,Kyazanga,Kyegegwa,Kyenjojo,Kyotera,Lamu,Langata,Lindi,Lodwar,Lokichoggio,Londiani,Loyangalani,Lugazi,Lukaya,Luweero,Lwakhakha,Lwengo,Lyantonde,Machakos,Mafinga,Makambako,Makindu,Malaba,Malindi,Manafwa,Mandera,Maralal,Marsabit,Masaka,Masindi,MasindiPort,Masulita,Matugga,Mayuge,Mbale,Mbarara,Mbeya,Meru,Mitooma,Mityana,Mombasa,Morogoro,Moroto,Moshi,Moyale,Moyo,Mpanda,Mpigi,Mpondwe,Mtwara,Mubende,Mukono,Mumias,Muranga,Musoma,Mutomo,Mutukula,Mwanza,Nagongera,Nairobi,Naivasha,Nakapiripirit,Nakaseke,Nakasongola,Nakuru,Namanga,Namayingo,Namutumba,Nansana,Nanyuki,Narok,Naromoru,Nebbi,Ngora,Njeru,Njombe,Nkokonjeru,Ntungamo,Nyahururu,Nyeri,Oyam,Pader,Paidha,Pakwach,Pallisa,Rakai,Ruiru,Rukungiri,Rwimi,Sanga,Sembabule,Shimoni,Shinyanga,Singida,Sironko,Songea,Soroti,Ssabagabo,Sumbawanga,Tabora,Takaungu,Tanga,Thika,Tororo,Tunduma,Vihiga,Voi,Wajir,Wakiso,Watamu,Webuye,Wobulenzi,Wote,Wundanyi,Yumbe,Zanzibar"},{name:"Vietnamese",i:29,min:3,max:12,d:"",m:1,b:"An Khe,An Nhon,Ayun Pa,Ba Don,Ba Ria,Bac Giang,Bac Kan,Bac Lieu,Bac Ninh,Bao Loc,Ben Cat,Ben Tre,Bien Hoa,Bim Son,Binh Long,Binh Minh,Buon Ho,Buon Ma Thuot,Ca Mau,Cai Lay,Cam Pha,Cam Ranh,Can Tho,Cao Bang,Cao Lanh,Chau Doc,Chi Linh,Cua Lo,Da Lat,Da Nang,Di An,Dien Ban,Dien Bien Phu,Dong Ha,Dong Hoi,Dong Trieu,Duyen Hai,Gia Nghia,Gia Rai,Go Cong,Ha Giang,Ha Long,Ha Noi,Ha Tinh,Hai Duong,Hai Phong,Hoa Binh,Hoang Mai,Hoi An,Hong Linh,Hong Ngu,Hue,Hung Yen,Huong Thuy,Huong Tra,Kien Tuong,Kon Tum,Ky Anh,La Gi,Lai Chau,Lang Son,Lao Cai,Long Khanh,Long My,Long Xuyen,Mong Cai,Muong Lay,My Hao,My Tho,Nam Dinh,Nga Bay,Nga Nam,Nghia Lo,Nha Trang,Ninh Binh,Ninh Hoa,Phan Rang Thap Cham,Phan Thiet,Pho Yen,Phu Ly,Phu My,Phu Tho,Phuoc Long,Pleiku,Quang Ngai,Quang Tri,Quang Yen,Quy Nhon,Rach Gia,Sa Dec,Sam Son,Soc Trang,Son La,Son Tay,Song Cau,Song Cong,Tam Diep,Tam Ky,Tan An,Tan Chau,Tan Uyen,Tay Ninh,Thai Binh,Thai Hoa,Thai Nguyen,Thanh Hoa,Thu Dau Mot,Thuan An,Tra Vinh,Tu Son,Tuy Hoa,Tuyen Quang,Uong Bi,Vi Thanh,Viet Tri,Vinh,Vinh Chau,Vinh Long,Vinh Yen,Vung Tau,Yen Bai"},{name:"Cantonese",i:30,min:5,max:11,d:"",m:0,b:"Chaiwan,Chekham,Cheungshawan,Chingchung,Chinghoi,Chingsen,Chingshing,Chiunam,Chiuon,Chiuyeung,Chiyuen,Choihung,Chuehoi,Chuiman,Chungfa,Chungfu,Chungsan,Chunguktsuen,Dakhing,Daopo,Daumun,Dingwu,Dinpak,Donggun,Dongyuen,Duenchau,Fachau,Fado,Fanling,Fatgong,Fatshan,Fotan,Fuktien,Fumun,Funggong,Funghoi,Fungshun,Fungtei,Gamtin,Gochau,Goming,Gonghoi,Gongshing,Goyiu,Hanghau,Hangmei,Hashan,Hengfachuen,Hengon,Heungchau,Heunggong,Heungkiu,Hingning,Hohfuktong,Hoichue,Hoifung,Hoiping,Hokong,Hokshan,Homantin,Hotin,Hoyuen,Hunghom,Hungshuikiu,Jiuling,Kamping,Kamsheung,Kamwan,Kaulongtong,Keilun,Kinon,Kinsang,Kityeung,Kongmun,Kukgong,Kwaifong,Kwaihing,Kwongchau,Kwongling,Kwongming,Kwuntong,Laichikok,Laiking,Laiwan,Lamtei,Lamtin,Leitung,Leungking,Limkong,Linchau,Linnam,Linping,Linshan,Loding,Lokcheong,Lokfu,Lokmachau,Longchuen,Longgong,Longmun,Longping,Longwa,Longwu,Lowu,Luichau,Lukfung,Lukho,Lungmun,Macheung,Maliushui,Maonshan,Mauming,Maunam,Meifoo,Mingkum,Mogong,Mongkok,Muichau,Muigong,Muiyuen,Naiwai,Namcheong,Namhoi,Namhong,Namo,Namsha,Namshan,Nganwai,Ngchuen,Ngoumun,Ngwa,Nngautaukok,Onting,Pakwun,Paotoishan,Pingshan,Pingyuen,Poklo,Polam,Pongon,Poning,Potau,Puito,Punyue,Saiwanho,Saiyingpun,Samshing,Samshui,Samtsen,Samyuenlei,Sanfung,Sanhing,Sanhui,Sanwai,Sanwui,Seiwui,Shamshuipo,Shanmei,Shantau,Shatin,Shatinwai,Shaukeiwan,Shauking,Shekkipmei,Shekmun,Shekpai,Sheungshui,Shingkui,Shiuhing,Shundak,Shunyi,Shupinwai,Simshing,Siuhei,Siuhong,Siukwan,Siulun,Suikai,Taihing,Taikoo,Taipo,Taishuihang,Taiwai,Taiwo,Taiwohau,Tinhau,Tinho,Tinking,Tinshuiwai,Tiukengleng,Toishan,Tongfong,Tonglowan,Tsakyoochung,Tsamgong,Tsangshing,Tseungkwano,Tsihing,Tsimshatsui,Tsinggong,Tsingshantsuen,Tsingwun,Tsingyi,Tsingyuen,Tsiuchau,Tsuenshekshan,Tsuenwan,Tuenmun,Tungchung,Waichap,Waichau,Waidong,Wailoi,Waishing,Waiyeung,Wanchai,Wanfau,Wanon,Wanshing,Wingon,Wongchukhang,Wongpo,Wongtaisin,Woping,Wukaisha,Yano,Yaumatei,Yauoi,Yautong,Yenfa,Yeungchun,Yeungdong,Yeunggong,Yeungsai,Yeungshan,Yimtin,Yingdak,Yiuping,Yongshing,Yongyuen,Yuenlong,Yuenshing,Yuetsau,Yuknam,Yunping,Yuyuen"},{name:"Mongolian",i:31,min:5,max:12,d:"aou",m:.3,b:"Adaatsag,Airag,Alag Erdene,Altai,Altanshiree,Altantsogts,Arbulag,Baatsagaan,Batnorov,Batshireet,Battsengel,Bayan Adarga,Bayan Agt,Bayanbulag,Bayandalai,Bayandun,Bayangovi,Bayanjargalan,Bayankhongor,Bayankhutag,Bayanlig,Bayanmonkh,Bayannuur,Bayan Ondor,Bayan Ovoo,Bayantal,Bayantsagaan,Bayantumen,Bayan Uul,Bayanzurkh,Berkh,Biger,Binder,Bogd,Bombogor,Bor Ondor,Bugat,Bulgan,Buregkhangai,Burentogtokh,Buutsagaan,Buyant,Chandmani,Chandmani Ondor,Choibalsan,Chuluunkhoroot,Chuluut,Dadal,Dalanjargalan,Dalanzadgad,Darkhan,Darvi,Dashbalbar,Dashinchilen,Delger,Delgerekh,Delgerkhaan,Delgerkhangai,Delgertsogt,Deluun,Deren,Dorgon,Duut,Erdene,Erdenebulgan,Erdeneburen,Erdenedalai,Erdenemandal,Erdenetsogt,Galshar,Galt,Galuut,Govi Ugtaal,Gurvan,Gurvanbulag,Gurvansaikhan,Gurvanzagal,Ikhkhet,Ikh Tamir,Ikh Uul,Jargalan,Jargalant,Jargaltkhaan,Jinst,Khairkhan,Khalhgol,Khaliun,Khanbogd,Khangai,Khangal,Khankh,Khankhongor,Khashaat,Khatanbulag,Khatgal,Kherlen,Khishig Ondor,Khokh,Kholonbuir,Khongor,Khotont,Khovd,Khovsgol,Khuld,Khureemaral,Khurmen,Khutag Ondor,Luus,Mandakh,Mandal Ovoo,Mankhan,Manlai,Matad,Mogod,Monkhkhairkhan,Moron,Most,Myangad,Nogoonnuur,Nomgon,Norovlin,Noyon,Ogii,Olgii,Olziit,Omnodelger,Ondorkhaan,Ondorshil,Ondor Ulaan,Orgon,Orkhon,Rashaant,Renchinlkhumbe,Sagsai,Saikhan,Saikhandulaan,Saikhan Ovoo,Sainshand,Saintsagaan,Selenge,Sergelen,Sevrei,Sharga,Sharyngol,Shine Ider,Shinejinst,Shiveegovi,Sumber,Taishir,Tarialan,Tariat,Teshig,Togrog,Tolbo,Tomorbulag,Tonkhil,Tosontsengel,Tsagaandelger,Tsagaannuur,Tsagaan Ovoo,Tsagaan Uur,Tsakhir,Tseel,Tsengel,Tsenkher,Tsenkhermandal,Tsetseg,Tsetserleg,Tsogt,Tsogt Ovoo,Tsogttsetsii,Tunel,Tuvshruulekh,Ulaanbadrakh,Ulaankhus,Ulaan Uul,Uyench,Yesonbulag,Zag,Zamyn Uud,Zereg"},{name:"Human Generic",i:32,min:6,max:11,d:"peolst",m:0,b:"Grimegrove,Cliffshear,Eaglevein,Basinborn,Whalewich,Faypond,Pondshade,Earthfield,Dustwatch,Houndcall,Oakenbell,Wildwell,Direwallow,Springmire,Bayfrost,Fearwich,Ghostdale,Cursespell,Shadowvein,Freygrave,Freyshell,Tradewick,Grasswallow,Kilshell,Flatwall,Mosswind,Edgehaven,Newfalls,Flathand,Lostcairn,Grimeshore,Littleshade,Millstrand,Snowbay,Quickbell,Crystalrock,Snakewharf,Oldwall,Whitvalley,Stagport,Deadkeep,Claymond,Angelhand,Ebonhold,Shimmerrun,Honeywater,Gloomburn,Arrowburgh,Slyvein,Dawnforest,Dirtshield,Southbreak,Clayband,Oakenrun,Graypost,Deepcairn,Lagoonpass,Cavewharf,Thornhelm,Smoothwallow,Lightfront,Irongrave,Stonespell,Cavemeadow,Millbell,Shimmerwell,Eldermere,Roguehaven,Dogmeadow,Pondside,Springview,Embervault,Dryhost,Bouldermouth,Stormhand,Oakenfall,Clearguard,Lightvale,Freyshear,Flameguard,Bellcairn,Bridgeforest,Scorchwich,Mythgulch,Maplesummit,Mosshand,Iceholde,Knightlight,Dawnwater,Laststar,Westpoint,Goldbreach,Falsevale,Pinegarde,Shroudrock,Whitwharf,Autumnband,Oceanstar,Rosedale,Snowtown,Chillstrand,Saltmouth,Crystalsummit,Redband,Thorncairn,Beargarde,Pearlhaven,Lostward,Northpeak,Sandhill,Cliffgate,Sandminster,Cloudcrest,Mythshear,Dragonward,Coldholde,Knighttide,Boulderharbor,Faybarrow,Dawnpass,Pondtown,Timberside,Madfair,Crystalspire,Shademeadow,Dragonbreak,Castlecross,Dogwell,Caveport,Wildlight,Mudfront,Eldermere,Midholde,Ravenwall,Mosstide,Everborn,Lastmere,Dawncall,Autumnkeep,Oldwatch,Shimmerwood,Eldergate,Deerchill,Fallpoint,Silvergulch,Cavemire,Deerbrook,Pinepond,Ravenside,Thornyard,Scorchstall,Swiftwell,Roguereach,Cloudwood,Smoothtown,Kilhill,Ironhollow,Stillhall,Rustmore,Ragefair,Ghostward,Deadford,Smallmire,Barebreak,Westforest,Bonemouth,Evercoast,Sleekgulch,Neverfront,Lostshield,Icelight,Quickgulch,Brinepeak,Hollowstorm,Limeband,Basinmore,Steepmoor,Blackford,Stormtide,Wildyard,Wolfpass,Houndburn,Pondfalls,Pureshell,Silvercairn,Houndwallow,Dewmere,Fearpeak,Bellstall,Diredale,Crowgrove,Moongulf,Kilholde,Sungulf,Baremore,Bleakwatch,Farrun,Grimeshire,Roseborn,Heartford,Scorchpost,Cloudbay,Whitlight,Timberham,Cloudmouth,Curseminster,Basinfrost,Maplevein,Sungarde,Cloudstar,Bellport,Silkwich,Ragehall,Bellreach,Swampmaw,Snakemere,Highbourne,Goldyard,Lakemond,Shadeville,Mightmouth,Nevercrest,Pinemount,Claymouth,Rosereach,Oldreach,Brittlehelm,Heartfall,Bonegulch,Silkhollow,Crystalgulf,Mutewell,Flameside,Blackwatch,Greenwharf,Moonacre,Beachwick,Littleborough,Castlefair,Stoneguard,Nighthall,Cragbury,Swanwall,Littlehall,Mudford,Shadeforest,Mightglen,Millhand,Easthill,Amberglen,Nighthall,Cragbury,Swanwall,Littlehall,Mudford,Shadeforest,Mightglen,Millhand,Easthill,Amberglen,Smoothcliff,Lakecross,Quicklight,Eaglecall,Silentkeep,Dragonshear,Ebonfront,Oakenmeadow,Cliffshield,Stormhorn,Cavefell,Wildedenn,Earthgate,Brittlecall,Swangarde,Steamwallow,Demonfall,Sleethallow,Mossstar,Dragonhold,Smoothgrove,Sleetrun,Flamewell,Mistvault,Heartvault,Newborough,Deeppoint,Littlehold,Westshell,Caveminster,Swiftshade,Grimwood,Littlemire,Bridgefalls,Lastmere,Fayyard,Madham,Curseguard,Earthpass,Silkbrook,Winterview,Grimeborough,Dustcross,Dogcoast,Dirtstall,Oxlight,Pondstall,Sleetglen,Ghostpeak,Snowshield,Loststar,Chillwharf,Sleettide,Millgulch,Whiteshore,Sunmond,Moonwell,Grassdrift,Westmeadow,Crowvault,Everchill,Bearmire,Bronzegrasp,Oxbrook,Cursefield,Steammouth,Smoothham,Arrowdenn,Stillstrand,Mudwich"},{name:"Elven",i:33,min:6,max:12,d:"lenmsrg",m:0,b:"Adrindest,Aethel,Afranthemar,Aggar,Aiqua,Alari,Allanar,Allanbelle,Almalian,Alora,Alyanasari,Alyelona,Alyran,Amenalenora,Ammar,Amymabelle,Ancalen,AnhAlora,Anore,Anyndell,Arasari,Aren,Ashesari,Ashletheas,Ashmebel,Asrannore,Athelle,Aymlume,Baethei,Bel-Didhel,Belanore,Borethanil,Brinorion,Caelora,Chaggaust,Chaulssad,Chaundra,ChetarIthlin,Cyhmel,Cyla,Cyonore,Cyrangroth,Doladress,Dolarith,Dolasea,Dolonde,Dorthore,Dorwine,Draethe,Dranzan,Draugaust,Dreghei,Drelhei,Dryndlu,E'ana,E'ebel,Eahil,Edhil,Edraithion,Efho,Efranluma,Efvanore,Einyallond,Elathlume,Eld-Sinnocrin,Elddrinn,Elelthyr,Elheinn,Ellanalin,Ellena,Ellheserin,Ellnlin,Ellorthond,Elralara,Elstyr,Eltaesi,Elunore,Eman,EmneLenora,Emyel,Emyranserine,Enhethyr,Ennore,Entheas,Eriargond,Erranlenor,ErrarIthinn,Esari,Esath,Eserius,Eshsalin,Eshthalas,Esseavad,Esyana,EsyseAiqua,Evraland,Faellenor,Faladhell,Famelenora,Fethalas,Filranlean,Filsaqua,Formarion,Ferdor,Gafetheas,GafSerine,Gansari,Geliene,Gondorwin,Guallu,Haeth,Hanluna,Haulssad,Helatheas,Hellerien,Heloriath,Himlarien,Himliene,Hinnead,Hlaughei,Hlinas,Hloireenil,Hluihei,Hluitar,Hlurthei,Hlynead,Iaenarion,Ifrennoris,IllaAncalen,Illanathaes,Illfanora,Imlarlon,Imyfaluna,Imyse,Imyvelian,Inferius,Inhalon,Inllune,Inlurth,innsshe,Inransera,Iralserin,Irethtalos,Irholona,Ishal,Ishlashara,Isyenshara,Ithelion,Iymerius,Iaron,Iulil,Jaal,Jamkadi,Kaalume,Kaansera,Kalthalas,Karanthanil,Karnosea,Kasethyr,Keatheas,Kelsya,KethAiqua,Kmlon,Kyathlenor,Kyhasera,Lahetheas,Lammydr,Lefdorei,Lelhamelle,Lelon,Lenora,Lilean,Lindoress,Lindeenil,Lirillaquen,Litys,Llaughei,Llurthei,Lya,Lyenalon,Lyfa,Lylharion,Lylmhil,Lynathalas,Lir,Machei,Masenoris,Mathathlona,Mathethil,Mathntheas,Meethalas,Melelume,Menyamar,Menzithl,Minthyr,Mithlonde,Mornetheas,Mytha,Mythnserine,Mythsemelle,Mythsthas,Myvanas,Naahona,Nalore,NasadIlaurth,Nasin,Nathemar,Navethas,Neadar,Neanor,Neilon,Nelalon,Nellean,Nelnetaesi,Nfanor,Nilenathyr,Nionande,Nurtaleewe,Nylm,Nytenanas,Nythanlenor,Nythfelon,Nythodorei,Nytlenor,Nidiel,Noruiben,O'anlenora,O'lalona,Obeth,Ofaenathyr,Oflhone,Ollethlune,Ollmarion,Ollmnaes,Ollsmel,Olranlune,Olyaneas,Olynahil,Omanalon,Omyselon,Onelion,Onelond,Onylanor,Orlormel,Orlynn,Ormrion,Oshana,Oshmahona,Oshvamel,Raethei,Raineas,Rauguall,Rauthe,Rauthei,Reisera,Reslenora,Rrharrvhei,Ryanasera,Rymaserin,Sahnor,Saselune,Sel-Zedraazin,Selananor,Sellerion,Selmaluma,Serin,Serine,Shaeras,Shemnas,Shemserin,Sheosari,Sileltalos,Siriande,Siriathil,Sohona,Srannor,Sshanntyr,Sshaulssin,Sshaulu,Syholume,Sylharius,Sylranbel,Symdorei,Syranbel,Szoberr,Silon,Taesi,Thalas,Thalor,Thalore,Tharenlon,Tharlarast,Thelethlune,Thelhohil,Thelnora,Themar,Thene,Thilfalean,Thilnaenor,Thvethalas,Thylathlond,Tiregul,Tirion,Tlauven,Tlindhe,Ulal,Ullallanar,Ullmatalos,Ullve,Ulmetheas,Ulrenserine,Ulssin,Umnalin,Umye,Umyheserine,Unanneas,Unarith,Undraeth,Unysarion,Vel-Shonidor,Venas,Vinargothr,Waethe,Wasrion,Wlalean,Y'maqua,Yaeluma,Yeelume,Yele,Yethrion,Ymserine,Yueghed,Yuereth,Yuerran,Yuethin,Nandeedil,Olwen,Yridhremben"},{name:"Dark Elven",i:34,min:6,max:14,d:"nrslamg",m:.2,b:"Abaethaggar,Abburth,Afranthemar,Aharasplit,Aidanat,Ald'ruhn,Ashamanu,Ashesari,Ashletheas,Baerario,Baereghel,Baethei,Bahashae,Balmora,Bel-Didhel,Borethanil,Buiyrandyn,Caellagith,Caellathala,Caergroth,Caldras,Chaggar,Chaggaust,Channtar,Charrvhel'raugaust,Chaulssin,Chaundra,ChedNasad,ChetarIthlin,ChethRrhinn,Chymaer,Clarkarond,Cloibbra,Commoragh,Cyrangroth,Cilben,D'eldarc,Daedhrog,Dalkyn,Do'Urden,Doladress,Dolarith,Dolonde,Draethe,Dranzan,Dranzithl,Draugaust,Dreghei,Drelhei,Dryndlu,Dusklyngh,DyonG'ennivalz,Edraithion,Eld-Sinnocrin,Ellorthond,Enhethyr,Entheas,ErrarIthinn,Eryndlyn,Faladhell,Faneadar,Fethalas,Filranlean,Formarion,Ferdor,Gafetheas,Ghrond,Gilranel,Glamordis,Gnaarmok,Gnisis,Golothaer,Gondorwin,Guallidurth,Guallu,Gulshin,Haeth,Haggraef,Harganeth,Harkaldra,Haulssad,Haundrauth,Heloriath,Hlammachar,Hlaughei,Hloireenil,Hluitar,Inferius,innsshe,Ithilaughym,Iz'aiogith,Jaal,Jhachalkhyn,Kaerabrae,Karanthanil,Karondkar,Karsoluthiyl,Kellyth,Khuul,Lahetheas,Lidurth,Lindeenil,Lirillaquen,LithMy'athar,LlurthDreier,Lolth,Lothuial,Luihaulen'tar,Maeralyn,Maerimydra,Mathathlona,Mathethil,Mellodona,Menagith,Menegwen,Menerrendil,Menzithl,Menzoberranzan,Mila-Nipal,Mithryn,Molagmar,Mundor,Myvanas,Naggarond,NasadIlaurth,Nauthor,Navethas,Neadar,Nurtaleewe,Nidiel,Noruiben,O'lalona,Obeth,Ofaenathyr,Orlormel,Orlytlar,Pelagiad,Raethei,Raugaust,Rauguall,Rilauven,Rrharrvhei,Sadrith,Sel-Zedraazin,Seydaneen,Shaz'rir,Skaal,Sschindylryn,Shamath,Shamenz,Shanntur,Sshanntynlan,Sshanntyr,Shaulssin,SzithMorcane,Szithlin,Szobaeth,Sirdhemben,T'lindhet,Tebh'zhor,Telmere,Telnarquel,Tharlarast,Thylathlond,Tlaughe,Trizex,Tyrybblyn,Ugauth,Ughym,Ullmatalos,Ulmetheas,Ulrenserine,Uluitur,Undraeth,Undraurth,Undrek'Thoz,Ungethal,UstNatha,V'elddrinnsshar,Vaajha,Vel-Shonidor,Velddra,Velothi,Venead,Vhalth'vha,Vinargothr,Vojha,Waethe,Waethei,Xaalkis,Yakaridan,Yeelume,Yuethin,Yuethindrynn,Zirnakaynin,Nandeedil,olwen,Uhaelben,Uthaessien,Yridhremben"},{name:"Dwarven",i:35,min:4,max:11,d:"dk",m:0,b:"Addundad,Ahagzad,Ahazil,Akil,Akzizad,Anumush,Araddush,Arar,Arbhur,Badushund,Baragzig,Baragzund,Barakinb,Barakzig,Barakzinb,Barakzir,Baramunz,Barazinb,Barazir,Bilgabar,Bilgatharb,Bilgathaz,Bilgila,Bilnaragz,Bilnulbar,Bilnulbun,Bizaddum,Bizaddush,Bizanarg,Bizaram,Bizinbiz,Biziram,Bunaram,Bundinar,Bundushol,Bundushund,Bundushur,Buzaram,Buzundab,Buzundush,Gabaragz,Gabaram,Gabilgab,Gabilgath,Gabizir,Gabunal,Gabunul,Gabuzan,Gatharam,Gatharbhur,Gathizdum,Gathuragz,Gathuraz,Gila,Giledzir,Gilukkhath,Gilukkhel,Gunala,Gunargath,Gunargil,Gundumunz,Gundusharb,Gundushizd,Kharbharbiln,Kharbhatharb,Kharbhela,Kharbilgab,Kharbuzadd,Khatharbar,Khathizdin,Khathundush,Khazanar,Khazinbund,Khaziragz,Khaziraz,Khizdabun,Khizdusharbh,Khizdushath,Khizdushel,Khizdushur,Kholedzar,Khundabiln,Khundabuz,Khundinarg,Khundushel,Khuragzig,Khuramunz,Kibarak,Kibilnal,Kibizar,Kibunarg,Kibundin,Kibuzan,Kinbadab,Kinbaragz,Kinbarakz,Kinbaram,Kinbizah,Kinbuzar,Nala,Naledzar,Naledzig,Naledzinb,Naragzah,Naragzar,Naragzig,Narakzah,Narakzar,Naramunz,Narazar,Nargabad,Nargabar,Nargatharb,Nargila,Nargundum,Nargundush,Nargunul,Narukthar,Narukthel,Nula,Nulbadush,Nulbaram,Nulbilnarg,Nulbunal,Nulbundab,Nulbundin,Nulbundum,Nulbuzah,Nuledzah,Nuledzig,Nulukkhaz,Nulukkhund,Nulukkhur,Sharakinb,Sharakzar,Sharamunz,Sharbarukth,Shatharbhizd,Shatharbiz,Shathazah,Shathizdush,Shathola,Shaziragz,Shizdinar,Shizdushund,Sholukkharb,Shundinulb,Shundushund,Shurakzund,Shuramunz,Tumunzadd,Tumunzan,Tumunzar,Tumunzinb,Tumunzir,Ukthad,Ulbirad,Ulbirar,Ulunzar,Ulur,Umunzad,Undalar,Undukkhil,Undun,Undur,Unduzur,Unzar,Unzathun,Usharar,Zaddinarg,Zaddushur,Zaharbad,Zaharbhizd,Zarakib,Zarakzar,Zaramunz,Zarukthel,Zinbarukth,Zirakinb,Zirakzir,Ziramunz,Ziruktharbh,Zirukthur,Zundumunz"},{name:"Goblin",i:36,min:4,max:9,d:"eag",m:0,b:"Crild,Cielb,Srurd,Fruict,Xurx,Crekork,Strytzakt,Ialsirt,Gnoklig,Kleardeek,Gobbledak,Thelt,Swaxi,Ulm,Shaxi,Thult,Jasheafta,Kleabtong,Bhiagielt,Kuipuinx,Hiszils,Nilbog,Gneabs,Stiolx,Esz,Honk,Veekz,Vohniots,Bratliaq,Slehzit,Diervaq,Zriokots,Buyagh,Treaq,Phax,Ilm,Blus,Srefs,Biokvish,Gigganqi,Watvielx,Katmelt,Slofboif,gobbok,Klilm,Blix,Qosx,Fygsee,Moft,Asinx,Joimtoilm,Styrzangai,Prolkeh,Stioskurt,Mogg,Cel,Far,Rekx,Chalk,Paas,Brybsil,Utiarm,Eebligz,Iahzaarm,Stuikvact,Gobbrin,Ish,Suirx,Utha,Taxai,Onq,Stiaggaltia,Dobruing,Breshass,Cosvil,Traglila,Felhob,Hobgar,Preang,Sios,Wruilt,Chox,Pyreazzi,Glamzofs,Froihiofz,Givzieqee,Vreagaald,Bugbig,Kluirm,Ulb,Driord,Stroir,Croibieq,Bridvelb,Wrogdilk,Slukex,Ozbiard,Gagablin,Heszai,Kass,Chiafzia,Thresxea,Een,Oimzoishai,Enissee,Glernaahx,Qeerags,Phigheldai,Ziggek"},{name:"Orc",i:37,min:4,max:8,d:"gzrcu",m:0,b:"ModhOdod,BodRugniz,Rildral,Zalbrez,Bebugh,Grurro,Ibruzzed,Goccogmurd,CheganKhed,BedgezGraz,IkhUgnan,NoGolkon,Dhezza,Chuccuz,Dribor,Khezdrugh,Uzdriboz,Nolgazgredh,KrogvurOz,ZrucraBi,ErLigvug,OkhUggekh,Vrobrun,Raggird,Adgoz,Chugga,Ghagrocroz,Khuldrerradh,IrmekhBhor,KuzgrurdDedh,ZunBergrord,AdhKhorkol,Alzokh,Mubror,Bozdra,Brugroz,Nuzecro,Qidzodkakh,GharedKrin,OrkudhBhur,EkhKrerdrugh,KrarZurmurd,Nuccag,Rezegh,Lorgran,Grergran,Nadguggez,Mocculdrer,BrorkrilZrog,RurguzVig,CharRodkeg,UghBhelgag,Zulbriz,Rodrekh,Erbragh,Bhicrur,Arkugzo,Arrordri,MiccolBurd,OddighKrodh,UghVruron,VrughNardrer,Dhoddud,Murmad,Chuzar,Vrazin,Ridgozedh,Lazzogno,MughakhChil,VrolburNur,KrighBhurdin,GhadhDrurzan,Adran,Chazgro,Krorgrug,Grodzakh,Ugrudraz,Iggulzaz,KudrukhLi,QuccuBan,GrighKaggaz,ArdGrughokh,Zolbred,Drozgrir,Agkadh,Zuggedh,Lulkore,Dhulbazzol,DhazonNer,ZrazzuzVaz,BrurKorre,EkhMezred,Vaddog,Drirdradh,Qashnagh,Arad,Zadarord,Khorbriccord,NelzorZroz,DruccoRad,DhodhBrerdrodh,BhakhZradgukh,Qirrer,Uzord,Bulbredh,Khuzdraz,Churgrorgadh,Legvicrodh,GazdrakhVrard,VagordKhod,GidhUcceg,BhogKirgol,Brogved,Aga,Kudzal,Brolzug,Ughudadh,Noshnogradh,ZubodUr,ZrulbukhDekh,ReVurkog,RoghChirzaz,Kharkiz,Bhogug,Bozziz,Vuccidh,Ruddirgrad,Zordrordud,GrirkrunQur,IbulBrad,AdAdzurd,GaghDruzred,Acran,Morbraz,Drurgin,Chogidh,Nogvolkar,Uzaggor,KazzuzZrar,ArrulChukh,DiChudun,GhoUgnud,Uzron,Uzdroz,Gholgard,Zragmukh,Qiddolzog,Reradgri,QiccadChal,NubudId,ZrardKrodog,KrudhKhogzokh,Vizdrun,Orrad,Darmon,Ulkin,Zigmorbredh,Bizzadurd,MuccugGhuz,MabraghBhard,DurKhaddol,BheghGegnod,Qazzudh,Drobagh,Zorrudh,Dodkakh,Gribrabrokh,Quggidkad,DududhAkh,DrizdedhAd,GhordBhozdrokh,ZadEzzedh,Larud,Ashnedh,Gridkog,Qirzodh,Bhirgoshbel,Ghirmarokh,ArizDru,AgzilGhal,DrodhAshnugh,UghErrod,Lugekh,Buccel,Rarurd,Verrugh,Qommorbrord,Bagzildre,NazadLudh,IbaghChol,GrazKhulgag,QigKrorkodh,Rozzez,Koggodh,Ruzgrin,Zrigud,Zragrizgrakh,Irdrelzug,VrurzarMol,KezulBruz,GurGhogkagh,KigRadkodh,Ulgor,Kroddadh,Eldrird,Bozgrun,Digzagkigh,Azrurdrekh,KhuzdordDugh,DhurkighGrer,MeGheggor,KoGerkradh,Bashnud,Nirdrukh,Adog,Egmod,Vruzzegvukh,Nagrubagh,DugkegVuz,MorkirZrudh,NudhKuldra,DhodhGhigin,Graldrodh,Rero,Merkraz,Ummo,Largraragh,Brordeggeg,UldrukhBhudh,DregvekhOg,GughZozgrod,GhidZrogiz,Khebun,Ordol,Ghadag,Dredagh,Bhiccozdur,Chizeril,KarkorZrid,EmmanMaz,LiBogzel,EkhBeccon,Dashnukh,Kacruz,Krummel,Dirdrurd,Khalbammedh,Dhizdrermodh,GharuZrug,BhurkrukhLen,ZuZredzokh,BralLazogh,Velgrudh,Dorgri,Irbraz,Udral,Bigkurel,Zarralkod,DhoggunBhogh,AdgrilGha,DrukhQodgoz,KaNube,Vrurgu,Mazgar,Lalga,Bolkan,Kudgroccukh,Zraldrozzuz,VorordUz,ZacradLe,BrukhZrabrul,GagDrugmag,Kraghird,Bhummagh,Brazadh,Kalbrugh,Brogzozir,Mugmodror,RezgrughErd,UmmughEkh,GuNuccul,VunGaghukh,Ghizgil,Arbran,Bulgragh,Negvidh,Girodgrurd,Ghedgrolbrol,DrogvukhDrodh,DhalgronMog,MulDhazzug,ChazCharard,Drurkuz,Niddeg,Bagguz,Ogkal,Rordrushnokh,Gorkozzil,KorkrirGrar,RigaghZrad"},{name:"Giant",i:38,min:5,max:10,d:"kdtng",m:0,b:"Kostand,Throtrek,Solfod,Shurakzund,Heimfara,Anumush,Dulkun,Sigbeorn,Velhera,Glumvat,Khundinarg,Shathizdush,Baramunz,Nargunul,Magald,Noluch,Yotane,Tumunzar,Giledzir,Nurkel,Khizdabun,Yudgor,Hartreo,Galfald,Vigkan,Kibarak,Girkun,Gomruch,Guddud,Darnaric,Botharic,Gunargath,Oldstin,Rizen,Marbold,Nargundush,Hargarth,Kengord,Maerdis,Brerstin,Sigbi,Zigez,Umunzad,Nelkun,Yili,Usharar,Ranhera,Mistoch,Nuledzah,Nulbilnarg,Nulukkhur,Tulkug,Kigine,Marbrand,Gagkake,Khathizdin,Geru,Nagu,Grimor,Kaltoch,Koril,Druguk,Khatharbar,Debuch,Eraddam,Neliz,Brozu,Morluch,Enuz,Gatal,Beratira,Gurkale,Gluthmark,Iora,Tozage,Agane,Kegkez,Nuledzig,Bahourg,Jornangar,Kilfond,Dankuc,Rurki,Eldond,Barakzig,Olane,Gostuz,Grimtira,Brildung,Nulbaram,Nargabar,Narazar,Natan,oci,Khaziragz,Gabuzan,Orga,Addundad,Yulkake,Nulukkhaz,Bundushund,Guril,Barakinb,Sadgach,Vylwed,Vozig,Hildlaug,Chergun,Dagdhor,Kibizar,Shundushund,Mornkin,Jaldhor,inez,Lingarth,Churtec,Naragzah,Gabizir,Zugke,Ranava,Minu,Barazinb,Fynwyn,Talkale,Widhyrde,Sidga,Velfirth,Varkud,Shathola,Duhal,Srokvan,Guruge,Lindira,Rannerg,Kilkan,Gudgiz,Baragzund,Aerora,Inginy,Kharbharbiln,Theoddan,Rirkan,Undukkhil,Borgbert,Dina,Gortho,Kinbuzar,Kuzake,Drard,Gorkege,Nargatharb,Diru,Shatharbiz,Sgandrol,Sharakzar,Barakzinb,Dinez,Jarwar,Khizdushel,Wylaeya,Khazanar,Beornelde,Arangrim,Sholukkharb,Stighere,Gulwo,Irkin,Jornmoth,Gundusharb,Gabaram,Shizdinar,Memron,Guzi,Naramunz,Morntaric,Somrud,Norginny,Bremrol,Rurkoc,Zugkan,Vorkige,Kinbadab,Gila,Sulduch,Natil,Idgurth,Gabaragz,Tolkeg,Eradhelm,Dugfast,Froththorn,Galgrim,Theodgrim,Valdhere,Gazin,Tigkiz,Burthug,Chazruc,Kakkek,Toren"},{name:"Draconic",i:39,min:6,max:14,d:"aliuszrox",m:0,b:"Aaronarra,Adalon,Adamarondor,Aeglyl,Aerosclughpalar,Aghazstamn,Aglaraerose,Agoshyrvor,Alduin,Alhazmabad,Altagos,Ammaratha,Amrennathed,Anaglathos,Andrathanach,Araemra,Araugauthos,Arauthator,Arharzel,Arngalor,Arveiaturace,Athauglas,Augaurath,Auntyrlothtor,Azarvilandral,Azhaq,Balagos,Baratathlaer,Bleucorundum,BrazzPolis,Canthraxis,Capnolithyl,Charvekkanathor,Chellewis,Chelnadatilar,Cirrothamalan,Claugiyliamatar,Cragnortherma,Dargentum,Dendeirmerdammarar,Dheubpurcwenpyl,Domborcojh,Draconobalen,Dragansalor,Dupretiskava,Durnehviir,Eacoathildarandus,Eldrisithain,Enixtryx,Eormennoth,Esmerandanna,Evenaelorathos,Faenphaele,Felgolos,Felrivenser,Firkraag,Fll'Yissetat,Furlinastis,Galadaeros,Galglentor,Garnetallisar,Garthammus,Gaulauntyr,Ghaulantatra,Glouroth,Greshrukk,Guyanothaz,Haerinvureem,Haklashara,Halagaster,Halaglathgar,Havarlan,Heltipyre,Hethcypressarvil,Hoondarrh,Icehauptannarthanyx,Iiurrendeem,Ileuthra,Iltharagh,Ingeloakastimizilian,Irdrithkryn,Ishenalyr,Iymrith,Jaerlethket,Jalanvaloss,Jhannexydofalamarne,Jharakkan,Kasidikal,Kastrandrethilian,Khavalanoth,Khuralosothantar,Kisonraathiisar,Kissethkashaan,Kistarianth,Klauth,Klithalrundrar,Krashos,Kreston,Kriionfanthicus,Krosulhah,Krustalanos,Kruziikrel,Kuldrak,Lareth,Latovenomer,Lhammaruntosz,Llimark,Ma'fel'no'sei'kedeh'naar,MaelestorRex,Magarovallanthanz,Mahatnartorian,Mahrlee,Malaeragoth,Malagarthaul,Malazan,Maldraedior,Maldrithor,MalekSalerno,Maughrysear,Mejas,Meliordianix,Merah,Mikkaalgensis,Mirmulnir,Mistinarperadnacles,Miteach,Mithbarazak,Morueme,Moruharzel,Naaslaarum,Nahagliiv,Nalavarauthatoryl,Naxorlytaalsxar,Nevalarich,Nolalothcaragascint,Nurvureem,Nymmurh,Odahviing,Olothontor,Ormalagos,Otaaryliakkarnos,Paarthurnax,Pelath,Pelendralaar,Praelorisstan,Praxasalandos,Protanther,Qiminstiir,Quelindritar,Ralionate,Rathalylaug,Rathguul,Rauglothgor,Raumorthadar,Relonikiv,Ringreemeralxoth,Roraurim,Ruuthundrarar,Rylatar'ralah'tyma,Rynnarvyx,Sablaxaahl,Sahloknir,Sahrotaar,Samdralyrion,Saryndalaghlothtor,Sawaka,Shalamalauth,Shammagar,Sharndrel,Shianax,Skarlthoon,Skurge,Smergadas,Ssalangan,Sssurist,Sussethilasis,Sylvallitham,Tamarand,Tantlevgithus,Taraunramorlamurla,Tarlacoal,Tenaarlaktor,Thalagyrt,Tharas'kalagram,Thauglorimorgorus,Thoklastees,Thyka,Tsenshivah,Ueurwen,Uinnessivar,Urnalithorgathla,Velcuthimmorhar,Velora,Vendrathdammarar,Venomindhar,Viinturuth,Voaraghamanthar,Voslaarum,Vr'tark,Vrondahorevos,Vuljotnaak,Vulthuryol,Wastirek,Worlathaugh,Xargithorvar,Xavarathimius,Yemere,Ylithargathril,Ylveraasahlisar,Za-Jikku,Zarlandris,Zellenesterex,Zilanthar,Zormapalearath,Zundaerazylym,Zz'Pzora"},{name:"Arachnid",i:40,min:4,max:10,d:"erlsk",m:0,b:"Aaqok'ser,Acah,Aiced,Aisi,Aizachis,Allinqel,As'taq,Ashrash,Caaqtos,Caq'zux,Ceek'sax,Ceezuq,Cek'siereel,Cen'qi,Ceqru,Ceqzocer,Cezeed,Chachocaq,Charis,Chashar,Chashilieth,Checib,Chen'qal,Chernul,Cherzoq,Chezi,Chiazu,Chikoqal,Chishros,Chixhi,Chizhi,Chizoser,Chollash,Choq'sha,Chouk'rix,Cinchichail,Collul,Ecush'taid,Eenqachal,Ekiqe,El'zos,El'zur,Ellu,Eq'tur,Eqa,Eqas,Er'uria,Erikas,Ertu,Es'tase,Esrub,Evirrot,Exha,Haqsho,Heekath,Hiavheesh,Hitha,Hok'thi,Hossa,Iacid,Iciever,Ik'si,Illuq,Iri,Isicer,Isnir,Ivrid,Kaalzux,Keezut,Kheellavas,Kheizoh,Khellinqesh,Khiachod,Khika,Khinchi,Khirzur,Khivila,Khonrud,Khontid,Khosi,Khrakku,Khraqshis,Khrerrith,Khrethish'ti,Khriashus,Khrika,Khrirni,Khrocoqshesh,Klashirel,Klassa,Kleil'sha,Kliakis,Klishuth,Klith'osha,Krarnit,Kras'tex,Kreelzi,Krivas,Krotieqas,Laco,Lairta,Lais'tid,Laizuh,Lasnoth,Lekkol,Len'qeer,Leqanches,Lezad,Lhezsi,Lhilir,Lhivhath,Lhok'thu,Lialliesed,Liaraq,Liarisriq,Liceva,Lichorro,Lilla,Livorzish,Lokieqib,Nakar,Nakur,Naros,Natha,Necuk'saih,Neerhaca,Neet'er,Neezoh,Nenchiled,Nerhalneth,Nir'ih,Nizus,Noreeqo,Novalsher,On'qix,Qailloncho,Qak'sovo,Qalitho,Qartori,Qas'tor,Qasol,Qavrud,Qavud,Qazar,Qazieveq,Qazru,Qeik'thoth,Qekno,Qeqravee,Qes'tor,Qhaaviq,Qhaik'sal,Qhak'sish,Qhazsakais,Qhechorte,Qheliva,Qhenchaqes,Qherazal,Qhesoh,Qhiallud,Qhon'qos,Qhoshielleed,Qish'tur,Qisih,Qollal,Qorhoci,Qouxet,Qranchiq,Racith,Rak'zes,Ranchis,Rarhie,Rarzi,Rarzisiaq,Ras'tih,Ravosho,Recad,Rekid,Relshacash,Reqishee,Rernee,Rertachis,Rezhokketh,Reziel,Rhacish,Rhail'shel,Rhairhizse,Rhakivex,Rhaqeer,Rhartix,Rheciezsei,Rheevid,Rhel'shir,Rhetovraix,Rhevhie,Rhialzub,Rhiavekot,Rhikkos,Rhiqese,Rhiqi,Rhiqracar,Rhisned,Rhokno,Rhousnateb,Rhouvaqid,Riakeesnex,Rik'sid,Rintachal,Rir'ul,Rorrucis,Rosharhir,Rourk'u,Rouzakri,Sailiqei,Sanchiqed,Sanqad,Saqshu,Sat'ier,Sazi,Seiqas,Shieth'i,Shiqsheh,Shizha,Shrachuvo,Shranqo,Shravhos,Shravuth,Shreerhod,Shrethuh,Shriantieth,Shronqash,Shrovarhir,Shrozih,Siacaqoh,Siezosh,Silrul,Siq'sha,Sirro,Sornosi,Srachussi,Sreqrud,Srirnukaaq,Szaca,Szacih,Szaqova,Szasu,Szazhilos,Szeerrud,Szeezsad,Szeknur,Szesir,Szet'as,Szetirrar,Szezhirros,Szilshith,Szon'qol,Szornuq,Xaax'uq,Xeekke,Xosax,Yaconchi,Yacozses,Yazrer,Yeek'su,Yeeq'zox,Yeqil,Yeqroq,Yeveed,Yevied,Yicaveeh,Yirresh,Yisie,Yithik'thaih,Yorhaqshes,Zacheek'sa,Zakkasa,Zaqi,Zelraq,Zeqo,Zhaivoq,Zharuncho,Zhath'arhish,Zhavirrit,Zhazilraq,Zhazot,Zhazsachiel,Zhek'tha,Zhequ,Zhias'ted,Zhicat,Zhicur,Zhiese,Zhirhacil,Zhizri,Zhochizses,Zhorkir,Ziarih,Zirnib,Zis'teq,Zivezeh"},{name:"Serpents",i:41,min:5,max:11,d:"slrk",m:0,b:"Aj'ha,Aj'i,Aj'tiss,Ajakess,Aksas,Aksiss,Al'en,An'jeshe,Apjige,Arkkess,Athaz,Atus,Azras,Caji,Cakrasar,Cal'arrun,Capji,Cathras,Cej'han,Ces,Cez'jenta,Cij'te,Cinash,Cizran,Coth'jus,Cothrash,Culzanek,Cunaless,Ej'tesh,Elzazash,Ergek,Eshjuk,Ethris,Gan'jas,Gapja,Gar'thituph,Gopjeguss,Gor'thesh,Gragishaph,Grar'theness,Grath'ji,Gressinas,Grolzesh,Grorjar,Grozrash,Guj'ika,Harji,Hej'hez,Herkush,Horgarrez,Illuph,Ipjar,Ithashin,Kaj'ess,Kar'kash,Kepjusha,Ki'kintus,Kissere,Koph,Kopjess,Kra'kasher,Krak,Krapjez,Krashjuless,Kraz'ji,Krirrigis,Krussin,Ma'lush,Mage,Maj'tak,Mal'a,Mapja,Mar'kash,Mar'kis,Marjin,Mas,Mathan,Men'jas,Meth'jaresh,Mij'hegak,Min'jash,Mith'jas,Monassu,Moss,Naj'hass,Najugash,Nak,Napjiph,Nar'ka,Nar'thuss,Narrusha,Nash,Nashjekez,Nataph,Nij'ass,Nij'tessiph,Nishjiss,Norkkuss,Nus,Olluruss,Or'thi,Or'thuss,Paj'a,Parkka,Pas,Pathujen,Paz'jaz,Pepjerras,Pirkkanar,Pituk,Porjunek,Pu'ke,Ragen,Ran'jess,Rargush,Razjuph,Rilzan,Riss,Rithruz,Rorgiss,Rossez,Rraj'asesh,Rraj'tass,Rrar'kess,Rrar'thuph,Rras,Rrazresh,Rrej'hish,Rrigelash,Rris,Rris,Rroksurrush,Rukrussush,Rurri,Russa,Ruth'jes,Sa'kitesh,Sar'thass,Sarjas,Sazjuzush,Ser'thez,Sezrass,Shajas,Shas,Shashja,Shass,Shetesh,Shijek,Shun'jaler,Shurjarri,Skaler,Skalla,Skallentas,Skaph,Skar'kerriz,Skath'jeruk,Sker'kalas,Skor,Skoz'ji,Sku'lu,Skuph,Skur'thur,Slalli,Slalt'har,Slelziress,Slil'ar,Sloz'jisa,Sojesh,Solle,Sorge,Sral'e,Sran'ji,Srapjess,Srar'thazur,Srash,Srath'jess,Srathrarre,Srerkkash,Srus,Sruss'tugeph,Sun,Suss'tir,Uzrash,Vargush,Vek,Vess'tu,Viph,Vult'ha,Vupjer,Vushjesash,Xagez,Xassa,Xulzessu,Zaj'tiss,Zan'jer,Zarriss,Zassegus,Zirres,Zsor,Zurjass"}]},getMapName:A,calculateChain:t}}();window.Biomes=function(){return{getDefault:()=>{const t=["Marine","Hot desert","Cold desert","Savanna","Grassland","Tropical seasonal forest","Temperate deciduous forest","Tropical rainforest","Temperate rainforest","Taiga","Tundra","Glacier","Wetland"],n=["#466eab","#fbe79f","#b5b887","#d2d082","#c8d68f","#b6d95d","#29bc56","#7dcb35","#409c43","#4b6b32","#96784b","#d5e7eb","#0b9131"],i=[0,4,10,22,30,50,100,80,90,12,4,0,12],r=[0,3,2,120,120,120,120,150,150,100,5,0,150],c=[{},{dune:3,cactus:6,deadTree:1},{dune:9,deadTree:1},{acacia:1,grass:9},{grass:1},{acacia:8,palm:1},{deciduous:1},{acacia:5,palm:3,deciduous:1,swamp:1},{deciduous:6,swamp:1},{conifer:1},{grass:1},{},{swamp:1}],f=[10,200,150,60,50,70,70,80,90,200,1e3,5e3,150],z=[new Uint8Array([1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10]),new Uint8Array([3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,9,9,9,10,10,10]),new Uint8Array([5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,9,9,9,9,9,10,10,10]),new Uint8Array([5,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,10,10,10]),new Uint8Array([7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,10,10])];for(let m=0;mi<12?qn[i]:Qe.color(t((i-12)/(e-12))).hex()))}function Ct(){return Qe.color(Qe.scaleSequential(Qe.interpolateRainbow)(Math.random())).hex()}function tt(e,t=.2,n=.3){const i=e&&e[0]==="#"?e:Ct(),r=Ct(),c=Qe.interpolate(i,r)(t);return Qe.color(c).brighter(n).hex()}window.Cultures=function(){let e;const t=function(){Q&&console.time("generateCultures"),e=pack.cells,e.culture=new Uint16Array(e.i.length);let A=Math.min(+culturesInput.value,+culturesSet.selectedOptions[0].dataset.max);const u=e.i.filter(a=>e.s[a]);if(u.length + Only ${A} out of ${culturesInput.value} requested cultures will be generated.
+ Please consider changing climate settings in the World Configurator`,$("#alert").dialog({resizable:!1,title:"Extreme climate warning",buttons:{Ok:function(){$(this).dialog("close")}}});else{WARN&&console.warn("There are no populated cells. Cannot generate cultures"),pack.cultures=[{name:"Wildlands",i:0,base:1,shield:"round"}],alertMessage.innerHTML=` The climate is harsh and people cannot live in this world.
+ No cultures, states and burgs will be created.
+ Please consider changing climate settings in the World Configurator`,$("#alert").dialog({resizable:!1,title:"Extreme climate warning",buttons:{Ok:function(){$(this).dialog("close")}}});return}const C=pack.cultures=s(A),g=d3.quadtree(),p=va(A),B=document.getElementById("emblemShape").value,k=[];C.forEach(function(a,w){const S=a.center=d(a.sort?a.sort:h=>e.s[h]);g.add(e.p[S]),a.i=w+1,delete a.odd,delete a.sort,a.color=p[w],a.type=o(S),a.expansionism=l(a.type),a.origins=[0],a.code=bt(a.name,k),k.push(a.code),e.culture[S]=w+1,B==="random"&&(a.shield=b())});function d(a){let w,S=(graphWidth+graphHeight)/2/A;const h=[...u].sort((E,P)=>a(P)-a(E)),v=Math.floor(h.length/2);do w=h[Ot(0,v,5)],S*=.9;while(g.find(e.p[w][0],e.p[w][1],S)!==void 0);return w}C.unshift({name:"Wildlands",i:0,base:1,origins:[null],shield:"round"}),nameBases.length||(ERROR&&console.error("Name base is empty, default nameBases will be applied"),nameBases=Names.getNameBases()),C.forEach(a=>a.base=a.base%nameBases.length);function s(a){let w=i(a);if(a===w.length)return w;if(w.every(v=>v.odd===1))return w.splice(0,a);const S=Math.min(a,w.length),h=[];for(let v,E,P=0;h.length50)return"Highland";const w=pack.features[e.f[e.haven[a]]];return w.type==="lake"&&w.cells>5?"Lake":e.harbor[a]&&w.type!=="lake"&&V(.1)||e.harbor[a]===1&&V(.6)||pack.features[e.f[a]].group==="isle"&&V(.4)?"Naval":e.r[a]&&e.fl[a]>100?"River":e.t[a]>2&&[3,7,8,9,10,12].includes(e.biome[a])?"Hunting":"Generic"}function l(a){let w=1;return a==="Lake"?w=.8:a==="Naval"?w=1.5:a==="River"?w=.9:a==="Nomadic"?w=1.5:a==="Hunting"?w=.7:a==="Highland"&&(w=1.2),O((Math.random()*powerInput.value/2+1)*w,1)}Q&&console.timeEnd("generateCultures")},n=function(A){const u=i();let C,g,p;pack.cultures.lengthl.code)),k=pack.cultures.length,d=d3.color(d3.scaleSequential(d3.interpolateRainbow)(Math.random())).hex();let s=C.shield;document.getElementById("emblemShape").value==="random"&&(s=b()),pack.cultures.push({name:p,color:d,base:g,center:A,i:k,expansionism:1,type:"Generic",cells:0,area:0,rural:0,urban:0,origins:[0],code:B,shield:s})},i=function(A){const u=pack.cells,C=u.s,g=d3.max(C),p=u.t,B=u.h,k=grid.cells.temp,d=a=>Math.ceil(C[a]/g*3),s=(a,w)=>{const S=Math.abs(k[u.g[a]]-w);return S?S+1:1},o=(a,w,S=4)=>w.includes(u.biome[a])?1:S,l=(a,w=4)=>u.haven[a]&&pack.features[u.f[u.haven[a]]].type!=="lake"?1:w;if(culturesSet.value==="european")return[{name:"Shwazen",base:0,odd:1,sort:a=>d(a)/s(a,10)/o(a,[6,8]),shield:"swiss"},{name:"Angshire",base:1,odd:1,sort:a=>d(a)/s(a,10)/l(a),shield:"wedged"},{name:"Luari",base:2,odd:1,sort:a=>d(a)/s(a,12)/o(a,[6,8]),shield:"french"},{name:"Tallian",base:3,odd:1,sort:a=>d(a)/s(a,15),shield:"horsehead"},{name:"Astellian",base:4,odd:1,sort:a=>d(a)/s(a,16),shield:"spanish"},{name:"Slovan",base:5,odd:1,sort:a=>d(a)/s(a,6)*p[a],shield:"polish"},{name:"Norse",base:6,odd:1,sort:a=>d(a)/s(a,5),shield:"heater"},{name:"Elladan",base:7,odd:1,sort:a=>d(a)/s(a,18)*B[a],shield:"boeotian"},{name:"Romian",base:8,odd:.2,sort:a=>d(a)/s(a,15)/p[a],shield:"roman"},{name:"Soumi",base:9,odd:1,sort:a=>d(a)/s(a,5)/o(a,[9])*p[a],shield:"pavise"},{name:"Portuzian",base:13,odd:1,sort:a=>d(a)/s(a,17)/l(a),shield:"renaissance"},{name:"Vengrian",base:15,odd:1,sort:a=>d(a)/s(a,11)/o(a,[4])*p[a],shield:"horsehead2"},{name:"Turchian",base:16,odd:.05,sort:a=>d(a)/s(a,14),shield:"round"},{name:"Euskati",base:20,odd:.05,sort:a=>d(a)/s(a,15)*B[a],shield:"oldFrench"},{name:"Keltan",base:22,odd:.05,sort:a=>d(a)/s(a,11)/o(a,[6,8])*p[a],shield:"oval"}];if(culturesSet.value==="oriental")return[{name:"Koryo",base:10,odd:1,sort:a=>d(a)/s(a,12)/p[a],shield:"round"},{name:"Hantzu",base:11,odd:1,sort:a=>d(a)/s(a,13),shield:"banner"},{name:"Yamoto",base:12,odd:1,sort:a=>d(a)/s(a,15)/p[a],shield:"round"},{name:"Turchian",base:16,odd:1,sort:a=>d(a)/s(a,12),shield:"round"},{name:"Berberan",base:17,odd:.2,sort:a=>d(a)/s(a,19)/o(a,[1,2,3],7)*p[a],shield:"oval"},{name:"Eurabic",base:18,odd:1,sort:a=>d(a)/s(a,26)/o(a,[1,2],7)*p[a],shield:"oval"},{name:"Efratic",base:23,odd:.1,sort:a=>d(a)/s(a,22)*p[a],shield:"round"},{name:"Tehrani",base:24,odd:1,sort:a=>d(a)/s(a,18)*B[a],shield:"round"},{name:"Maui",base:25,odd:.2,sort:a=>d(a)/s(a,24)/l(a)/p[a],shield:"vesicaPiscis"},{name:"Carnatic",base:26,odd:.5,sort:a=>d(a)/s(a,26),shield:"round"},{name:"Vietic",base:29,odd:.8,sort:a=>d(a)/s(a,25)/o(a,[7],7)/p[a],shield:"banner"},{name:"Guantzu",base:30,odd:.5,sort:a=>d(a)/s(a,17),shield:"banner"},{name:"Ulus",base:31,odd:1,sort:a=>d(a)/s(a,5)/o(a,[2,4,10],7)*p[a],shield:"banner"}];if(culturesSet.value==="english"){const a=()=>Names.getBase(1,5,9,"",0);return[{name:a(),base:1,odd:1,shield:"heater"},{name:a(),base:1,odd:1,shield:"wedged"},{name:a(),base:1,odd:1,shield:"swiss"},{name:a(),base:1,odd:1,shield:"oldFrench"},{name:a(),base:1,odd:1,shield:"swiss"},{name:a(),base:1,odd:1,shield:"spanish"},{name:a(),base:1,odd:1,shield:"hessen"},{name:a(),base:1,odd:1,shield:"fantasy5"},{name:a(),base:1,odd:1,shield:"fantasy4"},{name:a(),base:1,odd:1,shield:"fantasy1"}]}return culturesSet.value==="antique"?[{name:"Roman",base:8,odd:1,sort:a=>d(a)/s(a,14)/p[a],shield:"roman"},{name:"Roman",base:8,odd:1,sort:a=>d(a)/s(a,15)/l(a),shield:"roman"},{name:"Roman",base:8,odd:1,sort:a=>d(a)/s(a,16)/l(a),shield:"roman"},{name:"Roman",base:8,odd:1,sort:a=>d(a)/s(a,17)/p[a],shield:"roman"},{name:"Hellenic",base:7,odd:1,sort:a=>d(a)/s(a,18)/l(a)*B[a],shield:"boeotian"},{name:"Hellenic",base:7,odd:1,sort:a=>d(a)/s(a,19)/l(a)*B[a],shield:"boeotian"},{name:"Macedonian",base:7,odd:.5,sort:a=>d(a)/s(a,12)*B[a],shield:"round"},{name:"Celtic",base:22,odd:1,sort:a=>d(a)/s(a,11)**.5/o(a,[6,8]),shield:"round"},{name:"Germanic",base:0,odd:1,sort:a=>d(a)/s(a,10)**.5/o(a,[6,8]),shield:"round"},{name:"Persian",base:24,odd:.8,sort:a=>d(a)/s(a,18)*B[a],shield:"oval"},{name:"Scythian",base:24,odd:.5,sort:a=>d(a)/s(a,11)**.5/o(a,[4]),shield:"round"},{name:"Cantabrian",base:20,odd:.5,sort:a=>d(a)/s(a,16)*B[a],shield:"oval"},{name:"Estian",base:9,odd:.2,sort:a=>d(a)/s(a,5)*p[a],shield:"pavise"},{name:"Carthaginian",base:17,odd:.3,sort:a=>d(a)/s(a,19)/l(a),shield:"oval"},{name:"Mesopotamian",base:23,odd:.2,sort:a=>d(a)/s(a,22)/o(a,[1,2,3]),shield:"oval"}]:culturesSet.value==="highFantasy"?[{name:"Quenian (Elfish)",base:33,odd:1,sort:a=>d(a)/o(a,[6,7,8,9],10)*p[a],shield:"gondor"},{name:"Eldar (Elfish)",base:33,odd:1,sort:a=>d(a)/o(a,[6,7,8,9],10)*p[a],shield:"noldor"},{name:"Trow (Dark Elfish)",base:34,odd:.9,sort:a=>d(a)/o(a,[7,8,9,12],10)*p[a],shield:"hessen"},{name:"Lothian (Dark Elfish)",base:34,odd:.3,sort:a=>d(a)/o(a,[7,8,9,12],10)*p[a],shield:"wedged"},{name:"Dunirr (Dwarven)",base:35,odd:1,sort:a=>d(a)+B[a],shield:"ironHills"},{name:"Khazadur (Dwarven)",base:35,odd:1,sort:a=>d(a)+B[a],shield:"erebor"},{name:"Kobold (Goblin)",base:36,odd:1,sort:a=>p[a]-C[a],shield:"moriaOrc"},{name:"Uruk (Orkish)",base:37,odd:1,sort:a=>B[a]*p[a],shield:"urukHai"},{name:"Ugluk (Orkish)",base:37,odd:.5,sort:a=>B[a]*p[a]/o(a,[1,2,10,11]),shield:"moriaOrc"},{name:"Yotunn (Giants)",base:38,odd:.7,sort:a=>s(a,-10),shield:"pavise"},{name:"Rake (Drakonic)",base:39,odd:.7,sort:a=>-C[a],shield:"fantasy2"},{name:"Arago (Arachnid)",base:40,odd:.7,sort:a=>p[a]-C[a],shield:"horsehead2"},{name:"Aj'Snaga (Serpents)",base:41,odd:.7,sort:a=>d(a)/o(a,[12],10),shield:"fantasy1"},{name:"Anor (Human)",base:32,odd:1,sort:a=>d(a)/s(a,10),shield:"fantasy5"},{name:"Dail (Human)",base:32,odd:1,sort:a=>d(a)/s(a,13),shield:"roman"},{name:"Rohand (Human)",base:16,odd:1,sort:a=>d(a)/s(a,16),shield:"round"},{name:"Dulandir (Human)",base:31,odd:1,sort:a=>d(a)/s(a,5)/o(a,[2,4,10],7)*p[a],shield:"easterling"}]:culturesSet.value==="darkFantasy"?[{name:"Angshire",base:1,odd:1,sort:a=>d(a)/s(a,10)/l(a),shield:"heater"},{name:"Enlandic",base:1,odd:1,sort:a=>d(a)/s(a,12),shield:"heater"},{name:"Westen",base:1,odd:1,sort:a=>d(a)/s(a,10),shield:"heater"},{name:"Nortumbic",base:1,odd:1,sort:a=>d(a)/s(a,7),shield:"heater"},{name:"Mercian",base:1,odd:1,sort:a=>d(a)/s(a,9),shield:"heater"},{name:"Kentian",base:1,odd:1,sort:a=>d(a)/s(a,12),shield:"heater"},{name:"Norse",base:6,odd:.7,sort:a=>d(a)/s(a,5)/l(a),shield:"oldFrench"},{name:"Schwarzen",base:0,odd:.3,sort:a=>d(a)/s(a,10)/o(a,[6,8]),shield:"gonfalon"},{name:"Luarian",base:2,odd:.3,sort:a=>d(a)/s(a,12)/o(a,[6,8]),shield:"oldFrench"},{name:"Hetallian",base:3,odd:.3,sort:a=>d(a)/s(a,15),shield:"oval"},{name:"Astellian",base:4,odd:.3,sort:a=>d(a)/s(a,16),shield:"spanish"},{name:"Kiswaili",base:28,odd:.05,sort:a=>d(a)/s(a,29)/o(a,[1,3,5,7]),shield:"vesicaPiscis"},{name:"Yoruba",base:21,odd:.05,sort:a=>d(a)/s(a,15)/o(a,[5,7]),shield:"vesicaPiscis"},{name:"Koryo",base:10,odd:.05,sort:a=>d(a)/s(a,12)/p[a],shield:"round"},{name:"Hantzu",base:11,odd:.05,sort:a=>d(a)/s(a,13),shield:"banner"},{name:"Yamoto",base:12,odd:.05,sort:a=>d(a)/s(a,15)/p[a],shield:"round"},{name:"Guantzu",base:30,odd:.05,sort:a=>d(a)/s(a,17),shield:"banner"},{name:"Ulus",base:31,odd:.05,sort:a=>d(a)/s(a,5)/o(a,[2,4,10],7)*p[a],shield:"banner"},{name:"Turan",base:16,odd:.05,sort:a=>d(a)/s(a,12),shield:"round"},{name:"Berberan",base:17,odd:.05,sort:a=>d(a)/s(a,19)/o(a,[1,2,3],7)*p[a],shield:"round"},{name:"Eurabic",base:18,odd:.05,sort:a=>d(a)/s(a,26)/o(a,[1,2],7)*p[a],shield:"round"},{name:"Slovan",base:5,odd:.05,sort:a=>d(a)/s(a,6)*p[a],shield:"round"},{name:"Keltan",base:22,odd:.1,sort:a=>d(a)/s(a,11)**.5/o(a,[6,8]),shield:"vesicaPiscis"},{name:"Elladan",base:7,odd:.2,sort:a=>d(a)/s(a,18)/l(a)*B[a],shield:"boeotian"},{name:"Romian",base:8,odd:.2,sort:a=>d(a)/s(a,14)/p[a],shield:"roman"},{name:"Eldar",base:33,odd:.5,sort:a=>d(a)/o(a,[6,7,8,9],10)*p[a],shield:"fantasy5"},{name:"Trow",base:34,odd:.8,sort:a=>d(a)/o(a,[7,8,9,12],10)*p[a],shield:"hessen"},{name:"Durinn",base:35,odd:.8,sort:a=>d(a)+B[a],shield:"erebor"},{name:"Kobblin",base:36,odd:.8,sort:a=>p[a]-C[a],shield:"moriaOrc"},{name:"Uruk",base:37,odd:.8,sort:a=>B[a]*p[a]/o(a,[1,2,10,11]),shield:"urukHai"},{name:"Yotunn",base:38,odd:.8,sort:a=>s(a,-10),shield:"pavise"},{name:"Drake",base:39,odd:.9,sort:a=>-C[a],shield:"fantasy2"},{name:"Rakhnid",base:40,odd:.9,sort:a=>p[a]-C[a],shield:"horsehead2"},{name:"Aj'Snaga",base:41,odd:.9,sort:a=>d(a)/o(a,[12],10),shield:"fantasy1"}]:culturesSet.value==="random"?d3.range(A).map(function(){const a=be(nameBases.length-1);return{name:Names.getBaseShort(a),base:a,odd:1,shield:b()}}):[{name:"Shwazen",base:0,odd:.7,sort:a=>d(a)/s(a,10)/o(a,[6,8]),shield:"hessen"},{name:"Angshire",base:1,odd:1,sort:a=>d(a)/s(a,10)/l(a),shield:"heater"},{name:"Luari",base:2,odd:.6,sort:a=>d(a)/s(a,12)/o(a,[6,8]),shield:"oldFrench"},{name:"Tallian",base:3,odd:.6,sort:a=>d(a)/s(a,15),shield:"horsehead2"},{name:"Astellian",base:4,odd:.6,sort:a=>d(a)/s(a,16),shield:"spanish"},{name:"Slovan",base:5,odd:.7,sort:a=>d(a)/s(a,6)*p[a],shield:"round"},{name:"Norse",base:6,odd:.7,sort:a=>d(a)/s(a,5),shield:"heater"},{name:"Elladan",base:7,odd:.7,sort:a=>d(a)/s(a,18)*B[a],shield:"boeotian"},{name:"Romian",base:8,odd:.7,sort:a=>d(a)/s(a,15),shield:"roman"},{name:"Soumi",base:9,odd:.3,sort:a=>d(a)/s(a,5)/o(a,[9])*p[a],shield:"pavise"},{name:"Koryo",base:10,odd:.1,sort:a=>d(a)/s(a,12)/p[a],shield:"round"},{name:"Hantzu",base:11,odd:.1,sort:a=>d(a)/s(a,13),shield:"banner"},{name:"Yamoto",base:12,odd:.1,sort:a=>d(a)/s(a,15)/p[a],shield:"round"},{name:"Portuzian",base:13,odd:.4,sort:a=>d(a)/s(a,17)/l(a),shield:"spanish"},{name:"Nawatli",base:14,odd:.1,sort:a=>B[a]/s(a,18)/o(a,[7]),shield:"square"},{name:"Vengrian",base:15,odd:.2,sort:a=>d(a)/s(a,11)/o(a,[4])*p[a],shield:"wedged"},{name:"Turchian",base:16,odd:.2,sort:a=>d(a)/s(a,13),shield:"round"},{name:"Berberan",base:17,odd:.1,sort:a=>d(a)/s(a,19)/o(a,[1,2,3],7)*p[a],shield:"round"},{name:"Eurabic",base:18,odd:.2,sort:a=>d(a)/s(a,26)/o(a,[1,2],7)*p[a],shield:"round"},{name:"Inuk",base:19,odd:.05,sort:a=>s(a,-1)/o(a,[10,11])/l(a),shield:"square"},{name:"Euskati",base:20,odd:.05,sort:a=>d(a)/s(a,15)*B[a],shield:"spanish"},{name:"Yoruba",base:21,odd:.05,sort:a=>d(a)/s(a,15)/o(a,[5,7]),shield:"vesicaPiscis"},{name:"Keltan",base:22,odd:.05,sort:a=>d(a)/s(a,11)/o(a,[6,8])*p[a],shield:"vesicaPiscis"},{name:"Efratic",base:23,odd:.05,sort:a=>d(a)/s(a,22)*p[a],shield:"diamond"},{name:"Tehrani",base:24,odd:.1,sort:a=>d(a)/s(a,18)*B[a],shield:"round"},{name:"Maui",base:25,odd:.05,sort:a=>d(a)/s(a,24)/l(a)/p[a],shield:"round"},{name:"Carnatic",base:26,odd:.05,sort:a=>d(a)/s(a,26),shield:"round"},{name:"Inqan",base:27,odd:.05,sort:a=>B[a]/s(a,13),shield:"square"},{name:"Kiswaili",base:28,odd:.1,sort:a=>d(a)/s(a,29)/o(a,[1,3,5,7]),shield:"vesicaPiscis"},{name:"Vietic",base:29,odd:.1,sort:a=>d(a)/s(a,25)/o(a,[7],7)/p[a],shield:"banner"},{name:"Guantzu",base:30,odd:.1,sort:a=>d(a)/s(a,17),shield:"banner"},{name:"Ulus",base:31,odd:.1,sort:a=>d(a)/s(a,5)/o(a,[2,4,10],7)*p[a],shield:"banner"}]},r=function(){Q&&console.time("expandCultures"),e=pack.cells;const A=new PriorityQueue({comparator:(g,p)=>g.p-p.p});pack.cultures.forEach(function(g){!g.i||g.removed||A.queue({e:g.center,p:0,c:g.i})});const u=e.i.length/5e3*3e3*neutralInput.value,C=[];for(;A.length;){const g=A.dequeue(),p=g.e,B=g.p,k=g.c,d=pack.cultures[k].type;e.c[p].forEach(function(s){const o=e.biome[s],l=c(k,o,d),a=o===e.biome[p]?0:20,w=f(s,e.h[s],d),S=z(e.r[s],s,d),h=m(e.t[s],d),v=B+(l+a+w+S+h)/pack.cultures[k].expansionism;v>u||(!C[s]||v0&&(e.culture[s]=k),C[s]=v,A.queue({e:s,p:v,c:k}))})}Q&&console.timeEnd("expandCultures")};function c(A,u,C){return e.biome[pack.cultures[A].center]===u?10:C==="Hunting"?biomesData.cost[u]*5:C==="Nomadic"&&u>4&&u<10?biomesData.cost[u]*10:biomesData.cost[u]*2}function f(A,u,C){const g=pack.features[e.f[A]],p=e.area[A];return C==="Lake"&&g.type==="lake"?10:C==="Naval"&&u<20?p*2:C==="Nomadic"&&u<20?p*50:u<20?p*6:C==="Highland"&&u<44?3e3:C==="Highland"&&u<62?200:C==="Highland"?0:u>=67?200:u>=44?30:0}function z(A,u,C){return C==="River"?A?0:100:A?Ie(e.fl[u]/10,20,100):0}function m(A,u){return A===1?u==="Naval"||u==="Lake"?0:u==="Nomadic"?60:20:A===2?u==="Naval"||u==="Nomadic"?30:0:A!==-1&&(u==="Naval"||u==="Lake")?100:0}const b=function(){const A=he(COA.shields.types);return he(COA.shields[A])};return{generate:t,add:n,expand:r,getDefault:i,getRandomShield:b}}();function wt(){var e;if(coastline.select("#sea_island").size()&&+coastline.select("#sea_island").attr("auto-filter")){const t=scale>1.5&&scale<=2.6?null:scale>2.6?"url(#blurFilter)":"url(#dropShadow)";coastline.select("#sea_island").attr("filter",t)}if(labels.style("display")!=="none"&&labels.selectAll("g").each(function(){if(this.id==="burgLabels")return;const t=+this.dataset.size,n=Math.max(O((t+t/scale)/2,2),1);rescaleLabels.checked&&this.setAttribute("font-size",n),hideLabels.checked&&(n*scale<6||n*scale>60)?this.classList.add("hidden"):this.classList.remove("hidden")}),emblems.style("display")!=="none"&&emblems.selectAll("g").each(function(){const t=this.getAttribute("font-size")*scale,n=hideEmblems.checked&&(t<25||t>300);n?this.classList.add("hidden"):this.classList.remove("hidden"),!n&&window.COArenderer&&this.children.length&&!this.children[0].getAttribute("href")&&renderGroupCOAs(this)}),oceanPattern.select("rect").attr("fill",scale>10?"#fff":"url(#oceanic)").attr("opacity",scale>10?.2:null),!customization){const t=+statesHalo.attr("data-width"),n=O(t/scale**.8,2);statesHalo.attr("stroke-width",n).style("display",n>.1?"block":"none")}if(+markers.attr("rescale")&&((e=pack.markers)==null||e.forEach(t=>{const{i:n,x:i,y:r,size:c=30,hidden:f}=t,z=!f&&document.getElementById(`marker${n}`);if(!z)return;const m=Math.max(O(c/5+24/scale,2),1);z.setAttribute("width",m),z.setAttribute("height",m),z.setAttribute("x",O(i-m/2,1)),z.setAttribute("y",O(r-m,1))})),ruler.style("display")!=="none"){const t=O(10/scale**.3*2,2);ruler.selectAll("text").attr("font-size",t)}}function ge(e){return e.ctrlKey||e.metaKey}const lt=document.getElementById("prompt"),Vn=lt.querySelector("#promptForm"),Ye=lt.querySelector("#promptInput"),Zn=lt.querySelector("#promptText"),Jn=lt.querySelector("#promptCancel"),Yn="Please provide an input",Xn={default:1,step:.01,min:0,max:100,required:!0};function Qn(e=Yn,t=Xn,n){if(t.default===void 0)return console.error("Prompt: options object does not have default value defined");Zn.innerHTML=e,Ye.type=typeof t.default=="number"?"number":"text",t.step!==void 0&&(Ye.step=String(t.step)),t.min!==void 0&&(Ye.min=String(t.min)),t.max!==void 0&&(Ye.max=String(t.max)),Ye.required=t.required!==!1,Ye.placeholder="type a "+Ye.type,Ye.value=String(t.default),lt.style.display="block",Vn.addEventListener("submit",i=>{i.preventDefault(),lt.style.display="none";const r=Ye.type==="number"?Number(Ye.value):Ye.value;n&&n(r)},{once:!0})}Jn.addEventListener("click",()=>{lt.style.display="none"});const $n={"\xB0C":e=>O(e)+"\xB0C","\xB0F":e=>O(e*9/5+32)+"\xB0F",K:e=>O(e+273.15)+"K","\xB0R":e=>O((e+273.15)*9/5)+"\xB0R","\xB0De":e=>O((100-e)*3/2)+"\xB0De","\xB0N":e=>O(e*33/100)+"\xB0N","\xB0R\xE9":e=>O(e*4/5)+"\xB0R\xE9","\xB0R\xF8":e=>O(e*21/40+7.5)+"\xB0R\xF8"};function Xt(e){var i;const t=((i=ne("temperatureScale"))==null?void 0:i.value)||"\xB0C",n=$n[t];return n(e)}function Qt(e){return e>=1e9?O(e/1e9,1)+"B":e>=1e8?O(e/1e6)+"M":e>=1e6?O(e/1e6,1)+"M":e>=1e4?O(e/1e3)+"K":e>=1e3?O(e/1e3,1)+"K":O(e)}function _n(e,t,n,i){return function r(c,f){if(f>=i.length)return n(c);const z=new Map,m=i[f++];let b=-1;for(const A of c){const u=m(A,++b,c),C=z.get(u);C?C.push(A):z.set(u,[A])}for(const[A,u]of z)z.set(A,r(u,f));return t(z)}(e,0)}function Xs(e,t,n){return _n(e,Array.from,t,n)}function vt(e,t){let n;return(...i)=>{let r;return n&&clearTimeout(n),n=setTimeout(()=>{r=e(...i)},t),r}}function eo(e,t=300){let n,i,r;return function(){const c=this,f=arguments;n?(clearTimeout(i),i=setTimeout(()=>{Date.now()-r>=t&&(e.apply(c,f),r=Date.now())},Math.max(t-(Date.now()-r),0))):(e.apply(c,f),r=Date.now(),n=!0)}}function ka(e,t){const n=new XMLHttpRequest;n.onload=function(){const i=new FileReader;i.onloadend=function(){t(i.result)},i.readAsDataURL(n.response)},n.open("GET",e),n.responseType="blob",n.send()}let pt={};to();io();function $t(){return{political:["toggleBorders","toggleIcons","toggleIce","toggleLabels","toggleRivers","toggleRoutes","toggleScaleBar","toggleStates"],cultural:["toggleBorders","toggleCultures","toggleIcons","toggleLabels","toggleRivers","toggleRoutes","toggleScaleBar"],religions:["toggleBorders","toggleIcons","toggleLabels","toggleReligions","toggleRivers","toggleRoutes","toggleScaleBar"],provinces:["toggleBorders","toggleIcons","toggleProvinces","toggleRivers","toggleScaleBar"],biomes:["toggleBiomes","toggleIce","toggleRivers","toggleScaleBar"],heightmap:["toggleHeight","toggleRivers"],physical:["toggleCoordinates","toggleHeight","toggleIce","toggleRivers","toggleScaleBar"],poi:["toggleBorders","toggleHeight","toggleIce","toggleIcons","toggleMarkers","toggleRivers","toggleRoutes","toggleScaleBar"],military:["toggleBorders","toggleIcons","toggleLabels","toggleMilitary","toggleRivers","toggleRoutes","toggleScaleBar","toggleStates"],emblems:["toggleBorders","toggleIcons","toggleIce","toggleEmblems","toggleRivers","toggleRoutes","toggleScaleBar","toggleStates"],landmass:["toggleScaleBar"]}}function to(){pt=$t();const e=JSON.parse(localStorage.getItem("presets"));if(!!e){for(const t in e)pt[t]||layersPreset.add(new Option(t,t));pt=e}}function ao(){var t;const e=ze("preset")||((t=ne("layersPreset"))==null?void 0:t.value)||"political";no(e)}function no(e){const t=pt[e];ne("mapLayers").querySelectorAll("li").forEach(function(r){const{id:c}=r;(t.includes(c)&&!Pe(c)||!t.includes(c)&&Pe(c))&&r.click()}),ne("layersPreset").value=e,pa("preset",e);const i=$t()[e];ne("removePresetButton").style.display=i?"none":"inline-block",ne("savePresetButton").style.display="none",ne("canvas3d")&&setTimeout(ThreeD.update(),400)}function wa(){const e=ne("mapLayers").querySelectorAll("li:not(.buttonoff)"),t=Array.from(e).map(i=>i.id).sort(),n=$t();for(const i in pt)if(JSON.stringify(pt[i].sort())===JSON.stringify(t)){ne("layersPreset").value=i,ne("removePresetButton").style.display=n[i]?"none":"inline-block",ne("savePresetButton").style.display="none";return}ne("layersPreset").value="custom",ne("removePresetButton").style.display="none",ne("savePresetButton").style.display="inline-block"}const ra={toggleBiomes:ho,toggleBorders:Bo,toggleCells:bo,toggleCompass:Ho,toggleCoordinates:Ro,toggleCultures:So,toggleEmblems:Xo,toggleGrid:Lo,toggleHeight:ro,toggleIce:ko,toggleIcons:Vo,toggleLabels:qo,toggleMarkers:Oo,toggleMilitary:Fo,togglePopulation:fo,togglePrec:po,toggleProvinces:Mo,toggleRelief:Uo,toggleReligions:zo,toggleRivers:Ko,toggleRoutes:Do,toggleRulers:Zo,toggleScaleBar:Jo,toggleStates:Co,toggleTemp:co,toggleTexture:No,toggleZones:Yo};function oo(e){const t=e.target.id;!t||t==="mapLayers"||!ra[t]||ra[t]()}function io(){ne("mapLayers").on("click",oo)}function ro(e){if(customization===1){se("You cannot turn off the layer when heightmap is in edit mode",!1,"error");return}if(!terrs.selectAll("*").size())Le("toggleHeight"),so(),e&&ge(e)&&editStyle("terrs");else{if(e&&ge(e)){editStyle("terrs");return}Ee("toggleHeight"),terrs.selectAll("*").remove()}}function so(){Q&&console.time("drawHeightmap"),terrs.selectAll("*").remove();const{cells:e,vertices:t}=pack,n=e.i.length,i=new Uint8Array(e.i.length),r=new Array(101).fill(""),c=Sa(terrs.attr("scheme")),f=terrs.attr("terracing")/10,z=+terrs.attr("skip")+1,m=+terrs.attr("relax");switch(+terrs.attr("curve")){case 0:lineGen.curve(d3.curveBasisClosed);break;case 1:lineGen.curve(d3.curveLinear);break;case 2:lineGen.curve(d3.curveStep);break;default:lineGen.curve(d3.curveBasisClosed)}let b=20;const A=e.i.sort((g,p)=>e.h[g]-e.h[p]);for(const g of A){const p=e.h[g];if(p>b&&(b+=z),b>100)break;if(pe.h[o]t.c[o].some(l=>e.h[l]t.p[o]);r[p]+=round(lineGen(s))}terrs.append("rect").attr("x",0).attr("y",0).attr("width",graphWidth).attr("height",graphHeight).attr("fill",c(.8));for(const g of d3.range(20,101)){if(r[g].length<10)continue;const p=lo(g,c);f&&terrs.append("path").attr("d",r[g]).attr("transform","translate(.7,1.4)").attr("fill",d3.color(p).darker(f)).attr("data-height",g),terrs.append("path").attr("d",r[g]).attr("fill",p).attr("data-height",g)}function u(g,p){const B=[];for(let k=0,d=g;k===0||d!==g&&k<2e4;k++){const s=B[B.length-1];B.push(d);const o=t.c[d];o.filter(h=>e.h[h]===p).forEach(h=>i[h]=1);const l=o[0]>=n||e.h[o[0]]=n||e.h[o[1]]=n||e.h[o[2]]k%p===0)}Q&&console.timeEnd("drawHeightmap")}function Sa(e){return e==="bright"?d3.scaleSequential(d3.interpolateSpectral):e==="light"?d3.scaleSequential(d3.interpolateRdYlGn):e==="green"?d3.scaleSequential(d3.interpolateGreens):e==="monochrome"?d3.scaleSequential(d3.interpolateGreys):d3.scaleSequential(d3.interpolateSpectral)}function lo(e,t=Sa()){return t(1-(e<20?e-5:e)/100)}function co(e){if(!temperature.selectAll("*").size())Le("toggleTemp"),uo(),e&&ge(e)&&editStyle("temperature");else{if(e&&ge(e)){editStyle("temperature");return}Ee("toggleTemp"),temperature.selectAll("*").remove()}}function uo(){Q&&console.time("drawTemp"),temperature.selectAll("*").remove(),lineGen.curve(d3.curveBasisClosed);const e=d3.scaleSequential(d3.interpolateSpectral),t=+temperatureEquatorOutput.max,n=+temperatureEquatorOutput.min,i=t-n,r=grid.cells,c=grid.vertices,f=r.i.length,z=new Uint8Array(f),m=d3.min(r.temp),b=d3.max(r.temp),A=Math.max(Math.round(Math.abs(m-b)/5),1),u=d3.range(m+A,b,A),C=[],g=[];for(const o of r.i){const l=r.temp[o];if(z[o]||!u.includes(l))continue;const a=B(o,l);if(!a)continue;z[o]=1;const S=s(a,l).filter((v,E)=>E%4===0||c.c[v].some(P=>P>=f));if(S.length<6)continue;const h=S.map(v=>c.p[v]);C.push([l,h]),k(h,l)}temperature.append("path").attr("d",`M0,0 h${graphWidth} v${graphHeight} h${-graphWidth} Z`).attr("fill",e(1-(m-n)/i)).attr("stroke","none");for(const o of u){const l=C.filter(S=>S[0]===o).map(S=>round(lineGen(S[1]))).join("");if(!l)continue;const a=e(1-(o-n)/i),w=d3.color(a).darker(.2);temperature.append("path").attr("d",l).attr("fill",a).attr("stroke",w)}temperature.append("g").attr("id","tempLabels").attr("fill-opacity",1).selectAll("text").data(g).enter().append("text").attr("x",o=>o[0]).attr("y",o=>o[1]).text(o=>Xt(o[2]));function B(o,l){return r.b[o]?r.v[o].find(a=>c.c[a].some(w=>w>=f)):r.v[o][r.c[o].findIndex(a=>r.temp[a]S[1]-h[1]+(Math.abs(S[0]-a)-Math.abs(h[0]-a))/2)];if(d(w[0],w[1],l),o.length>20){const S=o[d3.scan(o,(v,E)=>E[1]-v[1]+(Math.abs(v[0]-a)-Math.abs(E[0]-a))/2)];(w[1]-S[1])**2+(w[0]-S[0])**2>100&&d(S[0],S[1],l)}}function d(o,l,a){o<20||o>svgWidth-20||l<20||l>svgHeight-20||g.push([o,l,a])}function s(o,l){const a=[];for(let w=0,S=o;w===0||S!==o&&w<2e4;w++){const h=a[a.length-1];a.push(S);const v=c.c[S];v.filter(L=>r.temp[L]===l).forEach(L=>z[L]=1);const E=v[0]>=f||r.temp[v[0]]=f||r.temp[v[1]]=f||r.temp[v[2]]e.biome[C]!==z))continue;const b=e.v[f].find(C=>t.c[C].some(g=>e.biome[g]!==z)),A=c(b,z);if(A.length<3)continue;const u=Et(A.map(C=>t.p[C]));r[z]+="M"+u.join("L")+"Z"}r.forEach(function(f,z){f.length<10||biomes.append("path").attr("d",f).attr("fill",biomesData.color[z]).attr("stroke",biomesData.color[z]).attr("id","biome"+z)});function c(f,z){const m=[];for(let b=0,A=f;b===0||A!==f&&b<2e4;b++){const u=m[m.length-1];m.push(A);const C=t.c[A];C.filter(d=>e.biome[d]===z).forEach(d=>i[d]=1);const g=C[0]>=n||e.biome[C[0]]!==z,p=C[1]>=n||e.biome[C[1]]!==z,B=C[2]>=n||e.biome[C[2]]!==z,k=t.v[A];if(k[0]!==u&&g!==p?A=k[0]:k[1]!==u&&p!==B?A=k[1]:k[2]!==u&&g!==B&&(A=k[2]),A===m[m.length-1]){ERROR&&console.error("Next vertex is not found");break}}return m}}function po(e){if(!prec.selectAll("circle").size())Le("togglePrec"),mo(),e&&ge(e)&&editStyle("prec");else{if(e&&ge(e)){editStyle("prec");return}Ee("togglePrec");const t=d3.transition().duration(1e3).ease(d3.easeSinIn);prec.selectAll("text").attr("opacity",1).transition(t).attr("opacity",0),prec.selectAll("circle").transition(t).attr("r",0).remove(),prec.transition().delay(1e3).style("display","none")}}function mo(){prec.selectAll("circle").remove();const{cells:e,points:t}=grid;prec.style("display","block");const n=d3.transition().duration(800).ease(d3.easeSinIn);prec.selectAll("text").attr("opacity",0).transition(n).attr("opacity",1);const i=(pointsInput.dataset.cells/1e4)**.25,r=e.i.filter(f=>e.h[f]>=20&&e.prec[f]),c=f=>O(Math.sqrt(f/4)/i,2);prec.selectAll("circle").data(r).enter().append("circle").attr("cx",f=>t[f][0]).attr("cy",f=>t[f][1]).attr("r",0).transition(n).attr("r",f=>c(e.prec[f]))}function fo(e){if(!population.selectAll("line").size())Le("togglePopulation"),yo(),e&&ge(e)&&editStyle("population");else{if(e&&ge(e)){editStyle("population");return}if(Ee("togglePopulation"),!population.select("line").datum())population.selectAll("line").remove();else{const n=d3.transition().duration(1e3).ease(d3.easeSinIn);population.select("#rural").selectAll("line").transition(n).attr("y2",i=>i[1]).remove(),population.select("#urban").selectAll("line").transition(n).delay(1e3).attr("y2",i=>i[1]).remove()}}}function yo(e){population.selectAll("line").remove();const t=pack.cells,n=t.p,i=pack.burgs,r=d3.transition().duration(2e3).ease(d3.easeSinIn),c=Array.from(t.i.filter(z=>t.pop[z]>0),z=>[n[z][0],n[z][1],n[z][1]-t.pop[z]/8]);population.select("#rural").selectAll("line").data(c).enter().append("line").attr("x1",z=>z[0]).attr("y1",z=>z[1]).attr("x2",z=>z[0]).attr("y2",z=>z[1]).transition(r).attr("y2",z=>z[2]);const f=i.filter(z=>z.i&&!z.removed).map(z=>[z.x,z.y,z.y-z.population/8*urbanization]);population.select("#urban").selectAll("line").data(f).enter().append("line").attr("x1",z=>z[0]).attr("y1",z=>z[1]).attr("x2",z=>z[0]).attr("y2",z=>z[1]).transition(r).delay(500).attr("y2",z=>z[2])}function bo(e){if(!cells.selectAll("path").size())Le("toggleCells"),vo(),e&&ge(e)&&editStyle("cells");else{if(e&&ge(e)){editStyle("cells");return}cells.selectAll("path").remove(),Ee("toggleCells")}}function vo(){cells.selectAll("path").remove();const e=customization===1?grid.cells.i:pack.cells.i,t=customization===1?fa:getPackPolygon;let n="";e.forEach(i=>n+="M"+t(i)),cells.append("path").attr("d",n)}function ko(e){if(!Pe("toggleIce"))Le("toggleIce"),$("#ice").fadeIn(),ice.selectAll("*").size()||wo(),e&&ge(e)&&editStyle("ice");else{if(e&&ge(e)){editStyle("ice");return}$("#ice").fadeOut(),Ee("toggleIce")}}function wo(){const e=grid.cells,t=grid.vertices,n=e.i.length,i=e.temp,r=e.h,c=new Uint8Array(e.i.length);Math.random=aleaPRNG(seed);const f=-8,z=1;for(const A of grid.cells.i){const u=i[A];if(u>z||u>f&&r[A]>=20)continue;if(u<=f){if(c[A]||!e.c[A].some(d=>i[d]>f))continue;const p=e.v[A].find(d=>t.c[d].some(s=>i[s]>f)),B=b(p);if(B.length<3)continue;const k=Et(B.map(d=>t.p[d]));ice.append("polygon").attr("points",k).attr("type","iceShield");continue}if(V(ga(u,-7,2.5))||grid.features[e.f[A]].type==="lake")continue;let C=(6.5+u)/10;e.t[A]===-1&&(C*=1.3),C=Math.min(C*(.4+be()*1.2),.95),m(A,C)}function m(A,u){const C=grid.points[A],g=fa(A).map(p=>[p[0]+(C[0]-p[0])*u|0,p[1]+(C[1]-p[1])*u|0]);ice.append("polygon").attr("points",g).attr("cell",A).attr("size",O(1-u,2))}function b(A){const u=[];for(let C=0,g=A;C===0||g!==A&&C<2e4;C++){const p=De(u);u.push(g);const B=t.c[g];B.filter(l=>i[l]<=f).forEach(l=>c[l]=1);const k=B[0]>=n||i[B[0]]>f,d=B[1]>=n||i[B[1]]>f,s=B[2]>=n||i[B[2]]>f,o=t.v[g];if(o[0]!==p&&k!==d?g=o[0]:o[1]!==p&&d!==s?g=o[1]:o[2]!==p&&k!==s&&(g=o[2]),g===u[u.length-1]){ERROR&&console.error("Next vertex is not found");break}}return u}}function So(e){const t=pack.cultures.filter(i=>i.i&&!i.removed);if(!cults.selectAll("path").size()&&t.length)Le("toggleCultures"),Ao(),e&&ge(e)&&editStyle("cults");else{if(e&&ge(e)){editStyle("cults");return}cults.selectAll("path").remove(),Ee("toggleCultures")}}function Ao(){Q&&console.time("drawCultures"),cults.selectAll("path").remove();const{cells:e,vertices:t,cultures:n}=pack,i=e.i.length,r=new Uint8Array(e.i.length),c=new Array(n.length).fill("");for(const m of e.i){if(!e.culture[m]||r[m])continue;r[m]=1;const b=e.culture[m];if(!e.c[m].some(p=>e.culture[p]!==b))continue;const u=e.v[m].find(p=>t.c[p].some(B=>e.culture[B]!==b)),C=z(u,b);if(C.length<3)continue;const g=C.map(p=>t.p[p]);c[b]+="M"+g.join("L")+"Z"}const f=c.map((m,b)=>[m,b]).filter(m=>m[0].length>10);cults.selectAll("path").data(f).enter().append("path").attr("d",m=>m[0]).attr("fill",m=>n[m[1]].color).attr("id",m=>"culture"+m[1]);function z(m,b){const A=[];for(let u=0,C=m;u===0||C!==m&&u<2e4;u++){const g=A[A.length-1];A.push(C);const p=t.c[C];p.filter(o=>e.culture[o]===b).forEach(o=>r[o]=1);const B=p[0]>=i||e.culture[p[0]]!==b,k=p[1]>=i||e.culture[p[1]]!==b,d=p[2]>=i||e.culture[p[2]]!==b,s=t.v[C];if(s[0]!==g&&B!==k?C=s[0]:s[1]!==g&&k!==d?C=s[1]:s[2]!==g&&B!==d&&(C=s[2]),C===A[A.length-1]){ERROR&&console.error("Next vertex is not found");break}}return A}Q&&console.timeEnd("drawCultures")}function zo(e){const t=pack.religions.filter(n=>n.i&&!n.removed);if(!relig.selectAll("path").size()&&t.length)Le("toggleReligions"),xo(),e&&ge(e)&&editStyle("relig");else{if(e&&ge(e)){editStyle("relig");return}relig.selectAll("path").remove(),Ee("toggleReligions")}}function xo(){Q&&console.time("drawReligions"),relig.selectAll("path").remove();const{cells:e,vertices:t,religions:n}=pack,i=e.i.length,r=new Uint8Array(e.i.length),c=new Array(n.length),f=new Array(n.length).fill(""),z=new Array(n.length).fill("");for(const u of e.i){if(!e.religion[u]||r[u])continue;r[u]=1;const C=e.religion[u];if(!e.c[u].filter(s=>e.religion[s]!==C).length)continue;const p=e.c[u].map(s=>e.religion[s]).find(s=>s!==C),B=e.v[u].find(s=>t.c[s].some(o=>e.religion[o]===p)),k=A(B,C,p);if(k.length<3)continue;const d=k.map(s=>t.p[s[0]]);c[C]||(c[C]=[]),c[C].push(d),f[C]+="M"+d.join("L")+"Z",z[C]+="M"+t.p[k[0][0]]+k.reduce((s,o,l,a)=>l?o[2]?a[l+1]&&!a[l+1][2]?s+"M"+t.p[o[0]]:s:s+"L"+t.p[o[0]]:s,"")}const m=f.map((u,C)=>[u.length>10?u:null,C,n[C].color]).filter(u=>u[0]);relig.selectAll("path").data(m).enter().append("path").attr("d",u=>u[0]).attr("fill",u=>u[2]).attr("id",u=>"religion"+u[1]);const b=z.map((u,C)=>[u.length>10?u:null,C,n[C].color]).filter(u=>u[0]);relig.selectAll(".path").data(b).enter().append("path").attr("d",u=>u[0]).attr("fill","none").attr("stroke",u=>u[2]).attr("id",u=>"religion-gap"+u[1]).attr("stroke-width","10px");function A(u,C,g){const p=[];let B=t.c[u].some(d=>e.h[d]>=20&&e.religion[d]!==C);function k(d){g=e.religion[d],B=e.h[d]>=20}for(let d=0,s=u;d===0||s!==u&&d<2e4;d++){const o=p[p.length-1]?p[p.length-1][0]:-1;p.push([s,g,B]);const l=t.c[s];l.filter(v=>e.religion[v]===C).forEach(v=>r[v]=1);const a=l[0]>=i||e.religion[l[0]]!==C,w=l[1]>=i||e.religion[l[1]]!==C,S=l[2]>=i||e.religion[l[2]]!==C,h=t.v[s];if(h[0]!==o&&a!==w?(s=h[0],k(a?l[0]:l[1])):h[1]!==o&&w!==S?(s=h[1],k(w?l[1]:l[2])):h[2]!==o&&a!==S&&(s=h[2],k(S?l[2]:l[0])),s===p[p.length-1][0]){ERROR&&console.error("Next vertex is not found");break}}return p}Q&&console.timeEnd("drawReligions")}function Co(e){if(!Pe("toggleStates"))Le("toggleStates"),regions.style("display",null),Aa(),e&&ge(e)&&editStyle("regions");else{if(e&&ge(e)){editStyle("regions");return}regions.style("display","none").selectAll("path").remove(),Ee("toggleStates")}}function Aa(){Q&&console.time("drawStates"),regions.selectAll("path").remove();const{cells:e,vertices:t,features:n}=pack,i=pack.states,r=e.i.length,c=new Uint8Array(e.i.length),f=new Array(i.length),z=new Array(i.length).fill(""),m=new Array(i.length).fill(""),b=new Array(i.length).fill(""),A=l=>t.p[l[0]].join(","),u=n.map(l=>{if(l.type!=="lake")return!1;l.shoreline||Lakes.getShoreline(l);const a=l.shoreline.map(w=>e.state[w]);return!(new Set(a).size>1)});for(const l of e.i){if(!e.state[l]||c[l])continue;const a=e.state[l];if(!e.c[l].some(R=>e.state[R]!==a))continue;const S=e.c[l].map(R=>e.state[R]).find(R=>R!==a),h=e.v[l].find(R=>t.c[R].some(L=>e.state[L]===S)),v=o(h,a),E=v.filter(R=>R[1]!=="innerLake");if(E.length<3)continue;f[a]||(f[a]=[]);const P=E.map(R=>t.p[R[0]]);f[a].push(P),z[a]+="M"+P.join("L");let T=!0;b[a]+=E.map(R=>{if(R[1]==="border")return T=!0,"";const L=T?"M":"L";return T=!1,`${L}${A(R)}`}).join(""),T=!0,m[a]+=v.map(R=>{if(R[1]==="land")return T=!0,"";const L=T?"M":"L";return T=!1,`${L}${A(R)}`}).join("")}f.forEach((l,a)=>{const w=l.sort((S,h)=>h.length-S.length);i[a].pole=polylabel(w,1)});const C=z.map((l,a)=>[l.length>10?l:null,a,i[a].color]).filter(l=>l[0]),g=m.map((l,a)=>[l.length>10?l:null,a,i[a].color]).filter(l=>l[0]),p=b.map((l,a)=>[l.length>10?l:null,a,i[a].color]).filter(l=>l[0]),B=C.map(l=>``).join(""),k=g.map(l=>``).join(""),d=C.map(l=>``).join(""),s=p.map(l=>``).join("");statesBody.html(B+k),defs.select("#statePaths").html(d),statesHalo.html(s);function o(l,a){const w=[],S=h=>{if(h.find(P=>e.b[P]))return"border";const E=h.find(P=>e.h[P]<20);return E?u[e.f[E]]?"innerLake":n[e.f[E]].type:"land"};for(let h=0,v=l;h===0||v!==l&&h<2e4;h++){const E=w.length?w[w.length-1][0]:-1,P=t.c[v];w.push([v,S(P)]),P.filter(I=>e.state[I]===a).forEach(I=>c[I]=1);const T=P[0]>=r||e.state[P[0]]!==a,R=P[1]>=r||e.state[P[1]]!==a,L=P[2]>=r||e.state[P[2]]!==a,M=t.v[v];if(M[0]!==E&&T!==R?v=M[0]:M[1]!==E&&R!==L?v=M[1]:M[2]!==E&&T!==L&&(v=M[2]),v===E){ERROR&&console.error("Next vertex is not found");break}}return w.length&&w.push(w[0]),w}wt(),Q&&console.timeEnd("drawStates")}function Bo(e){if(!Pe("toggleBorders"))Le("toggleBorders"),za(),e&&ge(e)&&editStyle("borders");else{if(e&&ge(e)){editStyle("borders");return}Ee("toggleBorders"),borders.selectAll("path").remove()}}function za(){Q&&console.time("drawBorders"),borders.selectAll("path").remove();const{cells:e,vertices:t}=pack,n=e.i.length,i=[],r=[],c=new Array(pack.states.length).fill("").map(m=>[]),f=new Array(pack.provinces.length).fill("").map(m=>[]);for(let m=0;me.state[g]===A&&b>e.province[g]&&f[b][g]!==e.province[g]);if(u){const g=e.province[u];f[b][u]=g;const p=e.v[m].find(k=>t.c[k].some(d=>e.province[d]===g)),B=z(p,b,e.province,g,f);if(B.length>1){r.push("M"+B.map(k=>t.p[k]).join(" ")),m--;continue}}const C=e.c[m].find(g=>e.h[g]>=20&&A>e.state[g]&&c[A][g]!==e.state[g]);if(C!==void 0){const g=e.state[C];c[A][C]=g;const p=e.v[m].find(k=>t.c[k].some(d=>e.h[d]>=20&&e.state[d]===g)),B=z(p,A,e.state,g,c);if(B.length>1){i.push("M"+B.map(k=>t.p[k]).join(" ")),m--;continue}}}stateBorders.append("path").attr("d",i.join(" ")),provinceBorders.append("path").attr("d",r.join(" "));function z(m,b,A,u,C){let g=[];const p=k=>k>=n||A[k]!==b,B=k=>t.c[k].some(d=>A[d]===b)&&t.c[k].some(d=>A[d]===u&&e.h[d]>=20);for(let k=0;k<1e3;k++){k===999&&ERROR&&console.error("Find starting vertex: limit is reached",m,b,u);const d=g[g.length-2]||-1,s=t.v[m],o=t.c[m],l=p(o[0])!==p(o[1])&&B(s[0]),a=p(o[1])!==p(o[2])&&B(s[1]),w=p(o[0])!==p(o[2])&&B(s[2]);if(l+a+w===1||(m=l&&d!==s[0]?s[0]:a&&d!==s[1]?s[1]:s[2],m===g[0]))break;if(m===d)return[];g.push(m)}g=[m];for(let k=0;k<1e3;k++){k===999&&ERROR&&console.error("Find path: limit is reached",m,b,u);const d=g[g.length-2]||-1,s=t.v[m],o=t.c[m];o.filter(S=>A[S]===u).forEach(S=>C[b][S]=u);const l=p(o[0])!==p(o[1])&&B(s[0]),a=p(o[1])!==p(o[2])&&B(s[1]),w=p(o[0])!==p(o[2])&&B(s[2]);if(m=l&&d!==s[0]?s[0]:a&&d!==s[1]?s[1]:s[2],m===d||m===g[g.length-1]||g.length>1&&l+a+w<2||(g.push(m),m===g[0]))break}return g}Q&&console.timeEnd("drawBorders")}function Mo(e){if(!Pe("toggleProvinces"))Le("toggleProvinces"),Eo(),e&&ge(e)&&editStyle("provs");else{if(e&&ge(e)){editStyle("provs");return}provs.selectAll("*").remove(),Ee("toggleProvinces")}}function Eo(){Q&&console.time("drawProvinces");const e=provs.attr("data-labels")==1;provs.selectAll("*").remove();const t=pack.provinces,{body:n,gap:i}=xa(),r=provs.append("g").attr("id","provincesBody"),c=n.map((b,A)=>[b.length>10?b:null,A,t[A].color]).filter(b=>b[0]);r.selectAll("path").data(c).enter().append("path").attr("d",b=>b[0]).attr("fill",b=>b[2]).attr("stroke","none").attr("id",b=>"province"+b[1]);const f=i.map((b,A)=>[b.length>10?b:null,A,t[A].color]).filter(b=>b[0]);r.selectAll(".path").data(f).enter().append("path").attr("d",b=>b[0]).attr("fill","none").attr("stroke",b=>b[2]).attr("id",b=>"province-gap"+b[1]);const z=provs.append("g").attr("id","provinceLabels");z.style("display",`${e?"block":"none"}`);const m=t.filter(b=>b.i&&!b.removed&&b.pole);z.selectAll(".path").data(m).enter().append("text").attr("x",b=>b.pole[0]).attr("y",b=>b.pole[1]).attr("id",b=>"provinceLabel"+b.i).text(b=>b.name),Q&&console.timeEnd("drawProvinces")}function xa(){const e=pack.cells,t=pack.vertices,n=pack.provinces,i=e.i.length,r=new Uint8Array(e.i.length),c=new Array(n.length),f=new Array(n.length).fill(""),z=new Array(n.length).fill("");for(const b of e.i){if(!e.province[b]||r[b])continue;const A=e.province[b];if(!e.c[b].some(k=>e.province[k]!==A))continue;const C=e.c[b].map(k=>e.province[k]).find(k=>k!==A),g=e.v[b].find(k=>t.c[k].some(d=>e.province[d]===C)),p=m(g,A,C);if(p.length<3)continue;const B=p.map(k=>t.p[k[0]]);c[A]||(c[A]=[]),c[A].push(B),f[A]+="M"+B.join("L"),z[A]+="M"+t.p[p[0][0]]+p.reduce((k,d,s,o)=>s?d[2]?o[s+1]&&!o[s+1][2]?k+"M"+t.p[d[0]]:k:k+"L"+t.p[d[0]]:k,"")}return c.forEach((b,A)=>{const u=b.sort((C,g)=>g.length-C.length);n[A].pole=polylabel(u,1)}),{body:f,gap:z};function m(b,A,u){const C=[];let g=t.c[b].some(B=>e.h[B]>=20&&e.province[B]!==A);function p(B){u=e.province[B],g=e.h[B]>=20}for(let B=0,k=b;B===0||k!==b&&B<2e4;B++){const d=C[C.length-1]?C[C.length-1][0]:-1;C.push([k,u,g]);const s=t.c[k];s.filter(S=>e.province[S]===A).forEach(S=>r[S]=1);const o=s[0]>=i||e.province[s[0]]!==A,l=s[1]>=i||e.province[s[1]]!==A,a=s[2]>=i||e.province[s[2]]!==A,w=t.v[k];if(w[0]!==d&&o!==l?(k=w[0],p(o?s[0]:s[1])):w[1]!==d&&l!==a?(k=w[1],p(l?s[1]:s[2])):w[2]!==d&&o!==a&&(k=w[2],p(a?s[2]:s[0])),k===C[C.length-1][0]){ERROR&&console.error("Next vertex is not found");break}}return C.push([b,u,g]),C}}function Lo(e){if(!gridOverlay.selectAll("*").size())Le("toggleGrid"),Io(),calculateFriendlyGridSize(),e&&ge(e)&&editStyle("gridOverlay");else{if(e&&ge(e)){editStyle("gridOverlay");return}Ee("toggleGrid"),gridOverlay.selectAll("*").remove()}}function Io(){gridOverlay.selectAll("*").remove();const e="#pattern_"+(gridOverlay.attr("type")||"pointyHex"),t=gridOverlay.attr("stroke")||"#808080",n=gridOverlay.attr("stroke-width")||.5,i=gridOverlay.attr("stroke-dasharray")||null,r=gridOverlay.attr("stroke-linecap")||null,c=gridOverlay.attr("scale")||1,f=gridOverlay.attr("dx")||0,z=gridOverlay.attr("dy")||0,m=`scale(${c}) translate(${f} ${z})`,b=Math.max(+mapWidthInput.value,graphWidth),A=Math.max(+mapHeightInput.value,graphHeight);d3.select(e).attr("stroke",t).attr("stroke-width",n).attr("stroke-dasharray",i).attr("stroke-linecap",r).attr("patternTransform",m),gridOverlay.append("rect").attr("width",b).attr("height",A).attr("fill","url("+e+")").attr("stroke","none")}function Ro(e){if(!coordinates.selectAll("*").size())Le("toggleCoordinates"),To(),e&&ge(e)&&editStyle("coordinates");else{if(e&&ge(e)){editStyle("coordinates");return}Ee("toggleCoordinates"),coordinates.selectAll("*").remove()}}function To(){if(!Pe("toggleCoordinates"))return;coordinates.selectAll("*").remove();const e=[.5,1,2,5,10,15,30],t=mapCoordinates.lonT/scale/10,n=e.reduce((u,C)=>Math.abs(C-t){const C=u.coordinates[0][1]===u.coordinates[1][1],g=u.coordinates[0],p=c(g),[B,k]=C?[O(m.x,2),O(p[1],2)]:[O(p[0],2),O(m.y,2)],d=C?g[1]:g[0],s=d&&(Number.isInteger(d)?C?g[1]<0?-g[1]+"\xB0S":g[1]+"\xB0N":g[0]<0?-g[0]+"\xB0W":g[0]+"\xB0E":"");return{lat:C,x:B,y:k,text:s}}),A=round(d3.geoPath(c)(r()));f.append("path").attr("d",A).attr("vector-effect","non-scaling-stroke"),z.selectAll("text").data(b).enter().append("text").attr("x",u=>u.x).attr("y",u=>u.y).text(u=>u.text)}function Po(e,t){const n=ne("viewbox"),r=ne("map").createSVGPoint();return r.x=e,r.y=t,r.matrixTransform(n.getScreenCTM().inverse())}function Ho(e){if(!Pe("toggleCompass"))Le("toggleCompass"),$("#compass").fadeIn(),compass.selectAll("*").size()||(compass.append("use").attr("xlink:href","#rose"),shiftCompass()),e&&ge(e)&&editStyle("compass");else{if(e&&ge(e)){editStyle("compass");return}$("#compass").fadeOut(),Ee("toggleCompass")}}function Uo(e){if(!Pe("toggleRelief"))Le("toggleRelief"),terrain.selectAll("*").size()||ReliefIcons(),$("#terrain").fadeIn(),e&&ge(e)&&editStyle("terrain");else{if(e&&ge(e)){editStyle("terrain");return}$("#terrain").fadeOut(),Ee("toggleRelief")}}function No(e){if(Pe("toggleTexture")){if(e&&ge(e))return editStyle("texture");$("#texture").fadeOut(),Ee("toggleTexture")}else{if(Le("toggleTexture"),!texture.selectAll("*").size()){const t=+styleTextureShiftX.value,n=+styleTextureShiftY.value,i=texture.append("image").attr("id","textureImage").attr("x",t).attr("y",n).attr("width",graphWidth-t).attr("height",graphHeight-n).attr("preserveAspectRatio","xMidYMid slice");ka(styleTextureInput.value,r=>i.attr("xlink:href",r))}$("#texture").fadeIn(),zoom.scaleBy(svg,1.00001),e&&ge(e)&&editStyle("texture")}}function Ko(e){if(!Pe("toggleRivers"))Le("toggleRivers"),Ca(),e&&ge(e)&&editStyle("rivers");else{if(e&&ge(e))return editStyle("rivers");rivers.selectAll("*").remove(),Ee("toggleRivers")}}function Ca(){Q&&console.time("drawRivers"),rivers.selectAll("*").remove();const{addMeandering:e,getRiverPath:t}=Rivers;lineGen.curve(d3.curveCatmullRom.alpha(.1));const n=pack.rivers.map(({cells:i,points:r,i:c,widthFactor:f,sourceWidth:z})=>{if(!i||i.length<2)return;r&&r.length!==i.length&&(console.error(`River ${c} has ${i.length} cells, but only ${r.length} points defined. Resetting points data`),r=void 0);const m=e(i,r),b=t(m,f,z);return``});rivers.html(n.join("")),Q&&console.timeEnd("drawRivers")}function Do(e){if(!Pe("toggleRoutes"))Le("toggleRoutes"),$("#routes").fadeIn(),e&&ge(e)&&editStyle("routes");else{if(e&&ge(e)){editStyle("routes");return}$("#routes").fadeOut(),Ee("toggleRoutes")}}function Fo(e){if(!Pe("toggleMilitary"))Le("toggleMilitary"),$("#armies").fadeIn(),e&&ge(e)&&editStyle("armies");else{if(e&&ge(e)){editStyle("armies");return}$("#armies").fadeOut(),Ee("toggleMilitary")}}function Oo(e){if(!Pe("toggleMarkers"))Le("toggleMarkers"),Go(),e&&ge(e)&&editStyle("markers");else{if(e&&ge(e))return editStyle("markers");markers.selectAll("*").remove(),Ee("toggleMarkers")}}function Go(){const e=+markers.attr("rescale"),i=(+markers.attr("pinned")?pack.markers.filter(({pinned:r})=>r):pack.markers).map(r=>Wo(r,e));markers.html(i.join(""))}const jo=(e="bubble",t="#fff",n="#000")=>{if(e==="bubble")return``;if(e==="pin")return``;if(e==="square")return``;if(e==="squarish")return``;if(e==="diamond")return``;if(e==="hex")return``;if(e==="hexy")return``;if(e==="shieldy")return``;if(e==="shield")return``;if(e==="pentagon")return``;if(e==="heptagon")return``;if(e==="circle")return``;if(e==="no")return""};function Wo(e,t=1){const{i:n,icon:i,x:r,y:c,dx:f=50,dy:z=50,px:m=12,size:b=30,pin:A,fill:u,stroke:C}=e,g=`marker${n}`,p=t?Math.max(O(b/5+24/scale,2),1):b,B=O(r-p/2,1),k=O(c-p,1),d=jo(A,u,C);return`${d}${i}`}function qo(e){if(!Pe("toggleLabels"))Le("toggleLabels"),labels.style("display",null),wt(),e&&ge(e)&&editStyle("labels");else{if(e&&ge(e)){editStyle("labels");return}Ee("toggleLabels"),labels.style("display","none")}}function Vo(e){if(!Pe("toggleIcons"))Le("toggleIcons"),$("#icons").fadeIn(),e&&ge(e)&&editStyle("burgIcons");else{if(e&&ge(e)){editStyle("burgIcons");return}Ee("toggleIcons"),$("#icons").fadeOut()}}function Zo(e){if(!Pe("toggleRulers"))Le("toggleRulers"),e&&ge(e)&&editStyle("ruler"),rulers.draw(),ruler.style("display",null);else{if(e&&ge(e)){editStyle("ruler");return}Ee("toggleRulers"),ruler.selectAll("*").remove(),ruler.style("display","none")}}function Jo(e){if(!Pe("toggleScaleBar"))Le("toggleScaleBar"),$("#scaleBar").fadeIn(),e&&ge(e)&&editUnits();else{if(e&&ge(e)){editUnits();return}$("#scaleBar").fadeOut(),Ee("toggleScaleBar")}}function Yo(e){if(!Pe("toggleZones"))Le("toggleZones"),$("#zones").fadeIn(),e&&ge(e)&&editStyle("zones");else{if(e&&ge(e)){editStyle("zones");return}Ee("toggleZones"),$("#zones").fadeOut()}}function Xo(e){if(!Pe("toggleEmblems"))Le("toggleEmblems"),emblems.selectAll("use").size()||Qo(),$("#emblems").fadeIn(),e&&ge(e)&&editStyle("emblems");else{if(e&&ge(e)){editStyle("emblems");return}$("#emblems").fadeOut(),Ee("toggleEmblems")}}function Qo(){Q&&console.time("drawEmblems");const{states:e,provinces:t,burgs:n}=pack,i=e.filter(d=>d.i&&!d.removed&&d.coa&&d.coaSize!=0),r=t.filter(d=>d.i&&!d.removed&&d.coa&&d.coaSize!=0),c=n.filter(d=>d.i&&!d.removed&&d.coa&&d.coaSize!=0),f=()=>{const d=Ie((graphHeight+graphWidth)/40,10,100),s=1+i.length/100-(15-i.length)/200,o=+ne("emblemsStateSizeInput").value||1;return O(d/s*o)},z=()=>{const d=Ie((graphHeight+graphWidth)/100,5,70),s=1+r.length/1e3-(115-r.length)/1e3,o=+ne("emblemsProvinceSizeInput").value||1;return O(d/s*o)},b=(()=>{const d=Ie((graphHeight+graphWidth)/185,2,50),s=1+c.length/1e3-(450-c.length)/1e3,o=+ne("emblemsBurgSizeInput").value||1;return O(d/s*o)})(),A=c.map(d=>{const{x:s,y:o}=d,l=d.coaSize||1,a=b*l/2;return{type:"burg",i:d.i,x:s,y:o,size:l,shift:a}}),u=z(),C=r.map(d=>{d.pole||xa();const[s,o]=d.pole||pack.cells.p[d.center],l=d.coaSize||1,a=u*l/2;return{type:"province",i:d.i,x:s,y:o,size:l,shift:a}}),g=f(),p=i.map(d=>{const[s,o]=d.pole||pack.cells.p[d.center],l=d.coaSize||1,a=g*l/2;return{type:"state",i:d.i,x:s,y:o,size:l,shift:a}}),B=A.concat(C).concat(p),k=d3.forceSimulation(B).alphaMin(.6).alphaDecay(.2).velocityDecay(.6).force("collision",d3.forceCollide().radius(d=>d.shift)).stop();d3.timeout(function(){const d=Math.ceil(Math.log(k.alphaMin())/Math.log(1-k.alphaDecay()));for(let h=0;hh.type==="burg").map(h=>``).join("");emblems.select("#burgEmblems").attr("font-size",b).html(o);const a=B.filter(h=>h.type==="province").map(h=>``).join("");emblems.select("#provinceEmblems").attr("font-size",u).html(a);const S=B.filter(h=>h.type==="state").map(h=>``).join("");emblems.select("#stateEmblems").attr("font-size",g).html(S),wt()}),Q&&console.timeEnd("drawEmblems")}function Pe(e){return!ne(e).classList.contains("buttonoff")}function Ee(e){ne(e).classList.add("buttonoff"),wa()}function Le(e){ne(e).classList.remove("buttonoff"),wa()}$("#mapLayers").sortable({items:"li:not(.solid)",containment:"parent",cancel:".solid",update:$o});function $o(e,t){const n=Nt(t.item.attr("id"));if(!n)return;const i=Nt(t.item.prev().attr("id")),r=Nt(t.item.next().attr("id"));i?n.insertAfter(i):r&&n.insertBefore(r)}function Nt(e){if(e==="toggleHeight")return $("#terrs");if(e==="toggleBiomes")return $("#biomes");if(e==="toggleCells")return $("#cells");if(e==="toggleGrid")return $("#gridOverlay");if(e==="toggleCoordinates")return $("#coordinates");if(e==="toggleCompass")return $("#compass");if(e==="toggleRivers")return $("#rivers");if(e==="toggleRelief")return $("#terrain");if(e==="toggleReligions")return $("#relig");if(e==="toggleCultures")return $("#cults");if(e==="toggleStates")return $("#regions");if(e==="toggleProvinces")return $("#provs");if(e==="toggleBorders")return $("#borders");if(e==="toggleRoutes")return $("#routes");if(e==="toggleTemp")return $("#temperature");if(e==="togglePrec")return $("#prec");if(e==="togglePopulation")return $("#population");if(e==="toggleIce")return $("#ice");if(e==="toggleTexture")return $("#texture");if(e==="toggleEmblems")return $("#emblems");if(e==="toggleLabels")return $("#labels");if(e==="toggleIcons")return $("#icons");if(e==="toggleMarkers")return $("#markers");if(e==="toggleRulers")return $("#ruler")}window.BurgsAndStates=function(){const e=function(){const{cells:o,cultures:l}=pack,a=o.i.length;o.burg=new Uint16Array(a),o.road=new Uint16Array(a),o.crossroad=new Uint16Array(a);const w=pack.burgs=E();pack.states=P();const S=Routes.getRoads();T(),c(),f();const h=Routes.getTrails();t();const v=Routes.getSearoutes();b(),A(),g(),p(),Routes.draw(S,h,v),r();function E(){Q&&console.time("placeCapitals");let R=+regionsOutput.value,L=[0];const M=()=>.5+Math.random()*.5,I=new Int16Array(o.s.map(U=>U*M())),H=o.i.filter(U=>I[U]>0&&o.culture[U]).sort((U,F)=>I[F]-I[U]);if(H.lengthU*Ce(1,3,0,20,3))),L=o.i.filter(U=>!o.burg[U]&&R[U]>0&&o.culture[U]).sort((U,F)=>R[F]-R[U]),M=manorsInput.value==1e3?O(L.length/5/(grid.points.length/1e4)**.8):manorsInput.valueAsNumber,I=Math.min(M,L.length);let H=0;const G=w[0];let D=(graphWidth+graphHeight)/150/(I**.7/66);for(;H1;){for(let U=0;H0){const L=o.f[v],M=l[L].cells>1&&(S.capital&&o.harbor[h]||o.harbor[h]===1);S.port=M?L:0}else S.port=0;if(S.population=O(Math.max((o.s[h]+o.road[h]/2)/8+S.i/1e3+h%100/1e3,.1),3),S.capital&&(S.population=O(S.population*1.3,3)),S.port){S.population=S.population*1.3;const[L,M]=ya(h,v);S.x=L,S.y=M}if(S.population=O(S.population*Ce(2,3,.6,20,3),3),!S.port&&o.r[h]){const L=Math.min(o.fl[h]/150,1);h%2?S.x=O(S.x+L,2):S.x=O(S.x-L,2),o.r[h]%2?S.y=O(S.y+L,2):S.y=O(S.y-L,2)}const E=pack.states[S.state],P=E.coa;let T=.25;S.capital?T+=.1:S.port&&(T-=.1),S.culture!==E.culture&&(T-=.25),S.type=n(h,S.port);const R=S.capital&&V(.2)?"Capital":S.type==="Generic"?"City":S.type;S.coa=COA.generate(P,T,null,R),S.coa.shield=COA.getShield(S.culture,S.state)}const w=pack.burgs.filter(S=>!S.removed&&S.port>0);for(const S of l){if(!S.i||S.land||S.border)continue;const h=w.filter(v=>v.port===S.i);h.length===1&&(h[0].port=0)}Q&&console.timeEnd("specifyBurgs")},n=function(o,l){const a=pack.cells;if(l)return"Naval";if(a.haven[o]&&pack.features[a.f[a.haven[o]]].type==="lake")return"Lake";if(a.h[o]>60)return"Highland";if(a.r[o]&&a.r[o].length>100&&a.r[o].length>=pack.rivers[0].length)return"River";if(!a.burg[o]||pack.burgs[a.burg[o]].population<6){if(population<5&&[1,2,3,4].includes(a.biome[o]))return"Nomadic";if(a.biome[o]>4&&a.biome[o]<10)return"Hunting"}return"Generic"},i=function(o){const l=pack.cells;pack.burgs.filter(a=>o?a.i==o.i:a.i&&!a.removed).forEach(a=>{const w=a.population;a.citadel=a.capital||w>50&&V(.75)||V(.5)?1:0,a.plaza=w>50||w>30&&V(.75)||w>10&&V(.5)||V(.25)?1:0,a.walls=a.capital||w>30||w>20&&V(.75)||w>10&&V(.5)||V(.2)?1:0,a.shanty=w>60||w>40&&V(.75)||w>20&&a.walls&&V(.4)?1:0;const S=l.religion[a.cell],h=pack.states[a.state].form==="Theocracy";a.temple=S&&h||w>50||w>35&&V(.75)||w>20&&V(.5)?1:0})},r=function(){Q&&console.time("drawBurgs"),burgIcons.selectAll("circle").remove(),burgLabels.selectAll("text").remove(),icons.selectAll("use").remove();const o=pack.burgs.filter(M=>M.capital&&!M.removed),l=burgIcons.select("#cities"),a=burgLabels.select("#cities"),w=l.attr("size")||1,S=anchors.selectAll("#cities"),h=S.attr("size")||2;l.selectAll("circle").data(o).enter().append("circle").attr("id",M=>"burg"+M.i).attr("data-id",M=>M.i).attr("cx",M=>M.x).attr("cy",M=>M.y).attr("r",w),a.selectAll("text").data(o).enter().append("text").attr("id",M=>"burgLabel"+M.i).attr("data-id",M=>M.i).attr("x",M=>M.x).attr("y",M=>M.y).attr("dy",`${w*-1.5}px`).text(M=>M.name),S.selectAll("use").data(o.filter(M=>M.port)).enter().append("use").attr("xlink:href","#icon-anchor").attr("data-id",M=>M.i).attr("x",M=>O(M.x-h*.47,2)).attr("y",M=>O(M.y-h*.47,2)).attr("width",h).attr("height",h);const v=pack.burgs.filter(M=>M.i&&!M.capital&&!M.removed),E=burgIcons.select("#towns"),P=burgLabels.select("#towns"),T=E.attr("size")||.5,R=anchors.selectAll("#towns"),L=R.attr("size")||1;E.selectAll("circle").data(v).enter().append("circle").attr("id",M=>"burg"+M.i).attr("data-id",M=>M.i).attr("cx",M=>M.x).attr("cy",M=>M.y).attr("r",T),P.selectAll("text").data(v).enter().append("text").attr("id",M=>"burgLabel"+M.i).attr("data-id",M=>M.i).attr("x",M=>M.x).attr("y",M=>M.y).attr("dy",`${T*-1.5}px`).text(M=>M.name),R.selectAll("use").data(v.filter(M=>M.port)).enter().append("use").attr("xlink:href","#icon-anchor").attr("data-id",M=>M.i).attr("x",M=>O(M.x-L*.47,2)).attr("y",M=>O(M.y-L*.47,2)).attr("width",L).attr("height",L),Q&&console.timeEnd("drawBurgs")},c=function(){Q&&console.time("expandStates");const{cells:o,states:l,cultures:a,burgs:w}=pack;o.state=new Uint16Array(o.i.length);const S=new PriorityQueue({comparator:(L,M)=>L.p-M.p}),h=[],v=o.i.length/5e3*2500*neutralInput.value*statesNeutral;for(l.filter(L=>L.i&&!L.removed).forEach(L=>{const M=w[L.capital].cell;o.state[M]=L.i;const I=a[L.culture].center,H=o.biome[I];S.queue({e:L.center,p:0,s:L.i,b:H}),h[L.center]=1});S.length;){const L=S.dequeue(),{e:M,p:I,s:H,b:G}=L,{type:D,culture:U}=l[H];o.c[M].forEach(F=>{if(o.state[F]&&F===l[o.state[F]].center)return;const j=U===o.culture[F]?-9:100,Z=o.h[F]<20?0:o.s[F]?Math.max(20-o.s[F],0):5e3,te=E(G,o.biome[F],D),q=P(pack.features[o.f[F]],o.h[F],D),X=T(o.r[F],F,D),ee=R(o.t[F],D),le=Math.max(j+Z+te+q+X+ee,0),Y=I+10+le/l[H].expansionism;Y>v||(!h[F]||Y=20&&(o.state[F]=H),h[F]=Y,S.queue({e:F,p:Y,s:H,b:G}))})}w.filter(L=>L.i&&!L.removed).forEach(L=>L.state=o.state[L.cell]);function E(L,M,I){return L===M?10:I==="Hunting"?biomesData.cost[M]*2:I==="Nomadic"&&M>4&&M<10?biomesData.cost[M]*3:biomesData.cost[M]}function P(L,M,I){return I==="Lake"&&L.type==="lake"?10:I==="Naval"&&M<20?300:I==="Nomadic"&&M<20?1e4:M<20?1e3:I==="Highland"&&M<62?1100:I==="Highland"?0:M>=67?2200:M>=44?300:0}function T(L,M,I){return I==="River"?L?0:100:L?Ie(o.fl[M]/10,20,100):0}function R(L,M){return L===1?M==="Naval"||M==="Lake"?0:M==="Nomadic"?60:20:L===2?M==="Naval"||M==="Nomadic"?30:0:L!==-1&&(M==="Naval"||M==="Lake")?100:0}Q&&console.timeEnd("expandStates")},f=function(){Q&&console.time("normalizeStates");const o=pack.cells,l=pack.burgs;for(const a of o.i){if(o.h[a]<20||o.burg[a]||o.c[a].some(v=>l[o.burg[v]].capital))continue;const w=o.c[a].filter(v=>o.h[v]>=20),S=w.filter(v=>o.state[v]!==o.state[a]);if(S.length<2)continue;const h=w.filter(v=>o.state[v]===o.state[a]);h.length>2||S.length<=h.length||(o.state[a]=o.state[S[0]])}Q&&console.timeEnd("normalizeStates")},z=function(){Q&&console.time("updateCulturesForBurgsAndStates"),pack.burgs=pack.burgs.map((o,l)=>l===0?o:{...o,culture:pack.cells.culture[o.cell]}),pack.states=pack.states.map((o,l)=>l===0?o:{...o,culture:pack.cells.culture[o.center]}),Q&&console.timeEnd("updateCulturesForBurgsAndStates")},m=function(o){Q&&console.time("drawStateLabels");const{cells:l,features:a,states:w}=pack,S=[];lineGen.curve(d3.curveBundle.beta(1));const h=options.stateLabelsMode||"auto";for(const E of w){let U=function(j,Z,te){const q=[j],X=new Set;for(;q.length;){const ee=q.pop(),le=l.c[ee].filter(Y=>l.state[Y]===Z);l.c[ee].forEach(function(Y,W){const de=a[l.f[Y]].type==="lake"&&a[l.f[Y]].cellsl.c[Y].includes(pe));if(X.size>20&&!me&&!de)return X.add(l.v[ee][W]);P[Y]||(P[Y]=1,q.push(Y))})}return X},F=function(j,Z){const te=j.p.map(function(we){return we[0]<=0||we[1]<=0||we[0]>=graphWidth||we[1]>=graphHeight?!1:P[Te(we[0],we[1])]}),q=d3.range(j.p.length).filter(we=>te[we]);if(!q.length)return[0];const X=j.p.length<200?0:j.p.length<600?.5:1,ee=q[d3.scan(q,(we,ke)=>j.p[we][0]-j.p[ke][0]+(Math.abs(j.p[we][1]-Z)-Math.abs(j.p[ke][1]-Z))*X)],le=q[d3.scan(q,(we,ke)=>j.p[ke][0]-j.p[we][0]-(Math.abs(j.p[ke][1]-Z)-Math.abs(j.p[we][1]-Z))*X)],Y=new PriorityQueue({comparator:(we,ke)=>we.p-ke.p}),W=[],de=[];for(Y.queue({e:le,p:0});Y.length;){const we=Y.dequeue(),ke=we.e,He=we.p;if(ke===ee)break;for(const Be of j.v[ke]){if(Be===-1)continue;const Fe=He+(te[Be]?1:100);de[Be]||Fe>=W[Be]||(W[Be]=Fe,de[Be]=ke,Y.queue({e:Be,p:Fe}))}}const me=[ee];let pe=ee;for(;pe!==le;)pe=de[pe],te[pe]&&me.push(pe);return me};if(!E.i||E.removed||!E.cells||o&&!o.includes(E.i))continue;const P=[],T=Te(E.pole[0],E.pole[1]),R=l.state[T]===E.i?T:E.center,M=[...U(R,E.i,E.cells/10)].map(j=>pack.vertices.p[j]),I=Delaunator.from(M),H=new Voronoi(I,M,M.length),G=F(H.vertices,E.pole[1]),D=G.map(j=>H.vertices.p[j]).filter((j,Z)=>Z%15===0||Z+1===G.length);S.push([E.i,D])}(function(){const P=labels.select("#states"),T=defs.select("#textPaths"),R=Pe("toggleLabels");R||toggleLabels(),o||(P.selectAll("text").remove(),T.selectAll("path[id*='stateLabel']").remove());const L=P.append("text").attr("x",0).attr("x",0).text("Average"),M=L.node().getComputedTextLength()/7;S.forEach(I=>{const H=I[0],G=w[I[0]],{name:D,fullName:U}=G;o&&(T.select("#textPath_stateLabel"+H).remove(),P.select("#stateLabel"+H).remove());const F=I[1].length>1?it(lineGen(I[1])):`M${I[1][0][0]-50},${I[1][0][1]}h${100}`,j=T.append("path").attr("d",F).attr("id","textPath_stateLabel"+H),Z=I[1].length>1?j.node().getTotalLength()/M:0,[te,q]=v(h,D,U,Z);if(Z&&Z{L.text(oe);const ye=L.node().getBBox().width/-2;return`${oe}`}),le=P.append("text").attr("id","stateLabel"+H).append("textPath").attr("xlink:href","#textPath_stateLabel"+H).attr("startOffset","50%").attr("font-size",q+"%").node();if(le.insertAdjacentHTML("afterbegin",ee.join("")),h==="full"||te.length===1)return;const Y=pack.cells.state,W=le.parentNode.getBBox(),de=()=>+Y[Te(W.x,W.y)]===H,me=()=>+Y[Te(W.x+W.width/2,W.y)]===H,pe=()=>+Y[Te(W.x+W.width,W.y)]===H,we=()=>+Y[Te(W.x+W.width,W.y+W.height)]===H,ke=()=>+Y[Te(W.x+W.width/2,W.y+W.height)]===H,He=()=>+Y[Te(W.x,W.y+W.height)]===H;if(de()+me()+pe()+we()+ke()+He()>3)return;const Be=Z>U.length*1.8?U:D;L.text(Be);const Fe=L.node().getBBox().width/-2;le.innerHTML=`${Be}`;const _=Ie(O(Z/Be.length*60),40,130);le.setAttribute("font-size",_+"%")}),L.remove(),R||toggleLabels()})();function v(E,P,T,R){if(E==="short"||E==="auto"&&RT.length*2.5){const I=[T],H=R/I[0].length;return[I,Ie(O(H*70),70,170)]}const L=ia(T),M=R/L[0].length;return[L,Ie(O(M*60),70,150)]}Q&&console.timeEnd("drawStateLabels")},b=function(){Q&&console.time("collectStatistics");const{cells:o,states:l}=pack;l.forEach(a=>{a.removed||(a.cells=a.area=a.burgs=a.rural=a.urban=0,a.neighbors=new Set)});for(const a of o.i){if(o.h[a]<20)continue;const w=o.state[a];o.c[a].filter(S=>o.h[S]>=20&&o.state[S]!==w).forEach(S=>l[w].neighbors.add(o.state[S])),l[w].cells+=1,l[w].area+=o.area[a],l[w].rural+=o.pop[a],o.burg[a]&&(l[w].urban+=pack.burgs[o.burg[a]].population,l[w].burgs++)}l.forEach(a=>{!a.neighbors||(a.neighbors=Array.from(a.neighbors))}),Q&&console.timeEnd("collectStatistics")},A=function(){Q&&console.time("assignColors");const o=["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f"];pack.states.forEach(l=>{if(!l.i||l.removed)return;const a=l.neighbors;l.color=o.find(w=>a.every(S=>pack.states[S].color!==w)),l.color||(l.color=Ct()),o.push(o.shift())}),o.forEach(l=>{pack.states.filter(w=>w.color===l).forEach((w,S)=>{!S||(w.color=tt(w.color))})}),Q&&console.timeEnd("assignColors")},u={War:6,Conflict:2,Campaign:4,Invasion:2,Rebellion:2,Conquest:2,Intervention:1,Expedition:1,Crusade:1},C=o=>(o.neighbors.length?o.neighbors:[0]).map(a=>{const w=a&&V(.8)?pack.states[a].name:Names.getCultureShort(o.culture),S=Ce(options.year-100,150,1,options.year-6),h=S+Ce(4,5,1,options.year-S-1);return{name:We(w)+" "+he(u),start:S,end:h}}).sort((a,w)=>a.start-w.start),g=function(){pack.states.forEach(o=>{!o.i||o.removed||(o.campaigns=C(o))})},p=function(){Q&&console.time("generateDiplomacy");const o=pack.cells,l=pack.states,a=l[0].diplomacy=[],w=l.filter(T=>T.i&&!l.removed),S={Ally:1,Friendly:2,Neutral:1,Suspicion:10,Rival:9},h={Ally:10,Friendly:8,Neutral:5,Suspicion:1},v={Friendly:1,Neutral:12,Suspicion:2,Unknown:6},E={Neutral:1,Suspicion:2,Rival:1,Unknown:1};if(w.forEach(T=>T.diplomacy=new Array(l.length).fill("x")),w.length<2)return;const P=d3.mean(w.map(T=>T.area));for(let T=1;Tl[G].neighbors).join("").includes(R);let H=he(L?E:M?S:I?h:v);M&&V(.8)&&l[T].area>P&&l[R].area2&&(H="Vassal"),l[T].diplomacy[R]=H==="Vassal"?"Suzerain":H,l[R].diplomacy[T]=H}}for(let T=1;Tq==="Rival"&&!l[X].diplomacy.includes("Vassal")?X:0).filter(q=>q));let M=l[T].area*l[T].expansionism,I=l[L].area*l[L].expansionism;if(M{q==="Suzerain"&&(D.push(X),j.push(`${H}'s vassal ${l[X].name} joined the war on attackers side`))}),F.forEach((q,X)=>{q==="Suzerain"&&(U.push(X),j.push(`${G}'s vassal ${l[X].name} joined the war on defenders side`))}),M=d3.sum(D.map(q=>l[q].area*l[q].expansionism)),I=d3.sum(U.map(q=>l[q].area*l[q].expansionism)),F.forEach((q,X)=>{if(!(q!=="Ally"||l[X].diplomacy.includes("Vassal"))){if(l[X].diplomacy[T]!=="Rival"&&M/I>2*Ce(1.6,.8,0,10,2)){const ee=l[X].diplomacy.includes("Enemy")?"Being already at war,":`Frightened by ${H},`;j.push(`${ee} ${l[X].name} severed the defense pact with ${G}`),F[X]=l[X].diplomacy[L]="Suspicion";return}U.push(X),I+=l[X].area*l[X].expansionism,j.push(`${G}'s ally ${l[X].name} joined the war on defenders side`),l[X].diplomacy.map((ee,le)=>ee==="Suzerain"?le:0).filter(ee=>ee).forEach(ee=>{U.push(ee),I+=l[ee].area*l[ee].expansionism,j.push(`${l[X].name}'s vassal ${l[ee].name} joined the war on defenders side`)})}}),R.forEach((q,X)=>{if(q!=="Ally"||l[X].diplomacy.includes("Vassal")||U.includes(X))return;const ee=l[X].name;if(l[X].diplomacy[L]!=="Rival"&&(V(.2)||M<=I*1.2)){j.push(`${H}'s ally ${ee} avoided entering the war`);return}if(l[X].diplomacy.map((Y,W)=>Y==="Ally"?W:0).filter(Y=>Y).some(Y=>U.includes(Y))){j.push(`${H}'s ally ${ee} did not join the war as its allies are in war on both sides`);return}D.push(X),M+=l[X].area*l[X].expansionism,j.push(`${H}'s ally ${ee} joined the war on attackers side`),l[X].diplomacy.map((Y,W)=>Y==="Suzerain"?W:0).filter(Y=>Y).forEach(Y=>{D.push(Y),I+=l[Y].area*l[Y].expansionism,j.push(`${l[X].name}'s vassal ${l[Y].name} joined the war on attackers side`)})}),D.forEach(q=>U.forEach(X=>l[q].diplomacy[X]=l[X].diplomacy[q]="Enemy")),a.push(j)}Q&&console.timeEnd("generateDiplomacy")},B=function(o){Q&&console.time("defineStateForms");const l=pack.states.filter(I=>I.i&&!I.removed);if(l.length<1)return;const a={Monarchy:25,Republic:2,Union:1},w={Monarchy:25,Republic:8,Union:3},S=d3.median(pack.states.map(I=>I.area)),h=l.map(I=>I.area).sort((I,H)=>H-I)[Math.max(Math.ceil(l.length**.4)-2,0)],v=pack.states.map(I=>{let H=Math.min(Math.floor(I.area/S*2.6),4);return H===4&&I.area1&&be(6)2)return"Patriarchate"}return V(.9)&&[21,16].includes(G)?"Imamah":H>2&&V(.8)&&[18,17,28].includes(G)?"Caliphate":he(R)}}Q&&console.timeEnd("defineStateForms")},k=["Empire","Sultanate","Khaganate","Shogunate","Caliphate","Despotate","Theocracy","Oligarchy","Union","Confederation","Trade Company","League","Tetrarchy","Triumvirate","Diarchy","Horde","Marches"],d=function(o){return o.formName?!o.name&&o.formName?"The "+o.formName:k.includes(o.formName)&&!/-| /.test(o.name)?`${We(o.name)} ${o.formName}`:`${o.formName} of ${o.name}`:o.name};return{generate:e,expandStates:c,normalizeStates:f,assignColors:A,drawBurgs:r,specifyBurgs:t,defineBurgFeatures:i,getType:n,drawStateLabels:m,collectStatistics:b,generateCampaign:C,generateCampaigns:g,generateDiplomacy:p,defineStateForms:B,getFullName:d,generateProvinces:function(o){Q&&console.time("generateProvinces");const l=o?Jt():seed;Math.random=aleaPRNG(l);const{cells:a,states:w,burgs:S}=pack,h=pack.provinces=[0];a.province=new Uint16Array(a.i.length);const v=+provincesInput.value;if(w.length<2||!v){w.forEach(M=>M.provinces=[]);return}const E=v==100?1e3:Ce(20,5,5,100)*v**.5,P={Monarchy:{County:22,Earldom:6,Shire:2,Landgrave:2,Margrave:2,Barony:2,Captaincy:1,Seneschalty:1},Republic:{Province:6,Department:2,Governorate:2,District:1,Canton:1,Prefecture:1},Theocracy:{Parish:3,Deanery:1},Union:{Province:1,State:1,Canton:1,Republic:1,County:1,Council:1},Anarchy:{Council:1,Commune:1,Community:1,Tribe:1},Wild:{Territory:10,Land:5,Region:2,Tribe:1,Clan:1,Dependency:1,Area:1}};w.forEach(M=>{if(M.provinces=[],!M.i||M.removed)return;const I=S.filter(D=>D.state===M.i&&!D.removed).sort((D,U)=>U.population*Ce(1,.2,.5,1.5,3)-D.population).sort((D,U)=>U.capital-D.capital);if(I.length<2)return;const H=Math.max(Math.ceil(I.length*v/100),2),G=Object.assign({},P[M.form]);for(let D=0;DM.p-I.p}),R=[];for(h.forEach(function(M){!M.i||M.removed||(a.province[M.center]=M.i,T.queue({e:M.center,p:0,province:M.i,state:M.state}),R[M.center]=1)});T.length;){const M=T.dequeue(),I=M.e,H=M.p,G=M.province,D=M.state;a.c[I].forEach(function(U){const F=a.h[U]>=20;if(!F&&!a.t[U]||F&&a.state[U]!==D)return;const j=a.h[U]>=70?100:a.h[U]>=50?30:a.h[U]>=20?10:100,Z=H+j;Z>E||(!R[U]||Za.state[F]===a.state[M]).map(F=>a.province[F]),H=I.filter(F=>F!==a.province[M]);if(H.length<2)continue;const G=I.filter(F=>F===a.province[M]).length;if(G.length>2)continue;const D=H.map(F=>H.reduce((j,Z)=>Z===F?j+1:j,0)),U=d3.max(D);G>=U||(a.province[M]=H[D.indexOf(U)])}const L=Array.from(a.i).filter(M=>a.state[M]&&!a.province[M]);w.forEach(M=>{var U;if(!M.provinces.length)return;const I=M.provinces.map(F=>{var j;return(j=h[F])==null?void 0:j.name}),H=[M.name,...I].filter(F=>F&&!/new/i.test(F)),G=()=>{if(H.length<1)return null;const F=be(H.length-1),j=H.splice(F,1);return j[0]?`New ${j[0]}`:null};let D=L.filter(F=>a.state[F]===M.i&&!a.province[F]);for(;D.length;){let oe=function(ce,ye){if(a.f[ce]!==a.f[ye])return!1;const Se=[ce],ve=new Uint8Array(a.i.length),Ue=a.state[ce];for(;Se.length;){const Ve=Se.pop();if(Ve===ye)return!0;a.c[Ve].forEach(Oe=>{ve[Oe]||a.h[Oe]<20||a.state[Oe]!==Ue||(Se.push(Oe),ve[Oe]=1)})}return!1};const F=h.length,j=D.find(ce=>a.burg[ce]),Z=j||D[0],te=j?a.burg[j]:0;a.province[Z]=F;const q=[];for(q[Z]=1,T.queue({e:Z,p:0});T.length;){const ce=T.dequeue(),ye=ce.e,Se=ce.p;a.c[ye].forEach(function(ve){if(a.province[ve])return;const Ue=a.h[ve]>=20;if(a.state[ve]&&a.state[ve]!==M.i)return;const Ve=Ue?a.state[ve]===M.i?3:20:a.t[ve]?10:30,Oe=Se+Ve;Oe>E||(!q[ve]||Oea.province[ce]===F),W=Y.length===ee.cells&&!Y.find(ce=>a.f[ce]!==ee.i),de=!W&&!Y.find(ce=>pack.features[a.f[ce]].group!=="isle"),me=!W&&!de&&V(.5)&&!oe(M.center,Z),pe=function(){const ce=me&&V(.8)&&G();return ce||(j&&V(.5)?S[te].name:Names.getState(Names.getCultureShort(X),X))}(),we=function(){return W?"Island":de?"Islands":me?"Colony":he(P.Wild)}(),ke=pe+" "+we,He=V(me?.95:W||de?.7:.3),Be=He?0:.4,Fe=n(Z,(U=S[te])==null?void 0:U.port),_=COA.generate(M.coa,Be,He,Fe);_.shield=COA.getShield(X,M.i),h.push({i:F,state:M.i,center:Z,burg:te,name:pe,formName:we,fullName:ke,color:le,coa:_}),M.provinces.push(F),D=L.filter(ce=>a.state[ce]===M.i&&!a.province[ce])}}),Q&&console.timeEnd("generateProvinces")},updateCultures:z}}();window.Routes=function(){const e=function(){Q&&console.time("generateMainRoads");const m=pack.cells,A=pack.burgs.filter(C=>C.i&&!C.removed).filter(C=>C.capital).sort((C,g)=>C.population-g.population);if(A.length<2)return[];const u=[];for(const C of A){const g=A.filter(p=>p.feature===C.feature&&p!==C);for(const p of g){const[B,k]=c(C.cell,p.cell,!0);f(C.cell,k,"main",B).forEach(s=>u.push(s))}}return m.i.forEach(C=>m.s[C]+=m.road[C]/2),Q&&console.timeEnd("generateMainRoads"),u},t=function(){Q&&console.time("generateTrails");const m=pack.cells,b=pack.burgs.filter(u=>u.i&&!u.removed);if(b.length<2)return[];let A=[];for(const u of pack.features.filter(C=>C.land)){const C=b.filter(g=>g.feature===u.i);C.length<2||C.forEach(function(g,p){let B=[];if(p){if(m.road[g.cell])return;const[k,d]=c(g.cell,null,!0);if(d===null)return;B=f(g.cell,d,"small",k)}else{const k=d3.scan(C,(l,a)=>(a.y-g.y)**2+(a.x-g.x)**2-((l.y-g.y)**2+(l.x-g.x)**2)),d=C[k].cell;if(m.road[d])return;const[s,o]=c(g.cell,d,!0);B=f(g.cell,o,"small",s)}B&&(A=A.concat(B))})}return Q&&console.timeEnd("generateTrails"),A},n=function(){Q&&console.time("generateSearoutes");const{cells:m,burgs:b,features:A}=pack,u=b.filter(k=>k.port>0&&!k.removed);if(!u.length)return[];const C=new Set(u.map(k=>k.port));let g=[];const p=[];C.forEach(k=>{var s;const d=u.filter(o=>o.port===k);if(!!d.length){(s=A[k])!=null&&s.border&&B(k,d[0]);for(let o=0;oMath.abs(v[0]-s)+Math.abs(v[1]-o),[w,S]=[[0,o],[s,0],[graphWidth,o],[s,graphHeight]].sort((v,E)=>a(v)-a(E))[0],h=Te(w,S);if(m.f[h]===k&&m.h[h]<20){const[v,E,P]=z(h,l,!0);if(P){const T=f(h,E,"ocean",v);g=g.concat(T),De(T).push([w,S])}}}return Q&&console.timeEnd("generateSearoutes"),g},i=function(m,b,A){Q&&console.time("drawRoutes");const{cells:u,burgs:C}=pack,{burg:g,p}=u,B=o=>[C[o].x,C[o].y],k=o=>o.map(l=>Array.isArray(l)?l:g[l]?B(g[l]):p[l]),d=o=>it(lineGen(k(o)),1),s=(o,l)=>o.map((a,w)=>``).join("");lineGen.curve(d3.curveCatmullRom.alpha(.1)),roads.html(s(m,"road")),trails.html(s(b,"trail")),lineGen.curve(d3.curveBundle.beta(1)),searoutes.html(s(A,"searoute")),Q&&console.timeEnd("drawRoutes")};return{getRoads:e,getTrails:t,getSearoutes:n,draw:i,regenerate:function(){routes.selectAll("path").remove(),pack.cells.road=new Uint16Array(pack.cells.i.length),pack.cells.crossroad=new Uint16Array(pack.cells.i.length);const m=e(),b=t(),A=n();i(m,b,A)}};function c(m,b=null,A=null){const u=pack.cells,C=new PriorityQueue({comparator:(B,k)=>B.p-k.p}),g=[],p=[];for(C.queue({e:m,p:0});C.length;){const B=C.dequeue(),k=B.e,d=B.p;if(A&&u.road[k])return[p,k];for(const s of u.c[k]){if(u.h[s]<20)continue;const o=u.state&&u.state[s]!==u.state[k]?400:0,l=biomesData.habitability[u.biome[s]];if(!l)continue;const a=l?Math.max(100-l,0):400,w=Math.abs(u.h[s]-u.h[k])*10,S=u.h[s]>80?u.h[s]:0,h=10+o+a+w+S,v=d+(u.road[s]||u.burg[s]?h/3:h);if(!(p[s]||v>=g[s])){if(p[s]=k,s===b)return[p,b];g[s]=v,C.queue({e:s,p:v})}}}return[p,b]}function f(m,b,A,u){const C=pack.cells,g=[];let p=[],B=b,k=b;const d=A==="main"?5:1;(A==="ocean"||!C.road[k])&&p.push(b),C.road[k]||(C.road[k]=d);for(let s=0,o=1e3;s1&&g.push(p),g}function z(m,b=null,A=null){const u=pack.cells,C=grid.cells.temp,g=new PriorityQueue({comparator:(k,d)=>k.p-d.p}),p=[],B=[];for(g.queue({e:m,p:0});g.length;){const k=g.dequeue(),d=k.e,s=k.p;if(A&&d!==m&&u.road[d])return[B,d,!0];for(const o of u.c[d]){if(o===b)return B[o]=d,[B,b,!0];if(u.h[o]>=20||C[u.g[o]]<=-5)continue;const l=(u.p[o][1]-u.p[d][1])**2+(u.p[o][0]-u.p[d][0])**2,a=s+(u.road[o]?1+l/2:l+(u.t[o]?1:100));B[o]||a>=p[o]||(B[o]=d,p[o]=a,g.queue({e:o,p:a}))}}return[B,b,!1]}}();window.Religions=function(){const e={Number:1,Being:3,Adjective:5,"Color + Animal":5,"Adjective + Animal":5,"Adjective + Being":5,"Adjective + Genitive":1,"Color + Being":3,"Color + Genitive":3,"Being + of + Genitive":2,"Being + of the + Genitive":1,"Animal + of + Genitive":1,"Adjective + Being + of + Genitive":2,"Adjective + Animal + of + Genitive":2},t=[];for(const k in e)for(let d=0;d{if(!R.i)return o.push({i:0,name:"No religion"});if(R.removed){o.push({i:R.i,name:"Extinct religion for "+R.name,color:tt(R.color,.1,0),removed:!0});return}const L=he(i.Folk),M=R.name+" "+he(c[L]),I=L==="Animism"?null:C(R.i),H=tt(R.color,.1,0);o.push({i:R.i,name:M,color:H,culture:R.i,type:"Folk",form:L,deity:I,center:R.center,origins:[0]})}),religionsInput.value==0||pack.cultures.length<2)return o.filter(R=>R.i).forEach(R=>R.code=bt(R.name));const l=pack.burgs.filter(R=>R.i&&!R.removed),a=l.length>+religionsInput.value?l.sort((R,L)=>L.population-R.population).map(R=>R.cell):k.i.filter(R=>k.s[R]>2).sort((R,L)=>k.s[L]-k.s[R]),w=d3.quadtree(),S=(graphWidth+graphHeight)/6/religionsInput.value,h=Math.floor(be(10,40)/100*religionsInput.value),v=+religionsInput.value-h+o.length;function E({x:R,y:L,r:M,max:I}){if(I===0)return[0];const H=wn(R,L,M),G=hn(H.map(D=>k.religion[D]).filter(D=>D));return G.length?G.slice(0,I):[0]}for(let R=0;o.length.5&&(L=d[I].center),U==="culture"&&Math.random()>.5&&(L=s[H].center),!k.burg[L]&&k.c[L].some(W=>k.burg[W])&&(L=k.c[L].find(W=>k.burg[W]));const[F,j]=k.p[L],Z=S*gauss(1,.3,.2,2,2);if(w.find(F,j,Z)!==void 0)continue;const q=(U==="culture"||V(.5))&&o.find(W=>W.culture===H&&W.type==="Folk");q&&U==="culture"&&q.name.slice(0,3)!=="Old"&&(q.name="Old "+q.name);const X=q?[q.i]:E({x:F,y:j,r:150/v,max:2}),ee=be(3,8),le=((P=o[H])==null?void 0:P.color)||((T=d[I])==null?void 0:T.color)||Ct(),Y=tt(le,.3,0);o.push({i:o.length,name:D,color:Y,culture:H,type:"Organized",form:M,deity:G,expansion:U,expansionism:ee,center:L,origins:X}),w.add([F,j])}for(let R=0;o.lengthk.burg[q])&&(M=k.c[M].find(q=>k.burg[q]));const[I,H]=k.p[M],G=S*gauss(2,.3,1,3,2);if(w.find(I,H,G)!==void 0)continue;const D=k.culture[M],U=E({x:I,y:H,r:300/v,max:be(0,4)}),F=C(D),j=B(L,M),Z=gauss(1.1,.5,0,5),te=tt(s[D].color,.5,0);o.push({i:o.length,name:j,color:te,culture:D,type:"Cult",form:L,deity:F,expansion:"global",expansionism:Z,center:M,origins:U}),w.add([I,H])}m(),o.filter(R=>R.type==="Organized").forEach(R=>{if(R.expansionism<3)return;const L=gauss(0,1,0,3);for(let M=0;Mk.religion[Z]===R.i&&k.c[Z].some(te=>k.religion[te]!==R.i)));if(!I)continue;!k.burg[I]&&k.c[I].some(Z=>k.burg[Z])&&(I=k.c[I].find(Z=>k.burg[Z]));const[H,G]=k.p[I];if(w.find(H,G,S/10)!==void 0)continue;const D=k.culture[I],U=B("Heresy",I),F=gauss(1.2,.5,0,5),j=tt(R.color,.4,.2);o.push({i:o.length,name:U,color:j,culture:D,type:"Heresy",form:R.form,deity:R.deity,expansion:"global",expansionism:F,center:I,origins:[R.i]}),w.add([H,G])}}),b(),A(),Q&&console.timeEnd("generateReligions")},z=function(k){const{cells:d,religions:s}=pack,o=d.religion[k],l=d.culture[k],a=tt(s[o].color,.3,0),w=s[o].type==="Organized"?he({Organized:4,Cult:1,Heresy:2}):he({Organized:5,Cult:2}),S=he(i[w]),h=w==="Heresy"?s[o].deity:S==="Non-theism"?null:C(l);let v,E;w==="Organized"?[v,E]=p(S,h,k):(v=B(S,k),E="global");const P=w==="Heresy"?s[o].form:S,T=bt(v,s.map(L=>L.code)),R=s.length;s.push({i:R,name:v,color:a,culture:l,type:w,form:P,deity:h,expansion:E,expansionism:0,center:k,cells:0,area:0,rural:0,urban:0,origins:[o],code:T}),d.religion[k]=R},m=function(){const k=pack.cells,d=pack.religions,s=new PriorityQueue({comparator:(w,S)=>w.p-S.p}),o=[];d.filter(w=>w.type==="Organized"||w.type==="Cult").forEach(w=>{k.religion[w.center]=w.i,s.queue({e:w.center,p:0,r:w.i,s:k.state[w.center],c:w.culture}),o[w.center]=1});const l=k.i.length/5e3*200*gauss(1,.3,.2,2,2)*neutralInput.value,a=d3.max(k.pop)/3;for(;s.length;){const w=s.dequeue(),S=w.e,h=w.p,v=w.r,E=w.c,P=w.s,T=d[v].expansion;k.c[S].forEach(function(R){if(T==="culture"&&E!==k.culture[R]||T==="state"&&P!==k.state[R])return;const L=E!==k.culture[R]?10:0,M=P!==k.state[R]?10:0,I=k.road[R]?1:biomesData.cost[k.biome[R]],H=Math.max(O(a-k.pop[R]),0),G=Math.max(k.h[R],20)-20,D=k.h[R]<20?k.road[R]?50:1e3:0,U=h+(L+M+I+H+G+D)/d[v].expansionism;U>l||(!o[R]||U=20&&k.culture[R]&&(k.religion[R]=v),o[R]=U,s.queue({e:R,p:U,r:v,c:E,s:P}))})}},b=function(){const k=pack.cells,d=pack.religions,s=new PriorityQueue({comparator:(a,w)=>a.p-w.p}),o=[];d.filter(a=>a.type==="Heresy").forEach(a=>{const w=k.religion[a.center];k.religion[a.center]=a.i,s.queue({e:a.center,p:0,r:a.i,b:w}),o[a.center]=1});const l=k.i.length/5e3*500*neutralInput.value;for(;s.length;){const a=s.dequeue(),w=a.e,S=a.p,h=a.r,v=a.b;k.c[w].forEach(function(E){const P=k.religion[E]===v?0:2e3,T=k.road[E]?0:biomesData.cost[k.biome[E]],R=Math.max(k.h[E],20)-20,L=k.h[E]<20?k.road[E]?50:1e3:0,M=S+(P+T+R+L)/Math.max(d[h].expansionism,.1);M>l||(!o[E]||M=20&&k.culture[E]&&(k.religion[E]=h),o[E]=M,s.queue({e:E,p:M,r:h}))})}};function A(){const{cells:k,religions:d}=pack,s=d.map(o=>o.code);d.forEach(o=>{if(!o.i||(o.code=bt(o.name,s),k.religion[o.center]===o.i))return;const l=k.i.filter(a=>k.religion[a]===o.i);!l.length||(o.center=l.sort((a,w)=>k.pop[w]-k.pop[a])[0])})}function u(){Q&&console.time("updateCulturesForReligions"),pack.religions=pack.religions.map((k,d)=>d===0?k:{...k,culture:pack.cells.culture[k.center]}),Q&&console.timeEnd("updateCulturesForReligions")}const C=function(k){if(k===void 0){ERROR&&console.error("Please define a culture");return}const d=g();return Names.getCulture(k,null,null,"",.8)+", The "+d};function g(){const k=ie(t);if(k==="Number")return ie(n.number);if(k==="Being")return ie(n.being);if(k==="Adjective")return ie(n.adjective);if(k==="Color + Animal")return ie(n.color)+" "+ie(n.animal);if(k==="Adjective + Animal")return ie(n.adjective)+" "+ie(n.animal);if(k==="Adjective + Being")return ie(n.adjective)+" "+ie(n.being);if(k==="Adjective + Genitive")return ie(n.adjective)+" "+ie(n.genitive);if(k==="Color + Being")return ie(n.color)+" "+ie(n.being);if(k==="Color + Genitive")return ie(n.color)+" "+ie(n.genitive);if(k==="Being + of + Genitive")return ie(n.being)+" of "+ie(n.genitive);if(k==="Being + of the + Genitive")return ie(n.being)+" of the "+ie(n.theGenitive);if(k==="Animal + of + Genitive")return ie(n.animal)+" of "+ie(n.genitive);if(k==="Adjective + Being + of + Genitive")return ie(n.adjective)+" "+ie(n.being)+" of "+ie(n.genitive);if(k==="Adjective + Animal + of + Genitive")return ie(n.adjective)+" "+ie(n.animal)+" of "+ie(n.genitive)}function p(k,d,s){const{cells:o,cultures:l,burgs:a,states:w}=pack,S=()=>Names.getCulture(o.culture[s],null,null,"",0),h=()=>he(c[k]),v=()=>d.split(/[ ,]+/)[0],E=()=>l[o.culture[s]].name,P=R=>{const L=o.burg[s],M=o.state[s],I=L?a[L].name:w[M].name;let H=Ke(I.split(/[ ,]+/)[0]);return R?We(H):H},T=he(r);return T==="Random + type"?[S()+" "+h(),"global"]:T==="Random + ism"?[Ke(S())+"ism","global"]:T==="Supreme + ism"&&d?[Ke(v())+"ism","global"]:T==="Faith of + Supreme"&&d?[ie(["Faith","Way","Path","Word","Witnesses"])+" of "+v(),"global"]:T==="Place + ism"?[P()+"ism","state"]:T==="Culture + ism"?[Ke(E())+"ism","culture"]:T==="Place + ian + type"?[P("adj")+" "+h(),"state"]:T==="Culture + type"?[E()+" "+h(),"culture"]:[Ke(S())+"ism","global"]}function B(k,d){const s=pack.cells,o=function(){return he(c[k])},l=function(){return Ke(Names.getCulture(s.culture[d],null,null,"",0).split(/[ ,]+/)[0])},a=function(){return Ke(pack.burgs[s.burg[d]].name.split(/[ ,]+/)[0])};return s.burg[d]?a()+"ian "+o():Math.random()>.5?l()+"ian "+o():o()+" of the "+g()}return{generate:f,add:z,getDeityName:C,expandReligions:m,updateCultures:u}}();window.Military=function(){const e=function(){Q&&console.time("generateMilitaryForces");const{cells:A,states:u}=pack,{p:C}=A,g=u.filter(v=>v.i&&!v.removed);options.military||(options.military=n());const p=d3.sum(g.map(v=>v.expansionism)),B=d3.sum(g.map(v=>v.area)),k={x:0,Ally:-.2,Friendly:-.1,Neutral:0,Suspicion:.1,Enemy:1,Unknown:0,Rival:.5,Vassal:.5,Suzerain:-.5},d={melee:{Nomadic:.5,Highland:1.2,Lake:1,Naval:.7,Hunting:1.2,River:1.1},ranged:{Nomadic:.9,Highland:1.3,Lake:1,Naval:.8,Hunting:2,River:.8},mounted:{Nomadic:2.3,Highland:.6,Lake:.7,Naval:.3,Hunting:.7,River:.8},machinery:{Nomadic:.8,Highland:1.4,Lake:1.1,Naval:1.4,Hunting:.4,River:1.1},naval:{Nomadic:.5,Highland:.5,Lake:1.2,Naval:1.8,Hunting:.7,River:1.2},armored:{Nomadic:1,Highland:.5,Lake:1,Naval:1,Hunting:.7,River:1.1},aviation:{Nomadic:.5,Highland:.5,Lake:1.2,Naval:1.2,Hunting:.6,River:1.2},magical:{Nomadic:1,Highland:2,Lake:1,Naval:1,Hunting:1,River:1}},s={nomadic:{melee:.2,ranged:.5,mounted:3,machinery:.4,naval:.3,armored:1.6,aviation:1,magical:.5},wetland:{melee:.8,ranged:2,mounted:.3,machinery:1.2,naval:1,armored:.2,aviation:.5,magical:.5},highland:{melee:1.2,ranged:1.6,mounted:.3,machinery:3,naval:1,armored:.8,aviation:.3,magical:2}},o={nomadic:{melee:.3,ranged:.8,mounted:3,machinery:.4,naval:1,armored:1.6,aviation:1,magical:.5},wetland:{melee:1,ranged:1.6,mounted:.2,machinery:1.2,naval:1,armored:.2,aviation:.5,magical:.5},highland:{melee:1.2,ranged:2,mounted:.3,machinery:3,naval:1,armored:.8,aviation:.3,magical:2}};g.forEach(v=>{v.temp={};const E=v.diplomacy,P=Ie(v.expansionism/p/(v.area/B),.25,4),T=E.some(M=>M==="Enemy")?1:E.some(M=>M==="Rival")?.8:E.some(M=>M==="Suspicion")?.5:.1,R=v.neighbors.map(M=>M?pack.states[M].diplomacy[v.i]:"Suspicion").reduce((M,I)=>M+=k[I],.5),L=Ie(R,.3,3);v.alert=Ie(O(P*T*L,2),.1,5),v.temp.platoons=[];for(const M of options.military){if(!d[M.type])continue;let I=d[M.type][v.type]||1;M.type==="mounted"&&v.formName.includes("Horde")?I*=2:M.type==="naval"&&v.form==="Republic"&&(I*=1.2),v.temp[M.name]=I*v.alert}});const l=v=>[1,2,3,4].includes(A.biome[v])?"nomadic":[7,8,9,12].includes(A.biome[v])?"wetland":A.h[v]>=70?"highland":"generic";function a(v,E,P,T,R){return!(v.biomes&&!v.biomes.includes(E)||v.states&&!v.states.includes(P)||v.cultures&&!v.cultures.includes(T)||v.religions&&!v.religions.includes(R))}for(const v of A.i){if(!A.pop[v])continue;const E=A.biome[v],P=A.state[v],T=A.culture[v],R=A.religion[v],L=u[P];if(!P||L.removed)continue;let M=A.pop[v]/100;T!==L.culture&&(M=L.form==="Union"?M/1.2:M/2),R!==A.religion[L.center]&&(M=L.form==="Theocracy"?M/2.2:M/1.4),A.f[v]!==A.f[L.center]&&(M=L.type==="Naval"?M/1.2:M/1.8);const I=l(v);for(const H of options.military){const G=+H.rural;if(isNaN(G)||G<=0||!L.temp[H.name]||!a(H,E,P,T,R)||H.type==="naval"&&!A.haven[v])continue;const D=I==="generic"?1:s[I][H.type],U=M*G*D,F=O(U*L.temp[H.name]*populationRate);if(!F)continue;let[j,Z]=C[v],te=0;if(H.type==="naval"){const q=A.haven[v];[j,Z]=C[q],te=1}L.temp.platoons.push({cell:v,a:F,t:F,x:j,y:Z,u:H.name,n:te,s:H.separate,type:H.type})}}for(const v of pack.burgs){if(!v.i||v.removed||!v.state||!v.population)continue;const E=A.biome[v.cell],P=v.state,T=v.culture,R=A.religion[v.cell],L=u[P];let M=v.population*urbanization/100;v.capital&&(M*=1.2),T!==L.culture&&(M=L.form==="Union"?M/1.2:M/2),R!==A.religion[L.center]&&(M=L.form==="Theocracy"?M/2.2:M/1.4),A.f[v.cell]!==A.f[L.center]&&(M=L.type==="Naval"?M/1.2:M/1.8);const I=l(v.cell);for(const H of options.military){const G=+H.urban;if(isNaN(G)||G<=0||!L.temp[H.name]||!a(H,E,P,T,R)||H.type==="naval"&&(!v.port||!A.haven[v.cell]))continue;const D=I==="generic"?1:o[I][H.type],U=M*G*D,F=O(U*L.temp[H.name]*populationRate);if(!F)continue;let[j,Z]=C[v.cell],te=0;if(H.type==="naval"){const q=A.haven[v.cell];[j,Z]=C[q],te=1}L.temp.platoons.push({cell:v.cell,a:F,t:F,x:j,y:Z,u:H.name,n:te,s:H.separate,type:H.type})}}const w=3*populationRate,S=(v,E)=>!v.s&&!E.s||v.u===E.u;g.forEach(v=>{v.military=h(v.temp.platoons,v),delete v.temp}),t();function h(v,E){if(!v.length)return[];v.sort((L,M)=>L.a-M.a);const P=d3.quadtree(v,L=>L.x,L=>L.y);v.forEach(L=>{P.remove(L);const M=P.find(L.x,L.y,20);if(M&&M.t&&S(L,M)){T(L,M);return}if(L.t>w)return;const I=(w-L.t)/(L.s?40:20),H=P.findAll(L.x,L.y,I);for(const G of H)if(G.tM.childen.push(I)),M.t+=L.t,L.t=0}const R=v.filter(L=>L.t).sort((L,M)=>M.t-L.t).map((L,M)=>{const I={};return I[L.u]=L.a,(L.childen||[]).forEach(H=>I[H.u]=I[H.u]?I[H.u]+=H.a:H.a),{i:M,a:L.t,cell:L.cell,x:L.x,y:L.y,bx:L.x,by:L.y,u:I,n:L.n,name,state:E.i}});return R.forEach(L=>{L.name=z(L,R),L.icon=m(L),b(L,E)}),R}Q&&console.timeEnd("generateMilitaryForces")};function t(){const A=pack.states.filter(u=>u.i&&!u.removed);armies.selectAll("g > g").each(function(){const u=notes.findIndex(C=>C.id===this.id);u!=-1&¬es.splice(u,1)}),armies.selectAll("g").remove(),A.forEach(u=>i(u.military,u.i))}const n=function(){return[{icon:"\u2694\uFE0F",name:"infantry",rural:.25,urban:.2,crew:1,power:1,type:"melee",separate:0},{icon:"\u{1F3F9}",name:"archers",rural:.12,urban:.2,crew:1,power:1,type:"ranged",separate:0},{icon:"\u{1F434}",name:"cavalry",rural:.12,urban:.03,crew:2,power:2,type:"mounted",separate:0},{icon:"\u{1F4A3}",name:"artillery",rural:0,urban:.03,crew:8,power:12,type:"machinery",separate:0},{icon:"\u{1F30A}",name:"fleet",rural:0,urban:.015,crew:100,power:50,type:"naval",separate:1}]},i=function(A,u){const C=+armies.attr("box-size"),g=a=>a.n?C*4:C*6,p=C*2,B=a=>O(a.x-g(a)/2,2),k=a=>O(a.y-C,2),d=pack.states[u].color[0]==="#"?pack.states[u].color:"#999",s=d3.color(d).darker().hex(),l=armies.append("g").attr("id","army"+u).attr("fill",d).selectAll("g").data(A).enter().append("g").attr("id",a=>"regiment"+u+"-"+a.i).attr("data-name",a=>a.name).attr("data-state",u).attr("data-id",a=>a.i);l.append("rect").attr("x",a=>B(a)).attr("y",a=>k(a)).attr("width",a=>g(a)).attr("height",p),l.append("text").attr("x",a=>a.x).attr("y",a=>a.y).text(a=>f(a)),l.append("rect").attr("fill",s).attr("x",a=>B(a)-p).attr("y",a=>k(a)).attr("width",p).attr("height",p),l.append("text").attr("class","regimentIcon").attr("x",a=>B(a)-C).attr("y",a=>a.y).text(a=>a.icon)},r=function(A,u){const C=+armies.attr("box-size"),g=A.n?C*4:C*6,p=C*2,B=O(A.x-g/2,2),k=O(A.y-C,2);let d=armies.select("g#army"+u);if(!d.size()){const l=pack.states[u].color[0]==="#"?pack.states[u].color:"#999";d=armies.append("g").attr("id","army"+u).attr("fill",l)}const s=d3.color(d.attr("fill")).darker().hex(),o=d.append("g").attr("id","regiment"+u+"-"+A.i).attr("data-name",A.name).attr("data-state",u).attr("data-id",A.i);o.append("rect").attr("x",B).attr("y",k).attr("width",g).attr("height",p),o.append("text").attr("x",A.x).attr("y",A.y).text(f(A)),o.append("rect").attr("fill",s).attr("x",B-p).attr("y",k).attr("width",p).attr("height",p),o.append("text").attr("class","regimentIcon").attr("x",B-C).attr("y",A.y).text(A.icon)},c=function(A,u,C){const g=armies.select("g#army"+A.state).select("g#regiment"+A.state+"-"+A.i);if(!g.size())return;const p=Math.hypot(A.x-u,A.y-C)*8;A.x=u,A.y=C;const B=+armies.attr("box-size"),k=A.n?B*4:B*6,d=B*2,s=a=>O(a-k/2,2),o=a=>O(a-B,2),l=d3.transition().duration(p).ease(d3.easeSinInOut);g.select("rect").transition(l).attr("x",s(u)).attr("y",o(C)),g.select("text").transition(l).attr("x",u).attr("y",C),g.selectAll("rect:nth-of-type(2)").transition(l).attr("x",s(u)-d).attr("y",o(C)),g.select(".regimentIcon").transition(l).attr("x",s(u)-B).attr("y",C)},f=A=>A.a>(A.n?999:99999)?Qt(A.a):A.a,z=function(A,u){const C=pack.cells,g=A.n?null:C.province[A.cell]&&pack.provinces[C.province[A.cell]]?pack.provinces[C.province[A.cell]].name:C.burg[A.cell]&&pack.burgs[C.burg[A.cell]]?pack.burgs[C.burg[A.cell]].name:null,p=Wn(u.filter(k=>k.n===A.n&&k.ip[1]-g[1])[0][0];return options.military.find(g=>g.name===u).icon},b=function(A,u){const C=pack.cells,g=C.burg[A.cell]&&pack.burgs[C.burg[A.cell]]?pack.burgs[C.burg[A.cell]].name:C.province[A.cell]&&pack.provinces[C.province[A.cell]]?pack.provinces[C.province[A.cell]].fullName:null,p=g?`${A.name} is ${A.n?"based":"stationed"} in ${g}. `:"",B=A.a?Object.keys(A.u).map(a=>`\u2014 ${a}: ${A.u[a]}`).join(`\r +`):null,k=B?`\r +\r +Regiment composition in ${options.year} ${options.eraShort}:\r +${B}.`:"",d=u.campaigns?ie(u.campaigns):null,s=d?be(d.start,d.end):Ce(options.year-100,150,1,options.year-6),o=d?` during the ${d.name}`:"",l=`Regiment was formed in ${s} ${options.era}${o}. ${p}${k}`;notes.push({id:`regiment${u.i}-${A.i}`,name:`${A.icon} ${A.name}`,legend:l})};return{generate:e,redraw:t,getDefaultOptions:n,getName:z,generateNote:b,drawRegiments:i,drawRegiment:r,moveRegiment:c,getTotal:f,getEmblem:m}}();window.addEventListener("resize",function(e){stored("mapWidth")&&stored("mapHeight")||(mapWidthInput.value=window.innerWidth,mapHeightInput.value=window.innerHeight,changeMapSize())});location.hostname&&location.hostname!=="localhost"&&location.hostname!=="127.0.0.1"&&(window.onbeforeunload=()=>"Are you sure you want to navigate away?");function sa([e,t]){const n=pack.cells.h[Te(e,t)],i=grid.cells.h[Xe(e,t,grid)],r=n<20?i:n;return _o(r)}function _o(e,t){const n=heightUnit.value;let i=3.281;n==="m"?i=1:n==="f"&&(i=.5468);let r=-990;return e>=20?r=Math.pow(e-18,+heightExponentInput.value):e<20&&e>0&&(r=(e-20)/e*50),t&&(r=Math.abs(r)),O(r*i)+" "+n}Array.from(document.getElementsByClassName("speaker")).forEach(e=>{const t=e.previousElementSibling;e.addEventListener("click",()=>ei(t.value))});function ei(e){const t=new SpeechSynthesisUtterance(e),n=speechSynthesis.getVoices();if(n.length){const i=+document.getElementById("speakerVoice").value;t.voice=n[i]}speechSynthesis.speak(t)}function ft(e,t,n=t){Array.from(e.options).some(r=>r.value===t)||e.options.add(new Option(n,t)),e.value=t}window.Markers=function(){let e=[],t=[];function n(){const K=document.getElementById("culturesSet").value.includes("Fantasy");return[{type:"volcanoes",icon:"\u{1F30B}",dx:52,px:13,min:10,each:500,multiplier:1,list:p,add:B},{type:"hot-springs",icon:"\u2668\uFE0F",dy:52,min:30,each:1200,multiplier:1,list:k,add:d},{type:"mines",icon:"\u26CF\uFE0F",dx:48,px:13,min:1,each:15,multiplier:1,list:s,add:o},{type:"bridges",icon:"\u{1F309}",px:14,min:1,each:5,multiplier:1,list:l,add:a},{type:"inns",icon:"\u{1F37B}",px:14,min:1,each:100,multiplier:1,list:w,add:S},{type:"lighthouses",icon:"\u{1F6A8}",px:14,min:1,each:2,multiplier:1,list:h,add:v},{type:"waterfalls",icon:"\u27F1",dy:54,px:16,min:1,each:5,multiplier:1,list:E,add:P},{type:"battlefields",icon:"\u2694\uFE0F",dy:52,min:50,each:700,multiplier:1,list:T,add:R},{type:"dungeons",icon:"\u{1F5DD}\uFE0F",dy:51,px:13,min:30,each:200,multiplier:1,list:M,add:I},{type:"lake-monsters",icon:"\u{1F409}",dy:48,min:2,each:10,multiplier:1,list:H,add:G},{type:"sea-monsters",icon:"\u{1F991}",min:50,each:700,multiplier:1,list:D,add:U},{type:"hill-monsters",icon:"\u{1F479}",dy:54,px:13,min:30,each:600,multiplier:1,list:F,add:j},{type:"sacred-mountains",icon:"\u{1F5FB}",dy:48,min:1,each:5,multiplier:1,list:Z,add:te},{type:"sacred-forests",icon:"\u{1F333}",min:30,each:1e3,multiplier:1,list:q,add:X},{type:"sacred-pineries",icon:"\u{1F332}",px:13,min:30,each:800,multiplier:1,list:ee,add:le},{type:"sacred-palm-groves",icon:"\u{1F334}",px:13,min:1,each:100,multiplier:1,list:Y,add:W},{type:"brigands",icon:"\u{1F4B0}",px:13,min:50,each:100,multiplier:1,list:de,add:me},{type:"pirates",icon:"\u{1F3F4}\u200D\u2620\uFE0F",dx:51,min:40,each:300,multiplier:1,list:pe,add:we},{type:"statues",icon:"\u{1F5FF}",min:80,each:1200,multiplier:1,list:ke,add:He},{type:"ruins",icon:"\u{1F3FA}",min:80,each:1200,multiplier:1,list:Be,add:Fe},{type:"circuses",icon:"\u{1F3AA}",min:80,each:1e3,multiplier:1,list:_,add:oe},{type:"jousts",icon:"\u{1F93A}",dx:48,min:5,each:500,multiplier:1,list:ce,add:ye},{type:"canoes",icon:"\u{1F6F6}",min:1e3,each:2e3,multiplier:1,list:Se,add:ve},{type:"migration",icon:"\u{1F417}",min:20,each:1e3,multiplier:1,list:Ue,add:Ve},{type:"dances",icon:"\u{1F483}\u{1F3FD}",min:5,each:60,multiplier:1,list:Oe,add:$e},{type:"mirage",icon:"\u{1F4A6}",min:10,each:400,multiplier:1,list:rt,add:nt},{type:"portals",icon:"\u{1F300}",px:14,min:16,each:8,multiplier:+K,list:_e,add:qe},{type:"rifts",icon:"\u{1F386}",min:1,each:3e3,multiplier:+K,list:st,add:ot}]}const i=()=>e,r=N=>{e=N},c=function(){r(n()),pack.markers=[],m()},f=()=>{pack.markers=pack.markers.filter(({i:N,lock:K,cell:J})=>{var ue;if(K)return t[J]=!0,!0;const ae=`marker${N}`;(ue=document.getElementById(ae))==null||ue.remove();const re=notes.findIndex(fe=>fe.id===ae);return re!=-1&¬es.splice(re,1),!1}),m()},z=N=>{var ae;const K=e.find(re=>re.type===N.type);if(K){const{icon:re,type:ue,dx:fe,dy:Me,px:xe}=K;return N=C({icon:re,type:ue,dx:fe,dy:Me,px:xe},N),K.add("marker"+N.i,N.cell),N}const J=((ae=De(pack.markers))==null?void 0:ae.i)+1||0;return pack.markers.push({...N,i:J}),t[N.cell]=!0,{...N,i:J}};function m(){Q&&console.time("addMarkers"),e.forEach(({type:N,icon:K,dx:J,dy:ae,px:re,min:ue,each:fe,multiplier:Me,list:xe,add:Ge})=>{if(Me===0)return;let je=Array.from(xe(pack)),ut=b(je,ue,fe,Me);for(;ut&&je.length;){const[At]=A(je),Pt=C({icon:K,type:N,dx:J,dy:ae,px:re},{cell:At});Ge("marker"+Pt.i,At),ut--}}),t=[],Q&&console.timeEnd("addMarkers")}function b(N,K,J,ae){if(!N.length||N.lengthJ.id!==K),pack.markers=pack.markers.filter(J=>J.i!==N)}function p({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>=70)}function B(N,K){const{cells:J}=pack,ae=Names.getCulture(J.culture[K]),re=V(.3)?"Mount "+ae:Math.random()>.3?ae+" Volcano":ae;notes.push({id:N,name:re,legend:`Active volcano. Height: ${sa(J.p[K])}`})}function k({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>50)}function d(N,K){const{cells:J}=pack,ae=Names.getCulture(J.culture[K]),re=Xt(Ce(35,15,20,100));notes.push({id:N,name:ae+" Hot Springs",legend:`A hot springs area. Average temperature: ${re}`})}function s({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>47&&N.burg[K])}function o(N,K){const{cells:J}=pack,re=he({salt:5,gold:2,silver:4,copper:2,iron:3,lead:1,tin:1}),ue=pack.burgs[J.burg[K]],fe=`${ue.name} \u2014 ${re} mining town`,Me=O(ue.population*populationRate*urbanization),xe=`${ue.name} is a mining town of ${Me} people just nearby the ${re} mine`;notes.push({id:N,name:fe,legend:xe})}function l({cells:N,burgs:K}){const J=d3.mean(N.fl.filter(ae=>ae));return N.i.filter(ae=>!t[ae]&&N.burg[ae]&&N.t[ae]!==1&&K[N.burg[ae]].population>20&&N.r[ae]&&N.fl[ae]>J)}function a(N,K){const{cells:J}=pack,ae=pack.burgs[J.burg[K]],re=pack.rivers.find(je=>je.i===pack.cells.r[K]),ue=re?`${re.name} ${re.type}`:"river",fe=re&&V(.2)?`${re.name} Bridge`:`${ae.name} Bridge`,Me={stone:10,wooden:1,lengthy:2,formidable:2,rickety:1,beaten:1,weathered:1},xe=["collapse during the flood","being rumoured to attract trolls","the drying up of local trade","banditry infested the area","the old waypoints crumbled"],Ge=V(.7)?`A ${he(Me)} bridge spans over the ${ue} near ${ae.name}`:`An old crossing of the ${ue}, rarely used since ${ie(xe)}`;notes.push({id:N,name:fe,legend:Ge})}function w({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>=20&&N.road[K]>4&&N.pop[K]>10)}function S(N,K){const J=["Dark","Light","Bright","Golden","White","Black","Red","Pink","Purple","Blue","Green","Yellow","Amber","Orange","Brown","Grey"],ae=["Antelope","Ape","Badger","Bear","Beaver","Bison","Boar","Buffalo","Cat","Crane","Crocodile","Crow","Deer","Dog","Eagle","Elk","Fox","Goat","Goose","Hare","Hawk","Heron","Horse","Hyena","Ibis","Jackal","Jaguar","Lark","Leopard","Lion","Mantis","Marten","Moose","Mule","Narwhal","Owl","Panther","Rat","Raven","Rook","Scorpion","Shark","Sheep","Snake","Spider","Swan","Tiger","Turtle","Wolf","Wolverine","Camel","Falcon","Hound","Ox"],re=["New","Good","High","Old","Great","Big","Major","Happy","Main","Huge","Far","Beautiful","Fair","Prime","Ancient","Golden","Proud","Lucky","Fat","Honest","Giant","Distant","Friendly","Loud","Hungry","Magical","Superior","Peaceful","Frozen","Divine","Favorable","Brave","Sunny","Flying"],ue=["Boiled","Grilled","Roasted","Spit-roasted","Stewed","Stuffed","Jugged","Mashed","Baked","Braised","Poached","Marinated","Pickled","Smoked","Dried","Dry-aged","Corned","Fried","Pan-fried","Deep-fried","Dressed","Steamed","Cured","Syrupped","Flame-Broiled"],fe=["beef","pork","bacon","chicken","lamb","chevon","hare","rabbit","hart","deer","antlers","bear","buffalo","badger","beaver","turkey","pheasant","duck","goose","teal","quail","pigeon","seal","carp","bass","pike","catfish","sturgeon","escallop","pie","cake","pottage","pudding","onions","carrot","potato","beet","garlic","cabbage","eggplant","eggs","broccoli","zucchini","pepper","olives","pumpkin","spinach","peas","chickpea","beans","rice","pasta","bread","apples","peaches","pears","melon","oranges","mango","tomatoes","cheese","corn","rat tails","pig ears"],Me=["hot","cold","fire","ice","smoky","misty","shiny","sweet","bitter","salty","sour","sparkling","smelly"],xe=["wine","brandy","gin","whisky","rom","beer","cider","mead","liquor","spirits","vodka","tequila","absinthe","nectar","milk","kvass","kumis","tea","water","juice","sap"],Ge=V(.3)?"inn":"tavern",je=V(.7),ut=ie(ae),At=je?V(.6)?ie(J)+" "+ut:ie(re)+" "+ut:ie(re)+" "+ba(Ge),Pt=je&&V(.3)?ut:ie(fe),an=`${ie(ue)} ${Pt}`.toLowerCase(),nn=`${V(.5)?ie(Me):ie(J)} ${ie(xe)}`.toLowerCase(),on=`A big and famous roadside ${Ge}. Delicious ${an} with ${nn} is served here`;notes.push({id:N,name:"The "+At,legend:on})}function h({cells:N}){return N.i.filter(K=>!t[K]&&N.harbor[K]>6&&N.c[K].some(J=>N.h[J]<20&&N.road[J]))}function v(N,K){const{cells:J}=pack,ae=J.burg[K]?pack.burgs[J.burg[K]].name:Names.getCulture(J.culture[K]);notes.push({id:N,name:We(ae)+" Lighthouse"+name,legend:"A lighthouse to serve as a beacon for ships in the open sea"})}function E({cells:N}){return N.i.filter(K=>N.r[K]&&!t[K]&&N.h[K]>=50&&N.c[K].some(J=>N.h[J]<40&&N.r[J]))}function P(N,K){const{cells:J}=pack,ae=["A gorgeous waterfall flows here","The rapids of an exceptionally beautiful waterfall","An impressive waterfall has cut through the land","The cascades of a stunning waterfall","A river drops down from a great height forming a wonderous waterfall","A breathtaking waterfall cuts through the landscape"],re=J.burg[K]?pack.burgs[J.burg[K]].name:Names.getCulture(J.culture[K]);notes.push({id:N,name:We(re)+" Waterfall"+name,legend:`${ie(ae)}`})}function T({cells:N}){return N.i.filter(K=>!t[K]&&N.state[K]&&N.pop[K]>2&&N.h[K]<50&&N.h[K]>25)}function R(N,K){const{cells:J,states:ae}=pack,re=ae[J.state[K]];re.campaigns||(re.campaigns=BurgsAndStates.generateCampaign(re));const ue=ie(re.campaigns),fe=L(ue.start,ue.end),Me=Names.getCulture(J.culture[K])+" Battlefield",xe=`A historical battle of the ${ue.name}. \r +Date: ${fe} ${options.era}`;notes.push({id:N,name:Me,legend:xe})}function L(N=100,K=1e3){return new Date(be(N,K),be(12),be(31)).toLocaleDateString("en",{year:"numeric",month:"long",day:"numeric"})}function M({cells:N}){return N.i.filter(K=>!t[K]&&N.pop[K]&&N.pop[K]<3)}function I(N,K){const J=`${seed}${K}`,ae="Dungeon",re=`
Undiscovered dungeon. See One page dungeon
`;notes.push({id:N,name:ae,legend:re})}function H({features:N}){return N.filter(K=>K.type==="lake"&&K.group==="freshwater"&&!t[K.firstCell]).map(K=>K.firstCell)}function G(N,K){const J=pack.features[pack.cells.f[K]];if(J.type!=="lake")return;const ae=`${J.name} Monster`,ue=`Rumors say a relic monster of ${Ce(10,5,5,100)} ${heightUnit.value} long inhabits ${J.name} Lake. Truth or lie, folks are afraid to fish in the lake`;notes.push({id:N,name:ae,legend:ue})}function D({cells:N,features:K}){return N.i.filter(J=>!t[J]&&N.h[J]<20&&N.road[J]&&K[N.f[J]].type==="ocean")}function U(N,K){const J=`${Names.getCultureShort(0)} Monster`,re=`Old sailors tell stories of a gigantic sea monster inhabiting these dangerous waters. Rumors say it can be ${Ce(25,10,10,100)} ${heightUnit.value} long`;notes.push({id:N,name:J,legend:re})}function F({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>=50&&N.pop[K])}function j(N,K){const{cells:J}=pack,ae=["great","big","huge","prime","golden","proud","lucky","fat","giant","hungry","magical","superior","terrifying","horrifying","feared"],re=["Locals","Elders","Inscriptions","Tipplers","Legends","Whispers","Rumors","Journeying folk","Tales"],ue=["Ogre","Troll","Cyclops","Giant","Monster","Beast","Dragon","Undead","Ghoul","Vampire","Hag","Banshee","Bearded Devil","Roc","Hydra","Warg"],fe=["steals cattle at night","prefers eating children","doesn't mind of human flesh","keeps the region at bay","eats kids whole","abducts young women","terrorizes the region","harasses travelers in the area","snatches people from homes","attacks anyone who dares to approach its lair","attacks unsuspecting victims"],Me=ie(ue),xe=Names.getCulture(J.culture[K]),Ge=`${xe} ${Me}`,je=`${ie(re)} speak of a ${ie(ae)} ${Me} who inhabits ${xe} hills and ${ie(fe)}`;notes.push({id:N,name:Ge,legend:je})}function Z({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>=70&&N.c[K].some(J=>N.culture[J])&&N.c[K].every(J=>N.h[J]<60))}function te(N,K){const{cells:J,cultures:ae}=pack,re=J.c[K].map(xe=>J.culture[xe]).find(xe=>xe),ue=`${Names.getCulture(re)} Mountain`,fe=sa(J.p[K]),Me=`A sacred mountain of ${ae[re].name} culture. Height: ${fe}`;notes.push({id:N,name:ue,legend:Me})}function q({cells:N}){return N.i.filter(K=>!t[K]&&N.culture[K]&&[6,8].includes(N.biome[K]))}function X(N,K){const{cells:J,cultures:ae}=pack,re=J.culture[K],ue=`${Names.getCulture(re)} Forest`,fe=`A sacred forest of ${ae[re].name} culture`;notes.push({id:N,name:ue,legend:fe})}function ee({cells:N}){return N.i.filter(K=>!t[K]&&N.culture[K]&&N.biome[K]===9)}function le(N,K){const{cells:J,cultures:ae}=pack,re=J.culture[K],ue=`${Names.getCulture(re)} Pinery`,fe=`A sacred pinery of ${ae[re].name} culture`;notes.push({id:N,name:ue,legend:fe})}function Y({cells:N}){return N.i.filter(K=>!t[K]&&N.culture[K]&&N.biome[K]===1&&N.pop[K]>1&&N.road[K])}function W(N,K){const{cells:J,cultures:ae}=pack,re=J.culture[K],ue=`${Names.getCulture(re)} Palm Grove`,fe=`A sacred palm grove of ${ae[re].name} culture`;notes.push({id:N,name:ue,legend:fe})}function de({cells:N}){return N.i.filter(K=>!t[K]&&N.culture[K]&&N.road[K]>4)}function me(N,K){const{cells:J}=pack,ae=["Apes","Badgers","Bears","Beavers","Bisons","Boars","Cats","Crows","Dogs","Foxes","Hares","Hawks","Hyenas","Jackals","Jaguars","Leopards","Lions","Owls","Panthers","Rats","Ravens","Rooks","Scorpions","Sharks","Snakes","Spiders","Tigers","Wolfs","Wolverines","Falcons"],re={brigands:4,bandits:3,robbers:1,highwaymen:1},ue=J.culture[K],fe=J.biome[K],xe=J.p[K]>=70?"highlander":[1,2].includes(fe)?"desert":[3,4].includes(fe)?"mounted":[5,6,7,8,9].includes(fe)?"forest":fe===12?"swamp":"angry",Ge=`${Names.getCulture(ue)} ${ie(ae)}`,je=`A gang of ${xe} ${he(re)}`;notes.push({id:N,name:Ge,legend:je})}function pe({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]<20&&N.road[K])}function we(N,K){const J="Pirates",ae="Pirate ships have been spotted in these waters";notes.push({id:N,name:J,legend:ae})}function ke({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>=20&&N.h[K]<40)}function He(N,K){const{cells:J}=pack,ae=["Statue","Obelisk","Monument","Column","Monolith","Pillar","Megalith","Stele","Runestone","Sculpture","Effigy","Idol"],re={cypriot:"\u{10801}\u{10802}\u{10803}\u{10804}\u{10805}\u{10808}\u{1080A}\u{1080B}\u{1080C}\u{1080D}\u{1080E}\u{1080F}\u{10810}\u{10811}\u{10812}\u{10813}\u{10814}\u{10815}\u{10816}\u{10817}\u{10818}\u{10819}\u{1081A}\u{1081B}\u{1081C}\u{1081D}\u{1081E}\u{1081F}\u{10820}\u{10821}\u{10822}\u{10823}\u{10824}\u{10825}\u{10826}\u{10827}\u{10828}\u{10829}\u{1082A}\u{1082B}\u{1082C}\u{1082D}\u{1082E}\u{1082F}\u{10830}\u{10831}\u{10832}\u{10833}\u{10834}\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F} ",geez:"\u1200\u1208\u1210\u1218\u1220\u1228\u1230\u1240\u1260\u1270\u1280\u1290\u12A0\u12A8\u12C8\u12D0\u12D8\u12E8\u12F0\u1308\u1320\u1330\u1338\u1340\u1348\u1350 ",coptic:"\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC1\u2CC2\u2CC3\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CE4\u2CE5\u2CE7\u2CE9\u2CEA\u2CEB\u2CEC\u2CED\u2CF2\u2CF9\u2CFE ",tibetan:"\u0F00\u0F01\u0F02\u0F03\u0F04\u0F05\u0F06\u0F07\u0F08\u0F09\u0F0A\u0F0B\u0F0C\u0F10\u0F11\u0F12\u0F13\u0F14\u0F15\u0F16\u0F17\u0F18\u0F19\u0F1A\u0F1B\u0F1C\u0F20\u0F21\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29\u0F2A\u0F2B\u0F2C\u0F2D\u0F2E\u0F2F\u0F30\u0F31\u0F32\u0F33\u0F34\u0F35\u0F36\u0F37\u0F38\u0F39\u0F3A\u0F3B\u0F3C\u0F3D\u0F3E\u0F3F",mongolian:"\u1800\u1810\u1811\u1812\u1820\u1821\u1826\u1827\u1828\u1829\u182A\u182D\u182E\u182F\u1830\u1831\u1832\u1833\u1835\u183B\u183C\u183D\u183E\u183F\u1840\u1841\u1846\u184D\u184E\u184F\u1850\u1851\u1852\u1853\u1854\u1855\u1856\u1857\u1859\u185C\u185D\u185E\u185F\u1860\u1861\u186D\u186E\u186F\u1870\u1871\u1872\u1873\u1874\u1880\u1881\u1882\u188B\u188F\u1890\u1891\u1892\u1893\u189B\u189C\u189E\u189F\u18A0\u18A1\u18A2\u18A4\u18A5\u18A6"},ue=J.culture[K],fe=ie(ae),Me=`${Names.getCulture(ue)} ${fe}`,xe=re[ie(Object.keys(re))],Ge=Array(be(40,100)).fill(null).map(()=>ie(xe)).join(""),je=`An ancient ${fe.toLowerCase()}. It has an inscription, but no one can translate it: +
${Ge}
`;notes.push({id:N,name:Me,legend:je})}function Be({cells:N}){return N.i.filter(K=>!t[K]&&N.culture[K]&&N.h[K]>=20&&N.h[K]<60)}function Fe(N,K){const ae=ie(["City","Town","Settlement","Pyramid","Fort","Stronghold","Temple","Sacred site","Mausoleum","Outpost","Fortification","Fortress","Castle"]),re=`Ruined ${ae}`,ue=`Ruins of an ancient ${ae.toLowerCase()}. Untold riches may lie within`;notes.push({id:N,name:re,legend:ue})}function _({cells:N}){return N.i.filter(K=>!t[K]&&N.culture[K]&&N.h[K]>=20&&pack.cells.road[K])}function oe(N,K){const ae=ie(["Fantastical","Wonderous","Incomprehensible","Magical","Extraordinary","Unmissable","World-famous","Breathtaking"]),re=`Travelling ${ae} Circus`,ue=`Roll up, roll up, this ${ae.toLowerCase()} circus is here for a limited time only`;notes.push({id:N,name:re,legend:ue})}function ce({cells:N,burgs:K}){return N.i.filter(J=>!t[J]&&N.burg[J]&&K[N.burg[J]].population>20)}function ye(N,K){const{cells:J,burgs:ae}=pack,re=["Joust","Competition","Melee","Tournament","Contest"],ue=["cunning","might","speed","the greats","acumen","brutality"];if(!J.burg[K])return;const fe=ae[J.burg[K]].name,Me=ie(re),xe=ie(ue),Ge=`${fe} ${Me}`,je=`Warriors from around the land gather for a ${Me.toLowerCase()} of ${xe} in ${fe}, with fame, fortune and favour on offer to the victor`;notes.push({id:N,name:Ge,legend:je})}function Se({cells:N}){return N.i.filter(K=>!t[K]&&N.r[K])}function ve(N,K){const J=pack.rivers.find(fe=>fe.i===pack.cells.r[K]),ae="Minor Jetty",ue=`A small location along the ${J?`${J.name} ${J.type}`:"river"} to launch boats from sits here, along with a weary looking owner, willing to sell passage along the river`;notes.push({id:N,name:ae,legend:ue})}function Ue({cells:N}){return N.i.filter(K=>!t[K]&&N.h[K]>=20&&N.pop[K]<=2)}function Ve(N,K){const ae=ie(["Antelopes","Apes","Badgers","Bears","Beavers","Bisons","Boars","Buffalo","Cats","Cranes","Crocodiles","Crows","Deers","Dogs","Eagles","Elks","Foxs","Goats","Geese","Hares","Hawks","Herons","Horses","Hyenas","Ibises","Jackals","Jaguars","Larks","Leopards","Lions","Mantises","Martens","Mooses","Mules","Owls","Panthers","Rats","Ravens","Rooks","Scorpions","Sharks","Sheeps","Snakes","Spiders","Tigers","Wolfs","Wolverines","Camels","Falcons","Hounds","Oxen"]),re=`${ae} migration`,ue=`A huge group of ${ae.toLowerCase()} is migrating, though whether part of their annual routine, or something more extraordinary`;notes.push({id:N,name:re,legend:ue})}function Oe({cells:N,burgs:K}){return N.i.filter(J=>!t[J]&&N.burg[J]&&K[N.burg[J]].population>15)}function $e(N,K){const{cells:J,burgs:ae}=pack,re=ae[J.burg[K]].name,ue=["gala","dance","performance","ball","soiree","jamboree","exhibition","carnival","festival","jubilee"],fe=["great and the good","nobility","local elders","foreign dignitaries","spiritual leaders","suspected revolutionaries"],Me=ie(ue),xe=`${re} ${Me}`,Ge=`A ${Me} has been organised at ${re} as a chance to gather the ${ie(fe)} of the area together to be merry, make alliances and scheme around the crisis`;notes.push({id:N,name:xe,legend:Ge})}function rt({cells:N}){return N.i.filter(K=>!t[K]&&N.biome[K]===1)}function nt(N,K){const ae=ie(["Entrancing","Diaphanous","Illusory","Distant","Perculiar"]),re=`${ae} mirage`,ue=`This ${ae.toLowerCase()} mirage has been luring travellers out of their way for eons`;notes.push({id:N,name:re,legend:ue})}function _e({burgs:N}){return N.slice(1,Math.ceil(N.length/10)+1).filter(({cell:K})=>!t[K]).map(K=>K.cell)}function qe(N,K){const{cells:J,burgs:ae}=pack;if(!J.burg[K])return;const ue=`${ae[J.burg[K]].name} Portal`,fe="An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine";notes.push({id:N,name:ue,legend:fe})}function st({cells:N}){return N.i.filter(K=>!t[K]&&pack.cells.pop[K]<=3&&biomesData.habitability[pack.cells.biome[K]])}function ot(N,K){const J=["Demonic","Interdimensional","Abyssal","Cosmic","Cataclysmic","Subterranean","Ancient"],ae=["all known nearby beings to flee in terror","cracks in reality itself to form","swarms of foes to spill forth","the life of nearby plants to wither and decay","an emmissary to step through with an all-powerful relic"],re=ie(J),ue=`${re} Rift`,fe=`A rumoured ${re.toLowerCase()} rift in this area is causing ${ie(ae)}.`;notes.push({id:N,name:ue,legend:fe})}return{add:z,generate:c,regenerate:f,getConfig:i,setConfig:r,deleteMarker:g}}();window.COA=function(){const e={field:{metals:3,colours:4,stains:+V(.03),patterns:1},division:{metals:5,colours:8,stains:+V(.03),patterns:1},charge:{metals:2,colours:3,stains:+V(.05),patterns:0},metals:{argent:3,or:2},colours:{gules:5,azure:4,sable:3,purpure:3,vert:2},stains:{murrey:1,sanguine:1,tenn\u00E9:1},patterns:{semy:8,ermine:6,vair:4,counterVair:1,vairInPale:1,vairEnPointe:2,vairAncien:2,potent:2,counterPotent:1,potentInPale:1,potentEnPointe:1,chequy:8,lozengy:5,fusily:2,pally:8,barry:10,gemelles:1,bendy:8,bendySinister:4,palyBendy:2,barryBendy:1,pappellony:2,pappellony2:3,scaly:1,plumetty:1,masoned:6,fretty:3,grillage:1,chainy:1,maily:2,honeycombed:1}},t={types:{conventional:30,crosses:10,animals:2,animalHeads:1,birds:2,aquatic:1,seafaring:1,fantastic:3,plants:1,agriculture:1,arms:3,bodyparts:1,people:1,architecture:1,miscellaneous:3,inescutcheon:3,uploaded:0},single:{conventional:12,crosses:8,plants:2,animals:10,animalHeads:2,birds:4,aquatic:2,seafaring:2,fantastic:7,agriculture:1,arms:6,bodyparts:1,people:2,architecture:1,miscellaneous:10,inescutcheon:5,uploaded:0},semy:{conventional:4,crosses:1},conventional:{lozenge:2,fusil:4,mascle:4,rustre:2,lozengeFaceted:3,lozengePloye:1,roundel:4,roundel2:3,annulet:4,mullet:5,mulletPierced:1,mulletFaceted:1,mullet4:3,mullet6:4,mullet6Pierced:1,mullet6Faceted:1,mullet7:1,mullet8:1,mullet10:1,estoile:1,compassRose:1,billet:5,delf:0,triangle:3,trianglePierced:1,goutte:4,heart:4,pique:2,carreau:1,trefle:2,fleurDeLis:6,sun:3,sunInSplendour:1,crescent:5,fountain:1},inescutcheon:{inescutcheonHeater:1,inescutcheonSpanish:1,inescutcheonFrench:1,inescutcheonHorsehead:1,inescutcheonHorsehead2:1,inescutcheonPolish:1,inescutcheonHessen:1,inescutcheonSwiss:1,inescutcheonBoeotian:1,inescutcheonRoman:1,inescutcheonKite:1,inescutcheonOldFrench:1,inescutcheonRenaissance:1,inescutcheonBaroque:1,inescutcheonTarge:1,inescutcheonTarge2:1,inescutcheonPavise:1,inescutcheonWedged:1,inescutcheonFlag:1,inescutcheonPennon:1,inescutcheonGuidon:1,inescutcheonBanner:1,inescutcheonDovetail:1,inescutcheonGonfalon:1,inescutcheonPennant:1,inescutcheonRound:1,inescutcheonOval:1,inescutcheonVesicaPiscis:1,inescutcheonSquare:1,inescutcheonDiamond:1,inescutcheonNo:1,inescutcheonFantasy1:1,inescutcheonFantasy2:1,inescutcheonFantasy3:1,inescutcheonFantasy4:1,inescutcheonFantasy5:1,inescutcheonNoldor:1,inescutcheonGondor:1,inescutcheonEasterling:1,inescutcheonErebor:1,inescutcheonIronHills:1,inescutcheonUrukHai:1,inescutcheonMoriaOrc:1},crosses:{crossHummetty:15,crossVoided:1,crossPattee:2,crossPatteeAlisee:1,crossFormee:1,crossFormee2:2,crossPotent:2,crossJerusalem:1,crosslet:1,crossClechy:3,crossBottony:1,crossFleury:3,crossPatonce:1,crossPommy:1,crossGamma:1,crossArrowed:1,crossFitchy:1,crossCercelee:1,crossMoline:2,crossFourchy:1,crossAvellane:1,crossErminee:1,crossBiparted:1,crossMaltese:3,crossTemplar:2,crossCeltic:1,crossCeltic2:1,crossTriquetra:1,crossCarolingian:1,crossOccitan:1,crossSaltire:3,crossBurgundy:1,crossLatin:3,crossPatriarchal:1,crossOrthodox:1,crossCalvary:1,crossDouble:1,crossTau:1,crossSantiago:1,crossAnkh:1},animals:{lionRampant:6,lionPassant:2,lionPassantGuardant:1,wolfRampant:1,wolfPassant:1,wolfStatant:1,greyhoundCourant:1,greyhoundSejant:1,mastiffStatant:1,boarRampant:1,horseRampant:2,horseSalient:1,horsePassant:1,bearRampant:2,bearPassant:1,bullPassant:1,goat:1,lamb:1,lambPassantReguardant:1,agnusDei:1,elephant:1,camel:1,porcupine:1,snake:1},animalHeads:{wolfHeadErased:2,bullHeadCaboshed:1,deerHeadCaboshed:1,lionHeadCaboshed:2},fantastic:{dragonPassant:2,dragonRampant:2,wyvern:1,wyvernWithWingsDisplayed:1,griffinPassant:1,griffinRampant:1,eagleTwoHeards:2,unicornRampant:1,pegasus:1,serpent:1,basilisk:1},birds:{eagle:9,raven:2,cock:3,parrot:1,swan:2,swanErased:1,heron:1,owl:1},plants:{tree:1,oak:1,cinquefoil:1,rose:1,apple:1},aquatic:{escallop:5,pike:1,cancer:1,dolphin:1},seafaring:{anchor:6,boat:2,boat2:1,lymphad:2,armillarySphere:1},agriculture:{garb:2,rake:1,plough:2},arms:{sword:4,falchion:1,sabre:1,sabresCrossed:1,sabre2:1,hatchet:3,axe:3,lochaberAxe:1,mallet:1,bowWithArrow:3,bow:1,arrow:1,arrowsSheaf:1,helmet:2,cannon:1},bodyparts:{hand:4,head:1,headWreathed:1,foot:1},people:{cavalier:3,monk:1,angel:2},architecture:{tower:1,castle:1},miscellaneous:{crown:2,crown2:1,orb:1,chalice:1,key:1,buckle:1,bugleHorn:1,bugleHorn2:1,bell:2,pot:1,bucket:1,horseshoe:3,attire:1,stagsAttires:1,ramsHorn:1,cowHorns:2,wing:1,wingSword:1,lute:1,harp:1,wheel:2,crosier:1,fasces:1,log:1,chain:1,anvil:1},Naval:{anchor:3,boat:1,lymphad:2,armillarySphere:1,escallop:1,dolphin:1},Highland:{tower:1,raven:1,wolfHeadErased:1,wolfPassant:1,goat:1,axe:1},River:{tower:1,garb:1,rake:1,boat:1,pike:2,bullHeadCaboshed:1,apple:1,plough:1},Lake:{cancer:2,escallop:1,pike:2,heron:1,boat:1,boat2:2},Nomadic:{pot:1,buckle:1,wheel:2,sabre:2,sabresCrossed:1,bow:2,arrow:1,horseRampant:1,horseSalient:1,crescent:1,camel:3},Hunting:{bugleHorn:2,bugleHorn2:1,stagsAttires:2,attire:2,hatchet:1,bowWithArrow:1,arrowsSheaf:1,deerHeadCaboshed:1,wolfStatant:1,oak:1,greyhoundSejant:1},City:{key:3,bell:2,lute:1,tower:1,castle:1,mallet:1,cannon:1,anvil:1},Capital:{crown:2,orb:1,lute:1,castle:3,tower:1,crown2:2},\u0421athedra:{chalice:1,orb:1,crosier:2,lamb:1,monk:2,angel:3,crossLatin:2,crossPatriarchal:1,crossOrthodox:1,crossCalvary:1,agnusDei:3},natural:{fountain:"azure",garb:"or",raven:"sable"},sinister:["crossGamma","lionRampant","lionPassant","wolfRampant","wolfPassant","wolfStatant","wolfHeadErased","greyhound\u0421ourant","greyhoundSejant","mastiffStatant","boarRampant","horseRampant","horseSalient","horsePassant","bullPassant","bearRampant","bearPassant","goat","lamb","lambPassantReguardant","agnusDei","elephant","eagle","raven","cock","parrot","swan","swanErased","heron","pike","dragonPassant","dragonRampant","wyvern","wyvernWithWingsDisplayed","griffinPassant","griffinRampant","unicornRampant","pegasus","serpent","hatchet","lochaberAxe","hand","wing","wingSword","lute","harp","bow","head","headWreathed","knight","lymphad","log","crosier","dolphin","sabre","monk","owl","axe","camel","fasces","lionPassantGuardant","helmet","foot","plough","sabre2","cannon","porcupine","basilisk","snake","anvil"],reversed:["goutte","mullet","mullet7","crescent","crossTau","cancer","sword","falchion","sabresCrossed","hand","horseshoe","bowWithArrow","arrow","arrowsSheaf","rake","crossTriquetra","crossLatin","crossTau","sabre2"]},n={conventional:{e:20,abcdefgzi:3,beh:3,behdf:2,acegi:1,kn:3,bhdf:1,jeo:1,abc:3,jln:6,jlh:3,kmo:2,jleh:1,def:3,abcpqh:4,ABCDEFGHIJKL:1},complex:{e:40,beh:1,kn:1,jeo:1,abc:2,jln:7,jlh:2,def:1,abcpqh:1},divisions:{perPale:{e:15,pq:5,jo:2,jl:2,ABCDEFGHIJKL:1},perFess:{e:12,kn:4,jkl:2,gizgiz:1,jlh:3,kmo:1,ABCDEFGHIJKL:1},perBend:{e:5,lm:5,bcfdgh:1},perBendSinister:{e:1,jo:1},perCross:{e:4,jlmo:1,j:1,jo:2,jl:1},perChevron:{e:1,jlh:1,dfk:1,dfbh:2,bdefh:1},perChevronReversed:{e:1,mok:2,dfh:2,dfbh:1,bdefh:1},perSaltire:{bhdf:8,e:3,abcdefgzi:1,bh:1,df:1,ABCDEFGHIJKL:1},perPile:{ee:3,be:2,abceh:1,abcabc:1,jleh:1}},ordinariesOn:{pale:{ee:12,beh:10,kn:3,bb:1},fess:{ee:1,def:3},bar:{defdefdef:1},fessCotissed:{ee:1,def:3},fessDoubleCotissed:{ee:1,defdef:3},bend:{ee:2,jo:1,joe:1},bendSinister:{ee:1,lm:1,lem:4},bendlet:{joejoejoe:1},bendletSinister:{lemlemlem:1},bordure:{ABCDEFGHIJKL:1},chief:{abc:5,bbb:1},quarter:{jjj:1},canton:{yyyy:1},cross:{eeee:1,behdfbehdf:3,behbehbeh:2},crossParted:{e:5,ee:1},saltire:{ee:5,jlemo:1},saltireParted:{e:5,ee:1},pall:{ee:1,jleh:5,jlhh:3},pallReversed:{ee:1,bemo:5},pile:{bbb:1},pileInBend:{eeee:1,eeoo:1},pileInBendSinister:{eeee:1,eemm:1}},ordinariesOff:{pale:{yyy:1},fess:{abc:3,abcz:1},bar:{abc:2,abcgzi:1,jlh:5,bgi:2,ach:1},gemelle:{abc:1},bend:{ccg:2,ccc:1},bendSinister:{aai:2,aaa:1},bendlet:{ccg:2,ccc:1},bendletSinister:{aai:2,aaa:1},bordure:{e:4,jleh:2,kenken:1,peqpeq:1},orle:{e:4,jleh:1,kenken:1,peqpeq:1},chief:{emo:2,emoz:1,ez:2},terrace:{e:5,def:1,bdf:3},mount:{e:5,def:1,bdf:3},point:{e:2,def:1,bdf:3,acbdef:1},flaunches:{e:3,kn:1,beh:3},gyron:{bh:1},quarter:{e:1},canton:{e:5,beh:1,def:1,bdefh:1,kn:1},cross:{acgi:1},pall:{BCKFEILGJbdmfo:1},pallReversed:{aczac:1},chevron:{ach:3,hhh:1},chevronReversed:{bbb:1},pile:{acdfgi:1,acac:1},pileInBend:{cg:1},pileInBendSinister:{ai:1},label:{defgzi:2,eh:3,defdefhmo:1,egiegi:1,pqn:5}},inescutcheon:{e:4,jln:1},mascle:{e:15,abcdefgzi:3,beh:3,bdefh:4,acegi:1,kn:3,joe:2,abc:3,jlh:8,jleh:1,df:3,abcpqh:4,pqe:3,eknpq:3},lionRampant:{e:10,def:2,abc:2,bdefh:1,kn:1,jlh:2,abcpqh:1},lionPassant:{e:10,def:1,abc:1,bdefh:1,jlh:1,abcpqh:1},wolfPassant:{e:10,def:1,abc:1,bdefh:1,jlh:1,abcpqh:1},greyhound\u0421ourant:{e:10,def:1,abc:1,bdefh:1,jlh:1,abcpqh:1},griffinRampant:{e:10,def:2,abc:2,bdefh:1,kn:1,jlh:2,abcpqh:1},griffinPassant:{e:10,def:1,abc:1,bdefh:1,jlh:1,abcpqh:1},boarRampant:{e:12,beh:1,kn:1,jln:2},eagle:{e:15,beh:1,kn:1,abc:1,jlh:2,def:2,pq:1},raven:{e:15,beh:1,kn:1,jeo:1,abc:3,jln:3,def:1},wyvern:{e:10,jln:1},garb:{e:1,def:3,abc:2,beh:1,kn:1,jln:3,jleh:1,abcpqh:1,joe:1,lme:1},crown:{e:10,abcdefgzi:1,beh:3,behdf:2,acegi:1,kn:1,pq:2,abc:1,jln:4,jleh:1,def:2,abcpqh:3},hand:{e:10,jln:2,kn:1,jeo:1,abc:2,pqe:1},armillarySphere:{e:1},tree:{e:1},lymphad:{e:1},head:{e:1},headWreathed:{e:1},cavalier:{e:1},angel:{e:1}},i={straight:50,wavy:8,engrailed:4,invecked:3,rayonne:3,embattled:1,raguly:1,urdy:1,dancetty:1,indented:2,dentilly:1,bevilled:1,angled:1,flechy:1,barby:1,enclavy:1,escartely:1,arched:2,archedReversed:1,nowy:1,nowyReversed:1,embattledGhibellin:1,embattledNotched:1,embattledGrady:1,dovetailedIndented:1,dovetailed:1,potenty:1,potentyDexter:1,potentySinister:1,nebuly:2,seaWaves:1,dragonTeeth:1,firTrees:1},r={variants:{perPale:5,perFess:5,perBend:2,perBendSinister:1,perChevron:1,perChevronReversed:1,perCross:5,perPile:1,perSaltire:1,gyronny:1,chevronny:1},perPale:i,perFess:i,perBend:i,perBendSinister:i,perChevron:i,perChevronReversed:i,perCross:{straight:20,wavy:5,engrailed:4,invecked:3,rayonne:1,embattled:1,raguly:1,urdy:1,indented:2,dentilly:1,bevilled:1,angled:1,embattledGhibellin:1,embattledGrady:1,dovetailedIndented:1,dovetailed:1,potenty:1,potentyDexter:1,potentySinister:1,nebuly:1},perPile:i},c={lined:{pale:7,fess:5,bend:3,bendSinister:2,chief:5,bar:2,gemelle:1,fessCotissed:1,fessDoubleCotissed:1,bendlet:2,bendletSinister:1,terrace:3,cross:6,crossParted:1,saltire:2,saltireParted:1},straight:{bordure:8,orle:4,mount:1,point:2,flaunches:1,gore:1,gyron:1,quarter:1,canton:2,pall:3,pallReversed:2,chevron:4,chevronReversed:3,pile:2,pileInBend:2,pileInBendSinister:1,piles:1,pilesInPoint:2,label:1}};return{generate:function(u,C,g,p){(!u||u==="custom")&&(u=null,C=0,g=0);let B=null,k=[];const d=V(C)?u.t1:E("field");d.includes("-")&&(B=d);const s={t1:d};let o=!!V(B?.5:.93);const l=o&&V(.3)||V(.5)?(u==null?void 0:u.ordinaries)&&V(C)?u.ordinaries[0].ordinary:he(c.lined):null,a=!o&&V(.65)||V(.3)?l||he(c.straight):null,w=["chief","terrace","chevron","quarter","flaunches"].includes(a),S=V(w||o&&a?.03:o?.3:a?.7:.995),h=S?(u==null?void 0:u.division)&&V(C-.1)?u.division.division:he(r.variants):null;if(o&&(o=(u==null?void 0:u.charges)&&V(C-.1)?u.charges[0].charge:p&&p!=="Generic"&&V(.2)?he(t[p]):v()),h){const I=E("division",k,V(.98)?s.t1:null);s.division={division:h,t:I},r[h]&&(s.division.line=B||a&&V(.7)?"straight":he(r[h]))}if(a&&(s.ordinaries=[{ordinary:a,t:E("charge",k,s.t1)}],l&&(s.ordinaries[0].line=B||h&&V(.7)?"straight":he(i)),h&&!o&&!B&&V(.5)&&a!=="bordure"&&a!=="orle"&&(V(.8)?s.ordinaries[0].divided="counter":V(.6)?s.ordinaries[0].divided="field":s.ordinaries[0].divided="division")),o){let D=function(U){U.size=(U.size||1)*M(U.p,a,h),U.p=[...new Set(U.p)].join(""),V(.02)&&t.sinister.includes(U.charge)&&(U.sinister=1),V(.02)&&t.reversed.includes(U.charge)&&(U.reversed=1)},I="e",H="gules";const G=s.ordinaries?s.ordinaries[0].t:null;if(n.ordinariesOn[a]&&V(.8)){for(I=he(n.ordinariesOn[a]);t.natural[o]===G;)o=v();H=!B&&V(.3)?s.t1:E("charge",[],G)}else if(n.ordinariesOff[a]&&V(.95)){for(I=he(n.ordinariesOff[a]);t.natural[o]===s.t1;)o=v();H=!B&&V(.3)?G:E("charge",k,s.t1)}else if(n.divisions[h]){for(I=he(n.divisions[h]);t.natural[o]===s.t1;)o=v();H=E("charge",G?k.concat(G):k,s.t1)}else if(n[o]){for(I=he(n[o]);t.natural[o]===s.t1;)o=v();H=E("charge",k,s.t1)}else{for(I=B?"e":t.conventional[o]?he(n.conventional):he(n.complex);t.natural[o]===s.t1;)o=v();H=E("charge",k.concat(G),s.t1)}if(t.natural[o]&&(H=t.natural[o]),s.charges=[{charge:o,t:H,p:I}],I==="ABCDEFGHIKL"&&V(.95)){s.charges[0].charge=he(t.conventional);const U=v(t.single),F=E("charge",k,s.t1);s.charges.push({charge:U,t:F,p:"e"})}else if(V(.8)&&o==="inescutcheon"){const U=v(t.types),F=E("charge",[],H);s.charges.push({charge:U,t:F,p:I,size:.5})}else if(h&&!a){const U=!B&&(!s.line||s.line==="straight");if(V(.3)&&["perPale","perFess"].includes(h)&&s.line==="straight"){if(s.charges[0].divided="field",V(.95)){const F=I==="e"||V(.5)?"e":he(n.divisions[h]),j=v(t.single),Z=E("charge",k,s.division.t);s.charges.push({charge:j,t:Z,p:F,divided:"division"})}}else if(U&&V(.4))s.charges[0].divided="counter";else if(["perPale","perFess","perBend","perBendSinister"].includes(h)&&V(.8)){const[F,j]=h==="perPale"?["p","q"]:h==="perFess"?["k","n"]:h==="perBend"?["l","m"]:["j","o"];s.charges[0].p=F;const Z=v(t.single),te=E("charge",k,s.division.t);s.charges.push({charge:Z,t:te,p:j})}else if(["perCross","perSaltire"].includes(h)&&V(.5)){const[F,j,Z,te]=h==="perCross"?["j","l","m","o"]:["b","d","f","h"];s.charges[0].p=F;const q=v(t.single),X=E("charge",[],s.division.t),ee=v(t.single),le=E("charge",[],s.division.t),Y=v(t.single),W=E("charge",[],s.t1);s.charges.push({charge:q,t:X,p:j},{charge:ee,t:le,p:Z},{charge:Y,t:W,p:te})}else U&&I.length>1&&(s.charges[0].divided="counter")}s.charges.forEach(U=>D(U))}if(V(g)&&u.charges){const I=T(u.t1,s.t1),H=I?E("division",k,s.t1):u.t1,G={ordinary:"canton",t:H};s.charges&&s.charges.forEach((F,j)=>{F.size===1.5&&(F.size=1.4),F.p.includes("a")&&(F.p=F.p.replaceAll("a","")),F.p.includes("j")&&(F.p=F.p.replaceAll("j","")),F.p.includes("y")&&(F.p=F.p.replaceAll("y","")),F.p||s.charges.splice(j,1)});let D=u.charges[0].charge;D==="inescutcheon"&&u.charges[1]&&(D=u.charges[1].charge);let U=I?u.t1:u.charges[0].t;T(H,U)&&(U=E("charge",k,H)),s.charges||(s.charges=[]),s.charges.push({charge:D,t:U,p:"y",size:.5}),s.ordinaries?s.ordinaries.push(G):s.ordinaries=[G]}function v(I){const H=he(I||(a||S?t.types:t.single));return H==="inescutcheon"?"inescutcheon":he(t[H])}function E(I,H=[],G){const D=G?G.includes("-")?G.split("-")[1]:G:null;let U=he(e[I]);G&&U!=="patterns"&&(U=P(D)==="metals"?"colours":"metals"),U==="metals"&&H.includes("or")&&H.includes("argent")&&(U="colours");let F=he(e[U]);for(;F===D||H.includes(F);)F=he(e[U]);return U!=="patterns"&&I!=="charge"&&k.push(F),U==="patterns"&&(B=F,F=R(F,I)),F}function P(I){const H=I.includes("-")?I.split("-")[1]:I;if(Object.keys(e.metals).includes(H))return"metals";if(Object.keys(e.colours).includes(H))return"colours";if(Object.keys(e.stains).includes(H))return"stains"}function T(I,H){return G(I)===G(H);function G(D){return Object.keys(e.metals).includes(D)?"metals":Object.keys(e.colours).includes(D)?"colours":Object.keys(e.stains).includes(D)?"stains":"pattern"}}function R(I,H,G=""){let D=null,U=null;if(V(.1)?G="-small":V(.1)?G="-smaller":V(.01)?G="-big":V(.005)&&(G="-smallest"),V(.5)&&["vair","vairInPale","vairEnPointe"].includes(I)?(D="azure",U="argent"):V(.8)&&I==="ermine"?(D="argent",U="sable"):I==="pappellony"?V(.2)?(D="gules",U="or"):V(.2)?(D="argent",U="sable"):V(.2)&&(D="azure",U="argent"):I==="masoned"?V(.3)?(D="gules",U="argent"):V(.3)?(D="argent",U="sable"):V(.1)&&(D="or",U="sable"):I==="fretty"?U==="sable"||V(.35)?(D="argent",U="gules"):V(.25)?(D="sable",U="or"):V(.15)&&(D="gules",U="argent"):I==="semy"&&(I+="_of_"+v(t.semy)),!D||!U){const F=V(.7);D=he(F?e.metals:e.colours),U=he(F?e.colours:e.metals)}return H==="division"&&(k.includes(D)&&(D=L(D)),k.includes(U)&&(U=L(U))),k.push(D,U),`${I}-${D}-${U}${G}`}function L(I,H){const G=P(I);for(;!H||H===I;)H=he(e[G]);return H}function M(I,H=null,G=null){return I==="e"&&(H==="bordure"||H==="orle")?1.1:I==="e"?1.5:I==="jln"||I==="jlh"?.7:I==="abcpqh"||I==="ez"||I==="be"||["a","b","c","d","f","g","h","i","bh","df"].includes(I)?.5:["j","l","m","o","jlmo"].includes(I)&&G==="perCross"?.6:I.length>10?.18:I.length>7?.3:I.length>4?.4:I.length>2?.5:.7}return s},toString:u=>JSON.stringify(u).replaceAll("#","%23"),copy:u=>JSON.parse(JSON.stringify(u)),getShield:function(u,C){var B;const g=document.getElementById("emblemShape");return(((B=g.selectedOptions[0])==null?void 0:B.parentNode.label)||"Diversiform")!=="Diversiform"?g.value:g.value==="state"&&C&&pack.states[C].coa?pack.states[C].coa.shield:pack.cultures[u].shield?pack.cultures[u].shield:(ERROR&&console.error("Shield shape is not defined on culture level",pack.cultures[u]),"heater")},shields:{types:{basic:10,regional:2,historical:1,specific:1,banner:1,simple:2,fantasy:1,middleEarth:0},basic:{heater:12,spanish:6,french:1},regional:{horsehead:1,horsehead2:1,polish:1,hessen:1,swiss:1},historical:{boeotian:1,roman:2,kite:1,oldFrench:5,renaissance:2,baroque:2},specific:{targe:1,targe2:0,pavise:5,wedged:10},banner:{flag:1,pennon:0,guidon:0,banner:0,dovetail:1,gonfalon:5,pennant:0},simple:{round:12,oval:6,vesicaPiscis:1,square:1,diamond:2,no:0},fantasy:{fantasy1:2,fantasy2:2,fantasy3:1,fantasy4:1,fantasy5:3},middleEarth:{noldor:1,gondor:1,easterling:1,erebor:1,ironHills:1,urukHai:1,moriaOrc:1}}}}();window.Submap=function(){const e=(c,f)=>c.cells.h[f]<20,t=(c,f)=>c>0&&c0&&fINFO&&console.log("SUBMAP:",S),A=performance.now();invokeActiveZooming(),seed=c.seed,Math.random=aleaPRNG(seed),INFO&&console.group("SubMap with seed: "+seed),DEBUG&&console.log("Using Options:",f),applyMapSize(),grid=generateGrid(),drawScaleBar(scale);const u=(S,h,v)=>{for(const[E,[P,T]]of S.entries()){const[R,L]=m(P,T),M=h.find(R,L,1/0)[2];v(E,M)}};b("Resampling heightmap, temperature and precipitation.");const C=grid.points.length;grid.cells.h=new Uint8Array(C),grid.cells.temp=new Int8Array(C),grid.cells.prec=new Uint8Array(C);const g=new Uint32Array(C),p=c.grid,B=c.grid.points.map(S=>[]);if(u(grid.points,c.pack.cells.q,(S,h)=>{const v=c.pack.cells.g[h];grid.cells.h[S]=p.cells.h[v],grid.cells.temp[S]=p.cells.temp[v],grid.cells.prec[S]=p.cells.prec[v],f.depressRivers&&B[v].push(S),g[S]=v}),f.smoothHeightMap){const S=grid.cells;S.h.forEach((h,v)=>{const E=S.c[v].map(P=>S.h[P]);E.push(h),S.h[v]=h>=20?Math.max(d3.mean(E),20):Math.min(d3.mean(E),19)})}if(f.depressRivers){b("Generating riverbeds.");const S=new Uint16Array(grid.cells.i.length);c.pack.rivers.forEach(h=>h.cells.forEach(v=>{if(v<0)return;const E=c.pack.cells.g[v],P=B[E];if(!P)throw"TargetCell shouldn't be empty.";P.forEach(T=>{grid.cells.h[T]<20||(S[T]=1)})})),grid.cells.h.forEach((h,v)=>{S[v]||h<20||(grid.cells.h[v]=Math.min(h+2,100))})}b("Detect features, ocean and generating lakes."),markFeatures(),markupGridOcean(),f.addLakesInDepressions&&(addLakesInDeepDepressions(),openNearSeaLakes()),OceanLayers(),calculateMapCoordinates(),b("Cell cleanup."),reGraph(),b("Define coastline."),drawCoastline();const k=c.pack.cells,d=c.pack.cells.p.map(S=>[]),s=pack.cells.i.length,o=pack.cells;o.culture=new Uint16Array(s),o.state=new Uint16Array(s),o.burg=new Uint16Array(s),o.religion=new Uint16Array(s),o.road=new Uint16Array(s),o.crossroad=new Uint16Array(s),o.province=new Uint16Array(s),b("Resampling culture, state and religion map.");for(const[S,h]of o.g.entries()){const v=g[h];if(v===void 0){console.error("Can not find old cell id",g,"in",h);continue}const E=k.i.filter(T=>k.g[T]==v);let P;if(E.length){const T=L=>(L[0]-o.p[S][0])**2+(L[1]-o.p[S][1])**2;let R=1/0;if(E.forEach(L=>{e(c.pack,L)!==e(pack,S)&&console.warn(`cell sank because of addLakesInDepressions: ${L}`);const[M,I]=k.p[L],H=T(z(M,I));isNaN(H)&&console.error("Distance is not a number!","Old point:",M,I),H{if(!h)return;if(!l.has(h)){S.removed=!0,S.center=null;return}const v=d[S.center];S.center=v.length?v[0]:pack.cells.culture.findIndex(E=>E===h)}),b("Porting and locking burgs."),r(c,z,f),b("Porting states.");const a=new Set(pack.cells.state);pack.states=c.pack.states,pack.states.forEach((S,h)=>{!S.i||S.removed||(a.has(h)||(S.removed=!0),S.neighbors=S.neighbors.filter(v=>a.has(v)),S.center=pack.burgs[S.capital].cell?pack.burgs[S.capital].cell:pack.cells.state.findIndex(v=>v===h))}),b("Porting provinces.");const w=new Set(pack.cells.province);pack.provinces=c.pack.provinces,pack.provinces.forEach((S,h)=>{if(!S||S.removed)return;if(!w.has(h)){S.removed=!0;return}const v=d[S.center];S.center=v.length?v[0]:pack.cells.province.findIndex(E=>E===h)}),BurgsAndStates.drawBurgs(),b("Regenerating road network."),Routes.regenerate(),drawStates(),drawBorders(),BurgsAndStates.drawStateLabels(),Rivers.specify(),Lakes.generateName(),b("Porting military.");for(const S of pack.states)if(!!S.military){for(const h of S.military){[h.x,h.y]=z(h.x,h.y),[h.bx,h.by]=z(h.bx,h.by);const v=d[h.cell];h.cell=v&&v.length?v[0]:null}S.military=S.military.filter(h=>h.cell).map((h,v)=>({...h,i:v}))}Military.redraw(),b("Copying markers.");for(const S of pack.markers){const[h,v]=z(S.x,S.y);t(h,v)?(S.x=h,S.y=v,S.cell=Te(h,v),f.lockMarkers&&(S.lock=!0)):Markers.deleteMarker(S.i)}layerIsOn("toggleMarkers")&&drawMarkers(),b("Redraw emblems."),drawEmblems(),b("Regenerating Zones."),addZones(),Names.getMapName(),b("Restoring Notes."),notes=c.notes,b("Submap done."),WARN&&console.warn(`TOTAL: ${O((performance.now()-A)/1e3,2)}s`),showStatistics(),INFO&&console.groupEnd("Generated Map "+seed)}const i=(c,f,z=3)=>(m,b)=>{const A=B=>(m-pack.cells.p[B][0])**2+(b-pack.cells.p[B][0])**2,u=Te(m,b),C=new Set([u]),g=(B,k)=>{const[d,s]=B.filter(c).reduce(([a,w],S)=>{const v=pack.cells.c[S].filter(f).reduce((E,P)=>A(P)pack.cells.c[a]).flat()),l=Array.from(o).filter(a=>!C.has(a));return k>=z||!l.length?[void 0,void 0]:(l.forEach(a=>C.add(a)),g(l,k+1))};return g([u],1)};function r(c,f,z){const m=pack.cells;pack.burgs=c.pack.burgs,pack.burgs.forEach((b,A)=>{if(A==0)return;if([b.x,b.y]=f(b.x,b.y),b.population=b.population*z.scale,!t(b.x,b.y)){b.removed=!0,b.cell=null;return}const u=Te(b.x,b.y);let C;const g=B=>m.t[B]===1&&!m.burg[B],p=B=>m.t[B]===-1;if(m.burg[u]&&(C=i(g,B=>!0,3)),(e(pack,u)||b.port)&&(C=i(g,p,6)),C){const[B,k]=C(b.x,b.y);if(!B){WARN&&console.warn(`Can not relocate Burg: ${b.name} sunk and destroyed. :-(`),b.cell=null,b.removed=!0;return}DEBUG&&console.log(`Moving ${b.name} from ${u} to ${B} near ${k}.`),[b.x,b.y]=b.port?ya(B,k):m.p[B],b.port&&(b.port=m.f[k]),b.cell=B,b.port&&!e(pack,k)&&console.error("betrayal! negihbor must be water!",b)}else b.cell=u;b.lock||(b.lock=z.lockBurgs),m.burg[b.cell]=A})}return{resample:n,findNearest:i}}();const ti=[{family:"Arial"},{family:"Times New Roman"},{family:"Georgia"},{family:"Garamond"},{family:"Lucida Sans Unicode"},{family:"Courier New"},{family:"Verdana"},{family:"Impact"},{family:"Comic Sans MS"},{family:"Papyrus"},{family:"Almendra SC",src:"url(https://fonts.gstatic.com/s/almendrasc/v13/Iure6Yx284eebowr7hbyTaZOrLQ.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Amarante",src:"url(https://fonts.gstatic.com/s/amarante/v22/xMQXuF1KTa6EvGx9bp-wAXs.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Amatic SC",src:"url(https://fonts.gstatic.com/s/amaticsc/v11/TUZ3zwprpvBS1izr_vOMscGKfrUC.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Arima Madurai",src:"url(https://fonts.gstatic.com/s/arimamadurai/v14/t5tmIRoeKYORG0WNMgnC3seB3T7Prw.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Architects Daughter",src:"url(https://fonts.gstatic.com/s/architectsdaughter/v8/RXTgOOQ9AAtaVOHxx0IUBM3t7GjCYufj5TXV5VnA2p8.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Bitter",src:"url(https://fonts.gstatic.com/s/bitter/v12/zfs6I-5mjWQ3nxqccMoL2A.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Caesar Dressing",src:"url(https://fonts.gstatic.com/s/caesardressing/v6/yYLx0hLa3vawqtwdswbotmK4vrRHdrz7.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Cinzel",src:"url(https://fonts.gstatic.com/s/cinzel/v7/zOdksD_UUTk1LJF9z4tURA.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Dancing Script",src:"url(https://fonts.gstatic.com/s/dancingscript/v9/KGBfwabt0ZRLA5W1ywjowUHdOuSHeh0r6jGTOGdAKHA.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Faster One",src:"url(https://fonts.gstatic.com/s/fasterone/v17/H4ciBXCHmdfClFb-vWhf-LyYhw.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Forum",src:"url(https://fonts.gstatic.com/s/forum/v16/6aey4Ky-Vb8Ew8IROpI.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Fredericka the Great",src:"url(https://fonts.gstatic.com/s/frederickathegreat/v6/9Bt33CxNwt7aOctW2xjbCstzwVKsIBVV--Sjxbc.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Gloria Hallelujah",src:"url(https://fonts.gstatic.com/s/gloriahallelujah/v9/CA1k7SlXcY5kvI81M_R28cNDay8z-hHR7F16xrcXsJw.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Great Vibes",src:"url(https://fonts.gstatic.com/s/greatvibes/v5/6q1c0ofG6NKsEhAc2eh-3Y4P5ICox8Kq3LLUNMylGO4.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Henny Penny",src:"url(https://fonts.gstatic.com/s/hennypenny/v17/wXKvE3UZookzsxz_kjGSfPQtvXI.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"IM Fell English",src:"url(https://fonts.gstatic.com/s/imfellenglish/v7/xwIisCqGFi8pff-oa9uSVAkYLEKE0CJQa8tfZYc_plY.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Kelly Slab",src:"url(https://fonts.gstatic.com/s/kellyslab/v15/-W_7XJX0Rz3cxUnJC5t6fkQLfg.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Kranky",src:"url(https://fonts.gstatic.com/s/kranky/v24/hESw6XVgJzlPsFn8oR2F.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Lobster Two",src:"url(https://fonts.gstatic.com/s/lobstertwo/v18/BngMUXZGTXPUvIoyV6yN5-fN5qU.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Kaushan Script",src:"url(https://fonts.gstatic.com/s/kaushanscript/v6/qx1LSqts-NtiKcLw4N03IEd0sm1ffa_JvZxsF_BEwQk.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Macondo",src:"url(https://fonts.gstatic.com/s/macondo/v21/RrQQboN9-iB1IXmOe2LE0Q.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"MedievalSharp",src:"url(https://fonts.gstatic.com/s/medievalsharp/v9/EvOJzAlL3oU5AQl2mP5KdgptMqhwMg.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Metal Mania",src:"url(https://fonts.gstatic.com/s/metalmania/v22/RWmMoKWb4e8kqMfBUdPFJdXFiaQ.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Metamorphous",src:"url(https://fonts.gstatic.com/s/metamorphous/v7/Wnz8HA03aAXcC39ZEX5y133EOyqs.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Montez",src:"url(https://fonts.gstatic.com/s/montez/v8/aq8el3-0osHIcFK6bXAPkw.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Nova Script",src:"url(https://fonts.gstatic.com/s/novascript/v10/7Au7p_IpkSWSTWaFWkumvlQKGFw.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Orbitron",src:"url(https://fonts.gstatic.com/s/orbitron/v9/HmnHiRzvcnQr8CjBje6GQvesZW2xOQ-xsNqO47m55DA.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Oregano",src:"url(https://fonts.gstatic.com/s/oregano/v13/If2IXTPxciS3H4S2oZDVPg.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Pirata One",src:"url(https://fonts.gstatic.com/s/pirataone/v22/I_urMpiDvgLdLh0fAtofhi-Org.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Sail",src:"url(https://fonts.gstatic.com/s/sail/v16/DPEjYwiBxwYJJBPJAQ.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Satisfy",src:"url(https://fonts.gstatic.com/s/satisfy/v8/2OzALGYfHwQjkPYWELy-cw.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Shadows Into Light",src:"url(https://fonts.gstatic.com/s/shadowsintolight/v7/clhLqOv7MXn459PTh0gXYFK2TSYBz0eNcHnp4YqE4Ts.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"},{family:"Tapestry",src:"url(https://fonts.gstatic.com/s/macondo/v21/RrQQboN9-iB1IXmOe2LE0Q.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Uncial Antiqua",src:"url(https://fonts.gstatic.com/s/uncialantiqua/v5/N0bM2S5WOex4OUbESzoESK-i-MfWQZQ.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Underdog",src:"url(https://fonts.gstatic.com/s/underdog/v6/CHygV-jCElj7diMroWSlWV8.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"UnifrakturMaguntia",src:"url(https://fonts.gstatic.com/s/unifrakturmaguntia/v16/WWXPlieVYwiGNomYU-ciRLRvEmK7oaVemGZM.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD"},{family:"Yellowtail",src:"url(https://fonts.gstatic.com/s/yellowtail/v8/GcIHC9QEwVkrA19LJU1qlPk_vArhqVIZ0nv9q090hN8.woff2)",unicodeRange:"U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215"}];ni();function ai(e){const{family:t,src:n,...i}=e;if(oi(t),!n)return;const r=new FontFace(t,n,{...i,display:"block"});document.fonts.add(r)}function ni(){ti.forEach(e=>ai(e))}function oi(e){const t=document.getElementById("styleSelectFont"),n=document.createElement("option");n.value=e,n.innerText=e,n.style.fontFamily=e,t.add(n)}window.addEventListener("resize",function(e){stored("mapWidth")&&stored("mapHeight")||(mapWidthInput.value=window.innerWidth,mapHeightInput.value=window.innerHeight,changeMapSize())});location.hostname&&location.hostname!=="localhost"&&location.hostname!=="127.0.0.1"&&(window.onbeforeunload=()=>"Are you sure you want to navigate away?");Array.from(document.getElementsByClassName("speaker")).forEach(e=>{const t=e.previousElementSibling;e.addEventListener("click",()=>ii(t.value))});function ii(e){const t=new SpeechSynthesisUtterance(e),n=speechSynthesis.getVoices();if(n.length){const i=+document.getElementById("speakerVoice").value;t.voice=n[i]}speechSynthesis.speak(t)}const ri="modulepreload",la={},si="/",St=function(t,n){return!n||n.length===0?t():Promise.all(n.map(i=>{if(i=`${si}${i}`,i in la)return;la[i]=!0;const r=i.endsWith(".css"),c=r?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=r?"stylesheet":ri,r||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),r)return new Promise((z,m)=>{f.addEventListener("load",z),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())};$("#optionsContainer").draggable({handle:".drag-trigger",snap:"svg",snapMode:"both"});$("#exitCustomization").draggable({handle:"div"});$("#mapLayers").disableSelection();ze("disable_click_arrow_tooltip")&&(ct(),optionsTrigger.classList.remove("glow"));optionsTrigger.addEventListener("mouseenter",function(){optionsTrigger.classList.contains("glow")||document.getElementById("options").style.display==="none"&&(regenerate.style.display="block")});collapsible.addEventListener("mouseleave",function(){regenerate.style.display="none"});document.getElementById("options").querySelector("div.tab").addEventListener("click",function(e){if(e.target.tagName!=="BUTTON")return;const t=e.target.id,n=document.getElementById("options").querySelector(".tab > button.active");n&&t===n.id||(n&&n.classList.remove("active"),document.getElementById(t).classList.add("active"),document.getElementById("options").querySelectorAll(".tabcontent").forEach(i=>i.style.display="none"),t==="layersTab"?layersContent.style.display="block":t==="styleTab"?styleContent.style.display="block":t==="optionsTab"?Lt.style.display="block":t==="toolsTab"?customization===1?customizationMenu.style.display="block":toolsContent.style.display="block":t==="aboutTab"&&(aboutContent.style.display="block"))});document.getElementById("options").addEventListener("change",Ba);document.getElementById("dialogs").addEventListener("change",Ba);document.getElementById("options").addEventListener("input",Ma);document.getElementById("dialogs").addEventListener("input",Ma);function Ba(e){e.target.dataset.stored&&mt(e.target.dataset.stored)}function Ma(e){const t=e.target.id,n=e.target.value;if(t==="manorsInput")return manorsOutput.value=n==1e3?"auto":n;if(t.slice(-5)==="Input"){const i=document.getElementById(t.slice(0,-5)+"Output");i&&(i.value=n)}else if(t.slice(-6)==="Output"){const i=document.getElementById(t.slice(0,-6)+"Input");i&&(i.value=n)}}const Lt=document.getElementById("optionsContent");Lt.addEventListener("input",function(e){const t=e.target.id,n=e.target.value;t==="mapWidthInput"||t==="mapHeightInput"?li():t==="pointsInput"?bi(+n):t==="culturesSet"?wi():t==="regionsInput"||t==="regionsOutput"?Ai(n):t==="emblemShape"?Si(n):t==="tooltipSizeInput"||t==="tooltipSizeOutput"?Ci(n):t==="themeHueInput"?Mi(n):t==="themeColorInput"?Bt(themeColorInput.value,transparencyInput.value):t==="transparencyInput"&&Bt(themeColorInput.value,n)});Lt.addEventListener("change",function(e){const t=e.target.id,n=e.target.value;t==="zoomExtentMin"||t==="zoomExtentMax"?Ei(n):t==="optionsSeed"?gi():t==="uiSizeInput"||t==="uiSizeOutput"?zi(n):t==="shapeRendering"?Li(n):t==="yearInput"?Ri():t==="eraInput"?Ti():t==="stateLabelsModeInput"&&(options.stateLabelsMode=n)});Lt.addEventListener("click",function(e){const t=e.target.id;t==="toggleFullscreen"?ci():t==="optionsMapHistory"?pi():t==="optionsCopySeed"?fi():t==="optionsEraRegenerate"?Ii():t==="templateInputContainer"?Pi():t==="zoomExtentDefault"?mi():t==="translateExtent"?ui(e.target):t==="speakerTest"?hi():t==="themeColorRestore"&&Bi()});function li(){Ea(),localStorage.setItem("mapWidth",mapWidthInput.value),localStorage.setItem("mapHeight",mapHeightInput.value)}function Ea(){svgWidth=Math.min(+mapWidthInput.value,window.innerWidth),svgHeight=Math.min(+mapHeightInput.value,window.innerHeight),svg.attr("width",svgWidth).attr("height",svgHeight);const e=Math.max(+mapWidthInput.value,graphWidth),t=Math.max(+mapHeightInput.value,graphHeight);Zoom.translateExtent([0,0,e,t]),landmass.select("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),oceanPattern.select("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),oceanLayers.select("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),fogging.selectAll("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),defs.select("mask#fog > rect").attr("width",e).attr("height",t),texture.select("image").attr("width",e).attr("height",t),fitScaleBar(),window.fitLegendBox&&fitLegendBox()}function ci(){mapWidthInput.value!=window.innerWidth||mapHeightInput.value!=window.innerHeight?(mapWidthInput.value=window.innerWidth,mapHeightInput.value=window.innerHeight,localStorage.removeItem("mapHeight"),localStorage.removeItem("mapWidth")):(mapWidthInput.value=graphWidth,mapHeightInput.value=graphHeight),Ea()}function ui(e){const t=!Number(e.dataset.on),n=t?[-graphWidth/2,-graphHeight/2,graphWidth*1.5,graphHeight*1.5]:[0,0,graphWidth,graphHeight];Zoom.translateExtent(n),e.dataset.on=Number(t)}const di=setInterval(function(){const e=speechSynthesis.getVoices();if(e.length)clearInterval(di);else return;const t=document.getElementById("speakerVoice");e.forEach((n,i)=>{t.options.add(new Option(n.name,i,!1))}),ze("speakerVoice")?t.value=ze("speakerVoice"):t.value=e.findIndex(n=>n.lang==="en-US")},1e3);function hi(){const e=`${mapName.value}, ${options.year} ${options.era}`,t=new SpeechSynthesisUtterance(e),n=speechSynthesis.getVoices();if(n.length){const i=+document.getElementById("speakerVoice").value;t.voice=n[i]}speechSynthesis.speak(t)}function gi(){if(optionsSeed.value==seed)return se("The current map already has this seed",!1,"error");La()}function pi(){const e=mapHistory.map((t,n)=>{const i=new Date(t.created).toLocaleTimeString(),r=``;return`
  • Seed: ${t.seed} ${r}. Size: ${t.width}x${t.height}. Template: ${t.template}. Created: ${i}
  • `});alertMessage.innerHTML=`
      + ${e.join("")} +
    `,$("#alert").dialog({resizable:!1,title:"Seed history",position:{my:"center",at:"center",of:"svg"}})}function mi(){zoomExtentMin.value=1,zoomExtentMax.value=20,Zoom.scaleExtent([1,20]),Zoom.scaleTo(svg,1)}function fi(){const e=document.querySelectorAll("i.icon-lock").length,t=`?seed=${optionsSeed.value}&width=${graphWidth}&height=${graphHeight}${e?"":"&options=default"}`;navigator.clipboard.writeText(location.host+location.pathname+t).then(()=>{se("Map URL is copied to clipboard",!1,"success",3e3)}).catch(n=>se("Could not copy URL: "+n,!1,"error",5e3))}const yi={1:1e3,2:2e3,3:5e3,4:1e4,5:2e4,6:3e4,7:4e4,8:5e4,9:6e4,10:7e4,11:8e4,12:9e4,13:1e5};function bi(e){const t=yi[e]||1e3;pointsInput.dataset.cells=t,pointsOutputFormatted.value=vi(t),pointsOutputFormatted.style.color=ki(t)}function vi(e){return e/1e3+"K"}function ki(e){return e>5e4?"#b12117":e!==1e4?"#dfdf12":"#053305"}function wi(){const e=culturesSet.selectedOptions[0].dataset.max;culturesInput.max=culturesOutput.max=e,+culturesOutput.value>+e&&(culturesInput.value=culturesOutput.value=e)}function Si(e){const t=document.getElementById("emblemShapeImage"),n=window.COArenderer&&COArenderer.shieldPaths[e];n?t.setAttribute("d",n):t.removeAttribute("d");const i=["culture","state","random"].includes(e)?null:e;e==="random"&&pack.cultures.filter(c=>!c.removed).forEach(c=>c.shield=Cultures.getRandomShield());const r=(c,f)=>{const z=document.getElementById(c);!z||(z.remove(),COArenderer.trigger(c,f))};pack.states.forEach(c=>{if(!c.i||c.removed||!c.coa||c.coa==="custom")return;const f=i||COA.getShield(c.culture,null);f!==c.coa.shield&&(c.coa.shield=f,r("stateCOA"+c.i,c.coa))}),pack.provinces.forEach(c=>{if(!c.i||c.removed||!c.coa||c.coa==="custom")return;const f=pack.cells.culture[c.center],z=i||COA.getShield(f,c.state);z!==c.coa.shield&&(c.coa.shield=z,r("provinceCOA"+c.i,c.coa))}),pack.burgs.forEach(c=>{if(!c.i||c.removed||!c.coa||c.coa==="custom")return;const f=i||COA.getShield(c.culture,c.state);f!==c.coa.shield&&(c.coa.shield=f,r("burgCOA"+c.i,c.coa))})}function Ai(e){regionsOutput.style.color=+e?null:"#b12117",burgLabels.select("#capitals").attr("data-size",Math.max(O(6-e/20),3)),labels.select("#countries").attr("data-size",Math.max(O(18-e/6),4))}function zi(e){if(isNaN(+e)||+e<.5)return;const t=xi();+e>t&&(e=t),uiSizeInput.value=uiSizeOutput.value=e,document.getElementsByTagName("body")[0].style.fontSize=O(e*10,2)+"px",document.getElementById("options").style.width=e*300+"px"}function xi(){return O(Math.min(window.innerHeight/465,window.innerWidth/302),1)}function Ci(e){tooltip.style.fontSize=`calc(${e}px + 0.5vw)`}const jt="#997787";function Bi(){localStorage.removeItem("themeColor"),Bt(jt,transparencyInput.value)}function Mi(e){const{s:t,l:n}=d3.hsl(themeColorInput.value),i=d3.hsl(+e,t,n).hex();Bt(i,transparencyInput.value)}function Bt(e,t){transparencyInput.value=transparencyOutput.value=t;const n=(100-+t)/100,i=Math.min(n+.3,1),{h:r,s:c,l:f}=d3.hsl(e||jt);themeColorInput.value=e||jt,themeHueInput.value=r;const z=(A,u,C,g)=>d3.hsl(A,u,C,g).toString(),m=[{name:"--bg-main",h:r,s:c,l:f,alpha:n},{name:"--bg-lighter",h:r,s:c,l:f+.02,alpha:n},{name:"--bg-light",h:r,s:c-.02,l:f+.06,alpha:n},{name:"--light-solid",h:r,s:c+.01,l:f+.05,alpha:1},{name:"--dark-solid",h:r,s:c,l:f-.2,alpha:1},{name:"--header",h:r,s:c,l:f-.03,alpha:i},{name:"--header-active",h:r,s:c,l:f-.09,alpha:i},{name:"--bg-disabled",h:r,s:c-.04,l:f+.09,alphaReduced:i},{name:"--bg-dialogs",h:0,s:0,l:.98,alpha:n}],b=document.documentElement.style;m.forEach(({name:A,h:u,s:C,l:g,alpha:p})=>{b.setProperty(A,z(u,C,g,p))})}function Ei(e){const t=Math.max(+ne("zoomExtentMin").value,.01),n=Math.min(+ne("zoomExtentMax").value,200);Zoom.scaleExtent([t,n]);const i=Ie(+e,.01,200);Zoom.scaleTo(svg,i)}function Li(e){var t;(t=fmg.viewbox)==null||t.attr("shape-rendering",e)}function Ii(){unlock("era"),options.era=eraInput.value=Names.getBaseShort(V(.7)?1:be(nameBases.length))+" Era",options.eraShort=options.era.split(" ").map(e=>e[0].toUpperCase()).join("")}function Ri(){if(!!yearInput.value){if(isNaN(+yearInput.value)){se("Current year should be a number",!1,"error");return}options.year=+yearInput.value}}function Ti(){!eraInput.value||(mt("era"),options.era=eraInput.value)}async function Pi(){(await St(()=>import("./heightmap-selection.js_v_1.87.b0b46f49.js"),[])).open()}document.getElementById("sticked").addEventListener("click",function(e){const t=e.target.id;t==="newMapButton"?La():t==="saveButton"?Hi():t==="exportButton"?Ui():t==="loadButton"?Ni():t==="zoomReset"&&Zoom.reset(1e3)});function La(e){if(customization)return se("New map cannot be generated when edit mode is active, please exit the mode and retry",!1,"error");if((Date.now()-De(mapHistory).created)/6e4<5)return regenerateMap(e);alertMessage.innerHTML=`Are you sure you want to generate a new map?
    + All unsaved changes made to the current map will be lost`,$("#alert").dialog({resizable:!1,title:"Generate new map",buttons:{Cancel:function(){$(this).dialog("close")},Generate:function(){closeDialogs(),regenerateMap(e)}}})}function Hi(){const e=document.getElementById("sharableLinkContainer");e.style.display="none",$("#saveMapData").dialog({title:"Save map",resizable:!1,width:"25em",position:{my:"center",at:"center",of:"svg"},buttons:{Close:function(){$(this).dialog("close")}}})}function Ui(){document.getElementById("showLabels").checked=!hideLabels.checked,$("#exportMapData").dialog({title:"Export map data",resizable:!1,width:"26em",position:{my:"center",at:"center",of:"svg"},buttons:{Close:function(){$(this).dialog("close")}}})}async function Ni(){if($("#loadMapData").dialog({title:"Load map",resizable:!1,width:"24em",position:{my:"center",at:"center",of:"svg"},buttons:{Close:function(){$(this).dialog("close")}}}),Cloud.providers.dropbox.api){document.getElementById("dropboxConnectButton").style.display="none",document.getElementById("loadFromDropboxSelect").style.display="block";const e=document.getElementById("loadFromDropboxButtons"),t=document.getElementById("loadFromDropboxSelect");t.innerHTML='';const n=await Cloud.providers.dropbox.list();if(!n){e.style.display="none",t.innerHTML='';return}e.style.display="block",t.innerHTML="",n.forEach(({name:i,updated:r,size:c,path:f})=>{const z=O(c/1024/1024,2)+" MB",b=`${new Date(r).toLocaleDateString()}: ${i} [${z}]`,A=new Option(b,f);t.options.add(A)});return}document.getElementById("dropboxConnectButton").style.display="inline-block",document.getElementById("loadFromDropboxButtons").style.display="none",document.getElementById("loadFromDropboxSelect").style.display="none"}document.getElementById("mapToLoad").addEventListener("change",function(){const e=this.files[0];this.value="",closeDialogs(),uploadMap(e)});viewMode.addEventListener("click",Ki);function Ki(e){const t=e.target;if(t.tagName!=="BUTTON")return;const n=t.classList.contains("pressed");Ia(),!n&&t.id!=="viewStandard"&&(viewStandard.classList.remove("pressed"),t.classList.add("pressed"),Di(t.id))}function Ia(){viewMode.querySelectorAll(".pressed").forEach(e=>e.classList.remove("pressed")),heightmap3DView.classList.remove("pressed"),viewStandard.classList.add("pressed"),document.getElementById("canvas3d")&&(ThreeD.stop(),document.getElementById("canvas3d").remove(),options3dUpdate.offsetParent&&$("#options3d").dialog("close"),preview3d.offsetParent&&$("#preview3d").dialog("close"))}async function Di(e){const t=document.createElement("canvas");t.id="canvas3d",t.dataset.type=e,e==="heightmap3DView"?(t.width=parseFloat(preview3d.style.width)||graphWidth/3,t.height=t.width/(graphWidth/graphHeight),t.style.display="block"):(t.width=svgWidth,t.height=svgHeight,t.style.position="absolute",t.style.display="none"),await ThreeD.create(t,e)&&(t.style.display="block",t.onmouseenter=()=>{const i="Left mouse to change angle, middle mouse / mousewheel to zoom, right mouse to pan. O to toggle options";+t.dataset.hovered>2?se(""):se(i),t.dataset.hovered=(+t.dataset.hovered|0)+1},e==="heightmap3DView"?(document.getElementById("preview3d").appendChild(t),$("#preview3d").dialog({title:"3D Preview",resizable:!0,position:{my:"left bottom",at:"left+10 bottom-20",of:"svg"},resizeStop:Fi,close:Ia})):document.body.insertBefore(t,optionsContainer),Oi())}function Fi(){const e=document.getElementById("canvas3d");e.width=parseFloat(preview3d.style.width),e.height=parseFloat(preview3d.style.height)-2,ThreeD.redraw()}function Oi(){if(options3dUpdate.offsetParent){$("#options3d").dialog("close");return}if($("#options3d").dialog({title:"3D mode settings",resizable:!1,width:"fit-content",position:{my:"right top",at:"right-30 top+10",of:"svg",collision:"fit"}}),e(),fmg.modules.options3d)return;fmg.modules.options3d=!0,document.getElementById("options3dUpdate").addEventListener("click",ThreeD.update),document.getElementById("options3dSave").addEventListener("click",ThreeD.saveScreenshot),document.getElementById("options3dOBJSave").addEventListener("click",ThreeD.saveOBJ),document.getElementById("options3dScaleRange").addEventListener("input",t),document.getElementById("options3dScaleNumber").addEventListener("change",t),document.getElementById("options3dLightnessRange").addEventListener("input",n),document.getElementById("options3dLightnessNumber").addEventListener("change",n),document.getElementById("options3dSunX").addEventListener("change",i),document.getElementById("options3dSunY").addEventListener("change",i),document.getElementById("options3dSunZ").addEventListener("change",i),document.getElementById("options3dMeshRotationRange").addEventListener("input",r),document.getElementById("options3dMeshRotationNumber").addEventListener("change",r),document.getElementById("options3dGlobeRotationRange").addEventListener("input",r),document.getElementById("options3dGlobeRotationNumber").addEventListener("change",r),document.getElementById("options3dMeshLabels3d").addEventListener("change",c),document.getElementById("options3dMeshSkyMode").addEventListener("change",f),document.getElementById("options3dMeshSky").addEventListener("input",z),document.getElementById("options3dMeshWater").addEventListener("input",z),document.getElementById("options3dGlobeResolution").addEventListener("change",m);function e(){const b=document.getElementById("canvas3d").dataset.type==="viewGlobe";options3dMesh.style.display=b?"none":"block",options3dGlobe.style.display=b?"block":"none",options3dScaleRange.value=options3dScaleNumber.value=ThreeD.options.scale,options3dLightnessRange.value=options3dLightnessNumber.value=ThreeD.options.lightness*100,options3dSunX.value=ThreeD.options.sun.x,options3dSunY.value=ThreeD.options.sun.y,options3dSunZ.value=ThreeD.options.sun.z,options3dMeshRotationRange.value=options3dMeshRotationNumber.value=ThreeD.options.rotateMesh,options3dGlobeRotationRange.value=options3dGlobeRotationNumber.value=ThreeD.options.rotateGlobe,options3dMeshLabels3d.value=ThreeD.options.labels3d,options3dMeshSkyMode.value=ThreeD.options.extendedWater,options3dColorSection.style.display=ThreeD.options.extendedWater?"block":"none",options3dMeshSky.value=ThreeD.options.skyColor,options3dMeshWater.value=ThreeD.options.waterColor,options3dGlobeResolution.value=ThreeD.options.resolution}function t(){options3dScaleRange.value=options3dScaleNumber.value=this.value,ThreeD.setScale(+this.value)}function n(){options3dLightnessRange.value=options3dLightnessNumber.value=this.value,ThreeD.setLightness(this.value/100)}function i(){const b=+options3dSunX.value,A=+options3dSunY.value,u=+options3dSunZ.value;ThreeD.setSun(b,A,u)}function r(){(this.nextElementSibling||this.previousElementSibling).value=this.value;const b=+this.value;ThreeD.setRotation(b)}function c(){ThreeD.toggleLabels()}function f(){const b=ThreeD.options.extendedWater;options3dColorSection.style.display=b?"none":"block",ThreeD.toggleSky()}function z(){ThreeD.setColors(options3dMeshSky.value,options3dMeshWater.value)}function m(){ThreeD.setResolution(this.value)}}window.scale=1;window.viewX=0;window.viewY=0;window.Zoom=function(){function e(){const{k:b,x:A,y:u}=d3.event.transform,C=Boolean(scale-b),g=Boolean(viewX-A||viewY-u);!C&&!g||(scale=b,viewX=A,viewY=u,handleZoom(C,g))}const t=vt(e,50),n=d3.zoom().scaleExtent([1,20]).on("zoom",t);function i(){svg.call(n)}function r(b,A,u=8,C=2e3){const g=d3.zoomIdentity.translate(b*-u+graphWidth/2,A*-u+graphHeight/2).scale(u);svg.transition().duration(C).call(n.transform,g)}function c(b=1e3){svg.transition().duration(b).call(n.transform,d3.zoomIdentity)}function f([b,A]){n.scaleExtent([b,A])}function z([b,A,u,C]){n.translateExtent([[b,A],[u,C]])}function m(b,A){n.scaleTo(b,A)}return{setZoomBehavior:i,to:r,reset:c,scaleExtent:f,translateExtent:z,scaleTo:m}}();$("#optionsContainer").draggable({handle:".drag-trigger",snap:"svg",snapMode:"both"});$("#exitCustomization").draggable({handle:"div"});$("#mapLayers").disableSelection();ze("disable_click_arrow_tooltip")&&(ct(),optionsTrigger.classList.remove("glow"));optionsTrigger.addEventListener("mouseenter",function(){optionsTrigger.classList.contains("glow")||document.getElementById("options").style.display==="none"&&(regenerate.style.display="block")});collapsible.addEventListener("mouseleave",function(){regenerate.style.display="none"});document.getElementById("options").querySelector("div.tab").addEventListener("click",function(e){if(e.target.tagName!=="BUTTON")return;const t=e.target.id,n=document.getElementById("options").querySelector(".tab > button.active");n&&t===n.id||(n&&n.classList.remove("active"),document.getElementById(t).classList.add("active"),document.getElementById("options").querySelectorAll(".tabcontent").forEach(i=>i.style.display="none"),t==="layersTab"?layersContent.style.display="block":t==="styleTab"?styleContent.style.display="block":t==="optionsTab"?It.style.display="block":t==="toolsTab"?customization===1?customizationMenu.style.display="block":toolsContent.style.display="block":t==="aboutTab"&&(aboutContent.style.display="block"))});document.getElementById("options").addEventListener("change",Ra);document.getElementById("dialogs").addEventListener("change",Ra);document.getElementById("options").addEventListener("input",Ta);document.getElementById("dialogs").addEventListener("input",Ta);function Ra(e){e.target.dataset.stored&&mt(e.target.dataset.stored)}function Ta(e){const t=e.target.id,n=e.target.value;if(t==="manorsInput")return manorsOutput.value=n==1e3?"auto":n;if(t.slice(-5)==="Input"){const i=document.getElementById(t.slice(0,-5)+"Output");i&&(i.value=n)}else if(t.slice(-6)==="Output"){const i=document.getElementById(t.slice(0,-6)+"Input");i&&(i.value=n)}}const It=document.getElementById("optionsContent");It.addEventListener("input",function(e){const t=e.target.id,n=e.target.value;t==="mapWidthInput"||t==="mapHeightInput"?Gi():t==="pointsInput"?_i(+n):t==="culturesSet"?Ha():t==="regionsInput"||t==="regionsOutput"?Ua(n):t==="emblemShape"?ar(n):t==="tooltipSizeInput"||t==="tooltipSizeOutput"?Ka(n):t==="themeHueInput"?or(n):t==="themeColorInput"?kt(themeColorInput.value,transparencyInput.value):t==="transparencyInput"&&kt(themeColorInput.value,n)});It.addEventListener("change",function(e){const t=e.target.id,n=e.target.value;t==="zoomExtentMin"||t==="zoomExtentMax"?ir(n):t==="optionsSeed"?Ji():t==="uiSizeInput"||t==="uiSizeOutput"?Wt(n):t==="shapeRendering"?Da(n):t==="yearInput"?hr():t==="eraInput"?gr():t==="stateLabelsModeInput"&&(options.stateLabelsMode=n)});It.addEventListener("click",function(e){const t=e.target.id;t==="toggleFullscreen"?Wi():t==="optionsMapHistory"?Yi():t==="optionsCopySeed"?Qi():t==="optionsEraRegenerate"?dr():t==="templateInputContainer"?pr():t==="zoomExtentDefault"?Xi():t==="translateExtent"?qi(e.target):t==="speakerTest"?Zi():t==="themeColorRestore"&&nr()});function Gi(){Pa(),localStorage.setItem("mapWidth",mapWidthInput.value),localStorage.setItem("mapHeight",mapHeightInput.value)}function Pa(){svgWidth=Math.min(+mapWidthInput.value,window.innerWidth),svgHeight=Math.min(+mapHeightInput.value,window.innerHeight),svg.attr("width",svgWidth).attr("height",svgHeight);const e=Math.max(+mapWidthInput.value,graphWidth),t=Math.max(+mapHeightInput.value,graphHeight);Zoom.translateExtent([0,0,e,t]),landmass.select("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),oceanPattern.select("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),oceanLayers.select("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),fogging.selectAll("rect").attr("x",0).attr("y",0).attr("width",e).attr("height",t),defs.select("mask#fog > rect").attr("width",e).attr("height",t),texture.select("image").attr("width",e).attr("height",t),fitScaleBar(),window.fitLegendBox&&fitLegendBox()}function ji(){const e=+zoomExtentMin.value,t=+zoomExtentMax.value;graphWidth=+mapWidthInput.value,graphHeight=+mapHeightInput.value,svgWidth=Math.min(graphWidth,window.innerWidth),svgHeight=Math.min(graphHeight,window.innerHeight),svg.attr("width",svgWidth).attr("height",svgHeight),Zoom.translateExtent([0,0,graphWidth,graphHeight]),Zoom.scaleExtent([e,t]),Zoom.scaleTo(svg,e)}function Wi(){mapWidthInput.value!=window.innerWidth||mapHeightInput.value!=window.innerHeight?(mapWidthInput.value=window.innerWidth,mapHeightInput.value=window.innerHeight,localStorage.removeItem("mapHeight"),localStorage.removeItem("mapWidth")):(mapWidthInput.value=graphWidth,mapHeightInput.value=graphHeight),Pa()}function qi(e){const t=!Number(e.dataset.on),n=t?[-graphWidth/2,-graphHeight/2,graphWidth*1.5,graphHeight*1.5]:[0,0,graphWidth,graphHeight];Zoom.translateExtent(n),e.dataset.on=Number(t)}const Vi=setInterval(function(){const e=speechSynthesis.getVoices();if(e.length)clearInterval(Vi);else return;const t=document.getElementById("speakerVoice");e.forEach((n,i)=>{t.options.add(new Option(n.name,i,!1))}),ze("speakerVoice")?t.value=ze("speakerVoice"):t.value=e.findIndex(n=>n.lang==="en-US")},1e3);function Zi(){const e=`${mapName.value}, ${options.year} ${options.era}`,t=new SpeechSynthesisUtterance(e),n=speechSynthesis.getVoices();if(n.length){const i=+document.getElementById("speakerVoice").value;t.voice=n[i]}speechSynthesis.speak(t)}function Ji(){if(optionsSeed.value==seed)return se("The current map already has this seed",!1,"error");Fa()}function Yi(){const e=mapHistory.map((t,n)=>{const i=new Date(t.created).toLocaleTimeString(),r=``;return`
  • Seed: ${t.seed} ${r}. Size: ${t.width}x${t.height}. Template: ${t.template}. Created: ${i}
  • `});alertMessage.innerHTML=`
      + ${e.join("")} +
    `,$("#alert").dialog({resizable:!1,title:"Seed history",position:{my:"center",at:"center",of:"svg"}})}function Xi(){zoomExtentMin.value=1,zoomExtentMax.value=20,Zoom.scaleExtent([1,20]),Zoom.scaleTo(svg,1)}function Qi(){const e=document.querySelectorAll("i.icon-lock").length,t=`?seed=${optionsSeed.value}&width=${graphWidth}&height=${graphHeight}${e?"":"&options=default"}`;navigator.clipboard.writeText(location.host+location.pathname+t).then(()=>{se("Map URL is copied to clipboard",!1,"success",3e3)}).catch(n=>se("Could not copy URL: "+n,!1,"error",5e3))}const $i={1:1e3,2:2e3,3:5e3,4:1e4,5:2e4,6:3e4,7:4e4,8:5e4,9:6e4,10:7e4,11:8e4,12:9e4,13:1e5};function _i(e){const t=$i[e]||1e3;pointsInput.dataset.cells=t,pointsOutputFormatted.value=er(t),pointsOutputFormatted.style.color=tr(t)}function er(e){return e/1e3+"K"}function tr(e){return e>5e4?"#b12117":e!==1e4?"#dfdf12":"#053305"}function Ha(){const e=culturesSet.selectedOptions[0].dataset.max;culturesInput.max=culturesOutput.max=e,+culturesOutput.value>+e&&(culturesInput.value=culturesOutput.value=e)}function ar(e){const t=document.getElementById("emblemShapeImage"),n=window.COArenderer&&COArenderer.shieldPaths[e];n?t.setAttribute("d",n):t.removeAttribute("d");const i=["culture","state","random"].includes(e)?null:e;e==="random"&&pack.cultures.filter(c=>!c.removed).forEach(c=>c.shield=Cultures.getRandomShield());const r=(c,f)=>{const z=document.getElementById(c);!z||(z.remove(),COArenderer.trigger(c,f))};pack.states.forEach(c=>{if(!c.i||c.removed||!c.coa||c.coa==="custom")return;const f=i||COA.getShield(c.culture,null);f!==c.coa.shield&&(c.coa.shield=f,r("stateCOA"+c.i,c.coa))}),pack.provinces.forEach(c=>{if(!c.i||c.removed||!c.coa||c.coa==="custom")return;const f=pack.cells.culture[c.center],z=i||COA.getShield(f,c.state);z!==c.coa.shield&&(c.coa.shield=z,r("provinceCOA"+c.i,c.coa))}),pack.burgs.forEach(c=>{if(!c.i||c.removed||!c.coa||c.coa==="custom")return;const f=i||COA.getShield(c.culture,c.state);f!==c.coa.shield&&(c.coa.shield=f,r("burgCOA"+c.i,c.coa))})}function Ua(e){regionsOutput.style.color=+e?null:"#b12117",burgLabels.select("#capitals").attr("data-size",Math.max(O(6-e/20),3)),labels.select("#countries").attr("data-size",Math.max(O(18-e/6),4))}function Wt(e){if(isNaN(+e)||+e<.5)return;const t=Na();+e>t&&(e=t),uiSizeInput.value=uiSizeOutput.value=e,document.getElementsByTagName("body")[0].style.fontSize=O(e*10,2)+"px",document.getElementById("options").style.width=e*300+"px"}function Na(){return O(Math.min(window.innerHeight/465,window.innerWidth/302),1)}function Ka(e){tooltip.style.fontSize=`calc(${e}px + 0.5vw)`}const qt="#997787";function nr(){localStorage.removeItem("themeColor"),kt(qt,transparencyInput.value)}function or(e){const{s:t,l:n}=d3.hsl(themeColorInput.value),i=d3.hsl(+e,t,n).hex();kt(i,transparencyInput.value)}function kt(e,t){transparencyInput.value=transparencyOutput.value=t;const n=(100-+t)/100,i=Math.min(n+.3,1),{h:r,s:c,l:f}=d3.hsl(e||qt);themeColorInput.value=e||qt,themeHueInput.value=r;const z=(A,u,C,g)=>d3.hsl(A,u,C,g).toString(),m=[{name:"--bg-main",h:r,s:c,l:f,alpha:n},{name:"--bg-lighter",h:r,s:c,l:f+.02,alpha:n},{name:"--bg-light",h:r,s:c-.02,l:f+.06,alpha:n},{name:"--light-solid",h:r,s:c+.01,l:f+.05,alpha:1},{name:"--dark-solid",h:r,s:c,l:f-.2,alpha:1},{name:"--header",h:r,s:c,l:f-.03,alpha:i},{name:"--header-active",h:r,s:c,l:f-.09,alpha:i},{name:"--bg-disabled",h:r,s:c-.04,l:f+.09,alphaReduced:i},{name:"--bg-dialogs",h:0,s:0,l:.98,alpha:n}],b=document.documentElement.style;m.forEach(({name:A,h:u,s:C,l:g,alpha:p})=>{b.setProperty(A,z(u,C,g,p))})}function ir(e){const t=Math.max(+ne("zoomExtentMin").value,.01),n=Math.min(+ne("zoomExtentMax").value,200);Zoom.scaleExtent([t,n]);const i=Ie(+e,.01,200);Zoom.scaleTo(svg,i)}function rr(){var f,z;(!ze("mapWidth")||!ze("mapHeight"))&&(mapWidthInput.value=window.innerWidth,mapHeightInput.value=window.innerHeight);const e=ze("template");if(e){const m=((f=heightmapTemplates[e])==null?void 0:f.name)||((z=precreatedHeightmaps[e])==null?void 0:z.name)||e;ft(ne("templateInput"),e,m)}ze("distanceUnit")&&ft(distanceUnitInput,ze("distanceUnit")),ze("heightUnit")&&ft(heightUnit,ze("heightUnit"));for(let m=0;m+m)),ze("military")&&(options.military=JSON.parse(ze("military"))),ze("tooltipSize")&&Ka(ze("tooltipSize")),ze("regions")&&Ua(ze("regions")),uiSizeInput.max=uiSizeOutput.max=Na(),ze("uiSize")?Wt(ze("uiSize")):Wt(Ie(O(mapWidthInput.value/1280,1),1,2.5));const t=new URL(window.location.href).searchParams,n=+t.get("width"),i=+t.get("height");n&&(mapWidthInput.value=n),i&&(mapHeightInput.value=i);const r=ze("transparency")||5,c=ze("themeColor");kt(c,r),Da(shapeRendering.value),options.stateLabelsMode=stateLabelsModeInput.value}function sr(){const e=new URL(window.location.href).searchParams.get("options")==="default";(e||!Ne("template"))&&lr(),(e||!Ne("regions"))&&(regionsInput.value=regionsOutput.value=Ce(18,5,2,30)),(e||!Ne("provinces"))&&(provincesInput.value=provincesOutput.value=Ce(20,10,20,100)),(e||!Ne("manors"))&&(manorsInput.value=1e3,manorsOutput.value="auto"),(e||!Ne("religions"))&&(religionsInput.value=religionsOutput.value=Ce(5,2,2,10)),(e||!Ne("power"))&&(powerInput.value=powerOutput.value=Ce(4,2,0,10,2)),(e||!Ne("neutral"))&&(neutralInput.value=neutralOutput.value=O(1+Math.random(),1)),(e||!Ne("cultures"))&&(culturesInput.value=culturesOutput.value=Ce(12,3,5,30)),(e||!Ne("culturesSet"))&&cr(),(e||!Ne("prec"))&&(precInput.value=precOutput.value=Ce(100,40,5,500));const t=30,n=-30;(e||!Ne("temperatureEquator"))&&(temperatureEquatorOutput.value=temperatureEquatorInput.value=be(t-10,t)),(e||!Ne("temperaturePole"))&&(temperaturePoleOutput.value=temperaturePoleInput.value=be(n,n+30));const i=navigator.language==="en-US";(e||!Ne("distanceScale"))&&(distanceScaleOutput.value=distanceScaleInput.value=Ce(3,1,1,5)),ze("distanceUnit")||(distanceUnitInput.value=i?"mi":"km"),ze("heightUnit")||(heightUnit.value=i?"ft":"m"),ze("temperatureScale")||(temperatureScale.value=i?"\xB0F":"\xB0C"),ur()}function lr(){const e={};for(const i in heightmapTemplates)e[i]=heightmapTemplates[i].probability||0;const t=rw(e),n=heightmapTemplates[t].name;ft(ne("templateInput"),t,n)}function cr(){const e={world:10,european:10,oriental:2,english:5,antique:3,highFantasy:11,darkFantasy:3,random:1};culturesSet.value=rw(e),Ha()}function Da(e){var t;(t=fmg.viewbox)==null||t.attr("shape-rendering",e)}function ur(){ze("year")||(yearInput.value=be(100,2e3)),ze("era")||(eraInput.value=Names.getBaseShort(V(.7)?1:be(nameBases.length))+" Era"),options.year=+yearInput.value,options.era=eraInput.value,options.eraShort=options.era.split(" ").map(e=>e[0].toUpperCase()).join("")}function dr(){unlock("era"),options.era=eraInput.value=Names.getBaseShort(V(.7)?1:be(nameBases.length))+" Era",options.eraShort=options.era.split(" ").map(e=>e[0].toUpperCase()).join("")}function hr(){if(!!yearInput.value){if(isNaN(+yearInput.value)){se("Current year should be a number",!1,"error");return}options.year=+yearInput.value}}function gr(){!eraInput.value||(mt("era"),options.era=eraInput.value)}async function pr(){(await St(()=>import("./heightmap-selection.js_v_1.87.b0b46f49.js"),[])).open()}document.getElementById("sticked").addEventListener("click",function(e){const t=e.target.id;t==="newMapButton"?Fa():t==="saveButton"?mr():t==="exportButton"?fr():t==="loadButton"?yr():t==="zoomReset"&&Zoom.reset(1e3)});function Fa(e){if(customization)return se("New map cannot be generated when edit mode is active, please exit the mode and retry",!1,"error");if((Date.now()-De(mapHistory).created)/6e4<5)return regenerateMap(e);alertMessage.innerHTML=`Are you sure you want to generate a new map?
    + All unsaved changes made to the current map will be lost`,$("#alert").dialog({resizable:!1,title:"Generate new map",buttons:{Cancel:function(){$(this).dialog("close")},Generate:function(){closeDialogs(),regenerateMap(e)}}})}function mr(){const e=document.getElementById("sharableLinkContainer");e.style.display="none",$("#saveMapData").dialog({title:"Save map",resizable:!1,width:"25em",position:{my:"center",at:"center",of:"svg"},buttons:{Close:function(){$(this).dialog("close")}}})}function fr(){document.getElementById("showLabels").checked=!hideLabels.checked,$("#exportMapData").dialog({title:"Export map data",resizable:!1,width:"26em",position:{my:"center",at:"center",of:"svg"},buttons:{Close:function(){$(this).dialog("close")}}})}async function yr(){if($("#loadMapData").dialog({title:"Load map",resizable:!1,width:"24em",position:{my:"center",at:"center",of:"svg"},buttons:{Close:function(){$(this).dialog("close")}}}),Cloud.providers.dropbox.api){document.getElementById("dropboxConnectButton").style.display="none",document.getElementById("loadFromDropboxSelect").style.display="block";const e=document.getElementById("loadFromDropboxButtons"),t=document.getElementById("loadFromDropboxSelect");t.innerHTML='';const n=await Cloud.providers.dropbox.list();if(!n){e.style.display="none",t.innerHTML='';return}e.style.display="block",t.innerHTML="",n.forEach(({name:i,updated:r,size:c,path:f})=>{const z=O(c/1024/1024,2)+" MB",b=`${new Date(r).toLocaleDateString()}: ${i} [${z}]`,A=new Option(b,f);t.options.add(A)});return}document.getElementById("dropboxConnectButton").style.display="inline-block",document.getElementById("loadFromDropboxButtons").style.display="none",document.getElementById("loadFromDropboxSelect").style.display="none"}document.getElementById("mapToLoad").addEventListener("change",function(){const e=this.files[0];this.value="",closeDialogs(),uploadMap(e)});viewMode.addEventListener("click",br);function br(e){const t=e.target;if(t.tagName!=="BUTTON")return;const n=t.classList.contains("pressed");Oa(),!n&&t.id!=="viewStandard"&&(viewStandard.classList.remove("pressed"),t.classList.add("pressed"),vr(t.id))}function Oa(){viewMode.querySelectorAll(".pressed").forEach(e=>e.classList.remove("pressed")),heightmap3DView.classList.remove("pressed"),viewStandard.classList.add("pressed"),document.getElementById("canvas3d")&&(ThreeD.stop(),document.getElementById("canvas3d").remove(),options3dUpdate.offsetParent&&$("#options3d").dialog("close"),preview3d.offsetParent&&$("#preview3d").dialog("close"))}async function vr(e){const t=document.createElement("canvas");t.id="canvas3d",t.dataset.type=e,e==="heightmap3DView"?(t.width=parseFloat(preview3d.style.width)||graphWidth/3,t.height=t.width/(graphWidth/graphHeight),t.style.display="block"):(t.width=svgWidth,t.height=svgHeight,t.style.position="absolute",t.style.display="none"),await ThreeD.create(t,e)&&(t.style.display="block",t.onmouseenter=()=>{const i="Left mouse to change angle, middle mouse / mousewheel to zoom, right mouse to pan. O to toggle options";+t.dataset.hovered>2?se(""):se(i),t.dataset.hovered=(+t.dataset.hovered|0)+1},e==="heightmap3DView"?(document.getElementById("preview3d").appendChild(t),$("#preview3d").dialog({title:"3D Preview",resizable:!0,position:{my:"left bottom",at:"left+10 bottom-20",of:"svg"},resizeStop:kr,close:Oa})):document.body.insertBefore(t,optionsContainer),wr())}function kr(){const e=document.getElementById("canvas3d");e.width=parseFloat(preview3d.style.width),e.height=parseFloat(preview3d.style.height)-2,ThreeD.redraw()}function wr(){if(options3dUpdate.offsetParent){$("#options3d").dialog("close");return}if($("#options3d").dialog({title:"3D mode settings",resizable:!1,width:"fit-content",position:{my:"right top",at:"right-30 top+10",of:"svg",collision:"fit"}}),e(),fmg.modules.options3d)return;fmg.modules.options3d=!0,document.getElementById("options3dUpdate").addEventListener("click",ThreeD.update),document.getElementById("options3dSave").addEventListener("click",ThreeD.saveScreenshot),document.getElementById("options3dOBJSave").addEventListener("click",ThreeD.saveOBJ),document.getElementById("options3dScaleRange").addEventListener("input",t),document.getElementById("options3dScaleNumber").addEventListener("change",t),document.getElementById("options3dLightnessRange").addEventListener("input",n),document.getElementById("options3dLightnessNumber").addEventListener("change",n),document.getElementById("options3dSunX").addEventListener("change",i),document.getElementById("options3dSunY").addEventListener("change",i),document.getElementById("options3dSunZ").addEventListener("change",i),document.getElementById("options3dMeshRotationRange").addEventListener("input",r),document.getElementById("options3dMeshRotationNumber").addEventListener("change",r),document.getElementById("options3dGlobeRotationRange").addEventListener("input",r),document.getElementById("options3dGlobeRotationNumber").addEventListener("change",r),document.getElementById("options3dMeshLabels3d").addEventListener("change",c),document.getElementById("options3dMeshSkyMode").addEventListener("change",f),document.getElementById("options3dMeshSky").addEventListener("input",z),document.getElementById("options3dMeshWater").addEventListener("input",z),document.getElementById("options3dGlobeResolution").addEventListener("change",m);function e(){const b=document.getElementById("canvas3d").dataset.type==="viewGlobe";options3dMesh.style.display=b?"none":"block",options3dGlobe.style.display=b?"block":"none",options3dScaleRange.value=options3dScaleNumber.value=ThreeD.options.scale,options3dLightnessRange.value=options3dLightnessNumber.value=ThreeD.options.lightness*100,options3dSunX.value=ThreeD.options.sun.x,options3dSunY.value=ThreeD.options.sun.y,options3dSunZ.value=ThreeD.options.sun.z,options3dMeshRotationRange.value=options3dMeshRotationNumber.value=ThreeD.options.rotateMesh,options3dGlobeRotationRange.value=options3dGlobeRotationNumber.value=ThreeD.options.rotateGlobe,options3dMeshLabels3d.value=ThreeD.options.labels3d,options3dMeshSkyMode.value=ThreeD.options.extendedWater,options3dColorSection.style.display=ThreeD.options.extendedWater?"block":"none",options3dMeshSky.value=ThreeD.options.skyColor,options3dMeshWater.value=ThreeD.options.waterColor,options3dGlobeResolution.value=ThreeD.options.resolution}function t(){options3dScaleRange.value=options3dScaleNumber.value=this.value,ThreeD.setScale(+this.value)}function n(){options3dLightnessRange.value=options3dLightnessNumber.value=this.value,ThreeD.setLightness(this.value/100)}function i(){const b=+options3dSunX.value,A=+options3dSunY.value,u=+options3dSunZ.value;ThreeD.setSun(b,A,u)}function r(){(this.nextElementSibling||this.previousElementSibling).value=this.value;const b=+this.value;ThreeD.setRotation(b)}function c(){ThreeD.toggleLabels()}function f(){const b=ThreeD.options.extendedWater;options3dColorSection.style.display=b?"none":"block",ThreeD.toggleSky()}function z(){ThreeD.setColors(options3dMeshSky.value,options3dMeshWater.value)}function m(){ThreeD.setResolution(this.value)}}function Sr(){const e=Yt(this.getAttribute("transform")),t=+e[0]-d3.event.x,n=+e[1]-d3.event.y,i=legend.node().getBBox();d3.event.on("drag",function(){const r=O((t+d3.event.x+i.width)/svgWidth*100,2),c=O((n+d3.event.y+i.height)/svgHeight*100,2),f=`translate(${t+d3.event.x},${n+d3.event.y})`;legend.attr("transform",f).attr("data-x",r).attr("data-y",c)})}function Ar(){legend.selectAll("*").remove(),legend.attr("data",null)}class Ga{constructor(){this.data=[]}create(t,n){const i=new t(n);return this.data.push(i),i}toString(){return this.data.map(t=>t.toString()).join("; ")}fromString(t){this.data=[];const n={Ruler:ja,Opisometer:zr,RouteOpisometer:xr,Planimeter:Cr},i=t.split("; ");for(const r of i){const[c,f]=r.split(": ");if(!c||!f)continue;const z=f.split(" ").map(m=>m.split(",").map(b=>+b));this.create(n[c],z)}}draw(){this.data.forEach(t=>t.draw())}undraw(){this.data.forEach(t=>t.undraw())}remove(t){if(t===void 0)return;const n=this.data.find(r=>r.id===t);n.undraw();const i=this.data.indexOf(n);rulers.data.splice(i,1)}}class Rt{constructor(t){this.points=t,this.id=rulers.data.length}toString(){return this.constructor.name+": "+this.points.join(" ")}getSize(){return O(1/scale**.3*2,2)}getDash(){return O(30/distanceScaleInput.value,2)}drag(){const t=Yt(this.getAttribute("transform")),n=+t[0]-d3.event.x,i=+t[1]-d3.event.y;d3.event.on("drag",function(){const r=`translate(${n+d3.event.x},${i+d3.event.y})`;this.setAttribute("transform",r)})}addPoint(t){const n=d3.event.sourceEvent.shiftKey?9:100,i=De(this.points);t=[t[0]|0,t[1]|0],!((i[0]-t[0])**2+(i[1]-t[1])**2i[0]==t&&i[1]==n)}pushPoint(t){const[n,i]=this.points[t];t?this.points.push([n,i]):this.points.unshift([n,i])}draw(){this.el&&this.el.selectAll("*").remove();const t=this.getPointsString(),n=this.getSize(),i=this.getDash(),r=this.el=ruler.append("g").attr("class","ruler").call(d3.drag().on("start",this.drag)).attr("font-size",10*n);return r.append("polyline").attr("points",t).attr("class","white").attr("stroke-width",n).call(d3.drag().on("start",()=>this.addControl(this))),r.append("polyline").attr("points",t).attr("class","gray").attr("stroke-width",O(n*1.2,2)).attr("stroke-dasharray",i),r.append("g").attr("class","rulerPoints").attr("stroke-width",.5*n).attr("font-size",2*n),r.append("text").attr("dx",".35em").attr("dy","-.45em").on("click",()=>rulers.remove(this.id)),this.drawPoints(r),this.updateLabel(),this}drawPoints(t){const n=t.select(".rulerPoints");n.selectAll("circle").remove();for(let i=0;iMath.abs(d3.event.dy)?"x":"y");const A=m==="y"?f:O(d3.event.x,1),u=m==="x"?z:O(d3.event.y,1);b||(m=null,f=A,z=u),t.updatePoint(n,A,u),c.attr("points",t.getPointsString()),r.attr("cx",A).attr("cy",u),t.updateLabel()})}addControl(t){const n=O(d3.event.x,1),i=O(d3.event.y,1),r=In(t.points,[n,i]);t.points.splice(r,0,[n,i]),t.drawPoints(t.el),t.dragControl(t,r)}removePoint(t,n){this.points.length<3||(this.points.splice(n,1),t.draw())}}class zr extends Rt{constructor(t){super(t)}draw(){this.el&&this.el.selectAll("*").remove();const t=this.getSize(),n=this.getDash(),i=this,r=this.el=ruler.append("g").attr("class","opisometer").call(d3.drag().on("start",this.drag)).attr("font-size",10*t);r.append("path").attr("class","white").attr("stroke-width",t),r.append("path").attr("class","gray").attr("stroke-width",t).attr("stroke-dasharray",n);const c=r.append("g").attr("class","rulerPoints").attr("stroke-width",.5*t).attr("font-size",2*t);return c.append("circle").attr("r","1em").call(d3.drag().on("start",function(){i.dragControl(i,0)})),c.append("circle").attr("r","1em").call(d3.drag().on("start",function(){i.dragControl(i,1)})),r.append("text").attr("dx",".35em").attr("dy","-.45em").on("click",()=>rulers.remove(this.id)),this.updateCurve(),this.updateLabel(),this}updateCurve(){lineGen.curve(d3.curveCatmullRom.alpha(.5));const t=it(lineGen(this.points));this.el.selectAll("path").attr("d",t);const n=this.points[0],i=De(this.points);this.el.select(".rulerPoints > circle:first-child").attr("cx",n[0]).attr("cy",n[1]),this.el.select(".rulerPoints > circle:last-child").attr("cx",i[0]).attr("cy",i[1])}updateLabel(){const t=this.el.select("path").node().getTotalLength(),n=O(t*distanceScaleInput.value)+" "+distanceUnitInput.value,[i,r]=De(this.points);this.el.select("text").attr("x",i).attr("y",r).text(n)}dragControl(t,n){const i=d3.event.sourceEvent.shiftKey?9:100;let r=n?De(t.points):t.points[0];d3.event.on("drag",function(){const c=[d3.event.x|0,d3.event.y|0];(r[0]-c[0])**2+(r[1]-c[1])**2Te(n[0],n[1])):this.cellStops=null}checkCellStops(){this.cellStops||(this.cellStops=this.points.map(t=>Te(t[0],t[1])))}trackCell(t,n){this.checkCellStops();const i=this.cellStops,r=i.indexOf(t);if(n){if(De(i)===t)return;i.length>1&&r!=-1?(i.splice(r+1),this.points.splice(r+1)):(i.push(t),this.points.push(this.getCellRouteCoord(t)))}else{if(i[0]===t)return;i.length>1&&r!=-1?(i.splice(0,r),this.points.splice(0,r)):(i.unshift(t),this.points.unshift(this.getCellRouteCoord(t)))}this.updateCurve(),this.updateLabel()}getCellRouteCoord(t){const n=pack.cells,i=pack.burgs,r=n.burg[t],c=r?i[r].x:n.p[t][0],f=r?i[r].y:n.p[t][1];return[c,f]}draw(){this.el&&this.el.selectAll("*").remove();const t=this.getSize(),n=this.getDash(),i=this,r=this.el=ruler.append("g").attr("class","opisometer").attr("font-size",10*t);r.append("path").attr("class","white").attr("stroke-width",t),r.append("path").attr("class","gray").attr("stroke-width",t).attr("stroke-dasharray",n);const c=r.append("g").attr("class","rulerPoints").attr("stroke-width",.5*t).attr("font-size",2*t);return c.append("circle").attr("r","1em").call(d3.drag().on("start",function(){i.dragControl(i,0)})),c.append("circle").attr("r","1em").call(d3.drag().on("start",function(){i.dragControl(i,1)})),r.append("text").attr("dx",".35em").attr("dy","-.45em").on("click",()=>rulers.remove(this.id)),this.updateCurve(),this.updateLabel(),this}updateCurve(){lineGen.curve(d3.curveCatmullRom.alpha(.5));const t=it(lineGen(this.points));this.el.selectAll("path").attr("d",t);const n=this.points[0],i=De(this.points);this.el.select(".rulerPoints > circle:first-child").attr("cx",n[0]).attr("cy",n[1]),this.el.select(".rulerPoints > circle:last-child").attr("cx",i[0]).attr("cy",i[1])}updateLabel(){const t=this.el.select("path").node().getTotalLength(),n=O(t*distanceScaleInput.value)+" "+distanceUnitInput.value,[i,r]=De(this.points);this.el.select("text").attr("x",i).attr("y",r).text(n)}dragControl(t,n){d3.event.on("drag",function(){const i=[d3.event.x|0,d3.event.y|0],r=pack.cells,c=Te(i[0],i[1]);!r.road[c]&&!d3.event.sourceEvent.shiftKey||t.trackCell(c,n)})}}class Cr extends Rt{constructor(t){super(t)}draw(){this.el&&this.el.selectAll("*").remove();const t=this.getSize(),n=this.el=ruler.append("g").attr("class","planimeter").call(d3.drag().on("start",this.drag)).attr("font-size",10*t);return n.append("path").attr("class","planimeter").attr("stroke-width",t),n.append("text").on("click",()=>rulers.remove(this.id)),this.updateCurve(),this.updateLabel(),this}updateCurve(){lineGen.curve(d3.curveCatmullRomClosed.alpha(.5));const t=it(lineGen(this.points));this.el.selectAll("path").attr("d",t)}updateLabel(){if(this.points.length<3)return;const t=O(Math.abs(d3.polygonArea(this.points))),n=Qt(getArea(t))+" "+getAreaUnit(),i=polylabel([this.points],1);this.el.select("text").attr("x",i[0]).attr("y",i[1]).text(n)}}function Br(e){if(scaleBar.style("display")==="none")return;scaleBar.selectAll("*").remove();const t=+distanceScaleInput.value,n=distanceUnitInput.value,i=+barSizeInput.value;let c=100*i*t/e;c>900?c=O(c,-3):c>90?c=O(c,-2):c>9?c=O(c,-1):c=O(c);const f=c*e/t;scaleBar.append("line").attr("x1",.5).attr("y1",0).attr("x2",f+i-.5).attr("y2",0).attr("stroke-width",i).attr("stroke","white"),scaleBar.append("line").attr("x1",0).attr("y1",i).attr("x2",f+i).attr("y2",i).attr("stroke-width",i).attr("stroke","#3d3d3d");const z=i+" "+O(f/5-i,2);scaleBar.append("line").attr("x1",0).attr("y1",0).attr("x2",f+i).attr("y2",0).attr("stroke-width",O(i*3,2)).attr("stroke-dasharray",z).attr("stroke","#3d3d3d");const m=O(5*i,1);scaleBar.selectAll("text").data(d3.range(0,6)).enter().append("text").attr("x",A=>O(A*f/5,2)).attr("y",0).attr("dy","-.5em").attr("font-size",m).text(A=>O(A*f/5*t/e)+(A<5?"":" "+n)),barLabel.value!==""&&scaleBar.append("text").attr("x",(f+1)/2).attr("y",2*i).attr("dominant-baseline","text-before-edge").attr("font-size",m).text(barLabel.value);const b=scaleBar.node().getBBox();scaleBar.insert("rect",":first-child").attr("x",-10).attr("y",-20).attr("width",b.width+10).attr("height",b.height+15).attr("stroke-width",i).attr("stroke","none").attr("filter","url(#blur5)").attr("fill",barBackColor.value).attr("opacity",+barBackOpacity.value),Mr()}function Mr(){if(!scaleBar.select("rect").size()||scaleBar.style("display")==="none")return;const e=isNaN(+barPosX.value)?.99:barPosX.value/100,t=isNaN(+barPosY.value)?.99:barPosY.value/100,n=scaleBar.select("rect").node().getBBox(),i=O(svgWidth*e-n.width+10),r=O(svgHeight*t-n.height+20);scaleBar.attr("transform",`translate(${i},${r})`)}const _t=["default","ancient","gloom","light","watercolor","clean","atlas","cyberpunk","monochrome"],ca="fmgStyle_";{const e=_t.map(r=>``),n=Object.keys(localStorage).filter(r=>r.startsWith(ca)).map(r=>``),i=e.join("")+n.join("");document.getElementById("stylePreset").innerHTML=i}async function Er(){const e=localStorage.getItem("presetStyle")||"default",t=await Lr(e),[n,i]=t;Rr(i),Tr(),stylePreset.value=stylePreset.dataset.old=n,Pr()}async function Lr(e){let t=e;if(!_t.includes(e)){const r=localStorage.getItem(e);if(!r)ERROR&&console.error(`Custom style ${e} in not found in localStorage. Applying default style`),t="default";else{if(Rn(r))return[e,JSON.parse(r)];ERROR&&console.error(`Custom style ${e} stored in localStorage is not valid. Applying default style`),t="default"}}const i=await Ir(t);return[t,i]}async function Ir(e){const t=await fetch(`./styles/${e}.json`).then(n=>n.json()).catch(n=>(ERROR&&console.error("Error on loading style preset",e,n),null));if(!t)throw new Error("Cannot fetch style preset",e);return t}function Rr(e){for(const t in e){const n=document.querySelector(t);if(!!n)for(const i in e[t]){const r=e[t][i];if(r==="null"||r===null){n.removeAttribute(i);continue}i==="text-shadow"?n.style[i]=r:n.setAttribute(i,r)}}}function Tr(){const e=svg.attr("data-filter");mapFilters.querySelectorAll(".pressed").forEach(t=>t.classList.remove("pressed")),e&&mapFilters.querySelector("#"+e).classList.add("pressed")}function Pr(){const e=_t.includes(stylePreset.value);removeStyleButton.style.display=e?"none":"inline-block"}function Wa(){Zoom.setZoomBehavior(),viewbox.style("cursor","default").on(".drag",null).on("click",Hr).on("touchmove mousemove",Ur),legend.call(d3.drag().on("start",Sr))}function Hr(){const e=d3.event.target;if(!e||!e.parentElement||!e.parentElement.parentElement)return;const t=e.parentElement,n=t.parentElement,i=n.parentElement,r=d3.mouse(this),c=Te(r[0],r[1]);if(n.id==="emblems")editEmblem();else if(t.id==="rivers")editRiver(e.id);else if(n.id==="routes")editRoute();else if(e.tagName==="tspan"&&n.parentNode.parentNode.id==="labels")editLabel();else if(n.id==="burgLabels")editBurg();else if(n.id==="burgIcons")editBurg();else if(t.id==="ice")editIce();else if(t.id==="terrain")editReliefIcon();else if(n.id==="markers"||i.id==="markers")editMarker();else if(n.id==="coastline")editCoastline();else if(i.id==="armies")editRegiment();else if(pack.cells.t[c]===1){const f=byId("island_"+pack.cells.f[c]);editCoastline(f)}else n.id==="lakes"&&editLake()}const Ur=vt(Nr,100);function Nr(){const e=d3.mouse(this),t=Te(e[0],e[1]);if(t===void 0)return;Kr(d3.event);const n=Xe(e[0],e[1],grid);tooltip.dataset.main?Pn():Dr(e,d3.event,t,n),cellInfo!=null&&cellInfo.offsetParent&&updateCellInfo(e,t,n)}function Kr(e){if(notesEditor!=null&¬esEditor.offsetParent)return;let t=e.target.id||e.target.parentNode.id||e.target.parentNode.parentNode.id;(e.target.parentNode.parentNode.id==="burgLabels"||e.target.parentNode.parentNode.id==="burgIcons")&&(t="burg"+e.target.dataset.id);const n=notes.find(i=>i.id===t);n!==void 0&&n.legend!==""?(document.getElementById("notes").style.display="block",document.getElementById("notesHeader").innerHTML=n.name,document.getElementById("notesBody").innerHTML=n.legend):!options.pinNotes&&!(markerEditor!=null&&markerEditor.offsetParent)&&(document.getElementById("notes").style.display="none",document.getElementById("notesHeader").innerHTML="",document.getElementById("notesBody").innerHTML="")}function Dr(e,t,n,i){var m,b,A,u,C,g;se("");const r=t.composedPath();if(!r[r.length-8])return;const c=r[r.length-7].id,f=r[r.length-8].id,z=pack.cells.h[n]>=20;if(c==="armies")return se(t.target.parentNode.dataset.name+". Click to edit");if(c==="emblems"&&t.target.tagName==="use"){const p=t.target.parentNode,[B,k]=p.id==="burgEmblems"?[pack.burgs,"burg"]:p.id==="provinceEmblems"?[pack.provinces,"province"]:[pack.states,"state"],d=+t.target.dataset.i;t.shiftKey&&highlightEmblemElement(k,B[d]),d3.select(t.target).raise(),d3.select(p).raise();const s=B[d].fullName||B[d].name;se(`${s} ${k} emblem. Click to edit. Hold Shift to show associated area or place`);return}if(c==="rivers"){const p=+t.target.id.slice(5),B=pack.rivers.find(d=>d.i===p),k=B?B.name+" "+B.type:"";se(k+". Click to edit"),riversOverview!=null&&riversOverview.offsetParent&&highlightEditorLine(riversOverview,p,5e3);return}if(c==="routes")return se("Click to edit the Route");if(c==="terrain")return se("Click to edit the Relief Icon");if(f==="burgLabels"||f==="burgIcons"){const p=+r[r.length-10].dataset.id,B=pack.burgs[p],k=Qt(B.population*populationRate*urbanization);se(`${B.name}. Population: ${k}. Click to edit`),burgsOverview!=null&&burgsOverview.offsetParent&&highlightEditorLine(burgsOverview,p,5e3);return}if(c==="labels")return se("Click to edit the Label");if(c==="markers")return se("Click to edit the Marker and pin the marker note");if(c==="ruler"){const p=t.target.tagName,B=t.target.getAttribute("class");if(p==="circle"&&B==="edge")return se("Drag to adjust. Hold Ctrl and drag to add a point. Click to remove the point");if(p==="circle"&&B==="control")return se("Drag to adjust. Hold Shift and drag to keep axial direction. Click to remove the point");if(p==="circle")return se("Drag to adjust the measurer");if(p==="polyline")return se("Click on drag to add a control point");if(p==="path")return se("Drag to move the measurer");if(p==="text")return se("Drag to move, click to remove the measurer")}if(f==="burgIcons"||f==="burgLabels")return se("Click to edit the Burg");if(c==="lakes"&&!z){const p=+t.target.dataset.f,B=(m=pack.features[p])==null?void 0:m.name,k=f==="freshwater"?B:B+" "+f;se(`${k} lake. Click to edit`);return}if(c==="coastline")return se("Click to edit the coastline");if(c==="zones"){const p=r[r.length-8];se(p.dataset.description),zonesEditor!=null&&zonesEditor.offsetParent&&highlightEditorLine(zonesEditor,p.id,5e3);return}if(c==="ice")return se("Click to edit the Ice");if(layerIsOn("togglePrec")&&z)se("Annual Precipitation: "+getFriendlyPrecipitation(n));else if(layerIsOn("togglePopulation"))se(getPopulationTip(n));else if(layerIsOn("toggleTemp"))se("Temperature: "+Xt(grid.cells.temp[i]));else if(layerIsOn("toggleBiomes")&&pack.cells.biome[n]){const p=pack.cells.biome[n];se("Biome: "+biomesData.name[p]),biomesEditor!=null&&biomesEditor.offsetParent&&highlightEditorLine(biomesEditor,p)}else if(layerIsOn("toggleReligions")&&pack.cells.religion[n]){const p=pack.cells.religion[n],B=pack.religions[p],k=B.type==="Cult"||B.type=="Heresy"?B.type:B.type+" religion";se(k+": "+B.name),religionsEditor!=null&&religionsEditor.offsetParent&&highlightEditorLine(religionsEditor,p)}else if(pack.cells.state[n]&&(layerIsOn("toggleProvinces")||layerIsOn("toggleStates"))){const p=pack.cells.state[n],B=pack.states[p].fullName,k=pack.cells.province[n],d=k?pack.provinces[k].fullName+", ":"";se(d+B),(b=document.getElementById("statesEditor"))!=null&&b.offsetParent&&highlightEditorLine(statesEditor,p),(A=document.getElementById("diplomacyEditor"))!=null&&A.offsetParent&&highlightEditorLine(diplomacyEditor,p),(u=document.getElementById("militaryOverview"))!=null&&u.offsetParent&&highlightEditorLine(militaryOverview,p),(C=document.getElementById("provincesEditor"))!=null&&C.offsetParent&&highlightEditorLine(provincesEditor,k)}else if(layerIsOn("toggleCultures")&&pack.cells.culture[n]){const p=pack.cells.culture[n];se("Culture: "+pack.cultures[p].name),(g=document.getElementById("culturesEditor"))!=null&&g.offsetParent&&highlightEditorLine(culturesEditor,p)}else layerIsOn("toggleHeight")&&se("Height: "+getFriendlyHeight(e))}function Fr(){zt&&Or(),zt&&Gr(),Un(),Hn()}function Or(){"serviceWorker"in navigator&&window.addEventListener("load",()=>{navigator.serviceWorker.register("../../sw.js").catch(e=>{console.error("ServiceWorker registration failed: ",e)})})}function Gr(){window.addEventListener("beforeinstallprompt",async e=>{e.preventDefault(),(await St(()=>import("./installation.aec0617b.js"),[])).init(e)},{once:!0})}function qa(e){const t=e.toString()+" "+e.stack,n=/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;return t.replace(n,c=>""+c.split("/").at(-1)+"").replace(/at /gi,"
      at ")}const Va=document.createElement("template");Va.innerHTML=` + + + + +`;class jr extends HTMLElement{constructor(){super();oa(this,"tooltip");this.tooltip=this.dataset.tip||"Fill style. Click to change"}showTip(){se(this.tooltip)}connectedCallback(){var n,i,r;this.appendChild(Va.content.cloneNode(!0)),(n=this.querySelector("rect"))==null||n.setAttribute("fill",this.fill),(i=this.querySelector("svg"))==null||i.setAttribute("width",this.size),(r=this.querySelector("svg"))==null||r.setAttribute("height",this.size),this.addEventListener("mousemove",this.showTip)}disconnectedCallback(){this.removeEventListener("mousemove",this.showTip)}get fill(){return this.getAttribute("fill")||"#333"}set fill(n){var i;this.setAttribute("fill",n),(i=this.querySelector("rect"))==null||i.setAttribute("fill",n)}get size(){return this.getAttribute("size")||"1em"}}customElements.define("fill-box",jr);console.log("Hello World");Fr();const Ae=window.d3;window.fmg={modules:{}};options={pinNotes:!1,showMFCGMap:!0,winds:[225,45,225,315,135,315],stateLabelsMode:"auto"};populationRate=+ne("populationRateInput").value;distanceScale=+ne("distanceScaleInput").value;urbanization=+ne("urbanizationInput").value;urbanDensity=+ne("urbanDensityInput").value;statesNeutral=1;rr();rulers=new Ga;biomesData=Biomes.getDefault();nameBases=Names.getNameBases();graphWidth=+ne("mapWidthInput").value;graphHeight=+ne("mapHeightInput").value;svgWidth=graphWidth;svgHeight=graphHeight;defineSvg(graphWidth,graphHeight);scaleBar.on("mousemove",()=>se("Click to open Units Editor")).on("click",()=>editUnits());legend.on("mousemove",()=>se("Drag to change the position. Click to hide the legend")).on("click",()=>Ar());document.on("DOMContentLoaded",async()=>{if(location.hostname)Za(),await qr();else{const e="https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Run-FMG-locally";alertMessage.innerHTML=`Fantasy Map Generator cannot run serverless. Follow the instructions on how you can + easily run a local web-server`,$("#alert").dialog({resizable:!1,title:"Loading error",width:"28em",position:{my:"center center-4em",at:"center",of:"svg"},buttons:{OK:function(){$(this).dialog("close")}}})}Wa()});function Za(){Ae.select("#loading").transition().duration(3e3).style("opacity",0),Ae.select("#optionsContainer").transition().duration(2e3).style("opacity",1),Ae.select("#tooltip").transition().duration(3e3).style("opacity",1)}function Wr(){Ae.select("#loading").transition().duration(200).style("opacity",1),Ae.select("#optionsContainer").transition().duration(100).style("opacity",0),Ae.select("#tooltip").transition().duration(200).style("opacity",0)}async function qr(){const t=new URL(window.location.href).searchParams;if(t.get("maplink")){console.warn("Load map from URL");const i=t.get("maplink");if(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/.test(i)){setTimeout(()=>{loadMapFromURL(i,1)},1e3);return}else showUploadErrorMessage("Map link is not a valid URL",i)}if(t.get("seed")){console.warn("Generate map for seed"),await Kt();return}const n=()=>new Promise((i,r)=>{ldb.get("lastMap",c=>{if(c){console.warn("Load last saved map");try{uploadMap(c),i()}catch(f){r(f)}}else r("No map stored")})});if(onloadMap.value==="saved")try{await n()}catch(i){console.error(i),console.warn("Cannot load stored map, random map to be generated"),await Kt()}else console.warn("Generate random map"),await Kt()}async function Kt(){await Er(),await Ja(),Vr(),ao()}function Vr(){const t=new URL(window.location.href).searchParams;if(t.get("from")==="MFCG"&&document.referrer)if(t.get("seed").length===13){const f=t.get("seed").slice(-4);t.set("burg",f)}else{Zr(t);return}const i=t.get("scale"),r=t.get("cell"),c=t.get("burg");if(i||r||c){const f=+i||8;if(r){const b=+t.get("cell"),[A,u]=pack.cells.p[b];Zoom.to(A,u,f,1600);return}if(c){const b=isNaN(+c)?pack.burgs.find(C=>C.name===c):pack.burgs[+c];if(!b)return;const{x:A,y:u}=b;Zoom.to(A,u,f,1600);return}const z=+t.get("x")||graphWidth/2,m=+t.get("y")||graphHeight/2;Zoom.to(z,m,f,1600)}}function Zr(e){const{cells:t,burgs:n}=pack;if(pack.burgs.length<2){console.error("Cannot select a burg for MFCG");return}const i=+e.get("size"),r=+e.get("coast"),c=+e.get("port"),f=+e.get("river");let z=m(r,c,f);z.length||(z=m(r,!c,!f)),z.length||(z=m(!r,0,!f)),z.length||(z=[n[1]]);function m(p,B,k){return B&&k?n.filter(d=>d.port&&t.r[d.cell]):!B&&p&&k?n.filter(d=>!d.port&&t.t[d.cell]===1&&t.r[d.cell]):!p&&!k?n.filter(d=>t.t[d.cell]!==1&&!t.r[d.cell]):!p&&k?n.filter(d=>t.t[d.cell]!==1&&t.r[d.cell]):p&&k?n.filter(d=>t.t[d.cell]===1&&t.r[d.cell]):[]}const b=Ae.scan(z,(p,B)=>Math.abs(p.population-i)-Math.abs(B.population-i)),A=z[b].i;if(!A){console.error("Cannot select a burg for MFCG");return}const u=n[A],C=new URL(document.referrer);for(let p of C.searchParams)p[0]==="name"?u.name=p[1]:p[0]==="size"?u.population=+p[1]:p[0]==="seed"?u.MFCG=+p[1]:p[0]==="shantytown"?u.shanty=+p[1]:u[p[0]]=+p[1];e.get("name")&&e.get("name")!="null"&&(u.name=e.get("name"));const g=burgLabels.select("[data-id='"+A+"']");g.size()&&g.text(u.name).classed("drag",!0).on("mouseover",function(){Ae.select(this).classed("drag",!1),g.on("mouseover",null)}),Zoom.to(u.x,u.y,8,1600),wt(),se("Here stands the glorious city of "+u.name,!0,"success",15e3)}(function(){document.addEventListener("dragover",function(t){t.stopPropagation(),t.preventDefault(),ne("mapOverlay").style.display=null}),document.addEventListener("dragleave",function(t){ne("mapOverlay").style.display="none"}),document.addEventListener("drop",function(t){t.stopPropagation(),t.preventDefault();const n=ne("mapOverlay");if(n.style.display="none",t.dataTransfer.items==null||t.dataTransfer.items.length!==1)return;const i=t.dataTransfer.items[0].getAsFile();if(i.name.indexOf(".map")==-1){alertMessage.innerHTML="Please upload a .map file you have previously downloaded",$("#alert").dialog({resizable:!1,title:"Invalid file format",position:{my:"center",at:"center",of:"svg"},buttons:{Close:function(){$(this).dialog("close")}}});return}n.style.display=null,n.innerHTML="Uploading...",closeDialogs&&closeDialogs(),uploadMap(i,()=>{n.style.display="none",n.innerHTML="Drop a .map file to open"})})})();async function Ja(e){try{const t=performance.now(),{seed:n,graph:i}=e||{};wt(),Jr(n),Ft&&console.group("Generated Map "+seed),ji(),sr(),fn(grid)?grid=i||yn():delete grid.cells.h,grid.cells.h=await HeightmapGenerator.generate(grid),Yr(),Xr(),Qr(),$r(),OceanLayers(),_r(),window.mapCoordinates=es(),ts(),as(),ns(),os(),Rivers.generate(),Ca(),Lakes.defineGroup(),ss(),cs(),Cultures.generate(),Cultures.expand(),BurgsAndStates.generate(),Religions.generate(),BurgsAndStates.defineStateForms(),BurgsAndStates.generateProvinces(),BurgsAndStates.defineBurgFeatures(),Aa(),za(),BurgsAndStates.drawStateLabels(),Rivers.specify(),Lakes.generateName(),Military.generate(),Markers.generate(),us(),Br(scale),Names.getMapName(),dn&&console.warn(`TOTAL: ${O((performance.now()-t)/1e3,2)}s`),ds(),Ft&&console.groupEnd("Generated Map "+seed)}catch(t){console.error(t);const n=qa(t);ct(),alertMessage.innerHTML=`An error has occurred on map generation. Please retry.
    If error is critical, clear the stored data and try again. +

    ${n}

    `,$("#alert").dialog({resizable:!1,title:"Generation error",width:"32em",buttons:{"Clear data":function(){localStorage.clear(),localStorage.setItem("version",version)},Regenerate:function(){hs("generation error"),$(this).dialog("close")},Ignore:function(){$(this).dialog("close")}},position:{my:"center",at:"center",of:"svg"}})}}function Jr(e){if(e)seed=e;else{const t=!mapHistory[0],n=new URL(window.location.href),i=n.searchParams,r=n.searchParams.get("seed");t&&i.get("from")==="MFCG"&&r.length===13?seed=r.slice(0,-4):t&&r?seed=r:optionsSeed.value&&optionsSeed.value!=seed?seed=optionsSeed.value:seed=Jt()}ne("optionsSeed").value=seed,Math.random=aleaPRNG(seed)}function Yr(){Q&&console.time("markFeatures"),Math.random=aleaPRNG(seed);const e=grid.cells,t=grid.cells.h;e.f=new Uint16Array(e.i.length),e.t=new Int8Array(e.i.length),grid.features=[0];for(let n=1,i=[0];i[0]!==-1;n++){e.f[i[0]]=n;const r=t[i[0]]>=20;let c=!1;for(;i.length;){const z=i.pop();e.b[z]&&(c=!0),e.c[z].forEach(m=>{const b=t[m]>=20;r===b&&!e.f[m]?(e.f[m]=n,i.push(m)):r&&!b&&(e.t[z]=1,e.t[m]=-1)})}const f=r?"island":c?"ocean":"lake";grid.features.push({i:n,land:r,border:c,type:f}),i[0]=e.f.findIndex(z=>!z)}Q&&console.timeEnd("markFeatures")}function Xr(){Q&&console.time("markupGridOcean"),Ya(grid.cells,-2,-1,-10),Q&&console.timeEnd("markupGridOcean")}function Ya(e,t,n,i){for(let r=t,c=1/0;c>0&&r>i;r+=n){c=0;const f=r-n;for(let z=0;zi[g]));if(i[z]>m)continue;let b=!0;const A=i[z]+c,u=[z],C=[];for(C[z]=!0;b&&u.length;){const g=u.pop();for(const p of n[g])if(!C[p]&&!(i[p]>=A)){if(i[p]<20){b=!1;break}C[p]=!0,u.push(p)}}if(b){const g=[z].concat(n[z].filter(p=>i[p]===i[z]));f(g)}}function f(z){const m=t.length;z.forEach(b=>{e.h[b]=19,e.t[b]=-1,e.f[b]=m,n[b].forEach(A=>!z.includes(A)&&(e.t[n]=1))}),t.push({i:m,land:!1,border:!1,type:"lake"})}Q&&console.timeEnd("addLakesInDeepDepressions")}function $r(){if(ne("templateInput").value==="Atoll")return;const e=grid.cells,t=grid.features;if(!t.find(r=>r.type==="lake"))return;Q&&console.time("openLakes");const n=22;for(const r of e.i){const c=e.f[r];if(t[c].type!=="lake")continue;e:for(const f of e.c[r])if(!(e.t[f]!==1||e.h[f]>n))for(const z of e.c[f]){const m=e.f[z];if(t[m].type==="ocean"){i(f,c,m);break e}}}function i(r,c,f){e.h[r]=19,e.t[r]=-1,e.f[r]=f,e.c[r].forEach(function(z){e.h[z]>=20&&(e.t[z]=1)}),t[c].type="ocean"}Q&&console.timeEnd("openLakes")}function _r(){const[e,t]=i(),n=new URL(window.location.href).searchParams.get("options")==="default";(n||!Ne("mapSize"))&&(mapSizeOutput.value=mapSizeInput.value=O(e)),(n||!Ne("latitude"))&&(latitudeOutput.value=latitudeInput.value=O(t));function i(){const r=ne("templateInput").value;if(r==="africa-centric")return[45,53];if(r==="arabia")return[20,35];if(r==="atlantics")return[42,23];if(r==="britain")return[7,20];if(r==="caribbean")return[15,40];if(r==="east-asia")return[11,28];if(r==="eurasia")return[38,19];if(r==="europe")return[20,16];if(r==="europe-accented")return[14,22];if(r==="europe-and-central-asia")return[25,10];if(r==="europe-central")return[11,22];if(r==="europe-north")return[7,18];if(r==="greenland")return[22,7];if(r==="hellenica")return[8,27];if(r==="iceland")return[2,15];if(r==="indian-ocean")return[45,55];if(r==="mediterranean-sea")return[10,29];if(r==="middle-east")return[8,31];if(r==="north-america")return[37,17];if(r==="us-centric")return[66,27];if(r==="us-mainland")return[16,30];if(r==="world")return[78,27];if(r==="world-from-pacific")return[75,32];const c=grid.features.some(m=>m.land&&m.border),f=c?80:100,z=()=>Ce(V(.5)?40:60,15,25,75);if(!c){if(r==="Pangea")return[100,50];if(r==="Shattered"&&V(.7))return[100,50];if(r==="Continents"&&V(.5))return[100,50];if(r==="Archipelago"&&V(.35))return[100,50];if(r==="High Island"&&V(.25))return[100,50];if(r==="Low Island"&&V(.1))return[100,50]}return r==="Pangea"?[Ce(70,20,30,f),z()]:r==="Volcano"?[Ce(20,20,10,f),z()]:r==="Mediterranean"?[Ce(25,30,15,80),z()]:r==="Peninsula"?[Ce(15,15,5,80),z()]:r==="Isthmus"?[Ce(15,20,3,80),z()]:r==="Atoll"?[Ce(5,10,2,f),z()]:[Ce(30,20,15,f),z()]}}function es(){const e=+ne("mapSizeOutput").value,t=+ne("latitudeOutput").value,n=O(e/100*180,1),i=O(90-(180-n)*t/100,1),r=O(i-n,1),c=O(Math.min(graphWidth/graphHeight*n/2,180));return{latT:n,latN:i,latS:r,lonT:c*2,lonW:-c,lonE:c}}function ts(){Q&&console.time("calculateTemperatures");const e=grid.cells;e.temp=new Int8Array(e.i.length);const t=+temperatureEquatorInput.value,n=+temperaturePoleInput.value,i=t-n,r=Ae.easePolyInOut.exponent(.5);Ae.range(0,e.i.length,grid.cellsX).forEach(function(f){const z=grid.points[f][1],m=Math.abs(mapCoordinates.latN-z/graphHeight*mapCoordinates.latT),b=t-r(m/90)*i;for(let A=f;A60?Ae.mean(A):A[k],s=b/C*60*c*d;p(Ae.range(0,t,1),s,t,n)}if(m){const k=(Math.abs(mapCoordinates.latS)-1)/5|0,d=mapCoordinates.latT>60?Ae.mean(A):A[k],s=m/C*60*c*d;p(Ae.range(e.i.length-t,e.i.length,1),s,-t,n)}function g(k){const d=options.winds[k],s=d>40&&d<140,o=d>220&&d<320,l=d>100&&d<260,a=d>280||d<80;return{isWest:s,isEast:o,isNorth:l,isSouth:a}}function p(k,d,s,o){const l=d;for(let a of k){a[0]&&(d=Math.min(l*a[1],255),a=a[0]);let w=d-e.h[a];if(!(w<=0))for(let S=0,h=a;S=20?e.prec[h+s]+=Math.max(w/be(10,20),1):(w=Math.min(w+5*c,d),e.prec[h]+=5*c);continue}const v=e.h[h+s]<=u,E=v?B(w,h,s):w;e.prec[h]+=E;const P=E>1.5?1:0;w=v?Ie(w-E+P,0,d):0}}}function B(k,d,s){const o=Math.max(k/(10*c),1),l=Math.max(e.h[d+s]-e.h[d],0),a=(e.h[d+s]/70)**2;return Ie(o+l*a,1,k)}(function(){const d=prec.append("g").attr("id","wind");Ae.range(0,6).forEach(function(s){if(f.length>1){const o=f.filter(l=>l[2]===s);if(o&&o.length>3){const l=o[0][0],a=o[o.length-1][0],w=(grid.points[l][1]+grid.points[a][1])/2;d.append("text").attr("x",20).attr("y",w).text("\u21C9")}}if(z.length>1){const o=z.filter(l=>l[2]===s);if(o&&o.length>3){const l=o[0][0],a=o[o.length-1][0],w=(grid.points[l][1]+grid.points[a][1])/2;d.append("text").attr("x",graphWidth-52).attr("y",w).text("\u21C7")}}}),b&&d.append("text").attr("x",graphWidth/2).attr("y",42).text("\u21CA"),m&&d.append("text").attr("x",graphWidth/2).attr("y",graphHeight-20).text("\u21C8")})(),Q&&console.timeEnd("generatePrecipitation")}function ns(){Q&&console.time("reGraph");const{cells:e,points:t,features:n}=grid,i={p:[],g:[],h:[]},r=grid.spacing**2;for(const b of e.i){const A=e.h[b],u=e.t[b];if(A<20&&u!==-1&&u!==-2||u===-2&&(b%4===0||n[e.f[b]].type==="lake"))continue;const[C,g]=t[b];if(c(b,C,g,A),u===1||u===-1){if(e.b[b])continue;e.c[b].forEach(function(p){if(!(b>p)&&e.t[p]===u){if((g-t[p][1])**2+(C-t[p][0])**2[b,A,u])),pack.cells.h=yt({maxValue:100,from:i.h}),pack.cells.area=yt({maxValue:Dt,from:pack.cells.i}).map(f),Q&&console.timeEnd("reGraph")}function os(){Q&&console.time("drawCoastline"),is();const{cells:e,vertices:t,features:n}=pack,i=e.i.length,r=new Uint8Array(n.length),c=Ae.scan(n.map(u=>u.land?u.cells:0),(u,C)=>C-u),f=defs.select("#land"),z=defs.select("#water");lineGen.curve(Ae.curveBasisClosed);for(const u of e.i){if(!(!u&&e.h[u]>=20)&&e.t[u]!==-1&&e.t[u]!==1)continue;const g=e.f[u];if(r[g]||n[g].type==="ocean")continue;const p=n[g].type==="lake"?1:-1,B=m(u,p);if(B===-1)continue;let k=b(B,p);n[g].type==="lake"&&A(k,1.2),r[g]=1;let d=Et(k.map(l=>t.p[l]));const s=Ae.polygonArea(d);s>0&&n[g].type==="lake"&&(d=d.reverse(),k=k.reverse()),n[g].area=Math.abs(s),n[g].vertices=k;const o=round(lineGen(d));if(n[g].type==="lake")f.append("path").attr("d",o).attr("fill","black").attr("id","land_"+g),lakes.select("#freshwater").append("path").attr("d",o).attr("id","lake_"+g).attr("data-f",g);else{f.append("path").attr("d",o).attr("fill","white").attr("id","land_"+g),z.append("path").attr("d",o).attr("fill","black").attr("id","water_"+g);const l=n[g].group==="lake_island"?"lake_island":"sea_island";coastline.select("#"+l).append("path").attr("d",o).attr("id","island_"+g).attr("data-f",g)}if(g===c){const l=d[Ae.scan(d,(w,S)=>w[0]-S[0])],a=d[Ae.scan(d,(w,S)=>S[0]-w[0])];rulers.create(ja,[l,a])}}function m(u,C){if(C===-1&&e.b[u])return e.v[u].find(B=>t.c[B].some(k=>k>=i));const g=e.c[u].filter(B=>e.t[B]===C),p=e.c[u].indexOf(Ae.min(g));return p===-1?p:e.v[u][p]}function b(u,C){const g=[];for(let p=0,B=u;p===0||B!==u&&p<5e4;p++){const k=g[g.length-1];g.push(B);const d=t.c[B],s=t.v[B],o=d[0]>=i||e.t[d[0]]===C,l=d[1]>=i||e.t[d[1]]===C,a=d[2]>=i||e.t[d[2]]===C;if(s[0]!==k&&o!==l?B=s[0]:s[1]!==k&&l!==a?B=s[1]:s[2]!==k&&o!==a&&(B=s[2]),B===g[g.length-1]){console.error("Next vertex is not found");break}}return g}function A(u,C){const g=t.p,p=Ae.quadtree();for(let B=0;B{const f=e.c[c].filter(b=>e.h[b]<20),z=f.map(b=>(e.p[c][0]-e.p[b][0])**2+(e.p[c][1]-e.p[b][1])**2),m=f[z.indexOf(Math.min.apply(Math,z))];e.haven[c]=m,e.harbor[c]=f.length};if(!e.i.length)return;for(let c=1,f=[0];f[0]!==-1;c++){const z=f[0];e.f[z]=c;const m=e.h[z]>=20;let b=!1,A=1;for(;f.length;){const g=f.pop();e.b[g]&&(b=!0),e.c[g].forEach(function(p){const B=e.h[p]>=20;m&&!B?(e.t[g]=1,e.t[p]=-1,e.haven[g]||n(g)):m&&B&&(!e.t[p]&&e.t[g]===1?e.t[p]=2:!e.t[g]&&e.t[p]===1&&(e.t[g]=2)),!e.f[p]&&m===B&&(f.push(p),e.f[p]=c,A++)})}const u=m?"island":b?"ocean":"lake";let C;u==="ocean"?C=i(A):u==="island"&&(C=r(z,A)),t.push({i:c,land:m,border:b,type:u,cells:A,firstCell:z,group:C}),f[0]=e.f.findIndex(g=>!g)}Ya(pack.cells,3,1,0);function i(c){return c>grid.cells.i.length/25?"ocean":c>grid.cells.i.length/100?"sea":"gulf"}function r(c,f){return c&&t[e.f[c-1]].type==="lake"?"lake_island":f>grid.cells.i.length/10?"continent":f>grid.cells.i.length/1e3?"island":"isle"}Q&&console.timeEnd("reMarkFeatures")}function rs(e,t,n){return e>40&&t>-2&&n<25||e>24&&t>-2&&n>24&&n<60}function ss(){Q&&console.time("defineBiomes");const{cells:e}=pack,{temp:t,prec:n}=grid.cells;e.biome=new Uint8Array(e.i.length);for(const r of e.i){const c=t[e.g[r]],f=e.h[r],z=f<20?0:i(r);e.biome[r]=ls(z,c,f)}function i(r){let c=n[e.g[r]];e.r[r]&&(c+=Math.max(e.fl[r]/20,2));const f=e.c[r].filter(Sn).map(z=>n[e.g[z]]).concat([c]);return O(4+Ae.mean(f))}Q&&console.timeEnd("defineBiomes")}function ls(e,t,n){if(n<20)return 0;if(t<-5)return 11;if(rs(e,t,n))return 12;const i=Math.min(e/5|0,4),r=Math.min(Math.max(20-t,0),25);return biomesData.biomesMartix[i][r]}function cs(){Q&&console.time("rankCells");const{cells:e,features:t}=pack;e.s=new Int16Array(e.i.length),e.pop=new Float32Array(e.i.length);const n=Ae.median(e.fl.filter(c=>c))||0,i=Ae.max(e.fl)+Ae.max(e.conf),r=Ae.mean(e.area);for(const c of e.i){if(e.h[c]<20)continue;let f=+biomesData.habitability[e.biome[c]];if(!!f){if(n&&(f+=ga(e.fl[c]+e.conf[c],n,i)*250),f-=(e.h[c]-50)/5,e.t[c]===1){e.r[c]&&(f+=15);const z=t[e.f[e.haven[c]]];z.type==="lake"?z.group==="freshwater"?f+=30:z.group=="salt"?f+=10:z.group=="frozen"?f+=1:z.group=="dry"||z.group=="sinkhole"?f-=5:z.group=="lava"&&(f-=30):(f+=5,e.harbor[c]===1&&(f+=20))}e.s[c]=f/5,e.pop[c]=e.s[c]>0?e.s[c]*e.area[c]/r:0}}Q&&console.timeEnd("rankCells")}function us(e=1){Q&&console.time("addZones");const{cells:t,states:n,burgs:i}=pack,r=new Uint8Array(t.i.length),c=[];for(let s=0;sP.diplomacy&&P.diplomacy.some(T=>T==="Enemy"));if(!s.length)return;const o=ie(s),l=o.diplomacy.findIndex(P=>P==="Enemy"),a=ie(t.i.filter(P=>t.state[P]===l&&t.c[P].some(T=>t.state[T]===o.i)));if(!a)return;const w=[],S=[a],h=be(5,30);for(;S.length;){const P=V(.4)?S.shift():S.pop();if(w.push(P),w.length>h)break;t.c[P].forEach(T=>{r[T]||t.state[T]===l&&(r[T]=1,S.push(T))})}const v=he({Invasion:4,Occupation:3,Raid:2,Conquest:2,Subjugation:1,Foray:1,Skirmishes:1,Incursion:2,Pillaging:1,Intervention:1}),E=We(o.name)+" "+v;c.push({name:E,type:"Invasion",cells:w,fill:"url(#hatch1)"})}function z(){const s=ie(n.filter(E=>E.i&&!E.removed&&E.neighbors.some(P=>P)));if(!s)return;const o=ie(s.neighbors.filter(E=>E&&!n[E].removed));if(!o)return;const l=t.i.find(E=>t.state[E]===s.i&&!s.removed&&t.c[E].some(P=>t.state[P]===o)),a=[],w=[];l&&w.push(l);const S=be(10,30);for(;w.length;){const E=w.shift();if(a.push(E),a.length>S)break;t.c[E].forEach(P=>{r[P]||t.state[P]===s.i&&(r[P]=1,!(P%4!==0&&!t.c[P].some(T=>t.state[T]===o))&&w.push(P))})}const h=he({Rebels:5,Insurgents:2,Mutineers:1,Rioters:1,Separatists:1,Secessionists:1,Insurrection:2,Rebellion:1,Conspiracy:2}),v=We(n[o].name)+" "+h;c.push({name:v,type:"Rebels",cells:a,fill:"url(#hatch3)"})}function m(){const s=ie(pack.religions.filter(v=>v.type==="Organized"));if(!s)return;const o=ie(t.i.filter(v=>t.religion[v]&&t.religion[v]!==s.i&&t.c[v].some(E=>t.religion[E]===s.i)));if(!o)return;const l=t.religion[o],a=[],w=[o],S=be(10,30);for(;w.length;){const v=w.shift();if(a.push(v),a.length>S)break;t.c[v].forEach(E=>{r[E]||t.religion[E]===l&&(t.h[E]<20||(r[E]=1,w.push(E)))})}const h=We(s.name.split(" ")[0])+" Proselytism";c.push({name:h,type:"Proselytism",cells:a,fill:"url(#hatch6)"})}function b(){const s=ie(pack.religions.filter(a=>a.type==="Heresy"));if(!s)return;const o=t.i.filter(a=>!r[a]&&t.religion[a]===s.i);if(!o.length)return;o.forEach(a=>r[a]=1);const l=We(s.name.split(" ")[0])+" Crusade";c.push({name:l,type:"Crusade",cells:o,fill:"url(#hatch6)"})}function A(){const s=ie(i.filter(T=>!r[T.cell]&&T.i&&!T.removed));if(!s)return;const o=[],l=[],a=be(20,37),w=new PriorityQueue({comparator:(T,R)=>T.p-R.p});for(w.queue({e:s.cell,p:0});w.length;){const T=w.dequeue();(t.burg[T.e]||t.pop[T.e])&&o.push(T.e),r[T.e]=1,t.c[T.e].forEach(function(R){const L=t.road[T.e],M=L?Math.max(10-L,1):100,I=T.p+M;I>a||(!l[R]||Iie(["Great","Silent","Severe","Blind","Unknown","Loud","Deadly","Burning","Bloody","Brutal","Fatal"]),h=()=>ie(["Ape","Bear","Boar","Cat","Cow","Dog","Pig","Fox","Bird","Horse","Rat","Raven","Sheep","Spider","Wolf"]),v=()=>ie(["Golden","White","Black","Red","Pink","Purple","Blue","Green","Yellow","Amber","Orange","Brown","Grey"]),E=he({Fever:5,Pestilence:2,Flu:2,Pox:2,Smallpox:2,Plague:4,Cholera:2,Dropsy:1,Leprosy:2}),P=he({[v()]:4,[h()]:2,[S()]:1})+" "+E;c.push({name:P,type:"Disease",cells:o,fill:"url(#hatch12)"})}function u(){const s=ie(i.filter(v=>!r[v.cell]&&v.i&&!v.removed));if(!s)return;const o=[],l=[],a=be(5,25),w=new PriorityQueue({comparator:(v,E)=>v.p-E.p});for(w.queue({e:s.cell,p:0});w.length;){const v=w.dequeue();(t.burg[v.e]||t.pop[v.e])&&o.push(v.e),r[v.e]=1,t.c[v.e].forEach(function(E){const P=be(1,10),T=v.p+P;T>a||(!l[E]||TT.id===w);S[0]&&(S[0].legend=S[0].legend.replace("Active volcano","Erupting volcano"));const h=S[0]?S[0].name.replace(" Volcano","")+" Eruption":"Volcano Eruption",v=[],E=[a],P=be(10,30);for(;E.length;){const T=V(.5)?E.shift():E.pop();if(v.push(T),v.length>P)break;t.c[T].forEach(R=>{r[R]||t.h[R]<20||(r[R]=1,E.push(R))})}c.push({name:h,type:"Disaster",cells:v,fill:"url(#hatch7)"})}function g(){const s=t.i.filter(v=>!r[v]&&t.road[v]&&t.h[v]>=70);if(!s.length)return;const o=+ie(s),l=[],a=[o],w=be(3,15);for(;a.length;){const v=V(.3)?a.shift():a.pop();if(l.push(v),l.length>w)break;t.c[v].forEach(E=>{r[E]||t.h[E]<65||(r[E]=1,a.push(E))})}const h=We(Names.getCultureShort(t.culture[o]))+" Avalanche";c.push({name:h,type:"Disaster",cells:l,fill:"url(#hatch5)"})}function p(){const s=t.i.filter(v=>!r[v]&&t.h[v]>50&&t.h[v]<70);if(!s.length)return;const o=ie(s),l=[],a=[o],w=be(3,15);for(;a.length;){const v=a.pop();if(t.h[v]>=20&&l.push(v),l.length>w)break;t.c[v].forEach(E=>{r[E]||t.r[E]||(r[E]=1,a.push(E))})}const h=We(Names.getCultureShort(t.culture[o]))+" Fault";c.push({name:h,type:"Disaster",cells:l,fill:"url(#hatch2)"})}function B(){const s=t.fl.filter(R=>R),o=Ae.mean(s),l=Ae.max(s),a=(l-o)/2+o,w=t.i.filter(R=>!r[R]&&t.h[R]<50&&t.r[R]&&t.fl[R]>a&&t.burg[R]);if(!w.length)return;const S=+ie(w),h=t.r[S],v=[],E=[S],P=be(5,30);for(;E.length;){const R=E.pop();if(v.push(R),v.length>P)break;t.c[R].forEach(L=>{r[L]||t.h[L]<20||t.r[L]!==h||t.h[L]>50||t.fl[L]!r[v]&&t.t[v]===-1&&pack.features[t.f[v]].type!=="lake");if(!s.length)return;const o=+ie(s),l=[],a=[o],w=be(10,30);for(;a.length;){const v=a.shift();if(t.t[v]===1&&l.push(v),l.length>w)break;t.c[v].forEach(E=>{r[E]||t.t[E]>2||pack.features[t.f[E]].type!=="lake"&&(r[E]=1,a.push(E))})}const h=We(Names.getCultureShort(t.culture[o]))+" Tsunami";c.push({name:h,type:"Disaster",cells:l,fill:"url(#hatch13)"})}function d(){zones.selectAll("g").data(c).enter().append("g").attr("id",(s,o)=>"zone"+o).attr("data-description",s=>s.name).attr("data-type",s=>s.type).attr("data-cells",s=>s.cells.join(",")).attr("fill",s=>s.fill).selectAll("polygon").data(s=>s.cells).enter().append("polygon").attr("points",s=>Zt(s)).attr("id",function(s){return this.parentNode.id+"_"+s})}Q&&console.timeEnd("addZones")}function ds(){const e=ne("templateInput").value,t=e in heightmapTemplates,n=t?"template":"precreated",i=t&&!Ne("template")?"random ":"",r=` Seed: ${seed} + Canvas size: ${graphWidth}x${graphHeight} px + Heightmap: ${e} (${i}${n}) + Points: ${grid.points.length} + Cells: ${pack.cells.i.length} + Map size: ${mapSizeOutput.value}% + States: ${pack.states.length-1} + Provinces: ${pack.provinces.length-1} + Burgs: ${pack.burgs.length-1} + Religions: ${pack.religions.length-1} + Culture set: ${culturesSet.selectedOptions[0].innerText} + Cultures: ${pack.cultures.length-1}`;mapId=Date.now(),mapHistory.push({seed,width:graphWidth,height:graphHeight,template:e,created:mapId}),Ft&&console.log(r)}const hs=vt(async function(e){console.warn("Generate new random map");const n=+ne("pointsInput").dataset.cells>1e4;n&&Wr(),closeDialogs("#worldConfigurator, #options3d"),customization=0,Zoom.reset(1e3),gs(),await Ja(e),restoreLayers(),ThreeD.options.isOn&&ThreeD.redraw(),$("#worldConfigurator").is(":visible")&&editWorld(),n&&Za(),ct()},250);function gs(){viewbox.selectAll("path, circle, polygon, line, text, use, #zones > g, #armies > g, #ruler > g").remove(),document.getElementById("deftemp").querySelectorAll("path, clipPath, svg").forEach(e=>e.remove()),ne("coas").innerHTML="",notes=[],rulers=new Ga,unfog()}window.ReliefIcons=function(){const e=function(){TIME&&console.time("drawRelief"),terrain.selectAll("*").remove();const f=pack.cells,z=terrain.attr("density")||.4,m=2*(terrain.attr("size")||1),b=.2*m,A=[];for(const C of f.i){let l=function(){const S=biomesData.iconsDensity[p]/100,h=2/S/z;if(!(Math.random()>S*10))for(const[v,E]of c(k,s,d,o,h)){if(!d3.polygonContains(B,[v,E]))continue;let P=(4+Math.random())*m;const T=t(C,biomesData.icons[p]);T==="#relief-grass-1"&&(P*=1.2),A.push({i:T,x:O(v-P,2),y:O(E-P,2),s:O(P*2,2)})}},a=function(S){const h=2/z,[v,E]=w(S,g);for(const[P,T]of c(k,s,d,o,h))!d3.polygonContains(B,[P,T])||A.push({i:v,x:O(P-E,2),y:O(T-E,2),s:O(E*2,2)})},w=function(S,h){const v=grid.cells.temp[pack.cells.g[S]],E=h>70&&v<0?"mountSnow":h>70?"mount":"hill",P=h>70?(h-45)*b:Ie((h-40)*b,3,6);return[r(E),P]};const g=f.h[C];if(g<20||f.r[C])continue;const p=f.biome[C];if(g<50&&biomesData.iconsDensity[p]===0)continue;const B=Zt(C),[k,d]=d3.extent(B,S=>S[0]),[s,o]=d3.extent(B,S=>S[1]);g<50?l():a(C)}A.sort((C,g)=>C.y+C.s-(g.y+g.s));let u="";for(const C of A)u+=``;terrain.html(u),TIME&&console.timeEnd("drawRelief")};function t(f,z){let m=z[Math.floor(Math.random()*z.length)];const b=grid.cells.temp[pack.cells.g[f]];return m==="conifer"&&b<0&&(m="coniferSnow"),r(m)}function n(f){switch(f){case"mount":return be(2,7);case"mountSnow":return be(1,6);case"hill":return be(2,5);case"conifer":return 2;case"coniferSnow":return 1;case"swamp":return be(2,3);case"cactus":return be(1,3);case"deadTree":return be(1,2);default:return 2}}function i(f){switch(f){case"mountSnow":return"mount";case"vulcan":return"mount";case"coniferSnow":return"conifer";case"cactus":return"dune";case"deadTree":return"dune";default:return f}}function r(f){const z=terrain.attr("set")||"simple";return z==="simple"?"#relief-"+i(f)+"-1":z==="colored"?"#relief-"+f+"-"+n(f):z==="gray"?"#relief-"+f+"-"+n(f)+"-bw":"#relief-"+i(f)+"-1"}function*c(f,z,m,b,A,u=3){if(!(m>=f)||!(b>=z)||!(A>0))throw new Error;const C=m-f,g=b-z,p=A*A,B=3*p,k=A*Math.SQRT1_2,d=Math.ceil(C/k),s=Math.ceil(g/k),o=new Array(d*s),l=[];function a(S,h){const v=S/k|0,E=h/k|0,P=Math.max(v-2,0),T=Math.max(E-2,0),R=Math.min(v+3,d),L=Math.min(E+3,s);for(let M=T;MNone',n=e.map(r=>{const c=r.getAttribute("id"),f=r.getAttribute("name");return``}),i=t+n.join("");document.getElementById("styleFilterInput").innerHTML=i,document.getElementById("styleStatesBodyFilter").innerHTML=i}styleElements.addEventListener("change",function(e){e.target.dataset.stored&&lock(e.target.dataset.stored)});styleElementSelect.addEventListener("change",Xa);function Xa(){var r,c,f;const e=styleElementSelect.value;let t=d3.select("#"+e);styleElements.querySelectorAll("tbody").forEach(z=>z.style.display="none");const n=e!=="ocean"&&(t.style("display")==="none"||!t.selectAll("*").size());styleIsOff.style.display=n?"block":"none";const i=styleGroupSelect.value;if(["routes","labels","coastline","lakes","anchors","burgIcons","borders"].includes(e)){const z=i&&t.select("#"+i);t=i&&z.size()?z:t.select("g")}if(["landmass","ocean","regions","legend"].includes(e)||(styleOpacity.style.display="block",styleOpacityInput.value=styleOpacityOutput.value=t.attr("opacity")||1),["landmass","legend","regions"].includes(e)||(styleFilter.style.display="block",styleFilterInput.value=t.attr("filter")||""),["rivers","lakes","landmass","prec","ice","fogging"].includes(e)&&(styleFill.style.display="block",styleFillInput.value=styleFillOutput.value=t.attr("fill")),["armies","routes","lakes","borders","cults","relig","cells","coastline","prec","ice","icons","coordinates","zones","gridOverlay"].includes(e)&&(styleStroke.style.display="block",styleStrokeInput.value=styleStrokeOutput.value=t.attr("stroke"),styleStrokeWidth.style.display="block",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||""),["routes","borders","temperature","legend","population","coordinates","zones","gridOverlay"].includes(e)&&(styleStrokeDash.style.display="block",styleStrokeDasharrayInput.value=t.attr("stroke-dasharray")||"",styleStrokeLinecapInput.value=t.attr("stroke-linecap")||"inherit"),["cells","gridOverlay","coordinates","compass","terrain","temperature","routes","texture","biomes","zones"].includes(e)&&(styleClipping.style.display="block",styleClippingInput.value=t.attr("mask")||""),e==="texture"&&(styleTexture.style.display="block"),e==="terrs"&&(styleHeightmap.style.display="block",styleHeightmapScheme.value=terrs.attr("scheme"),styleHeightmapTerracingInput.value=styleHeightmapTerracingOutput.value=terrs.attr("terracing"),styleHeightmapSkipInput.value=styleHeightmapSkipOutput.value=terrs.attr("skip"),styleHeightmapSimplificationInput.value=styleHeightmapSimplificationOutput.value=terrs.attr("relax"),styleHeightmapCurve.value=terrs.attr("curve")),e==="markers"&&(styleMarkers.style.display="block",styleRescaleMarkers.checked=+markers.attr("rescale")),e==="gridOverlay"&&(styleGrid.style.display="block",styleGridType.value=t.attr("type"),styleGridScale.value=t.attr("scale")||1,styleGridShiftX.value=t.attr("dx")||0,styleGridShiftY.value=t.attr("dy")||0,ea()),e==="compass"){styleCompass.style.display="block";const z=Yt(compass.select("use").attr("transform"));styleCompassShiftX.value=z[0],styleCompassShiftY.value=z[1],styleCompassSizeInput.value=styleCompassSizeOutput.value=z[2]}if(e==="terrain"&&(styleRelief.style.display="block",styleReliefSizeOutput.innerHTML=styleReliefSizeInput.value=terrain.attr("size"),styleReliefDensityOutput.innerHTML=styleReliefDensityInput.value=terrain.attr("density"),styleReliefSet.value=terrain.attr("set")),e==="population"&&(stylePopulation.style.display="block",stylePopulationRuralStrokeInput.value=stylePopulationRuralStrokeOutput.value=population.select("#rural").attr("stroke"),stylePopulationUrbanStrokeInput.value=stylePopulationUrbanStrokeOutput.value=population.select("#urban").attr("stroke"),styleStrokeWidth.style.display="block",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||""),e==="regions"){styleStates.style.display="block",styleStatesBodyOpacity.value=styleStatesBodyOpacityOutput.value=statesBody.attr("opacity")||1,styleStatesBodyFilter.value=statesBody.attr("filter")||"",styleStatesHaloWidth.value=styleStatesHaloWidthOutput.value=statesHalo.attr("data-width")||10,styleStatesHaloOpacity.value=styleStatesHaloOpacityOutput.value=statesHalo.attr("opacity")||1;const z=parseFloat((c=(r=statesHalo.attr("filter"))==null?void 0:r.match(/blur\(([^)]+)\)/))==null?void 0:c[1])||0;styleStatesHaloBlur.value=styleStatesHaloBlurOutput.value=z}e==="labels"&&(styleFill.style.display="block",styleStroke.style.display="block",styleStrokeWidth.style.display="block",styleShadow.style.display="block",styleSize.style.display="block",styleVisibility.style.display="block",styleFillInput.value=styleFillOutput.value=t.attr("fill")||"#3e3e4b",styleStrokeInput.value=styleStrokeOutput.value=t.attr("stroke")||"#3a3a3a",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||0,styleShadowInput.value=t.style("text-shadow")||"white 0 0 4px",styleFont.style.display="block",styleSelectFont.value=t.attr("font-family"),styleFontSize.value=t.attr("data-size")),e==="provs"&&(styleFill.style.display="block",styleSize.style.display="block",styleFillInput.value=styleFillOutput.value=t.attr("fill")||"#111111",styleFont.style.display="block",styleSelectFont.value=t.attr("font-family"),styleFontSize.value=t.attr("data-size")),e=="burgIcons"&&(styleFill.style.display="block",styleStroke.style.display="block",styleStrokeWidth.style.display="block",styleStrokeDash.style.display="block",styleRadius.style.display="block",styleFillInput.value=styleFillOutput.value=t.attr("fill")||"#ffffff",styleStrokeInput.value=styleStrokeOutput.value=t.attr("stroke")||"#3e3e4b",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||.24,styleStrokeDasharrayInput.value=t.attr("stroke-dasharray")||"",styleStrokeLinecapInput.value=t.attr("stroke-linecap")||"inherit",styleRadiusInput.value=t.attr("size")||1),e=="anchors"&&(styleFill.style.display="block",styleStroke.style.display="block",styleStrokeWidth.style.display="block",styleIconSize.style.display="block",styleFillInput.value=styleFillOutput.value=t.attr("fill")||"#ffffff",styleStrokeInput.value=styleStrokeOutput.value=t.attr("stroke")||"#3e3e4b",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||.24,styleIconSizeInput.value=t.attr("size")||2),e==="legend"&&(styleStroke.style.display="block",styleStrokeWidth.style.display="block",styleSize.style.display="block",styleLegend.style.display="block",styleLegendColItemsOutput.value=styleLegendColItems.value=t.attr("data-columns"),styleLegendBackOutput.value=styleLegendBack.value=t.select("#legendBox").attr("fill"),styleLegendOpacityOutput.value=styleLegendOpacity.value=t.select("#legendBox").attr("fill-opacity"),styleStrokeInput.value=styleStrokeOutput.value=t.attr("stroke")||"#111111",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||.5,styleFont.style.display="block",styleSelectFont.value=t.attr("font-family"),styleFontSize.value=t.attr("data-size")),e==="ocean"&&(styleOcean.style.display="block",styleOceanFill.value=styleOceanFillOutput.value=oceanLayers.select("#oceanBase").attr("fill"),styleOceanPattern.value=(f=document.getElementById("oceanicPattern"))==null?void 0:f.getAttribute("href"),styleOceanPatternOpacity.value=styleOceanPatternOpacityOutput.value=document.getElementById("oceanicPattern").getAttribute("opacity")||1,outlineLayers.value=oceanLayers.attr("layers")),e==="temperature"&&(styleStrokeWidth.style.display="block",styleTemperature.style.display="block",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||"",styleTemperatureFillOpacityInput.value=styleTemperatureFillOpacityOutput.value=t.attr("fill-opacity")||.1,styleTemperatureFillInput.value=styleTemperatureFillOutput.value=t.attr("fill")||"#000",styleTemperatureFontSizeInput.value=styleTemperatureFontSizeOutput.value=t.attr("font-size")||"8px"),e==="coordinates"&&(styleSize.style.display="block",styleFontSize.value=t.attr("data-size")),e==="armies"&&(styleArmies.style.display="block",styleArmiesFillOpacity.value=styleArmiesFillOpacityOutput.value=t.attr("fill-opacity"),styleArmiesSize.value=styleArmiesSizeOutput.value=t.attr("box-size")),e==="emblems"&&(styleEmblems.style.display="block",styleStrokeWidth.style.display="block",styleStrokeWidthInput.value=styleStrokeWidthOutput.value=t.attr("stroke-width")||1),styleGroupSelect.options.length=0,["routes","labels","coastline","lakes","anchors","burgIcons","borders"].includes(e)?(document.getElementById(e).querySelectorAll("g").forEach(m=>{if(m.id==="burgLabels")return;const b=new Option(`${m.id} (${m.childElementCount})`,m.id,!1,!1);styleGroupSelect.options.add(b)}),styleGroupSelect.value=t.attr("id"),styleGroup.style.display="block"):(styleGroupSelect.options.add(new Option(e,e,!1,!0)),styleGroup.style.display="none"),e==="coastline"&&styleGroupSelect.value==="sea_island"&&(styleCoastline.style.display="block",(styleCoastlineAuto.checked=coastline.select("#sea_island").attr("auto-filter"))&&(styleFilter.style.display="none"))}styleGroupSelect.addEventListener("change",Xa);function Re(){const e=styleElementSelect.value,t=styleGroupSelect.value;return t===e?svg.select("#"+e):svg.select("#"+e).select("#"+t)}styleFillInput.addEventListener("input",function(){styleFillOutput.value=this.value,Re().attr("fill",this.value)});styleStrokeInput.addEventListener("input",function(){styleStrokeOutput.value=this.value,Re().attr("stroke",this.value),styleElementSelect.value==="gridOverlay"&&layerIsOn("toggleGrid")&&drawGrid()});styleStrokeWidthInput.addEventListener("input",function(){styleStrokeWidthOutput.value=this.value,Re().attr("stroke-width",+this.value),styleElementSelect.value==="gridOverlay"&&layerIsOn("toggleGrid")&&drawGrid()});styleStrokeDasharrayInput.addEventListener("input",function(){Re().attr("stroke-dasharray",this.value),styleElementSelect.value==="gridOverlay"&&layerIsOn("toggleGrid")&&drawGrid()});styleStrokeLinecapInput.addEventListener("change",function(){Re().attr("stroke-linecap",this.value),styleElementSelect.value==="gridOverlay"&&layerIsOn("toggleGrid")&&drawGrid()});styleOpacityInput.addEventListener("input",function(){styleOpacityOutput.value=this.value,Re().attr("opacity",this.value)});styleFilterInput.addEventListener("change",function(){if(styleGroupSelect.value==="ocean")return oceanLayers.attr("filter",this.value);Re().attr("filter",this.value)});styleTextureInput.addEventListener("change",function(){this.value==="none"?texture.select("image").attr("xlink:href",""):ka(this.value,e=>texture.select("image").attr("xlink:href",e))});styleTextureShiftX.addEventListener("input",function(){texture.select("image").attr("x",this.value).attr("width",graphWidth-this.valueAsNumber)});styleTextureShiftY.addEventListener("input",function(){texture.select("image").attr("y",this.value).attr("height",graphHeight-this.valueAsNumber)});styleClippingInput.addEventListener("change",function(){Re().attr("mask",this.value)});styleGridType.addEventListener("change",function(){Re().attr("type",this.value),layerIsOn("toggleGrid")&&drawGrid(),ea()});styleGridScale.addEventListener("input",function(){Re().attr("scale",this.value),layerIsOn("toggleGrid")&&drawGrid(),ea()});function ea(){const e=styleGridScale.value*25,t=`${O(e*distanceScaleInput.value,2)} ${distanceUnitInput.value}`;styleGridSizeFriendly.value=t}styleGridShiftX.addEventListener("input",function(){Re().attr("dx",this.value),layerIsOn("toggleGrid")&&drawGrid()});styleGridShiftY.addEventListener("input",function(){Re().attr("dy",this.value),layerIsOn("toggleGrid")&&drawGrid()});styleShiftX.addEventListener("input",Qa);styleShiftY.addEventListener("input",Qa);function Qa(){const e=styleShiftX.value||0,t=styleShiftY.value||0;Re().attr("transform",`translate(${e},${t})`)}styleRescaleMarkers.addEventListener("change",function(){markers.attr("rescale",+this.checked),invokeActiveZooming()});styleCoastlineAuto.addEventListener("change",function(){coastline.select("#sea_island").attr("auto-filter",+this.checked),styleFilter.style.display=this.checked?"none":"block",invokeActiveZooming()});styleOceanFill.addEventListener("input",function(){oceanLayers.select("rect").attr("fill",this.value),styleOceanFillOutput.value=this.value});styleOceanPattern.addEventListener("change",function(){var e;(e=document.getElementById("oceanicPattern"))==null||e.setAttribute("href",this.value)});styleOceanPatternOpacity.addEventListener("input",function(){document.getElementById("oceanicPattern").setAttribute("opacity",this.value),styleOceanPatternOpacityOutput.value=this.value});outlineLayers.addEventListener("change",function(){oceanLayers.selectAll("path").remove(),oceanLayers.attr("layers",this.value),OceanLayers()});styleHeightmapScheme.addEventListener("change",function(){terrs.attr("scheme",this.value),drawHeightmap()});styleHeightmapTerracingInput.addEventListener("input",function(){terrs.attr("terracing",this.value),drawHeightmap()});styleHeightmapSkipInput.addEventListener("input",function(){terrs.attr("skip",this.value),drawHeightmap()});styleHeightmapSimplificationInput.addEventListener("input",function(){terrs.attr("relax",this.value),drawHeightmap()});styleHeightmapCurve.addEventListener("change",function(){terrs.attr("curve",this.value),drawHeightmap()});styleReliefSet.addEventListener("change",function(){terrain.attr("set",this.value),ReliefIcons(),layerIsOn("toggleRelief")||toggleRelief()});styleReliefSizeInput.addEventListener("change",function(){terrain.attr("size",this.value),styleReliefSizeOutput.value=this.value,ReliefIcons(),layerIsOn("toggleRelief")||toggleRelief()});styleReliefDensityInput.addEventListener("change",function(){terrain.attr("density",this.value),styleReliefDensityOutput.value=this.value,ReliefIcons(),layerIsOn("toggleRelief")||toggleRelief()});styleTemperatureFillOpacityInput.addEventListener("input",function(){temperature.attr("fill-opacity",this.value),styleTemperatureFillOpacityOutput.value=this.value});styleTemperatureFontSizeInput.addEventListener("input",function(){temperature.attr("font-size",this.value+"px"),styleTemperatureFontSizeOutput.value=this.value+"px"});styleTemperatureFillInput.addEventListener("input",function(){temperature.attr("fill",this.value),styleTemperatureFillOutput.value=this.value});stylePopulationRuralStrokeInput.addEventListener("input",function(){population.select("#rural").attr("stroke",this.value),stylePopulationRuralStrokeOutput.value=this.value});stylePopulationUrbanStrokeInput.addEventListener("input",function(){population.select("#urban").attr("stroke",this.value),stylePopulationUrbanStrokeOutput.value=this.value});styleCompassSizeInput.addEventListener("input",function(){styleCompassSizeOutput.value=this.value,ta()});styleCompassShiftX.addEventListener("input",ta);styleCompassShiftY.addEventListener("input",ta);function ta(){const e=`translate(${styleCompassShiftX.value} ${styleCompassShiftY.value}) scale(${styleCompassSizeInput.value})`;compass.select("use").attr("transform",e)}styleLegendColItems.addEventListener("input",function(){styleLegendColItemsOutput.value=this.value,legend.select("#legendBox").attr("data-columns",this.value),redrawLegend()});styleLegendBack.addEventListener("input",function(){styleLegendBackOutput.value=this.value,legend.select("#legendBox").attr("fill",this.value)});styleLegendOpacity.addEventListener("input",function(){styleLegendOpacityOutput.value=this.value,legend.select("#legendBox").attr("fill-opacity",this.value)});styleSelectFont.addEventListener("change",ps);function ps(){const e=styleSelectFont.value;Re().attr("font-family",e),styleElementSelect.value==="legend"&&redrawLegend()}styleShadowInput.addEventListener("input",function(){Re().style("text-shadow",this.value)});styleFontAdd.addEventListener("click",function(){addFontNameInput.value="",addFontURLInput.value="",$("#addFontDialog").dialog({title:"Add custom font",width:"26em",position:{my:"center",at:"center",of:"svg"},buttons:{Add:function(){const e=addFontNameInput.value,t=addFontURLInput.value,n=addFontMethod.value;if(!e)return se("Please provide a font name",!1,"error");if(n==="fontURL"?fonts.find(r=>r.family===e&&r.src===t):fonts.find(r=>r.family===e))return se("The font is already added",!1,"error");n==="fontURL"?addWebFont(e,t):n==="googleFont"?addGoogleFont(e):n==="localFont"&&addLocalFont(e),addFontNameInput.value="",addFontURLInput.value="",$(this).dialog("close")},Cancel:function(){$(this).dialog("close")}}})});addFontMethod.addEventListener("change",function(){addFontURLInput.style.display=this.value==="fontURL"?"inline":"none"});styleFontSize.addEventListener("change",function(){aa(Re(),+this.value)});styleFontPlus.addEventListener("click",function(){const e=+Re().attr("data-size")+1;aa(Re(),Math.min(e,999))});styleFontMinus.addEventListener("click",function(){const e=+Re().attr("data-size")-1;aa(Re(),Math.max(e,1))});function aa(e,t){styleFontSize.value=t;const i=(r=>r==="labels"?Math.max(O((t+t/scale)/2,2),1):r==="coordinates"?O(t/scale**.8,2):t)(styleElementSelect.value);e.attr("data-size",t).attr("font-size",i),styleElementSelect.value==="legend"&&redrawLegend()}styleRadiusInput.addEventListener("change",function(){na(+this.value)});styleRadiusPlus.addEventListener("click",function(){const e=Math.max(O(Re().attr("size")*1.1,2),.2);na(e)});styleRadiusMinus.addEventListener("click",function(){const e=Math.max(O(Re().attr("size")*.9,2),.2);na(e)});function na(e,t){const n=t?burgIcons.select("#"+t):Re(),i=n.attr("id");n.attr("size",e),n.selectAll("circle").each(function(){this.setAttribute("r",e)}),styleRadiusInput.value=e,burgLabels.select("g#"+i).selectAll("text").each(function(){this.setAttribute("dy",`${e*-1.5}px`)}),Tt(e*2,i)}styleIconSizeInput.addEventListener("change",function(){Tt(+this.value)});styleIconSizePlus.addEventListener("click",function(){const e=Math.max(O(Re().attr("size")*1.1,2),.2);Tt(e)});styleIconSizeMinus.addEventListener("click",function(){const e=Math.max(O(Re().attr("size")*.9,2),.2);Tt(e)});function Tt(e,t){const n=t?anchors.select("#"+t):Re();if(!n.size()){console.warn(`Group ${t} not found. Can not set icon size!`);return}const i=+n.attr("size"),r=(e-i)/2;n.attr("size",e),n.selectAll("use").each(function(){const c=+this.getAttribute("x"),f=+this.getAttribute("y");this.setAttribute("x",c-r),this.setAttribute("y",f-r),this.setAttribute("width",e),this.setAttribute("height",e)}),styleIconSizeInput.value=e}styleStatesBodyOpacity.addEventListener("input",function(){styleStatesBodyOpacityOutput.value=this.value,statesBody.attr("opacity",this.value)});styleStatesBodyFilter.addEventListener("change",function(){statesBody.attr("filter",this.value)});styleStatesHaloWidth.addEventListener("input",function(){styleStatesHaloWidthOutput.value=this.value,statesHalo.attr("data-width",this.value).attr("stroke-width",this.value)});styleStatesHaloOpacity.addEventListener("input",function(){styleStatesHaloOpacityOutput.value=this.value,statesHalo.attr("opacity",this.value)});styleStatesHaloBlur.addEventListener("input",function(){styleStatesHaloBlurOutput.value=this.value;const e=+this.value>0?`blur(${this.value}px)`:null;statesHalo.attr("filter",e)});styleArmiesFillOpacity.addEventListener("input",function(){armies.attr("fill-opacity",this.value),styleArmiesFillOpacityOutput.value=this.value});styleArmiesSize.addEventListener("input",function(){armies.attr("box-size",this.value).attr("font-size",this.value*2),styleArmiesSizeOutput.value=this.value,armies.selectAll("g").remove(),pack.states.forEach(e=>{!e.i||e.removed||!e.military.length||Military.drawRegiments(e.military,e.i)})});emblemsStateSizeInput.addEventListener("change",()=>drawEmblems());emblemsProvinceSizeInput.addEventListener("change",()=>drawEmblems());emblemsBurgSizeInput.addEventListener("change",()=>drawEmblems());mapFilters.addEventListener("click",ms);function ms(e){if(e.target.tagName!=="BUTTON")return;const t=e.target;if(svg.attr("data-filter",null).attr("filter",null),t.classList.contains("pressed"))return t.classList.remove("pressed");mapFilters.querySelectorAll(".pressed").forEach(n=>n.classList.remove("pressed")),t.classList.add("pressed"),svg.attr("data-filter",t.id).attr("filter","url(#filter-"+t.id+")")}document.querySelectorAll(".sortable").forEach(function(e){e.on("click",function(){fs(this)})});function fs(e){const t=e.classList.contains("alphabetically")?"name":"number";let n=e.className.includes("-down")?"-up":"-down";!e.className.includes("icon-sort")&&t==="name"&&(n="-up");const i=e.parentNode;i.querySelectorAll("div.sortable").forEach(r=>{r.classList.forEach(c=>{c.includes("icon-sort")&&r.classList.remove(c)})}),e.classList.add("icon-sort-"+t+n),ys(i)}function ys(e){const t=e.querySelector("div[class*='icon-sort']");if(!t)return;const n=t.dataset.sortby,i=t.classList.contains("alphabetically"),r=t.className.includes("-down")?-1:1,c=e.nextElementSibling;Array.from(c.children).sort((z,m)=>{const b=i?z.dataset[n]:+z.dataset[n],A=i?m.dataset[n]:+m.dataset[n];return(b>A?1:bc.appendChild(z))}function $a(e,t=1){for(;ne(e+t);)t++;return e+t}toolsContent.addEventListener("click",function(e){if(customization)return se("Please exit the customization mode first",!1,"warning");if(!["BUTTON","I"].includes(e.target.tagName))return;const t=e.target.id;if(t==="editHeightmapButton"?editHeightmap():t==="editBiomesButton"?editBiomes():t==="editStatesButton"?editStates():t==="editProvincesButton"?editProvinces():t==="editDiplomacyButton"?editDiplomacy():t==="editCulturesButton"?editCultures():t==="editReligions"?editReligions():t==="editEmblemButton"?bs():t==="editNamesBaseButton"?editNamesbase():t==="editUnitsButton"?editUnits():t==="editNotesButton"?editNotes():t==="editZonesButton"?editZones():t==="overviewChartsButton"?Os():t==="overviewBurgsButton"?overviewBurgs():t==="overviewRiversButton"?overviewRivers():t==="overviewMilitaryButton"?overviewMilitary():t==="overviewMarkersButton"?overviewMarkers():t==="overviewCellsButton"&&Fs(),e.target.parentNode.id==="regenerateFeature"){if(sessionStorage.getItem("regenerateFeatureDontAsk"))return ua(e,t);alertMessage.innerHTML="Regeneration will remove all the custom changes for the element.

    Are you sure you want to proceed?",$("#alert").dialog({resizable:!1,title:"Regenerate element",buttons:{Proceed:function(){ua(e,t),$(this).dialog("close")},Cancel:function(){$(this).dialog("close")}},open:function(){const i='';this.parentElement.querySelector(".ui-dialog-buttonpane").insertAdjacentHTML("afterbegin",i)},close:function(){const i=this.parentElement.querySelector(".checkbox");i!=null&&i.checked&&sessionStorage.setItem("regenerateFeatureDontAsk",!0),$(this).dialog("destroy")}})}t==="configRegenerateMarkers"&&Ds(),t==="addLabel"?Ls():t==="addBurgTool"?Rs():t==="addRiver"?Ts():t==="addRoute"?Hs():t==="addMarker"?Ns():t==="openSubmapMenu"?UISubmap.openSubmapMenu():t==="openResampleMenu"&&UISubmap.openResampleMenu()});function ua(e,t){t==="regenerateStateLabels"?(BurgsAndStates.drawStateLabels(),layerIsOn("toggleLabels")||toggleLabels()):t==="regenerateReliefIcons"?(ReliefIcons(),layerIsOn("toggleRelief")||toggleRelief()):t==="regenerateRoutes"?(Routes.regenerate(),layerIsOn("toggleRoutes")||toggleRoutes()):t==="regenerateRivers"?vs():t==="regeneratePopulation"?ks():t==="regenerateStates"?ws():t==="regenerateProvinces"?Ss():t==="regenerateBurgs"?As():t==="regenerateEmblems"?zs():t==="regenerateReligions"?xs():t==="regenerateCultures"?Cs():t==="regenerateMilitary"?Bs():t==="regenerateIce"?Ms():t==="regenerateMarkers"?_a():t==="regenerateZones"&&Es(e)}async function bs(){var i,r;let e,t,n;if((i=pack.states[1])!=null&&i.coa)e="state",t="stateCOA1",n=pack.states[1];else if((r=pack.burgs[1])!=null&&r.coa)e="burg",t="burgCOA1",n=pack.burgs[1];else{se("No emblems to edit, please generate states and burgs first",!1,"error");return}await COArenderer.trigger(t,n.coa),editEmblem(e,t,n)}function vs(){Rivers.generate(),Lakes.defineGroup(),Rivers.specify(),layerIsOn("toggleRivers")?drawRivers():toggleRivers()}function ks(){rankCells(),pack.burgs.forEach(e=>{if(!e.i||e.removed||e.lock)return;const t=e.cell;e.population=O(Math.max((pack.cells.s[t]+pack.cells.road[t]/2)/8+e.i/1e3+t%100/1e3,.1),3),e.capital&&(e.population=e.population*1.3),e.port&&(e.population=e.population*1.3),e.population=O(e.population*gauss(2,3,.6,20,3),3)})}function ws(){var m,b,A;const e=Jt();Math.random=aleaPRNG(e);const t=+regionsOutput.value,n=pack.burgs.filter(u=>u.i&&!u.removed);if(!n.length)return se("There are no any burgs to generate states. Please create burgs first",!1,"error");if(n.lengthu.capital).forEach(u=>{moveBurgToGroup(u.i,"towns"),u.capital=0}),document.querySelectorAll("[id^=stateCOA]").forEach(u=>u.remove()),document.querySelectorAll("[id^=provinceCOA]").forEach(u=>u.remove()),emblems.selectAll("use").remove(),unfog(),!t){se("Cannot generate zero states. Please check the States Number option",!1,"warn"),pack.states=pack.states.slice(0,1),pack.states[0].diplomacy=[],pack.provinces=[0],pack.cells.state=new Uint16Array(pack.cells.i.length),borders.selectAll("path").remove(),regions.selectAll("path").remove(),labels.select("#states").selectAll("text"),defs.select("#textPaths").selectAll("path[id*='stateLabel']").remove(),document.getElementById("burgsOverviewRefresh").offsetParent&&burgsOverviewRefresh.click(),document.getElementById("statesEditorRefresh").offsetParent&&statesEditorRefresh.click();return}const i=n.map((u,C)=>[u,u.population*Math.random()]).sort((u,C)=>C[1]-u[1]).map(u=>u[0]),r=d3.quadtree(),c=pack.states[0].name,f=Math.min(t,n.length)+1;let z=(graphWidth+graphHeight)/2/f;pack.states=d3.range(f).map(u=>{if(!u)return{i:u,name:c};let C=null;for(const a of i){const{x:w,y:S}=a;if(r.find(w,S,z)===void 0){a.capital=1,C=a,r.add([w,S]),moveBurgToGroup(a.i,"cities");break}z=Math.max(z-1,1)}const g=C.culture,p=C.name.length<9&&C.cell%5===0?C.name:Names.getCulture(g,3,6,"",0),B=Names.getState(p,g),d=[1,2,3,4].includes(pack.cells.biome[C.cell])?"Nomadic":pack.cultures[g].type==="Nomadic"?"Generic":pack.cultures[g].type,s=O(Math.random()*powerInput.value+1,1),o=pack.cultures[g].type,l=COA.generate(C.coa,.3,null,o);return l.shield=C.coa.shield,{i:u,name:B,type:d,capital:C.i,center:C.cell,culture:g,expansionism:s,coa:l}}),BurgsAndStates.expandStates(),BurgsAndStates.normalizeStates(),BurgsAndStates.collectStatistics(),BurgsAndStates.assignColors(),BurgsAndStates.generateCampaigns(),BurgsAndStates.generateDiplomacy(),BurgsAndStates.defineStateForms(),BurgsAndStates.generateProvinces(!0),layerIsOn("toggleStates")?drawStates():toggleStates(),layerIsOn("toggleBorders")?drawBorders():toggleBorders(),BurgsAndStates.drawStateLabels(),Military.generate(),layerIsOn("toggleEmblems")&&drawEmblems(),(m=document.getElementById("burgsOverviewRefresh"))!=null&&m.offsetParent&&burgsOverviewRefresh.click(),(b=document.getElementById("statesEditorRefresh"))!=null&&b.offsetParent&&statesEditorRefresh.click(),(A=document.getElementById("militaryOverviewRefresh"))!=null&&A.offsetParent&&militaryOverviewRefresh.click()}function Ss(){unfog(),BurgsAndStates.generateProvinces(!0),drawBorders(),layerIsOn("toggleProvinces")&&drawProvinces(),document.querySelectorAll("[id^=provinceCOA]").forEach(e=>e.remove()),emblems.selectAll("use").remove(),layerIsOn("toggleEmblems")&&drawEmblems()}function As(){var b,A;const{cells:e,states:t}=pack,n=pack.burgs.filter(u=>u.lock);rankCells(),e.burg=new Uint16Array(e.i.length);const i=pack.burgs=[0];t.filter(u=>u.i).forEach(u=>u.capital=0),pack.provinces.filter(u=>u.i).forEach(u=>u.burg=0);const r=d3.quadtree();for(let u=0;uu*Math.random())),f=e.i.filter(u=>c[u]>0&&e.culture[u]).sort((u,C)=>c[C]-c[u]),z=manorsInput.value==="1000"?O(f.length/5/(grid.points.length/1e4)**.8)+t.length:+manorsInput.value+t.length,m=(graphWidth+graphHeight)/150/(z**.7/66);for(let u=0;uu.i&&!u.removed&&!u.capital).forEach(u=>{const C=addBurg([e.p[u.center][0],e.p[u.center][1]]);u.capital=C,u.center=pack.burgs[C].cell,pack.burgs[C].capital=1,pack.burgs[C].state=u.i,moveBurgToGroup(C,"cities")}),pack.features.forEach(u=>{u.port&&(u.port=0)}),BurgsAndStates.specifyBurgs(),BurgsAndStates.defineBurgFeatures(),BurgsAndStates.drawBurgs(),Routes.regenerate(),document.querySelectorAll("[id^=burgCOA]").forEach(u=>u.remove()),emblems.selectAll("use").remove(),layerIsOn("toggleEmblems")&&drawEmblems(),(b=document.getElementById("burgsOverviewRefresh"))!=null&&b.offsetParent&&burgsOverviewRefresh.click(),(A=document.getElementById("statesEditorRefresh"))!=null&&A.offsetParent&&statesEditorRefresh.click()}function zs(){document.querySelectorAll("[id^=stateCOA]").forEach(e=>e.remove()),document.querySelectorAll("[id^=provinceCOA]").forEach(e=>e.remove()),document.querySelectorAll("[id^=burgCOA]").forEach(e=>e.remove()),emblems.selectAll("use").remove(),pack.states.forEach(e=>{if(!e.i||e.removed)return;const t=pack.cultures[e.culture].type;e.coa=COA.generate(null,null,null,t),e.coa.shield=COA.getShield(e.culture,null)}),pack.burgs.forEach(e=>{if(!e.i||e.removed)return;const t=pack.states[e.state];let n=t?.25:0;e.capital?n+=.1:e.port&&(n-=.1),t&&e.culture!==t.culture&&(n-=.25),e.coa=COA.generate(t?t.coa:null,n,null,e.type),e.coa.shield=COA.getShield(e.culture,t?e.state:0)}),pack.provinces.forEach(e=>{if(!e.i||e.removed)return;const t=e.burg?pack.burgs[e.burg]:pack.states[e.state];let n=!1;e.burg||(n=V(.2),e.formName==="Colony"?n=V(.95):e.formName==="Island"?n=V(.6):e.formName==="Islands"?n=V(.5):e.formName==="Territory"?n=V(.4):e.formName==="Land"&&(n=V(.3)));const i=e.burg&&e.name.slice(0,3)===t.name.slice(0,3),r=n?0:i?.8:.4,c=pack.cells.culture[e.center],f=BurgsAndStates.getType(e.center,t.port);e.coa=COA.generate(t.coa,r,n,f),e.coa.shield=COA.getShield(c,e.state)}),layerIsOn("toggleEmblems")&&drawEmblems()}function xs(){Religions.generate(),layerIsOn("toggleReligions")?drawReligions():toggleReligions()}function Cs(){Cultures.generate(),Cultures.expand(),BurgsAndStates.updateCultures(),Religions.updateCultures(),layerIsOn("toggleCultures")?drawCultures():toggleCultures(),refreshAllEditors()}function Bs(){Military.generate(),layerIsOn("toggleMilitary")||toggleMilitary(),document.getElementById("militaryOverviewRefresh").offsetParent&&militaryOverviewRefresh.click()}function Ms(){layerIsOn("toggleIce")||toggleIce(),ice.selectAll("*").remove(),drawIce()}function _a(){Markers.regenerate(),turnButtonOn("toggleMarkers"),drawMarkers(),document.getElementById("markersOverviewRefresh").offsetParent&&markersOverviewRefresh.click()}function Es(e){ge(e)?Qn("Please provide zones number multiplier",{default:1,step:.01,min:0,max:100},n=>t(n)):t(gauss(1,.5,.6,5,2));function t(n){zones.selectAll("g").remove(),addZones(n),document.getElementById("zonesEditorRefresh").offsetParent&&zonesEditorRefresh.click(),layerIsOn("toggleZones")||toggleZones()}}function at(){addFeature.querySelectorAll("button.pressed").forEach(e=>e.classList.remove("pressed")),Wa(),ct()}function Ls(){if(document.getElementById("addLabel").classList.contains("pressed")){at();return}addFeature.querySelectorAll("button.pressed").forEach(t=>t.classList.remove("pressed")),addLabel.classList.add("pressed"),closeDialogs(".stable"),viewbox.style("cursor","crosshair").on("click",Is),se("Click on map to place label. Hold Shift to add multiple",!0),layerIsOn("toggleLabels")||toggleLabels()}function Is(){const e=d3.mouse(this),t=Te(e[0],e[1]),n=pack.cells.culture[t],i=Names.getCulture(n),r=$a("label"),c=labelGroupSelect.value,f=["","states","burgLabels"].includes(c)?"#addedLabels":"#"+c;let z=labels.select(f);z.size()||(z=labels.append("g").attr("id","addedLabels").attr("fill","#3e3e4b").attr("opacity",1).attr("stroke","#3a3a3a").attr("stroke-width",0).attr("font-family","Almendra SC").attr("font-size",18).attr("data-size",18).attr("filter",null));const m=z.append("text").attr("x",0).attr("x",0).text(i),b=m.node().getBBox().width,A=b/-2;m.remove(),z.classed("hidden",!1),z.append("text").attr("id",r).append("textPath").attr("xlink:href","#textPath_"+r).attr("startOffset","50%").attr("font-size","100%").append("tspan").attr("x",A).text(i),defs.select("#textPaths").append("path").attr("id","textPath_"+r).attr("d",`M${e[0]-b},${e[1]} h${b*2}`),d3.event.shiftKey===!1&&at()}function Rs(){at(),document.getElementById("addBurgTool").classList.add("pressed"),overviewBurgs(),document.getElementById("addNewBurg").click()}function Ts(){if(document.getElementById("addRiver").classList.contains("pressed")){at(),document.getElementById("addNewRiver").classList.remove("pressed");return}addFeature.querySelectorAll("button.pressed").forEach(t=>t.classList.remove("pressed")),addRiver.classList.add("pressed"),document.getElementById("addNewRiver").classList.add("pressed"),closeDialogs(".stable"),viewbox.style("cursor","crosshair").on("click",Ps),se("Click on map to place new river or extend an existing one. Hold Shift to place multiple rivers",!0,"warn"),layerIsOn("toggleRivers")||toggleRivers()}function Ps(){var L;const{cells:e,rivers:t}=pack;let n=Te(...d3.mouse(this));if(e.r[n])return se("There is already a river here",!1,"error");if(e.h[n]<20)return se("Cannot create river in water cell",!1,"error");if(e.b[n])return;const{alterHeights:i,resolveDepressions:r,addMeandering:c,getRiverPath:f,getBasin:z,getName:m,getType:b,getWidth:A,getOffset:u,getApproximateLength:C}=Rivers,g=[];let p=t.length?De(t).i+1:1,B=p;const k=grid.cells.prec[e.g[n]];e.fl[n]=k;const d=i();for(r(d);n;){e.r[n]=p,g.push(n);const M=e.c[n].sort((U,F)=>d[U]-d[F])[0];if(d[n]<=d[M])return se(`Cell ${n} is depressed, river cannot flow further`,!1,"error");if(d[M]<20){g.push(M);const U=pack.features[e.f[M]];U.type==="lake"&&(U.outlet&&(B=U.outlet),U.inlets?U.inlets.push(p):U.inlets=[p]);break}if(e.b[M]){e.fl[M]+=e.fl[n],g.push(-1);break}if(!e.r[M]){e.fl[M]+=e.fl[n],n=M;continue}const I=e.r[M],H=t.find(U=>U.i===I),G=(H==null?void 0:H.cells)||e.i.filter(U=>e.r[U]===I),D=G.filter(U=>d[U]>d[M]);if(g.length<=D.length){e.conf[M]+=e.fl[n],g.push(M),B=I;break}(L=document.getElementById("river"+I))==null||L.remove(),g.forEach(U=>e.r[U]=I),G.forEach(U=>{d[U]>d[M]?(e.r[U]=0,e.fl[U]=grid.cells.prec[e.g[U]]):(g.push(U),e.fl[U]+=e.fl[n])}),p=I;break}const s=t.find(M=>M.i===p),o=g[0],l=g[g.length-2],a=O(1/(pointsInput.dataset.cells/1e4)**.25,2),w=(s==null?void 0:s.widthFactor)||(!B||B===p?a*1.2:a),S=c(g),h=e.fl[l],v=C(S),E=A(u(h,S.length,w));if(s)s.source=o,s.length=v,s.discharge=h,s.width=E,s.cells=g;else{const M=z(B),I=m(l),H=b({i:p,length:v,parent:B});t.push({i:p,source:o,mouth:l,discharge:h,length:v,width:E,widthFactor:w,sourceWidth:0,parent:B,cells:g,basin:M,name:I,type:H})}lineGen.curve(d3.curveCatmullRom.alpha(.1));const P=f(S,w),T="river"+p;viewbox.select("#rivers").append("path").attr("id",T).attr("d",P),d3.event.shiftKey===!1&&(Lakes.cleanupLakeData(),at(),document.getElementById("addNewRiver").classList.remove("pressed"),addNewRiver.offsetParent&&riversOverviewRefresh.click())}function Hs(){if(document.getElementById("addRoute").classList.contains("pressed")){at();return}addFeature.querySelectorAll("button.pressed").forEach(t=>t.classList.remove("pressed")),addRoute.classList.add("pressed"),closeDialogs(".stable"),viewbox.style("cursor","crosshair").on("click",Us),se("Click on map to add a first control point",!0),layerIsOn("toggleRoutes")||toggleRoutes()}function Us(){at();const e=d3.mouse(this),t=$a("route");elSelected=routes.select("g").append("path").attr("id",t).attr("data-new",1).attr("d",`M${e[0]},${e[1]}`),editRoute(!0)}function Ns(){var t;if((t=document.getElementById("addMarker"))==null?void 0:t.classList.contains("pressed")){at();return}addFeature.querySelectorAll("button.pressed").forEach(n=>n.classList.remove("pressed")),addMarker.classList.add("pressed"),markersAddFromOverview.classList.add("pressed"),viewbox.style("cursor","crosshair").on("click",Ks),se("Click on map to add a marker. Hold Shift to add multiple",!0),layerIsOn("toggleMarkers")||toggleMarkers()}function Ks(){var u,C;const{markers:e}=pack,t=d3.mouse(this),n=O(t[0],2),i=O(t[1],2),r=Te(t[0],t[1]),z=(e.length&&((C=(u=elSelected==null?void 0:elSelected.node())==null?void 0:u.parentElement)==null?void 0:C.id)==="markers"?e.find(g=>g.i===+elSelected.attr("id").slice(6)):null)||{icon:"\u2753"},m=Markers.add({...z,x:n,y:i,cell:r}),b=document.getElementById("markers"),A=+b.getAttribute("rescale");b.insertAdjacentHTML("beforeend",drawMarker(m,A)),d3.event.shiftKey===!1&&(document.getElementById("markerAdd").classList.remove("pressed"),document.getElementById("markersAddFromOverview").classList.remove("pressed"),at())}function Ds(){e();function e(){const{markers:n}=pack,i=Markers.getConfig(),r=` + Type + Icon + Multiplier + Number + `,c=i.map(({type:z,icon:m,multiplier:b},A)=>{const u=`markerIconInput${A}`;return` + + + + + + + ${n.filter(C=>C.type===z).length} + `}),f=`${r}${c.join("")}
    `;alertMessage.innerHTML=f,alertMessage.querySelectorAll("i").forEach(z=>{z.addEventListener("click",function(){const m=this.previousElementSibling;selectIcon(m.value,b=>m.value=b)})})}const t=()=>{const n=alertMessage.querySelectorAll("tbody > tr"),i=Array.from(n).map(f=>{const z=f.querySelectorAll("input");return{type:z[0].value,icon:z[1].value,multiplier:parseFloat(z[2].value)}}),c=Markers.getConfig().map((f,z)=>{const{type:m,icon:b,multiplier:A}=i[z];return{...f,type:m,icon:b,multiplier:A}});Markers.setConfig(c)};$("#alert").dialog({resizable:!1,title:"Markers generation settings",position:{my:"left top",at:"left+10 top+10",of:"svg",collision:"fit"},buttons:{Regenerate:()=>{t(),_a(),e()},Close:function(){$(this).dialog("close")}},open:function(){const n=$(this).dialog("widget").find(".ui-dialog-buttonset > button");n[0].addEventListener("mousemove",()=>se("Apply changes and regenerate markers")),n[1].addEventListener("mousemove",()=>se("Close the window"))},close:function(){$(this).dialog("destroy")}})}function Fs(){$("#cellInfo").dialog({resizable:!1,width:"22em",title:"Cell Details",position:{my:"right top",at:"right-10 top+10",of:"svg",collision:"fit"}})}async function Os(){(await St(()=>import("./charts-overview.js_v_1.87.711ec26c.js"),[])).open()}window.ThreeD=function(){const e={scale:50,lightness:.7,shadow:.5,sun:{x:100,y:600,z:1e3},rotateMesh:0,rotateGlobe:.5,skyColor:"#9ecef5",waterColor:"#466eab",extendedWater:0,labels3d:0,resolution:2};let t,n,i,r,c,f,z,m,b,A,u,C,g,p,B,k=[],d=[],s=[];const o=document.createElement("canvas").getContext("2d"),l=async function(_,oe="viewMesh"){return e.isOn=!0,e.isGlobe=oe==="viewGlobe",e.isGlobe?le(_):G(_)},a=function(){Z(),n.remove(b),t.setSize(t.domElement.width,t.domElement.height),e.isGlobe?Y():te(graphWidth,graphHeight,grid.cellsX,grid.cellsY),pe()},w=function(){e.isGlobe?Y():ee()},S=function(){cancelAnimationFrame(c),z.dispose(),m.dispose(),f.dispose(),C&&C.dispose(),g&&g.dispose(),Z(),t.renderLists.dispose(),t.dispose(),n.remove(b),n.remove(u),n.remove(A),n.remove(p),t=void 0,n=void 0,r=void 0,i=void 0,f=void 0,z=void 0,m=void 0,b=void 0,ThreeD.options.isOn=!1},h=function(_){e.scale=_,m.vertices.forEach((oe,ce)=>oe.z=q(ce)),m.verticesNeedUpdate=!0,m.computeVertexNormals(),m.verticesNeedUpdate=!1,a()},v=function(_){e.lightness=_,A.intensity=_,pe()},E=function(_,oe,ce){e.sun={x:_,y:oe,z:ce},u.position.set(_,oe,ce),pe()},P=function(_){e.isGlobe?e.rotateGlobe=_:e.rotateMesh=_,r.autoRotateSpeed=_;const oe=!r.autoRotate&&Boolean(_),ce=r.autoRotate&&!Boolean(_);r.autoRotate=Boolean(_),oe&&ke(),ce&&cancelAnimationFrame(c)},T=function(){e.extendedWater?(n.background=null,n.fog=null,n.remove(p)):X(graphWidth,graphHeight),e.extendedWater=!e.extendedWater,a()},R=function(){e.labels3d=!e.labels3d,e.labels3d?j().then(()=>w()):(Z(),w())},L=function(_,oe){e.skyColor=_,n.background=n.fog.color=new THREE.Color(_),e.waterColor=oe,g.color=new THREE.Color(oe),pe()},M=function(_){e.resolution=_,w()},I=async function(){const _=t.domElement.toDataURL("image/jpeg"),oe=document.createElement("a");oe.download=getFileName()+".jpeg",oe.href=_,oe.click(),se('Screenshot is saved. Open "Downloads" screen (CTRL + J) to check',!0,"success",7e3),window.setTimeout(()=>window.URL.revokeObjectURL(_),5e3)},H=async function(){downloadFile(await W(),getFileName()+".obj","text/plain;charset=UTF-8")};async function G(_){return await He()?(n=new THREE.Scene,A=new THREE.AmbientLight(13421772,e.lightness),n.add(A),u=new THREE.SpotLight(13421772,.8,2e3,.8,0,0),u.position.set(e.sun.x,e.sun.y,e.sun.z),u.castShadow=!0,n.add(u),t=new THREE.WebGLRenderer({canvas:_,antialias:!0,preserveDrawingBuffer:!0}),t.setSize(_.width,_.height),t.shadowMap.enabled=!0,e.extendedWater&&X(graphWidth,graphHeight),te(graphWidth,graphHeight,grid.cellsX,grid.cellsY),i=new THREE.PerspectiveCamera(70,_.width/_.height,.1,2e3),i.position.set(0,O(svgWidth/3.5),500),r=await Be(i,_),r.enableKeys=!1,r.minDistance=10,r.maxDistance=1e3,r.maxPolarAngle=Math.PI/2,r.autoRotate=Boolean(e.rotateMesh),r.autoRotateSpeed=e.rotateMesh,r.autoRotate&&ke(),r.addEventListener("change",pe),!0):(se("Cannot load 3d library",!1,"error",4e3),!1)}function D(_,oe,ce){const ye=new THREE.TextureLoader().load(_);ye.anisotropy=t.getMaxAnisotropy();const Se=new THREE.SpriteMaterial({map:ye}),ve=new THREE.Sprite(Se);return ve.scale.set(oe,ce,1),ve.renderOrder=1,ve}async function U({text:_,font:oe,size:ce,color:ye,quality:Se}){return o.font=`${ce*Se}px ${oe}`,o.canvas.width=o.measureText(_).width,o.canvas.height=ce*Se*1.25,o.clearRect(0,0,o.canvas.width,o.canvas.height),o.font=`${ce*Se}px ${oe}`,o.fillStyle=ye,o.fillText(_,0,ce*Se),D(o.canvas.toDataURL(),o.canvas.width/Se,o.canvas.height/Se)}function F(_,oe){const ce=_-graphWidth/2,ye=oe-graphHeight/2;B.ray.origin.x=ce,B.ray.origin.z=ye;const Se=B.intersectObject(b)[0].point.y;return[ce,Se,ye]}async function j(){var nt;B=new THREE.Raycaster,B.set(new THREE.Vector3(0,1e3,0),new THREE.Vector3(0,-1,0));const _=viewbox.select("#labels #states"),oe=burgLabels.select("#cities"),ce=burgLabels.select("#towns");burgIcons.select("#cities"),burgIcons.select("#towns");const ye={font:_.attr("font-family"),size:+_.attr("data-size"),color:_.attr("fill"),elevation:20,quality:20},Se={font:oe.attr("font-family"),size:+oe.attr("data-size"),color:oe.attr("fill"),elevation:10,quality:20,iconSize:1,iconColor:"#666",line:10-oe.attr("data-size")/2},ve={font:ce.attr("font-family"),size:+ce.attr("data-size"),color:ce.attr("fill"),elevation:5,quality:30,iconSize:.5,iconColor:"#666",line:5-ce.attr("data-size")/2},Ue=new THREE.MeshPhongMaterial({color:Se.iconColor}),Ve=new THREE.MeshPhongMaterial({color:ve.iconColor}),Oe=new THREE.CylinderGeometry(Se.iconSize*2,Se.iconSize*2,Se.iconSize,16,1),$e=new THREE.CylinderGeometry(ve.iconSize*2,ve.iconSize*2,ve.iconSize,16,1),rt=new THREE.LineBasicMaterial({color:Se.iconColor});for(let _e=1;_ewindow.URL.revokeObjectURL(ve),5e3),z&&z.dispose(),z=new THREE.TextureLoader().load(ve,pe),z.needsUpdate=!0,f&&f.dispose(),f=new THREE.MeshLambertMaterial,f.map=z,f.transparent=!0,m&&m.dispose(),m=new THREE.PlaneGeometry(_,oe,ce-1,ye-1),m.vertices.forEach((Ue,Ve)=>Ue.z=q(Ve)),m.computeVertexNormals(),b&&n.remove(b),b=new THREE.Mesh(m,f),b.rotation.x=-Math.PI/2,b.castShadow=!0,b.receiveShadow=!0,n.add(b),e.labels3d&&(pe(),await j())}function q(_){const oe=grid.cells.h[_];return oe<20?0:(oe-18)/82*e.scale}function X(_,oe){n.background=new THREE.Color(e.skyColor),C=new THREE.PlaneGeometry(_*10,oe*10,1),g=new THREE.MeshBasicMaterial({color:e.waterColor}),n.fog=new THREE.Fog(n.background,500,3e3),p=new THREE.Mesh(C,g),p.rotation.x=-Math.PI/2,p.position.y-=3,n.add(p)}async function ee(){z&&z.dispose();const _={noLabels:e.labels3d,noWater:e.extendedWater,fullMap:!0},oe=await getMapURL("mesh",_);window.setTimeout(()=>window.URL.revokeObjectURL(oe),4e3),z=new THREE.TextureLoader().load(oe,pe),f.map=z}async function le(_){return await He()?(n=new THREE.Scene,n.background=new THREE.TextureLoader().load("https://i0.wp.com/azgaar.files.wordpress.com/2019/10/stars-1.png",pe),t=new THREE.WebGLRenderer({canvas:_,antialias:!0,preserveDrawingBuffer:!0}),t.setSize(_.width,_.height),f&&f.dispose(),f=new THREE.MeshBasicMaterial,Y(!0),i=new THREE.PerspectiveCamera(45,_.width/_.height,.1,1e3).translateZ(5),r=await Be(i,t.domElement),r.enableKeys=!1,r.minDistance=1.8,r.maxDistance=10,r.autoRotate=Boolean(e.rotateGlobe),r.autoRotateSpeed=e.rotateGlobe,r.addEventListener("change",pe),!0):(se("Cannot load 3d library",!1,"error",4e3),!1)}async function Y(_){const oe=mapCoordinates.latT>179,ce=e.resolution,ye=512*ce,Se=1024*ce,ve=O(mapCoordinates.latT/180*ye),Ue=oe?ve*2:O(graphWidth/graphHeight*ve),Ve=oe?0:(90-mapCoordinates.latN)/180*ye,Oe=oe?0:Ue/4,$e=document.createElement("canvas").getContext("2d");if($e.canvas.width=Se,$e.canvas.height=ye,!oe){const nt=new Image;nt.onload=function(){$e.drawImage(nt,0,0,Se,ye)},nt.src="data:image/png;base64,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"}const rt=new Image;rt.onload=function(){$e.drawImage(rt,Oe,Ve,Ue,ve),z&&z.dispose(),z=new THREE.CanvasTexture($e.canvas,pe),f.map=z,_&&de()},rt.src=await getMapURL("mesh",{globe:!0,fullMap:!0})}async function W(){return await(await Fe()).parse(b)}function de(){m=new THREE.SphereBufferGeometry(1,64,64),b=new THREE.Mesh(m,f),n.add(b),r.autoRotate?ke():pe()}const me=eo(we,200);function pe(){t.render(n,i),me()}function we(){for(const[_,oe]of k.entries()){const ce=oe.position.distanceTo(i.position),ye=ce<100*oe.size&&ce>oe.size*6;oe.visible=ye,s[_]&&(s[_].visible=ye)}}function ke(){c=requestAnimationFrame(ke),r.update()}function He(){return window.THREE?Promise.resolve(!0):new Promise(_=>{const oe=document.createElement("script");oe.src="libs/three.min.js",document.head.append(oe),oe.onload=()=>_(!0),oe.onerror=()=>_(!1)})}function Be(_,oe){return THREE.OrbitControls?new THREE.OrbitControls(_,oe):new Promise(ce=>{const ye=document.createElement("script");ye.src="libs/orbitControls.min.js",document.head.append(ye),ye.onload=()=>ce(new THREE.OrbitControls(_,oe)),ye.onerror=()=>ce(!1)})}function Fe(){return THREE.OBJExporter?new THREE.OBJExporter:new Promise(_=>{const oe=document.createElement("script");oe.src="libs/objexporter.min.js",document.head.append(oe),oe.onload=()=>_(new THREE.OBJExporter),oe.onerror=()=>_(!1)})}return{create:l,redraw:a,update:w,stop:S,options:e,setScale:h,setLightness:v,setSun:E,setRotation:P,toggleLabels:R,toggleSky:T,setResolution:M,setColors:L,saveScreenshot:I,saveOBJ:H}}();window.UISubmap=function(){ne("submapPointsInput").addEventListener("input",function(){const p=ne("submapPointsOutputFormatted"),B=cellsDensityMap[+this.value]||1e3;this.dataset.cells=B,p.value=getCellsDensityValue(B),p.style.color=getCellsDensityColor(B)}),ne("submapScaleInput").addEventListener("input",function(p){const B=Math.pow(1.1,+p.target.value);ne("submapScaleOutput").value=O(B,2)}),ne("submapAngleInput").addEventListener("input",function(p){ne("submapAngleOutput").value=p.target.value});const e=ne("submapPreview"),t=ne("submapScaleInput"),n=ne("submapShiftX"),i=ne("submapShiftY");function r(){$("#submapOptionsDialog").dialog({title:"Create a submap",resizable:!1,position:{my:"center",at:"center",of:"svg"},buttons:{Submap:function(){$(this).dialog("close"),A()},Cancel:function(){$(this).dialog("close")}}})}const c=p=>({angle:+ne("submapAngleInput").value/180*Math.PI,shiftX:+ne("submapShiftX").value,shiftY:+ne("submapShiftY").value,ratio:+ne("submapScaleInput").value,mirrorH:ne("submapMirrorH").checked,mirrorV:ne("submapMirrorV").checked});async function f(){resetZoom(0),ne("submapAngleInput").value=0,ne("submapAngleOutput").value="0",ne("submapScaleOutput").value=1,ne("submapMirrorH").checked=!1,ne("submapMirrorV").checked=!1,t.value=0,n.value=0,i.value=0;const p=Math.min(400,window.innerWidth*.5),B=p/graphWidth,k=graphHeight*B;e.style.width=p+"px",e.style.height=k+"px";const d=w=>w.dispatchEvent(new Event("input",{bubbles:!0}));e.onwheel=w=>{t.value=t.valueAsNumber-Math.sign(w.deltaY),d(t)};let s=!1,o=0,l=0;e.onmousedown=w=>{s=!0,o=n.value-w.clientX/B,l=i.value-w.clientY/B},e.onmouseup=w=>s=!1,e.onmouseleave=w=>s=!1,e.onmousemove=w=>{!s||(w.preventDefault(),n.value=Math.round(o+w.clientX/B),i.value=Math.round(l+w.clientY/B),d(n))},$("#resampleDialog").dialog({title:"Transform map",resizable:!1,position:{my:"center",at:"center",of:"svg"},buttons:{Transform:function(){$(this).dialog("close"),m()},Cancel:function(){$(this).dialog("close")}}});const a=await z(e,p*2,k*2);a.style.position="absolute",a.style.width=p+"px",a.style.height=k+"px",ne("resampleDialog").oninput=w=>{const{angle:S,shiftX:h,shiftY:v,ratio:E,mirrorH:P,mirrorV:T}=c(),R=Math.pow(1.1,E),L=` + translate(${h*B}px, ${v*B}px) + scale(${P?-R:R}, ${T?-R:R}) + rotate(${S}rad) + `;a.style.transform=L,a.style["transform-origin"]="center",w.stopPropagation()}}async function z(p,B,k){const d=await getMapURL("png",{globe:!1,noWater:!0,fullMap:!0,noLabels:!0,noScaleBar:!0,noIce:!0}),s=document.createElement("canvas"),o=s.getContext("2d");s.width=B,s.height=k;const l=new Image;return l.src=d,l.onload=function(){o.drawImage(l,0,0,B,k)},p.textContent="",p.appendChild(s),s}const m=vt(function(){WARN&&console.warn("Resampling current map");const p=+ne("submapPointsInput").value;if(!cellsDensityMap[p])return console.error("Unknown cell number!");const{angle:B,shiftX:k,shiftY:d,ratio:s,mirrorH:o,mirrorV:l}=c(),[a,w]=[graphWidth/2,graphHeight/2],S=I=>(H,G)=>[(H-a)*Math.cos(I)-(G-w)*Math.sin(I)+a,(G-w)*Math.cos(I)+(H-a)*Math.sin(I)+w],h=(I,H)=>(G,D)=>[G+I,D+H],v=I=>(H,G)=>[(H-a)*I+a,(G-w)*I+w],E=(I,H)=>[-I+2*a,H],P=(I,H)=>[I,-H+2*w],T=(I,H)=>(G,D)=>I(...H(G,D)),R=(I,H)=>[I,H];let L=R,M=R;B&&([L,M]=[S(B),S(-B)]),s&&([L,M]=[T(v(Math.pow(1.1,s)),L),T(M,v(Math.pow(1.1,-s)))]),o&&([L,M]=[T(E,L),T(M,E)]),l&&([L,M]=[T(P,L),T(M,P)]),(k||d)&&(L=T(h(k,d),L),M=T(M,h(-k,-d))),changeCellsDensity(p),u({lockMarkers:!1,lockBurgs:!1,depressRivers:!1,addLakesInDepressions:!1,promoteTowns:!1,smoothHeightMap:!1,rescaleStyles:!1,scale:1,projection:L,inverse:M})},1e3);function b(){return[[Math.abs(viewX/scale),Math.abs(viewY/scale)],[Math.abs(viewX/scale)+graphWidth/scale,Math.abs(viewY/scale)+graphHeight/scale]]}const A=vt(function(){WARN&&console.warn("Resampling current map"),closeDialogs("#worldConfigurator, #options3d");const p=v=>Boolean(ne(v).checked),[[B,k],[d,s]]=b(),o=scale,l={lockMarkers:p("submapLockMarkers"),lockBurgs:p("submapLockBurgs"),depressRivers:p("submapDepressRivers"),addLakesInDepressions:p("submapAddLakeInDepression"),promoteTowns:p("submapPromoteTowns"),rescaleStyles:p("submapRescaleStyles"),smoothHeightMap:scale>2,inverse:(v,E)=>[v/o+B,E/o+k],projection:(v,E)=>[(v-B)*o,(E-k)*o],scale:o},a=ne("mapSizeOutput"),w=ne("latitudeOutput"),h=90-(180-mapSizeInput.value/100*180)*w.value/100-k/graphHeight*a.value*180/100;a.value/=scale,w.value=(90-h)/(180-a.value/100*180)*100,ne("mapSizeInput").value=a.value,ne("latitudeInput").value=w.value,distanceScaleInput.value=distanceScaleOutput.value=O(distanceScale=distanceScaleOutput.value/scale,2),populationRateInput.value=populationRateOutput.value=O(populationRate=populationRateOutput.value/scale,2),customization=0,u(l)},1e3);async function u(p){resetZoom(0);let B={grid:structuredClone(grid),pack:structuredClone(pack),notes:structuredClone(notes),seed,graphWidth,graphHeight};undraw();try{const k=scale;if(await Submap.resample(B,p),p.promoteTowns){const d="largetowns";moveAllBurgsToGroup("towns",d),changeRadius(O(k*.8,2),d),changeFontSize(svg.select(`#labels #${d}`),O(k*2,2)),invokeActiveZooming()}p.rescaleStyles&&C(k)}catch(k){g(k)}B=null,restoreLayers(),ThreeD.options.isOn&&ThreeD.redraw(),$("#worldConfigurator").is(":visible")&&editWorld()}function C(p){const B=[...ne("burgIcons").querySelectorAll("g")];for(const s of B){const o=O(Ie(s.getAttribute("size")*p,.2,10),2);changeRadius(o,s.id);const l=s.attributes["stroke-width"];l.value=+l.value*p}const k=[...ne("burgLabels").querySelectorAll("g")];for(const s of k){const o=+s.dataset.size;s.dataset.size=Math.max(O((o+o/p)/2,2),1)*p}const d=Ie((p-1)*.3+1,.5,5);emblemsStateSizeInput.value=Ie(+emblemsStateSizeInput.value*d,.5,5),emblemsProvinceSizeInput.value=Ie(+emblemsProvinceSizeInput.value*d,.5,5),emblemsBurgSizeInput.value=Ie(+emblemsBurgSizeInput.value*d,.5,5),drawEmblems()}function g(p){ERROR&&console.error(p),ct(),alertMessage.innerHTML=`Map resampling failed:
    You may retry after clearing stored data or contact us at discord. +

    ${qa(p)}

    `,$("#alert").dialog({resizable:!1,title:"Resampling error",width:"32em",buttons:{Ok:function(){$(this).dialog("close")}},position:{my:"center",at:"center",of:"svg"}})}return{openSubmapMenu:r,openResampleMenu:f}}();document.addEventListener("keydown",Gs);document.addEventListener("keyup",js);function Gs(e){if(!en())return;const{code:t,ctrlKey:n,altKey:i}=e;i&&!n&&e.preventDefault(),n&&["KeyS","KeyC"].includes(t)&&e.preventDefault(),["F1","F2","F6","F9","Tab"].includes(t)&&e.preventDefault()}function js(e){if(!en())return;e.stopPropagation();const{code:t,key:n,ctrlKey:i,metaKey:r,shiftKey:c,altKey:f}=e,z=i||r||n==="Control",m=c||n==="Shift",b=f||n==="Alt";t==="F1"?showInfo():t==="F2"?regeneratePrompt():t==="F6"?quickSave():t==="F9"?quickLoad():t==="Tab"?toggleOptions(e):t==="Escape"?Zs():t==="Delete"?Vs():t==="KeyO"&&document.getElementById("canvas3d")?toggle3dOptions():z&&t==="KeyQ"?toggleSaveReminder():z&&t==="KeyS"?dowloadMap():z&&t==="KeyC"?saveToDropbox():z&&t==="KeyZ"&&(undo==null?void 0:undo.offsetParent)?undo.click():z&&t==="KeyY"&&(redo==null?void 0:redo.offsetParent)?redo.click():m&&t==="KeyH"?editHeightmap():m&&t==="KeyB"?editBiomes():m&&t==="KeyS"?editStates():m&&t==="KeyP"?editProvinces():m&&t==="KeyD"?editDiplomacy():m&&t==="KeyC"?editCultures():m&&t==="KeyN"?editNamesbase():m&&t==="KeyZ"?editZones():m&&t==="KeyR"?editReligions():m&&t==="KeyY"?openEmblemEditor():m&&t==="KeyQ"?editUnits():m&&t==="KeyO"?editNotes():m&&t==="KeyA"?overviewCharts():m&&t==="KeyT"?overviewBurgs():m&&t==="KeyV"?overviewRivers():m&&t==="KeyM"?overviewMilitary():m&&t==="KeyK"?overviewMarkers():m&&t==="KeyE"?viewCellDetails():n==="!"?toggleAddBurg():n==="@"?toggleAddLabel():n==="#"?toggleAddRiver():n==="$"?toggleAddRoute():n==="%"?toggleAddMarker():b&&t==="KeyB"?console.table(pack.burgs):b&&t==="KeyS"?console.table(pack.states):b&&t==="KeyC"?console.table(pack.cultures):b&&t==="KeyR"?console.table(pack.religions):b&&t==="KeyF"?console.table(pack.features):t==="KeyX"?toggleTexture():t==="KeyH"?toggleHeight():t==="KeyB"?toggleBiomes():t==="KeyE"?toggleCells():t==="KeyG"?toggleGrid():t==="KeyO"?toggleCoordinates():t==="KeyW"?toggleCompass():t==="KeyV"?toggleRivers():t==="KeyF"?toggleRelief():t==="KeyC"?toggleCultures():t==="KeyS"?toggleStates():t==="KeyP"?toggleProvinces():t==="KeyZ"?toggleZones():t==="KeyD"?toggleBorders():t==="KeyR"?toggleReligions():t==="KeyU"?toggleRoutes():t==="KeyT"?toggleTemp():t==="KeyN"?togglePopulation():t==="KeyJ"?toggleIce():t==="KeyA"?togglePrec():t==="KeyY"?toggleEmblems():t==="KeyL"?toggleLabels():t==="KeyI"?toggleIcons():t==="KeyM"?toggleMilitary():t==="KeyK"?toggleMarkers():t==="Equal"?toggleRulers():t==="Slash"?toggleScaleBar():t==="ArrowLeft"?zoom.translateBy(svg,10,0):t==="ArrowRight"?zoom.translateBy(svg,-10,0):t==="ArrowUp"?zoom.translateBy(svg,0,10):t==="ArrowDown"?zoom.translateBy(svg,0,-10):n==="+"||n==="-"?Ws(n):n==="0"?resetZoom(1e3):n==="1"?zoom.scaleTo(svg,1):n==="2"?zoom.scaleTo(svg,2):n==="3"?zoom.scaleTo(svg,3):n==="4"?zoom.scaleTo(svg,4):n==="5"?zoom.scaleTo(svg,5):n==="6"?zoom.scaleTo(svg,6):n==="7"?zoom.scaleTo(svg,7):n==="8"?zoom.scaleTo(svg,8):n==="9"?zoom.scaleTo(svg,9):z&&qs()}function en(){const{tagName:e,contentEditable:t}=document.activeElement;return!(["INPUT","SELECT","TEXTAREA"].includes(e)||e==="DIV"&&t==="true"||document.getSelection().toString())}function Ws(e){var r,c,f,z,m,b,A;const t=e==="+"?1:-1;let n=null;if((r=document.getElementById("brushRadius"))!=null&&r.offsetParent?n=document.getElementById("brushRadius"):(c=document.getElementById("biomesManuallyBrush"))!=null&&c.offsetParent?n=document.getElementById("biomesManuallyBrush"):(f=document.getElementById("statesManuallyBrush"))!=null&&f.offsetParent?n=document.getElementById("statesManuallyBrush"):(z=document.getElementById("provincesManuallyBrush"))!=null&&z.offsetParent?n=document.getElementById("provincesManuallyBrush"):(m=document.getElementById("culturesManuallyBrush"))!=null&&m.offsetParent?n=document.getElementById("culturesManuallyBrush"):(b=document.getElementById("zonesBrush"))!=null&&b.offsetParent?n=document.getElementById("zonesBrush"):(A=document.getElementById("religionsManuallyBrush"))!=null&&A.offsetParent&&(n=document.getElementById("religionsManuallyBrush")),n){const u=minmax(+n.value+t,+n.min,+n.max);n.value=document.getElementById(n.id+"Number").value=u;return}const i=e==="+"?1.2:.8;zoom.scaleBy(svg,i)}function qs(){zonesRemove!=null&&zonesRemove.offsetParent&&(zonesRemove.classList.contains("pressed")?zonesRemove.classList.remove("pressed"):zonesRemove.classList.add("pressed"))}function Vs(){const e=Array.from(document.querySelectorAll("[role='dialog'] .fastDelete")).find(n=>n.style.display!=="none");e&&e.click();const t=Array.from(document.querySelectorAll("[role='dialog']")).filter(n=>n.style.display!=="none");!t.length||t.forEach(n=>n.querySelectorAll("button").forEach(i=>i.textContent==="Remove"&&i.click()))}function Zs(){closeDialogs(),hideOptions()}window.COArenderer=function(){const e={argent:"#fafafa",or:"#ffe066",gules:"#d7374a",sable:"#333333",azure:"#377cd7",vert:"#26c061",purpure:"#522d5b",murrey:"#85185b",sanguine:"#b63a3a",tenn\u00E9:"#cc7f19"},t={heater:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-32.25,37.5],h:[0,50],i:[32.25,37.5],y:[-50,-50],z:[0,62.5],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-30,30],n:[0,42.5],o:[30,30],p:[-37.5,0],q:[37.5,0],A:[-66.2,-66.6],B:[-22,-66.6],C:[22,-66.6],D:[66.2,-66.6],K:[-66.2,-20],E:[66.2,-20],J:[-55.5,26],F:[55.5,26],I:[-33,62],G:[33,62],H:[0,89.5]},spanish:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-43.75,50],h:[0,50],i:[43.75,50],y:[-50,-50],z:[0,50],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,37.5],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-66.2,-66.6],B:[-22,-66.6],C:[22,-66.6],D:[66.2,-66.6],K:[-66.4,-20],E:[66.4,-20],J:[-66.4,26],F:[66.4,26],I:[-49,70],G:[49,70],H:[0,92]},french:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-43.75,50],h:[0,50],i:[43.75,50],y:[-50,-50],z:[0,65],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,37.5],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-66.2,-66.6],B:[-22,-66.6],C:[22,-66.6],D:[66.2,-66.6],K:[-66.4,-20],E:[66.4,-20],J:[-66.4,26],F:[66.4,26],I:[-65.4,70],G:[65.4,70],H:[0,89]},horsehead:{a:[-43.75,-47.5],b:[0,-50],c:[43.75,-47.5],d:[-35,0],e:[0,0],f:[35,0],h:[0,50],y:[-50,-50],z:[0,55],j:[-35,-35],k:[0,-40],l:[35,-35],m:[-30,30],n:[0,40],o:[30,30],p:[-27.5,0],q:[27.5,0],A:[-71,-52],B:[-24,-73],C:[24,-73],D:[71,-52],K:[-62,-16],E:[62,-16],J:[-39,20],F:[39,20],I:[-33.5,60],G:[33.5,60],H:[0,91.5]},horsehead2:{a:[-37.5,-47.5],b:[0,-50],c:[37.5,-47.5],d:[-35,0],e:[0,0],f:[35,0],g:[-35,47.5],h:[0,50],i:[35,47.5],y:[-50,-50],z:[0,55],j:[-30,-30],k:[0,-40],l:[30,-30],m:[-30,30],n:[0,40],o:[30,30],p:[-27.5,0],q:[27.5,0],A:[-49,-39],B:[-22,-70],C:[22,-70],D:[49,-39],K:[-51,-2],E:[51,-2],J:[-38.5,31],F:[38.5,31],I:[-35,67],G:[35,67],H:[0,85]},polish:{a:[-35,-50],b:[0,-50],c:[35,-50],d:[-40,0],e:[0,0],f:[40,0],g:[-37.5,50],h:[0,50],i:[37.5,50],y:[-50,-50],z:[0,65],j:[-27.5,-27.5],k:[0,-45],l:[27.5,-27.5],m:[-27.5,27.5],n:[0,45],o:[27.5,27.5],p:[-32.5,0],q:[32.5,0],A:[-48,-52],B:[-23,-80],C:[23,-80],D:[48,-52],K:[-47,-10],E:[47,-10],J:[-62,32],F:[62,32],I:[-37,68],G:[37,68],H:[0,86]},hessen:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-43.75,50],h:[0,50],i:[43.75,50],y:[-50,-50],z:[0,52.5],j:[-40,-40],k:[0,-40],l:[40,-40],m:[-40,40],n:[0,40],o:[40,40],p:[-40,0],q:[40,0],A:[-69,-64],B:[-22,-76],C:[22,-76],D:[69,-64],K:[-66.4,-20],E:[66.4,-20],J:[-62,26],F:[62,26],I:[-46,70],G:[46,70],H:[0,91.5]},swiss:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-32,37.5],h:[0,50],i:[32,37.5],y:[-50,-50],z:[0,62.5],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-32,32.5],n:[0,42.5],o:[32,32.5],p:[-37.5,0],q:[37.5,0],A:[-66.2,-66.6],B:[-22,-66],C:[22,-66],D:[66.2,-66.6],K:[-63,-20],E:[63,-20],J:[-50,26],F:[50,26],I:[-29,62],G:[29,62],H:[0,89.5]},boeotian:{a:[-37.5,-47.5],b:[0,-47.5],c:[37.5,-47.5],d:[-25,0],e:[0,0],f:[25,0],g:[-37.5,47.5],h:[0,47.5],i:[37.5,47.5],y:[-48,-48],z:[0,60],j:[-32.5,-37.5],k:[0,-45],l:[32.5,-37.5],m:[-32.5,37.5],n:[0,45],o:[32.5,37.5],p:[-20,0],q:[20,0],A:[-45,-55],B:[-20,-77],C:[20,-77],D:[45,-55],K:[-59,-25],E:[59,-25],J:[-58,27],F:[58,27],I:[-39,63],G:[39,63],H:[0,81]},roman:{a:[-40,-52.5],b:[0,-52.5],c:[40,-52.5],d:[-40,0],e:[0,0],f:[40,0],g:[-40,52.5],h:[0,52.5],i:[40,52.5],y:[-42.5,-52.5],z:[0,65],j:[-30,-37.5],k:[0,-37.5],l:[30,-37.5],m:[-30,37.5],n:[0,37.5],o:[30,37.5],p:[-30,0],q:[30,0],A:[-51.5,-65],B:[-17,-75],C:[17,-75],D:[51.5,-65],K:[-51.5,-21],E:[51.5,-21],J:[-51.5,21],F:[51.5,21],I:[-51.5,65],G:[51.5,65],H:[-17,75],L:[17,75]},kite:{b:[0,-65],e:[0,-15],h:[0,35],z:[0,35],k:[0,-50],n:[0,20],p:[-20,-15],q:[20,-15],A:[-38,-52],B:[-29,-78],C:[29,-78],D:[38,-52],K:[-33,-20],E:[33,-20],J:[-25,11],F:[25,11],I:[-15,42],G:[15,42],H:[0,73],L:[0,-91]},oldFrench:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-37.5,50],h:[0,50],i:[37.5,50],y:[-50,-50],z:[0,62.5],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,45],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-66.2,-66.6],B:[-22,-66.6],C:[22,-66.6],D:[66.2,-66.6],K:[-66.2,-20],E:[66.2,-20],J:[-64,26],F:[64,26],I:[-45,62],G:[45,62],H:[0,91]},renaissance:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-41.5,0],e:[0,0],f:[41.5,0],g:[-43.75,50],h:[0,50],i:[43.75,50],y:[-50,-50],z:[0,62.5],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,37.5],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-61,-55],B:[-23,-67],C:[23,-67],D:[61,-55],K:[-55,-11],E:[55,-11],J:[-65,31],F:[65,31],I:[-45,76],G:[45,76],H:[0,87]},baroque:{a:[-43.75,-45],b:[0,-45],c:[43.75,-45],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-43.75,50],h:[0,50],i:[43.75,50],y:[-50,-50],z:[0,60],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,37.5],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-65,-54.5],B:[-22,-65],C:[22,-65],D:[65,-54.5],K:[-58.5,-15],E:[58.5,-15],J:[-65,31],F:[66,31],I:[-35,73],G:[35,73],H:[0,89]},targe:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-43.75,50],h:[0,50],i:[43.75,50],y:[-50,-50],z:[0,50],j:[-40,-40],k:[0,-40],l:[40,-40],m:[-40,40],n:[0,40],o:[40,40],p:[-32.5,0],q:[32.5,0],A:[-66.2,-60],B:[-22,-77],C:[22,-86],D:[60,-66.6],K:[-28,-20],E:[57,-20],J:[-61,26],F:[61,26],I:[-49,63],G:[49,59],H:[0,80]},targe2:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-40,0],e:[0,0],f:[40,0],g:[-43.75,50],h:[0,50],i:[43.75,50],y:[-50,-50],z:[0,60],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,37.5],o:[37.5,37.5],p:[-32.5,0],q:[32.5,0],A:[-55,-59],B:[-15,-59],C:[24,-79],D:[51,-58],K:[-40,-14],E:[51,-14],J:[-64,26],F:[62,26],I:[-46,66],G:[48,67],H:[0,83]},pavise:{a:[-40,-52.5],b:[0,-52.5],c:[40,-52.5],d:[-40,0],e:[0,0],f:[40,0],g:[-40,52.5],h:[0,52.5],i:[40,52.5],y:[-42.5,-52.5],z:[0,60],j:[-30,-35],k:[0,-37.5],l:[30,-35],m:[-30,35],n:[0,37.5],o:[30,35],p:[-30,0],q:[30,0],A:[-57,-55],B:[-22,-74],C:[22,-74],D:[57,-55],K:[-54,-11],E:[54,-11],J:[-50,36],F:[50,36],I:[-46,81],G:[46,81],H:[0,81]},wedged:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.75,0],e:[0,0],f:[43.75,0],g:[-32.25,37.5],h:[0,50],i:[32.25,37.5],y:[-50,-50],z:[0,62.5],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-32.5,32.5],n:[0,42.5],o:[32.5,32.5],p:[-37.5,0],q:[37.5,0],A:[-66,-53],B:[-22,-72.5],C:[22,-72.5],D:[66,-53],K:[-62.6,-13],E:[62.6,-13],J:[-50,26],F:[50,26],I:[-27,62],G:[27,62],H:[0,87]},flag:{a:[-60,-40],b:[0,-40],c:[60,-40],d:[-60,0],e:[0,0],f:[60,0],g:[-60,40],h:[0,40],i:[60,40],y:[-60,-42.5],z:[0,40],j:[-45,-30],k:[0,-30],l:[45,-30],m:[-45,30],n:[0,30],o:[45,30],p:[-45,0],q:[45,0],A:[-81,-51],B:[-27,-51],C:[27,-51],D:[81,-51],K:[-81,-17],E:[81,-17],J:[-81,17],F:[81,17],I:[-81,51],G:[81,51],H:[-27,51],L:[27,51]},pennon:{a:[-75,-40],d:[-75,0],e:[-25,0],f:[25,0],g:[-75,40],y:[-70,-42.5],j:[-60,-30],m:[-60,30],p:[-60,0],q:[5,0],A:[-81,-48],B:[-43,-36],C:[-4.5,-24],D:[33,-12],E:[72,0],F:[33,12],G:[-4.5,24],H:[-43,36],I:[-81,48],J:[-81,17],K:[-81,-17]},guidon:{a:[-60,-40],b:[0,-40],c:[60,-40],d:[-60,0],e:[0,0],g:[-60,40],h:[0,40],i:[60,40],y:[-60,-42.5],z:[0,40],j:[-45,-30],k:[0,-30],l:[45,-30],m:[-45,30],n:[0,30],o:[45,30],p:[-45,0],A:[-81,-51],B:[-27,-51],C:[27,-51],D:[78,-51],K:[-81,-17],E:[40.5,-17],J:[-81,17],F:[40.5,17],I:[-81,51],G:[78,51],H:[-27,51],L:[27,51]},banner:{a:[-50,-50],b:[0,-50],c:[50,-50],d:[-50,0],e:[0,0],f:[50,0],g:[-50,40],h:[0,40],i:[50,40],y:[-50,-50],z:[0,40],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,27.5],n:[0,27.5],o:[37.5,27.5],p:[-37.5,0],q:[37.5,0],A:[-66.5,-66.5],B:[-22,-66.5],C:[22,-66.5],D:[66.5,-66.5],K:[-66.5,-20],E:[66.5,-20],J:[-66.5,26],F:[66.5,26],I:[-66.5,66.5],G:[66.5,66.5],H:[-25,75],L:[25,75]},dovetail:{a:[-49.75,-50],b:[0,-50],c:[49.75,-50],d:[-49.75,0],e:[0,0],f:[49.75,0],g:[-49.75,50],i:[49.75,50],y:[-50,-50],z:[0,40],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,32.5],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-66.5,-66.5],B:[-22,-66.5],C:[22,-66.5],D:[66.5,-66.5],K:[-66.5,-16.5],E:[66.5,-16.5],J:[-66.5,34.5],F:[66.5,34.5],I:[-66.5,84.5],G:[66.5,84.5],H:[-25,64],L:[25,64]},gonfalon:{a:[-49.75,-50],b:[0,-50],c:[49.75,-50],d:[-49.75,0],e:[0,0],f:[49.75,0],g:[-49.75,50],h:[0,50],i:[49.75,50],y:[-50,-50],z:[0,50],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,37.5],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-66.5,-66.5],B:[-22,-66.5],C:[22,-66.5],D:[66.5,-66.5],K:[-66.5,-20],E:[66.5,-20],J:[-66.5,26],F:[66.5,26],I:[-40,63],G:[40,63],H:[0,88]},pennant:{a:[-45,-50],b:[0,-50],c:[45,-50],e:[0,0],h:[0,50],y:[-50,-50],z:[0,50],j:[-32.5,-37.5],k:[0,-37.5],l:[32.5,-37.5],n:[0,37.5],A:[-60,-76],B:[-22,-76],C:[22,-76],D:[60,-76],K:[-46,-38],E:[46,-38],J:[-31,0],F:[31,0],I:[-16,38],G:[16,38],H:[0,76]},round:{a:[-40,-40],b:[0,-40],c:[40,-40],d:[-40,0],e:[0,0],f:[40,0],g:[-40,40],h:[0,40],i:[40,40],y:[-48,-48],z:[0,57.5],j:[-35.5,-35.5],k:[0,-37.5],l:[35.5,-35.5],m:[-35.5,35.5],n:[0,37.5],o:[35.5,35.5],p:[-36.5,0],q:[36.5,0],A:[-59,-48],B:[-23,-73],C:[23,-73],D:[59,-48],K:[-76,-10],E:[76,-10],J:[-70,31],F:[70,31],I:[-42,64],G:[42,64],H:[0,77]},oval:{a:[-37.5,-50],b:[0,-50],c:[37.5,-50],d:[-43,0],e:[0,0],f:[43,0],g:[-37.5,50],h:[0,50],i:[37.5,50],y:[-48,-48],z:[0,60],j:[-35.5,-37.5],k:[0,-37.5],l:[35.5,-37.5],m:[-35.5,37.5],n:[0,50],o:[35.5,37.5],p:[-36.5,0],q:[36.5,0],A:[-48,-48],B:[-23,-78],C:[23,-78],D:[48,-48],K:[-59,-10],E:[59,-10],J:[-55,31],F:[55,31],I:[-36,68],G:[36,68],H:[0,85]},vesicaPiscis:{a:[-32,-37],b:[0,-50],c:[32,-37],d:[-32,0],e:[0,0],f:[32,0],g:[-32,37],h:[0,50],i:[32,37],y:[-50,-50],z:[0,62],j:[-27.5,-27.5],k:[0,-37],l:[27.5,-27.5],m:[-27.5,27.5],n:[0,42],o:[27.5,27.5],p:[-27.5,0],q:[27.5,0],A:[-45,-32],B:[-29,-63],C:[29,-63],D:[45,-32],K:[-50,0],E:[50,0],J:[-45,32],F:[45,32],I:[-29,63],G:[29,63],H:[0,89],L:[0,-89]},square:{a:[-49.75,-50],b:[0,-50],c:[49.75,-50],d:[-49.75,0],e:[0,0],f:[49.75,0],g:[-49.75,50],h:[0,50],i:[49.75,50],y:[-50,-50],z:[0,50],j:[-37.5,-37.5],k:[0,-37.5],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,37.5],o:[37.5,37.5],p:[-37.5,0],q:[37.5,0],A:[-66.5,-66.5],B:[-22,-66.5],C:[22,-66.5],D:[66.5,-66.5],K:[-66.5,-20],E:[66.5,-20],J:[-66.5,26],F:[66.5,26],I:[-66.5,66.5],G:[66.5,66.5],H:[-22,66.5],L:[22,66.5]},diamond:{a:[-32,-37],b:[0,-50],c:[32,-37],d:[-43,0],e:[0,0],f:[43,0],g:[-32,37],h:[0,50],i:[32,37],y:[-50,-50],z:[0,62],j:[-27.5,-27.5],k:[0,-37],l:[27.5,-27.5],m:[-27.5,27.5],n:[0,42],o:[27.5,27.5],p:[-37,0],q:[37,0],A:[-43,-28],B:[-22,-56],C:[22,-56],D:[43,-28],K:[-63,0],E:[63,0],J:[-42,28],F:[42,28],I:[-22,56],G:[22,56],H:[0,83],L:[0,-82]},no:{a:[-66.5,-66.5],b:[0,-66.5],c:[66.5,-66.5],d:[-66.5,0],e:[0,0],f:[66.5,0],g:[-66.5,66.5],h:[0,66.5],i:[66.5,66.5],y:[-50,-50],z:[0,75],j:[-50,-50],k:[0,-50],l:[50,-50],m:[-50,50],n:[0,50],o:[50,50],p:[-50,0],q:[50,0],A:[-91.5,-91.5],B:[-30.5,-91.5],C:[30.5,-91.5],D:[91.5,-91.5],K:[-91.5,-30.5],E:[91.5,-30.5],J:[-91.5,30.5],F:[91.5,30.5],I:[-91.5,91.5],G:[91.5,91.5],H:[-30.5,91.5],L:[30.5,91.5]},fantasy1:{a:[-45,-45],b:[0,-50],c:[45,-45],d:[-40,0],e:[0,0],f:[40,0],g:[-36,42.5],h:[0,50],i:[36,42.5],y:[-50,-50],z:[0,60],j:[-37,-37],k:[0,-40],l:[37,-37],m:[-32,32],n:[0,40],o:[32,32],p:[-28.5,0],q:[28.5,0],A:[-66,-55],B:[-22,-67],C:[22,-67],D:[66,-55],K:[-53,-20],E:[53,-20],J:[-46,26],F:[46,26],I:[-29,62],G:[29,62],H:[0,84]},fantasy2:{a:[-45,-45],b:[0,-45],c:[45,-45],d:[-35,0],e:[0,0],f:[35,0],g:[-36,42.5],h:[0,45],i:[36,42.5],y:[-50,-50],z:[0,55],j:[-32.5,-32.5],k:[0,-40],l:[32.5,-32.5],m:[-30,30],n:[0,40],o:[30,30],p:[-27.5,0],q:[27.5,0],A:[-58,-35],B:[-44,-67],C:[44,-67],D:[58,-35],K:[-39,-5],E:[39,-5],J:[-57,26],F:[57,26],I:[-32,58],G:[32,58],H:[0,83],L:[0,-72]},fantasy3:{a:[-40,-45],b:[0,-50],c:[40,-45],d:[-35,0],e:[0,0],f:[35,0],g:[-36,42.5],h:[0,50],i:[36,42.5],y:[-50,-50],z:[0,55],j:[-32.5,-32.5],k:[0,-40],l:[32.5,-32.5],m:[-30,30],n:[0,40],o:[30,30],p:[-27.5,0],q:[27.5,0],A:[-56,-42],B:[-22,-72],C:[22,-72],D:[56,-42],K:[-37,-11],E:[37,-11],J:[-60,20],F:[60,20],I:[-34,56],G:[34,56],H:[0,83]},fantasy4:{a:[-50,-45],b:[0,-50],c:[50,-45],d:[-45,0],e:[0,0],f:[45,0],g:[-40,45],h:[0,50],i:[40,45],y:[-50,-50],z:[0,62.5],j:[-37.5,-37.5],k:[0,-45],l:[37.5,-37.5],m:[-37.5,37.5],n:[0,45],o:[37.5,37.5],p:[-35,0],q:[35,0],A:[-75,-56],B:[-36,-61],C:[36,-61],D:[75,-56],K:[-67,-12],E:[67,-12],J:[-63,32],F:[63,32],I:[-42,75],G:[42,75],H:[0,91.5],L:[0,-79]},fantasy5:{a:[-45,-50],b:[0,-50],c:[45,-50],d:[-40,0],e:[0,0],f:[40,0],g:[-30,45],h:[0,50],i:[30,45],y:[-50,-50],z:[0,60],j:[-37,-37],k:[0,-40],l:[37,-37],m:[-32,32],n:[0,40],o:[32,32],p:[-28.5,0],q:[28.5,0],A:[-61,-67],B:[-22,-76],C:[22,-76],D:[61,-67],K:[-58,-25],E:[58,-25],J:[-48,20],F:[48,20],I:[-28.5,60],G:[28.5,60],H:[0,89]},noldor:{b:[0,-65],e:[0,-15],h:[0,35],z:[0,35],k:[0,-50],n:[0,30],p:[-20,-15],q:[20,-15],A:[-34,-47],B:[-20,-68],C:[20,-68],D:[34,-47],K:[-18,-20],E:[18,-20],J:[-26,11],F:[26,11],I:[-14,43],G:[14,43],H:[0,74],L:[0,-85]},gondor:{a:[-32.5,-50],b:[0,-50],c:[32.5,-50],d:[-32.5,0],e:[0,0],f:[32.5,0],g:[-32.5,50],h:[0,50],i:[32.5,50],y:[-42.5,-52.5],z:[0,65],j:[-25,-37.5],k:[0,-37.5],l:[25,-37.5],m:[-25,30],n:[0,37.5],o:[25,30],p:[-25,0],q:[25,0],A:[-42,-52],B:[-17,-75],C:[17,-75],D:[42,-52],K:[-42,-15],E:[42,-15],J:[-42,22],F:[42,22],I:[-26,60],G:[26,60],H:[0,87]},easterling:{a:[-40,-47.5],b:[0,-47.5],c:[40,-47.5],d:[-40,0],e:[0,0],f:[40,0],g:[-40,47.5],h:[0,47.5],i:[40,47.5],y:[-42.5,-52.5],z:[0,65],j:[-30,-37.5],k:[0,-37.5],l:[30,-37.5],m:[-30,37.5],n:[0,37.5],o:[30,37.5],p:[-30,0],q:[30,0],A:[-52,-72],B:[0,-65],D:[52,-72],K:[-52,-24],E:[52,-24],J:[-52,24],F:[52,24],I:[-52,72],G:[52,72],H:[0,65]},erebor:{a:[-40,-40],b:[0,-55],c:[40,-40],d:[-40,0],e:[0,0],f:[40,0],g:[-40,40],h:[0,55],i:[40,40],y:[-50,-50],z:[0,50],j:[-35,-35],k:[0,-45],l:[35,-35],m:[-35,35],n:[0,45],o:[35,35],p:[-37.5,0],q:[37.5,0],A:[-47,-46],B:[-22,-81],C:[22,-81],D:[47,-46],K:[-66.5,0],E:[66.5,0],J:[-47,46],F:[47,46],I:[-22,81],G:[22,81]},ironHills:{a:[-43.75,-50],b:[0,-50],c:[43.75,-50],d:[-43.25,0],e:[0,0],f:[43.25,0],g:[-42.5,42.5],h:[0,50],i:[42.5,42.5],y:[-50,-50],z:[0,62.5],j:[-32.5,-32.5],k:[0,-40],l:[32.5,-32.5],m:[-32.5,32.5],n:[0,40],o:[32.5,32.5],p:[-37.5,0],q:[37.5,0],A:[-61,-67],B:[-22,-74],C:[22,-74],D:[61,-67],K:[-59,-20],E:[59,-20],J:[-57,26],F:[57,26],I:[-33,64],G:[33,64],H:[0,88]},urukHai:{a:[-40,-45],b:[0,-45],c:[40,-45],d:[-36,0],e:[0,0],f:[36,0],g:[-32.25,40],h:[0,40],i:[32.25,40],y:[-50,-50],z:[0,40],j:[-32.5,-32.5],k:[0,-37.5],l:[32.5,-32.5],m:[-27.5,27.5],n:[0,32.5],o:[27.5,27.5],p:[-37.5,0],q:[37.5,0],A:[-31,-79],B:[-1,-90],C:[31,-74],D:[61,-57],K:[-55,-19],E:[53,-19],J:[-45,19],F:[45,19],I:[-33,57],G:[35,57],H:[0,57],L:[-39,-50]},moriaOrc:{a:[-37.5,-37.5],b:[0,-37.5],c:[37.5,-37.5],d:[-37.5,0],e:[0,0],f:[37.5,0],g:[-37.5,37.5],h:[0,37.5],i:[37.5,37.5],y:[-50,-50],z:[0,40],j:[-30,-30],k:[0,-30],l:[30,-30],m:[-30,30],n:[0,30],o:[30,30],p:[-30,0],q:[30,0],A:[-48,-48],B:[-16,-50],C:[16,-46],D:[39,-61],K:[-52,-19],E:[52,-26],J:[-42,9],F:[52,9],I:[-31,40],G:[40,43],H:[4,47]}},n={horsehead:.9,horsehead2:.9,polish:.85,swiss:.95,boeotian:.75,roman:.95,kite:.65,targe2:.9,pavise:.9,wedged:.95,flag:.7,pennon:.5,guidon:.65,banner:.8,dovetail:.8,pennant:.6,oval:.95,vesicaPiscis:.8,diamond:.8,no:1.2,fantasy1:.8,fantasy2:.7,fantasy3:.7,fantasy5:.9,noldor:.5,gondor:.75,easterling:.8,erebor:.9,urukHai:.8,moriaOrc:.7},i={heater:"0 10 200 200",spanish:"0 10 200 200",french:"0 10 200 200",horsehead:"0 10 200 200",horsehead2:"0 10 200 200",polish:"0 0 200 200",hessen:"0 5 200 200",swiss:"0 10 200 200",boeotian:"0 0 200 200",roman:"0 0 200 200",kite:"0 0 200 200",oldFrench:"0 10 200 200",renaissance:"0 5 200 200",baroque:"0 10 200 200",targe:"0 0 200 200",targe2:"0 0 200 200",pavise:"0 0 200 200",wedged:"0 10 200 200",flag:"0 0 200 200",pennon:"2.5 0 200 200",guidon:"2.5 0 200 200",banner:"0 10 200 200",dovetail:"0 10 200 200",gonfalon:"0 10 200 200",pennant:"0 0 200 200",round:"0 0 200 200",oval:"0 0 200 200",vesicaPiscis:"0 0 200 200",square:"0 0 200 200",diamond:"0 0 200 200",no:"0 0 200 200",fantasy1:"0 0 200 200",fantasy2:"0 5 200 200",fantasy3:"0 5 200 200",fantasy4:"0 5 200 200",fantasy5:"0 0 200 200",noldor:"0 0 200 200",gondor:"0 5 200 200",easterling:"0 0 200 200",erebor:"0 0 200 200",ironHills:"0 5 200 200",urukHai:"0 0 200 200",moriaOrc:"0 0 200 200"},r={heater:"m25,25 h150 v50 a150,150,0,0,1,-75,125 a150,150,0,0,1,-75,-125 z",spanish:"m25,25 h150 v100 a75,75,0,0,1,-150,0 z",french:"m 25,25 h 150 v 139.15 c 0,41.745 -66,18.15 -75,36.3 -9,-18.15 -75,5.445 -75,-36.3 v 0 z",horsehead:"m 20,40 c 0,60 40,80 40,100 0,10 -4,15 -0.35,30 C 65,185.7 81,200 100,200 c 19.1,0 35.3,-14.6 40.5,-30.4 C 144.2,155 140,150 140,140 140,120 180,100 180,40 142.72,40 150,15 100,15 55,15 55,40 20,40 Z",horsehead2:"M60 20c-5 20-10 35-35 55 25 35 35 65 30 100 20 0 35 10 45 26 10-16 30-26 45-26-5-35 5-65 30-100a87 87 0 01-35-55c-25 3-55 3-80 0z",polish:"m 90.3,6.3 c -12.7,0 -20.7,10.9 -40.5,14 0,11.8 -4.9,23.5 -11.4,31.1 0,0 12.7,6 12.7,19.3 C 51.1,90.8 30,90.8 30,90.8 c 0,0 -3.6,7.4 -3.6,22.4 0,34.3 23.1,60.2 40.7,68.2 17.6,8 27.7,11.4 32.9,18.6 5.2,-7.3 15.3,-10.7 32.8,-18.6 17.6,-8 40.7,-33.9 40.7,-68.2 0,-15 -3.6,-22.4 -3.6,-22.4 0,0 -21.1,0 -21.1,-20.1 0,-13.3 12.7,-19.3 12.7,-19.3 C 155.1,43.7 150.2,32.1 150.2,20.3 130.4,17.2 122.5,6.3 109.7,6.3 102.5,6.3 100,10 100,10 c 0,0 -2.5,-3.7 -9.7,-3.7 z",hessen:"M170 20c4 5 8 13 15 20 0 0-10 0-10 15 0 100-15 140-75 145-65-5-75-45-75-145 0-15-10-15-10-15l15-20c0 15 10-5 70-5s70 20 70 5z",swiss:"m 25,20 c -0.1,0 25.2,8.5 37.6,8.5 C 75.1,28.5 99.1,20 100,20 c 0.6,0 24.9,8.5 37.3,8.5 C 149.8,28.5 174.4,20 175,20 l -0.3,22.6 C 173.2,160.3 100,200 100,200 100,200 26.5,160.9 25.2,42.6 Z",boeotian:"M150 115c-5 0-10-5-10-15s5-15 10-15c10 0 7 10 15 10 10 0 0-30 0-30-10-25-30-55-65-55S45 40 35 65c0 0-10 30 0 30 8 0 5-10 15-10 5 0 10 5 10 15s-5 15-10 15c-10 0-7-10-15-10-10 0 0 30 0 30 10 25 30 55 65 55s55-30 65-55c0 0 10-30 0-30-8 0-5 10-15 10z",roman:"m 160,170 c -40,20 -80,20 -120,0 V 30 C 80,10 120,10 160,30 Z",kite:"m 53.3,46.4 c 0,4.1 1,12.3 1,12.3 7.1,55.7 45.7,141.3 45.7,141.3 0,0 38.6,-85.6 45.7,-141.2 0,0 1,-8.1 1,-12.3 C 146.7,20.9 125.8,0.1 100,0.1 74.2,0.1 53.3,20.9 53.3,46.4 Z",oldFrench:"m25,25 h150 v75 a100,100,0,0,1,-75,100 a100,100,0,0,1,-75,-100 z",renaissance:"M 25,33.9 C 33.4,50.3 36.2,72.9 36.2,81.7 36.2,109.9 25,122.6 25,141 c 0,29.4 24.9,44.1 40.2,47.7 15.3,3.7 29.3,0 34.8,11.3 5.5,-11.3 19.6,-7.6 34.8,-11.3 C 150.1,185 175,170.3 175,141 c 0,-18.4 -11.2,-31.1 -11.2,-59.3 0,-8.8 2.8,-31.3 11.2,-47.7 L 155.7,14.4 C 138.2,21.8 119.3,25.7 100,25.7 c -19.3,0 -38.2,-3.9 -55.7,-11.3 z",baroque:"m 100,25 c 18,0 50,2 75,14 v 37 l -2.7,3.2 c -4.9,5.4 -6.6,9.6 -6.7,16.2 0,6.5 2,11.6 6.9,17.2 l 2.8,3.1 v 10.2 c 0,17.7 -2.2,27.7 -7.8,35.9 -5,7.3 -11.7,11.3 -32.3,19.4 -12.6,5 -20.2,8.8 -28.6,14.5 C 103.3,198 100,200 100,200 c 0,0 -2.8,-2.3 -6.4,-4.7 C 85.6,189.8 78,186 65,180.9 32.4,168.1 26.9,160.9 25.8,129.3 L 25,116 l 3.3,-3.3 c 4.8,-5.2 7,-10.7 7,-17.3 0,-6.8 -1.8,-11.1 -6.5,-16.1 L 25,76 V 39 C 50,27 82,25 100,25 Z",targe:"m 20,35 c 15,0 115,-60 155,-10 -5,10 -15,15 -10,50 5,45 10,70 -10,90 C 125,195 75,195 50,175 25,150 30,130 35,85 50,95 65,85 65,70 65,50 50,45 40,50 30,55 27,65 30,70 23,73 20,70 14,70 11,60 20,45 20,35 Z",targe2:"m 84,32.2 c 6.2,-1 19.5,-31.4 94.1,-20.2 -30.57,33.64 -21.66,67.37 -11.2,95 20.2,69.5 -41.17549,84.7 -66.88,84.7 C 74.32,191.7071 8.38,168.95 32,105.9 36.88,92.88 31,89 31,82.6 35.15,82.262199 56.79,86.17 56.5,69.8 56.20,52.74 42.2,47.9 25.9,55.2 25.9,51.4 39.8,6.7 84,32.2 Z",pavise:"M95 7L39.9 37.3a10 10 0 00-5.1 9.5L46 180c.4 5.2 3.7 10 9 10h90c5.3 0 9.6-4.8 10-10l10.6-133.2a10 10 0 00-5-9.5L105 7c-4.2-2.3-6.2-2.3-10 0z",wedged:"m 51.2,19 h 96.4 c 3.1,12.7 10.7,20.9 26.5,20.8 C 175.7,94.5 165.3,144.3 100,200 43.5,154.2 22.8,102.8 25.1,39.7 37,38.9 47.1,34.7 51.2,19 Z",round:"m 185,100 a 85,85 0 0 1 -85,85 85,85 0 0 1 -85,-85 85,85 0 0 1 85,-85 85,85 0 0 1 85,85",oval:"m 32.3,99.5 a 67.7,93.7 0 1 1 0,1.3 z",vesicaPiscis:"M 100,0 C 63.9,20.4 41,58.5 41,100 c 0,41.5 22.9,79.6 59,100 36.1,-20.4 59,-58.5 59,-100 C 159,58.5 136.1,20.4 100,0 Z",square:"M 25,25 H 175 V 175 H 25 Z",diamond:"M 25,100 100,200 175,100 100,0 Z",no:"m0,0 h200 v200 h-200 z",flag:"M 10,40 h180 v120 h-180 Z",pennon:"M 10,40 l190,60 -190,60 Z",guidon:"M 10,40 h190 l-65,60 65,60 h-190 Z",banner:"m 25,25 v 170 l 25,-40 25,40 25,-40 25,40 25,-40 25,40 V 25 Z",dovetail:"m 25,25 v 175 l 75,-40 75,40 V 25 Z",gonfalon:"m 25,25 v 125 l 75,50 75,-50 V 25 Z",pennant:"M 25,15 100,200 175,15 Z",fantasy1:"M 100,5 C 85,30 40,35 15,40 c 40,35 20,90 40,115 15,25 40,30 45,45 5,-15 30,-20 45,-45 20,-25 0,-80 40,-115 C 160,35 115,30 100,5 Z",fantasy2:"m 152,21 c 0,0 -27,14 -52,-4 C 75,35 48,21 48,21 50,45 30,55 30,75 60,75 60,115 32,120 c 3,40 53,50 68,80 15,-30 65,-40 68,-80 -28,-5 -28,-45 2,-45 C 170,55 150,45 152,21 Z",fantasy3:"M 167,67 C 165,0 35,0 33,67 c 32,-7 27,53 -3,43 -5,45 60,65 70,90 10,-25 75,-47.51058 70,-90 -30,10 -35,-50 -3,-43 z",fantasy4:"M100 9C55 48 27 27 13 39c23 50 3 119 49 150 14 9 28 11 38 11s27-4 38-11c55-39 24-108 49-150-14-12-45 7-87-30z",fantasy5:"M 100,0 C 75,25 30,25 30,25 c 0,69 20,145 70,175 50,-30 71,-106 70,-175 0,0 -45,0 -70,-25 z",noldor:"m 55,75 h 2 c 3,-25 38,-10 3,20 15,50 30,75 40,105 10,-30 25,-55 40,-105 -35,-30 0,-45 3,-20 h 2 C 150,30 110,20 100,0 90,20 50,30 55,75 Z",gondor:"m 100,200 c 15,-15 38,-35 45,-60 h 5 V 30 h -5 C 133,10 67,10 55,30 h -5 v 110 h 5 c 7,25 30,45 45,60 z",easterling:"M 160,185 C 120,170 80,170 40,185 V 15 c 40,15 80,15 120,0 z",erebor:"M25 135 V60 l22-13 16-37 h75 l15 37 22 13 v75l-22 18-16 37 H63l-16-37z",ironHills:"m 30,25 60,-10 10,10 10,-10 60,10 -5,125 -65,50 -65,-50 z",urukHai:"M 30,60 C 40,60 60,50 60,20 l -5,-3 45,-17 75,40 -5,5 -35,155 -5,-35 H 70 v 35 z",moriaOrc:"M45 35c5 3 7 10 13 9h19c4-2 7-4 9-9 6 1 9 9 16 11 7-2 14 0 21 0 6-3 6-10 10-15 2-5 1-10-2-15-2-4-5-14-4-16 3 6 7 11 12 14 7 3 3 12 7 16 3 6 4 12 9 18 2 4 6 8 5 14 0 6-1 12 3 18-3 6-2 13-1 20 1 6-2 12-1 18 0 6-3 13 0 18 8 4 0 8-5 7-4 3-9 3-13 9-5 5-5 13-8 19 0 6 0 15-7 16-1 6-7 6-10 12-1-6 0-6-2-9l2-19c2-4 5-12-3-12-4-5-11-5-15 1l-13-18c-3-4-2 9-3 12 2 2-4-6-7-5-8-2-8 7-11 11-2 4-5 10-8 9 3-10 3-16 1-23-1-4 2-9-4-11 0-6 1-13-2-19-4-2-9-6-13-7V91c4-7-5-13 0-19-3-7 2-11 2-18-1-6 1-12 3-17v-1z"},c={straight:"m 0,100 v15 h 200 v -15 z",engrailed:"m 0,95 a 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 v 20 H 0 Z",invecked:"M0,102.5 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 v12.5 H0 z",embattled:"M 0,105 H 2.5 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 2.5 v 10 H 0 Z",wavy:"m 200,115 v -15 c -8.9,3.5 -16,3.1 -25,0 -8.9,-3.5 -16,-3.1 -25,0 -8.9,3.5 -16,3.2 -25,0 -8.9,-3.5 -16,-3.2 -25,0 -8.9,3.5 -16,3.1 -25,0 -8.9,-3.5 -16,-3.1 -25,0 -8.9,3.5 -16,3.2 -25,0 -8.9,-3.5 -16,-3.2 -25,0 v 15 z",raguly:"m 200,95 h -3 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 H 97 l -5,10 H 82 L 87,95 H 77 l -5,10 H 62 L 67,95 H 57 l -5,10 H 42 L 47,95 H 37 l -5,10 H 22 L 27,95 H 17 l -5,10 H 2 L 7,95 H 0 v 20 h 200 z",dancetty:"m 0,105 10,-15 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 10,15 v 10 H 0 Z",dentilly:"M 180,105 170,95 v 10 L 160,95 v 10 L 150,95 v 10 L 140,95 v 10 L 130,95 v 10 L 120,95 v 10 L 110,95 v 10 L 100,95 v 10 L 90,95 v 10 L 80,95 v 10 L 70,95 v 10 L 60,95 v 10 L 50,95 v 10 L 40,95 v 10 L 30,95 v 10 L 20,95 v 10 L 10,95 v 10 L 0,95 v 20 H 200 V 105 L 190,95 v 10 L 180,95 Z",angled:"m 0,95 h 100 v 10 h 100 v 10 H 0 Z",urdy:"m 200,90 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,6 -5,-6 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,6 -5,-6 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 L 0,90 v 25 h 200",indented:"m 100,95 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 v 20 H 0 V 95 l 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 z",bevilled:"m 0,92.5 h 110 l -20,15 H 200 V 115 H 0 Z",nowy:"m 0,95 h 80 c 0,0 0.1,20.1 20,20 19.9,-0.1 20,-20 20,-20 h 80 v 20 H 0 Z",nowyReversed:"m 200,105 h -80 c 0,0 -0.1,-20.1 -20,-20 -19.9,0.1 -20,20 -20,20 H 0 v 10 h 200 z",potenty:"m 3,95 v 5 h 5 v 5 H 0 v 10 h 200 l 0.5,-10 H 193 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 H 100.5 93 v -5 h 5 V 95 H 83 v 5 h 5 v 5 H 73 v -5 h 5 V 95 H 63 v 5 h 5 v 5 H 53 v -5 h 5 V 95 H 43 v 5 h 5 v 5 H 33 v -5 h 5 V 95 H 23 v 5 h 5 v 5 H 13 v -5 h 5 v -5 z",potentyDexter:"m 200,105 h -2 v -10 0 0 h -10 v 5 h 5 v 5 H 183 V 95 h -10 v 5 h 5 v 5 H 168 V 95 h -10 v 5 h 5 v 5 H 153 V 95 h -10 v 5 h 5 v 5 H 138 V 95 h -10 v 5 h 5 v 5 H 123 V 95 h -10 v 5 h 5 v 5 h -10 v 0 0 -10 H 98 v 5 h 5 v 5 H 93 V 95 H 83 v 5 h 5 v 5 H 78 V 95 H 68 v 5 h 5 v 5 H 63 V 95 H 53 v 5 h 5 v 5 H 48 V 95 H 38 v 5 h 5 v 5 H 33 V 95 H 23 v 5 h 5 v 5 H 18 V 95 H 8 v 5 h 5 v 5 H 3 V 95 H 0 v 20 h 200 z",potentySinister:"m 2.5,95 v 10 H 0 v 10 h 202.5 v -15 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 z",embattledGhibellin:"M 200,200 V 100 l -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 v 15 h 200",embattledNotched:"m 200,105 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 H 90 V 95 l -5,5 -5,-5 v 10 H 75 V 95 l -5,5 -5,-5 v 10 H 60 V 95 l -5,5 -5,-5 v 10 H 45 V 95 l -5,5 -5,-5 v 10 H 30 V 95 l -5,5 -5,-5 v 10 H 15 V 95 l -5,5 -5,-5 v 10 H 0 v 10 h 200",embattledGrady:"m 0,95 v 20 H 200 V 95 h -2.5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 z",dovetailed:"m 200,95 h -7 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 H 93 l 4,10 H 83 L 87,95 H 73 l 4,10 H 63 L 67,95 H 53 l 4,10 H 43 L 47,95 H 33 l 4,10 H 23 L 27,95 H 13 l 4,10 H 3 L 7,95 H 0 v 20 h 200",dovetailedIndented:"m 200,100 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 v 15 h 200",nebuly:"m 13.1,89.8 c -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.2,4.5 -7.3,4.5 -0.5,0 -2.2,-0.2 -2.2,-0.2 V 115 h 200 v -10.1 c -3.7,-0.2 -6.7,-2.2 -6.7,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.8,-1.9 1.8,-3.1 0,-2.5 -3.2,-4.5 -7.2,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.8,-1.9 1.8,-3.1 0,-2.5 -3.2,-4.5 -7.2,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 -1.5,4.1 -4.2,4.4 -8.8,4.5 -4.7,-0.1 -8.7,-1.5 -8.9,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 z",rayonne:"M0 115l-.1-6 .2.8c1.3-1 2.3-2.5 2.9-4.4.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4A9 9 0 015.5 90c-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 2.1 3.1 3.1 4.6 1 1.6 2.4 3.1 2.7 4.8.3 1.7.3 3.3 0 5.2 1.3-1 2.6-2.7 3.2-4.6.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.75 2.79 2.72 4.08 4.45 5.82L200 115z",seaWaves:"m 28.83,94.9 c -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.44,-3.6 3.6,-3.6 0.7,0 1.36,0.17 1.93,0.48 -0.33,-2.03 -2.19,-3.56 -4.45,-3.56 -4.24,0 -6.91,3.13 -8.5,5.13 V 115 h 200 v -14.89 c -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.44,-3.6 3.6,-3.6 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -6.6,3.09 -8.19,5.09 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 z",dragonTeeth:"M 9.4,85 C 6.5,88.1 4.1,92.9 3,98.8 1.9,104.6 2.3,110.4 3.8,115 2.4,113.5 0,106.6 0,109.3 v 5.7 h 200 v -5.7 c -1.1,-2.4 -2,-5.1 -2.6,-8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -1.4,-1.5 -2.8,-3.9 -3.8,-6.1 -1.1,-2.4 -2.3,-6.1 -2.6,-7.7 -0.2,-5.9 0.2,-11.7 1.7,-16.3 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1,-5.8 -0.7,-11.6 0.9,-16.2 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.9,-16.2 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 C 63,95.4 63.4,89.6 64.9,85 c -2.9,3.1 -5.3,7.9 -6.3,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1,5.8 -0.6,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1,5.8 -0.7,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 C 18.6,95.4 19,89.6 20.5,85 17.6,88.1 15.2,92.9 14.1,98.8 13,104.6 13.4,110.4 14.9,115 12,111.9 9.6,107.1 8.6,101.2 7.5,95.4 7.9,89.6 9.4,85 Z",firTrees:"m 3.9,90 -4,7 2,-0.5 L 0,100 v 15 h 200 v -15 l -1.9,-3.5 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4.1,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4.1,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 z",flechy:"m 0,100 h 85 l 15,-15 15,15 h 85 v 15 H 0 Z",barby:"m 0,100 h 85 l 15,15 15,-15 h 85 v 15 H 0 Z",enclavy:"M 0,100 H 85 V 85 h 30 v 15 h 85 v 15 H 0 Z",escartely:"m 0,100 h 85 v 15 h 30 v -15 h 85 v 15 H 0 Z",arched:"m 100,95 c 40,-0.2 100,20 100,20 H 0 c 0,0 60,-19.8 100,-20 z",archedReversed:"m 0,85 c 0,0 60,20.2 100,20 40,-0.2 100,-20 100,-20 v 30 H 0 Z"},f={perFess:'',perPale:'',perBend:'',perBendSinister:'',perChevron:'',perChevronReversed:'',perCross:'',perPile:'',perSaltire:'',gyronny:'',chevronny:'',perFessLined:o=>``,perPaleLined:o=>``,perBendLined:o=>``,perBendSinisterLined:o=>``,perChevronLined:o=>``,perChevronReversedLined:o=>``,perCrossLined:o=>``,perPileLined:o=>``,fess:'',pale:'',bend:'',bendSinister:'',chief:'',bar:'',gemelle:'',fessCotissed:'',fessDoubleCotissed:'',bendlet:'',bendletSinister:'',terrace:'',cross:'',crossParted:'',saltire:'',saltireParted:'',mount:'',point:'',flaunches:'',gore:'',pall:'',pallReversed:'',chevron:'',chevronReversed:'',gyron:'',quarter:'',canton:'',pile:'',pileInBend:'',pileInBendSinister:'',piles:'',pilesInPoint:'',label:'',fessLined:o=>``,paleLined:o=>``,bendLined:o=>``,bendSinisterLined:o=>``,chiefLined:o=>``,barLined:o=>``,gemelleLined:o=>``,fessCotissedLined:o=>``,fessDoubleCotissedLined:o=>``,bendletLined:o=>``,bendletSinisterLined:o=>``,terraceLined:o=>``,crossLined:o=>``,crossPartedLined:o=>``,saltireLined:o=>``,saltirePartedLined:o=>``},z={semy:(o,l,a,w,S)=>``,vair:(o,l,a,w)=>``,counterVair:(o,l,a,w)=>``,vairInPale:(o,l,a,w)=>``,vairEnPointe:(o,l,a,w)=>``,vairAncien:(o,l,a,w)=>``,potent:(o,l,a,w)=>``,counterPotent:(o,l,a,w)=>``,potentInPale:(o,l,a,w)=>``,potentEnPointe:(o,l,a,w)=>``,ermine:(o,l,a,w)=>``,chequy:(o,l,a,w)=>``,lozengy:(o,l,a,w)=>``,fusily:(o,l,a,w)=>``,pally:(o,l,a,w)=>``,barry:(o,l,a,w)=>``,gemelles:(o,l,a,w)=>``,bendy:(o,l,a,w)=>``,bendySinister:(o,l,a,w)=>``,palyBendy:(o,l,a,w)=>``,barryBendy:(o,l,a,w)=>``,pappellony:(o,l,a,w)=>``,pappellony2:(o,l,a,w)=>``,scaly:(o,l,a,w)=>``,plumetty:(o,l,a,w)=>``,masoned:(o,l,a,w)=>``,fretty:(o,l,a,w)=>``,grillage:(o,l,a,w)=>``,chainy:(o,l,a,w)=>``,maily:(o,l,a,w)=>``,honeycombed:(o,l,a,w)=>``},m=async function(o,l){const{shield:a,division:w,ordinaries:S=[],charges:h=[]}=l,v=S.filter(Y=>!Y.above),E=S.filter(Y=>Y.above),P=r[a],T=w?w.t.includes("-")?w.t.split("-")[1]:w.t:null,R=t[a],L=n[a]||1,M=i[a]||"0 0 200 200",I=``,H=w?`${p(w.division,w.line)}`:"",G=await b(l,o,P),D=C(l,o),U=``,F=``,j=w?q():"",Z=``,te=` + ${I}${H}${G}${D}${U} + ${F}${j}${X()} + ${Z}`;return document.getElementById("coas").insertAdjacentHTML("beforeend",te),!0;function q(){let Y="";for(const W of v)W.divided==="field"?Y+=ee(W,W.t):W.divided==="counter"&&(Y+=ee(W,T));for(const W of h)W.divided==="field"?Y+=le(W,W.t):W.divided==="counter"&&(Y+=le(W,T));for(const W of E)W.divided==="field"?Y+=ee(W,W.t):W.divided==="counter"&&(Y+=ee(W,T));Y+=``;for(const W of v)W.divided==="division"?Y+=ee(W,W.t):W.divided==="counter"&&(Y+=ee(W,l.t1));for(const W of h)W.divided==="division"?Y+=le(W,W.t):W.divided==="counter"&&(Y+=le(W,l.t1));for(const W of E)W.divided==="division"?Y+=ee(W,W.t):W.divided==="counter"&&(Y+=ee(W,l.t1));return Y+=""}function X(){let Y="";return v.filter(W=>!W.divided).forEach(W=>{Y+=ee(W,W.t)}),h.filter(W=>!W.divided||!w).forEach(W=>{Y+=le(W,W.t)}),E.filter(W=>!W.divided).forEach(W=>{Y+=ee(W,W.t)}),Y}function ee(Y,W){const de=B(W);let me=``;return Y.ordinary==="bordure"?me+=``:Y.ordinary==="orle"?me+=``:me+=p(Y.ordinary,Y.line),me+""}function le(Y,W){const de=B(W),me=[...new Set(Y.p)].filter(ke=>R[ke]);let pe="";pe+=``;for(const ke of me){const He=we(Y,ke);pe+=``}return pe+"";function we(ke,He){const Be=(ke.size||1)*L,Fe=ke.sinister?-Be:Be,_=ke.reversed?-Be:Be;let[oe,ce]=R[He];oe=oe-100*(Fe-1),ce=ce-100*(_-1);const ye=ke.sinister||ke.reversed?`${Fe} ${_}`:Be;return`translate(${oe} ${ce}) scale(${ye})`}}};async function b(o,l,a){var v;let w=o.charges?o.charges.map(E=>E.charge):[];k(o.t1)&&w.push(k(o.t1)),k((v=o.division)==null?void 0:v.t)&&w.push(k(o.division.t));const S=[...new Set(w)];return(await Promise.all(S.map(async E=>E==="inescutcheon"?``:await u(E,l)))).join("")}const A=location.hostname?"./charges/":"http://armoria.herokuapp.com/charges/";async function u(o,l){return fetch(A+o+".svg").then(w=>{if(w.ok)return w.text();throw new Error("Cannot fetch charge")}).then(w=>{const S=document.createElement("html");S.innerHTML=w;const h=S.querySelector("g");return h.setAttribute("id",o+"_"+l),h.outerHTML}).catch(w=>{ERROR&&console.error(w)})}function C(o,l){const a=S=>S.includes("-");let w=[];return o.t1.includes("-")&&w.push(o.t1),o.division&&a(o.division.t)&&w.push(o.division.t),o.ordinaries&&o.ordinaries.filter(S=>a(S.t)).forEach(S=>w.push(S.t)),o.charges&&o.charges.filter(S=>a(S.t)).forEach(S=>w.push(S.t)),w.length?[...new Set(w)].map(S=>{const[h,v,E,P]=S.split("-"),T=k(S);return T?z.semy(S,B(v),B(E),g(P),T+"_"+l):z[h](S,B(v),B(E),g(P),T)}).join(""):""}function g(o){return o==="small"?.8:o==="smaller"?.5:o==="smallest"?.25:o==="big"?1.6:1}function p(o,l){const a=o+"Lined";if(!l||l==="straight"||!f[a])return f[o];const w=c[l];return f[a](w)}function B(o){return e[o]?e[o]:`url(#${o})`}function k(o){return/^semy/.test(o)?o.match(/semy_of_(.*?)-/)[1]:!1}const d=async function(o,l){if(l==="custom"){console.warn("Cannot render custom emblem",l);return}if(!l){console.warn(`Emblem ${o} is undefined`);return}if(!document.getElementById(o))return m(o,l)};return{trigger:d,add:function(o,l,a,w,S){const h=o+"COA"+l,v=document.getElementById(o+"Emblems");if(emblems.selectAll("use").size()){const E=+v.getAttribute("font-size")||50,P=``;v.insertAdjacentHTML("beforeend",P)}layerIsOn("toggleEmblems")&&d(h,a)},shieldPaths:r}}();const tn=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;tn||console.error("indexedDB not supported");const Mt=tn.open("d2",1);Mt.onsuccess=function(){this.result};Mt.onerror=function(e){console.error("indexedDB request error",e)};Mt.onupgradeneeded=function(e){const t=Mt.result.createObjectStore("s",{keyPath:"k"});t.transaction.oncomplete=function(n){n.target.db}};const Vt=function(){if(localStorage.getItem("noReminder"))return;const e=["Please don't forget to save your work as a .map file","Please remember to save work as a .map file","Saving in .map format will ensure your data won't be lost in case of issues","Safety is number one priority. Please save the map","Don't forget to save your map on a regular basis!","Just a gentle reminder for you to save the map","Please don't forget to save your progress (saving as .map is the best option)","Don't want to be reminded about need to save? Press CTRL+Q"],t=15*60*1e3;Vt.reminder=setInterval(()=>{customization||se(ie(e),!0,"warn",2500)},t),Vt.status=1};Vt();window.Cloud=function(){const e=c=>`auth-${c}`,t=(c,f)=>localStorage.setItem(e(c),f),n=c=>localStorage.getItem(e(c));return{providers:{dropbox:{name:"dropbox",clientId:"pdr9ae64ip0qno4",authWindow:void 0,token:null,api:null,async call(c,f){try{return this.api||await this.initialize(),await this.api[c](f)}catch(z){if(z.name!=="DropboxResponseError")throw z;return await this.auth(),await this.api[c](f)}},initialize(){const c=n(this.name);return c?this.connect(c):this.auth()},async connect(c){await St(()=>import("./dropbox-sdk.min.f49dfee9.js"),[]);const f=new Dropbox.DropboxAuth({clientId:this.clientId});f.setAccessToken(c),this.api=new Dropbox.Dropbox({auth:f})},async save(c,f){const z=await this.call("filesUpload",{path:"/"+c,contents:f});return DEBUG&&console.log("Dropbox response:",z),!0},async load(c){const z=(await this.call("filesDownload",{path:c})).result.fileBlob;if(!z)throw new Error("Invalid response from dropbox.");return z},async list(){return(await this.call("filesListFolder",{path:""})).result.entries.map(({name:z,client_modified:m,size:b,path_lower:A})=>({name:z,updated:m,size:b,path:A})).filter(({size:z})=>z).reverse()},auth(){const z=window.innerWidth/2-320,m=window.innerHeight/2-480/2.5;return this.authWindow=window.open("./dropbox.html","auth",`width=640, height=${480}, top=${m}, left=${z}}`),new Promise((b,A)=>{const u=setTimeout(()=>{this.authWindow.close(),A(new Error("Timeout. No auth for Dropbox"))},12e4);window.addEventListener("dropboxauth",C=>{clearTimeout(u),b()})})},async setDropBoxToken(c){DEBUG&&console.log("Access token:",c),t(this.name,c),await this.connect(c),this.authWindow.close(),window.dispatchEvent(new Event("dropboxauth"))},returnError(c){console.error(c),se(c.replaceAll("+"," "),!0,"error",4e3),this.authWindow.close()},async getLink(c){if((await this.call("sharingListSharedLinks",{path:c})).result.links.length)return m.result.links[0].url;const z={require_password:!1,audience:"public",access:"viewer",requested_visibility:"public",allow_download:!0},m=await this.call("sharingCreateSharedLinkWithSettings",{path:c,settings:z});return DEBUG&&console.log("Dropbox link object:",m.result),m.result.url}}}}}();window.Formats=function(){async function e(t,n=","){const r=(await t.text()).split(` +`),c=r.shift().split(n).map(z=>z.toLowerCase()),f=r.filter(z=>z.trim()!=="").map(z=>z.split(n));return{headers:c,data:f,iterator:function*(z){const m=z?this.data.sort(z):this.data;for(const b of m)yield Object.fromEntries(b.map((A,u)=>[this.headers[u],A]))}}}return{csvParser:e}}();export{Jt as a,ne as b,ba as c,Xs as d,Qt as e,Xt as f,yn as g,Ys as i,O as r,fn as s,se as t}; diff --git a/dist/assets/installation.aec0617b.js b/dist/assets/installation.aec0617b.js new file mode 100644 index 00000000..ffe59cf9 --- /dev/null +++ b/dist/assets/installation.aec0617b.js @@ -0,0 +1,9 @@ +import{t as l}from"./index.73bf34f9.js";let n=null,o=null;function r(t){localStorage.getItem("installationDontAsk")||(n=i(),o=t,window.addEventListener("appinstalled",()=>{l("Application is installed",!1,"success",8e3),cleanup()}))}function i(){const t=document.createElement("button");return t.style=` + position: fixed; + top: 1em; + right: 1em; + padding: 0.6em 0.8em; + width: auto; + `,t.className="options glow",t.innerHTML="Install",t.onclick=a,t.onmouseenter=()=>l("Install the Application"),document.querySelector("body").appendChild(t),t}function a(){alertMessage.innerHTML=`You can install the tool so that it will look and feel like desktop application: + have its own icon on your home screen and work offline with some limitations + `,$("#alert").dialog({resizable:!1,title:"Install the Application",width:"38em",buttons:{Install:function(){$(this).dialog("close"),o.prompt()},Cancel:function(){$(this).dialog("close")}},open:function(){const e='';this.parentElement.querySelector(".ui-dialog-buttonpane").insertAdjacentHTML("afterbegin",e)},close:function(){const e=this.parentElement.querySelector(".checkbox");e!=null&&e.checked&&(localStorage.setItem("installationDontAsk",!0),t()),$(this).dialog("destroy")}});function t(){n.remove(),n=null,o=null}}export{r as init}; diff --git a/dist/assets/maskable_icon_x192.8df7457d.png b/dist/assets/maskable_icon_x192.8df7457d.png new file mode 100644 index 0000000000000000000000000000000000000000..3322eab3186c39fd72caf18199106815322b5bfb GIT binary patch literal 16330 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 fn+~B$e{y;sdz)%CdvYQJ0|SGntDnm{r-UW| + + + + + Azgaar's Fantasy Map Generator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + +
    +
    Azgaar's
    +
    Fantasy Map Generator
    +
    v
    +

    LOADING...

    +
    +
    + +
    +
    + + +
    + + +
    + +
    +
    + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + Port + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html index 00b5590f..aea12cc9 100644 --- a/index.html +++ b/index.html @@ -108,9 +108,9 @@ } - - - + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/package.json b/package.json index 5065b242..dc5a6c70 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ }, "devDependencies": { "typescript": "^4.7.4", - "vite": "^2.9.12" + "vite": "^3.0.0-beta.3" }, "dependencies": { "lineclip": "^1.1.5" diff --git a/config/heightmap-templates.js b/src/config/heightmap-templates.js similarity index 100% rename from config/heightmap-templates.js rename to src/config/heightmap-templates.js diff --git a/config/precreated-heightmaps.js b/src/config/precreated-heightmaps.js similarity index 100% rename from config/precreated-heightmaps.js rename to src/config/precreated-heightmaps.js diff --git a/icons.css b/src/icons.css similarity index 100% rename from icons.css rename to src/icons.css diff --git a/index.css b/src/index.css similarity index 100% rename from index.css rename to src/index.css diff --git a/libs/alea.min.js b/src/libs/alea.min.js similarity index 100% rename from libs/alea.min.js rename to src/libs/alea.min.js diff --git a/libs/d3.min.js b/src/libs/d3.min.js similarity index 100% rename from libs/d3.min.js rename to src/libs/d3.min.js diff --git a/libs/delaunator.min.js b/src/libs/delaunator.min.js similarity index 100% rename from libs/delaunator.min.js rename to src/libs/delaunator.min.js diff --git a/libs/dropbox-sdk.min.js b/src/libs/dropbox-sdk.min.js similarity index 100% rename from libs/dropbox-sdk.min.js rename to src/libs/dropbox-sdk.min.js diff --git a/libs/jquery-3.1.1.min.js b/src/libs/jquery-3.1.1.min.js similarity index 100% rename from libs/jquery-3.1.1.min.js rename to src/libs/jquery-3.1.1.min.js diff --git a/libs/jquery-ui.css b/src/libs/jquery-ui.css similarity index 100% rename from libs/jquery-ui.css rename to src/libs/jquery-ui.css diff --git a/libs/jquery-ui.min.js b/src/libs/jquery-ui.min.js similarity index 100% rename from libs/jquery-ui.min.js rename to src/libs/jquery-ui.min.js diff --git a/libs/jquery.ui.touch-punch.min.js b/src/libs/jquery.ui.touch-punch.min.js similarity index 100% rename from libs/jquery.ui.touch-punch.min.js rename to src/libs/jquery.ui.touch-punch.min.js diff --git a/libs/jszip.min.js b/src/libs/jszip.min.js similarity index 100% rename from libs/jszip.min.js rename to src/libs/jszip.min.js diff --git a/libs/objexporter.min.js b/src/libs/objexporter.min.js similarity index 100% rename from libs/objexporter.min.js rename to src/libs/objexporter.min.js diff --git a/libs/orbitControls.min.js b/src/libs/orbitControls.min.js similarity index 100% rename from libs/orbitControls.min.js rename to src/libs/orbitControls.min.js diff --git a/libs/polylabel.min.js b/src/libs/polylabel.min.js similarity index 100% rename from libs/polylabel.min.js rename to src/libs/polylabel.min.js diff --git a/libs/priority-queue.min.js b/src/libs/priority-queue.min.js similarity index 100% rename from libs/priority-queue.min.js rename to src/libs/priority-queue.min.js diff --git a/libs/rgbquant.min.js b/src/libs/rgbquant.min.js similarity index 100% rename from libs/rgbquant.min.js rename to src/libs/rgbquant.min.js diff --git a/libs/three.min.js b/src/libs/three.min.js similarity index 100% rename from libs/three.min.js rename to src/libs/three.min.js diff --git a/libs/umami.js b/src/libs/umami.js similarity index 100% rename from libs/umami.js rename to src/libs/umami.js diff --git a/src/main.ts b/src/main.js similarity index 99% rename from src/main.ts rename to src/main.js index 302b1b9a..6229482d 100644 --- a/src/main.ts +++ b/src/main.js @@ -3,14 +3,14 @@ console.log("Hello World"); -import {invokeActiveZooming} from "../modules/activeZooming"; -import {applyPreset, drawBorders, drawRivers, drawStates} from "../modules/ui/layers"; -import {applyMapSize, applyStoredOptions, randomizeOptions} from "../modules/ui/options"; +import {invokeActiveZooming} from "./modules/activeZooming"; +import {applyPreset, drawBorders, drawRivers, drawStates} from "./modules/ui/layers"; +import {applyMapSize, applyStoredOptions, randomizeOptions} from "./modules/ui/options"; import {ERROR, INFO, TIME, WARN} from "./config/logging"; import {UINT16_MAX} from "./constants"; import {clearLegend} from "./modules/legend"; import {drawScaleBar, Ruler, Rulers} from "./modules/measurers"; -import {applyStyleOnLoad} from "../modules/ui/stylePresets"; +import {applyStyleOnLoad} from "./modules/ui/stylePresets"; import {restoreDefaultEvents} from "./scripts/events"; import {addGlobalListeners} from "./scripts/listeners"; import {locked} from "./scripts/options/lock"; @@ -681,7 +681,7 @@ function defineMapSize() { } // calculate map position on globe -function calculateMapCoordinates(): IMapCoordinates { +function calculateMapCoordinates() { const size = +byId("mapSizeOutput").value; const latShift = +byId("latitudeOutput").value; diff --git a/modules/activeZooming.js b/src/modules/activeZooming.js similarity index 100% rename from modules/activeZooming.js rename to src/modules/activeZooming.js diff --git a/modules/biomes.js b/src/modules/biomes.js similarity index 100% rename from modules/biomes.js rename to src/modules/biomes.js diff --git a/modules/burgs-and-states.js b/src/modules/burgs-and-states.js similarity index 100% rename from modules/burgs-and-states.js rename to src/modules/burgs-and-states.js diff --git a/modules/coa-generator.js b/src/modules/coa-generator.js similarity index 100% rename from modules/coa-generator.js rename to src/modules/coa-generator.js diff --git a/modules/coa-renderer.js b/src/modules/coa-renderer.js similarity index 100% rename from modules/coa-renderer.js rename to src/modules/coa-renderer.js diff --git a/modules/cultures-generator.js b/src/modules/cultures-generator.js similarity index 100% rename from modules/cultures-generator.js rename to src/modules/cultures-generator.js diff --git a/modules/define-globals.js b/src/modules/define-globals.js similarity index 100% rename from modules/define-globals.js rename to src/modules/define-globals.js diff --git a/modules/define-svg.js b/src/modules/define-svg.js similarity index 100% rename from modules/define-svg.js rename to src/modules/define-svg.js diff --git a/modules/dynamic/auto-update.js b/src/modules/dynamic/auto-update.js similarity index 100% rename from modules/dynamic/auto-update.js rename to src/modules/dynamic/auto-update.js diff --git a/modules/dynamic/editors/cultures-editor.js b/src/modules/dynamic/editors/cultures-editor.js similarity index 100% rename from modules/dynamic/editors/cultures-editor.js rename to src/modules/dynamic/editors/cultures-editor.js diff --git a/modules/dynamic/editors/religions-editor.js b/src/modules/dynamic/editors/religions-editor.js similarity index 100% rename from modules/dynamic/editors/religions-editor.js rename to src/modules/dynamic/editors/religions-editor.js diff --git a/modules/dynamic/editors/states-editor.js b/src/modules/dynamic/editors/states-editor.js similarity index 100% rename from modules/dynamic/editors/states-editor.js rename to src/modules/dynamic/editors/states-editor.js diff --git a/modules/dynamic/export-json.js b/src/modules/dynamic/export-json.js similarity index 100% rename from modules/dynamic/export-json.js rename to src/modules/dynamic/export-json.js diff --git a/modules/dynamic/heightmap-selection.js b/src/modules/dynamic/heightmap-selection.js similarity index 100% rename from modules/dynamic/heightmap-selection.js rename to src/modules/dynamic/heightmap-selection.js diff --git a/modules/dynamic/hierarchy-tree.js b/src/modules/dynamic/hierarchy-tree.js similarity index 100% rename from modules/dynamic/hierarchy-tree.js rename to src/modules/dynamic/hierarchy-tree.js diff --git a/modules/dynamic/installation.js b/src/modules/dynamic/installation.js similarity index 100% rename from modules/dynamic/installation.js rename to src/modules/dynamic/installation.js diff --git a/modules/dynamic/overview/charts-overview.js b/src/modules/dynamic/overview/charts-overview.js similarity index 100% rename from modules/dynamic/overview/charts-overview.js rename to src/modules/dynamic/overview/charts-overview.js diff --git a/modules/dynamic/supporters.js b/src/modules/dynamic/supporters.js similarity index 97% rename from modules/dynamic/supporters.js rename to src/modules/dynamic/supporters.js index 4a609d84..0f643970 100644 --- a/modules/dynamic/supporters.js +++ b/src/modules/dynamic/supporters.js @@ -1,6 +1,4 @@ -import {capitalize} from "/src/utils/stringUtils"; - -const capitalize = text => text.charAt(0).toUpperCase() + text.slice(1); +import {capitalize} from "../../utils/stringUtils"; const format = rawList => rawList diff --git a/modules/fonts.js b/src/modules/fonts.js similarity index 100% rename from modules/fonts.js rename to src/modules/fonts.js diff --git a/modules/heightmap-generator.js b/src/modules/heightmap-generator.js similarity index 100% rename from modules/heightmap-generator.js rename to src/modules/heightmap-generator.js diff --git a/modules/io/cloud.js b/src/modules/io/cloud.js similarity index 100% rename from modules/io/cloud.js rename to src/modules/io/cloud.js diff --git a/modules/io/export.js b/src/modules/io/export.js similarity index 100% rename from modules/io/export.js rename to src/modules/io/export.js diff --git a/modules/io/formats.js b/src/modules/io/formats.js similarity index 100% rename from modules/io/formats.js rename to src/modules/io/formats.js diff --git a/modules/io/load.js b/src/modules/io/load.js similarity index 100% rename from modules/io/load.js rename to src/modules/io/load.js diff --git a/modules/io/save.js b/src/modules/io/save.js similarity index 100% rename from modules/io/save.js rename to src/modules/io/save.js diff --git a/modules/lakes.js b/src/modules/lakes.js similarity index 100% rename from modules/lakes.js rename to src/modules/lakes.js diff --git a/src/modules/legend.ts b/src/modules/legend.js similarity index 98% rename from src/modules/legend.ts rename to src/modules/legend.js index d5d3aa89..be851510 100644 --- a/src/modules/legend.ts +++ b/src/modules/legend.js @@ -1,7 +1,7 @@ import {rn} from "../utils/numberUtils"; import {parseTransform} from "/src/utils/stringUtils"; -export function drawLegend(name: string, data: unknown[]) { +export function drawLegend(name, data) { legend.selectAll("*").remove(); // fully redraw every time legend.attr("data", data.join("|")); // store data diff --git a/modules/markers-generator.js b/src/modules/markers-generator.js similarity index 100% rename from modules/markers-generator.js rename to src/modules/markers-generator.js diff --git a/modules/military-generator.js b/src/modules/military-generator.js similarity index 100% rename from modules/military-generator.js rename to src/modules/military-generator.js diff --git a/modules/names-generator.js b/src/modules/names-generator.js similarity index 100% rename from modules/names-generator.js rename to src/modules/names-generator.js diff --git a/modules/ocean-layers.js b/src/modules/ocean-layers.js similarity index 100% rename from modules/ocean-layers.js rename to src/modules/ocean-layers.js diff --git a/modules/relief-icons.js b/src/modules/relief-icons.js similarity index 100% rename from modules/relief-icons.js rename to src/modules/relief-icons.js diff --git a/modules/religions-generator.js b/src/modules/religions-generator.js similarity index 100% rename from modules/religions-generator.js rename to src/modules/religions-generator.js diff --git a/modules/river-generator.js b/src/modules/river-generator.js similarity index 100% rename from modules/river-generator.js rename to src/modules/river-generator.js diff --git a/modules/routes-generator.js b/src/modules/routes-generator.js similarity index 100% rename from modules/routes-generator.js rename to src/modules/routes-generator.js diff --git a/modules/submap.js b/src/modules/submap.js similarity index 100% rename from modules/submap.js rename to src/modules/submap.js diff --git a/modules/ui/3d.js b/src/modules/ui/3d.js similarity index 100% rename from modules/ui/3d.js rename to src/modules/ui/3d.js diff --git a/modules/ui/battle-screen.js b/src/modules/ui/battle-screen.js similarity index 100% rename from modules/ui/battle-screen.js rename to src/modules/ui/battle-screen.js diff --git a/modules/ui/biomes-editor.js b/src/modules/ui/biomes-editor.js similarity index 100% rename from modules/ui/biomes-editor.js rename to src/modules/ui/biomes-editor.js diff --git a/modules/ui/burg-editor.js b/src/modules/ui/burg-editor.js similarity index 100% rename from modules/ui/burg-editor.js rename to src/modules/ui/burg-editor.js diff --git a/modules/ui/burgs-overview.js b/src/modules/ui/burgs-overview.js similarity index 100% rename from modules/ui/burgs-overview.js rename to src/modules/ui/burgs-overview.js diff --git a/modules/ui/coastline-editor.js b/src/modules/ui/coastline-editor.js similarity index 100% rename from modules/ui/coastline-editor.js rename to src/modules/ui/coastline-editor.js diff --git a/modules/ui/diplomacy-editor.js b/src/modules/ui/diplomacy-editor.js similarity index 100% rename from modules/ui/diplomacy-editor.js rename to src/modules/ui/diplomacy-editor.js diff --git a/modules/ui/editors.js b/src/modules/ui/editors.js similarity index 100% rename from modules/ui/editors.js rename to src/modules/ui/editors.js diff --git a/modules/ui/elevation-profile.js b/src/modules/ui/elevation-profile.js similarity index 100% rename from modules/ui/elevation-profile.js rename to src/modules/ui/elevation-profile.js diff --git a/modules/ui/emblems-editor.js b/src/modules/ui/emblems-editor.js similarity index 100% rename from modules/ui/emblems-editor.js rename to src/modules/ui/emblems-editor.js diff --git a/modules/ui/general.js b/src/modules/ui/general.js similarity index 100% rename from modules/ui/general.js rename to src/modules/ui/general.js diff --git a/modules/ui/heightmap-editor.js b/src/modules/ui/heightmap-editor.js similarity index 100% rename from modules/ui/heightmap-editor.js rename to src/modules/ui/heightmap-editor.js diff --git a/modules/ui/hotkeys.js b/src/modules/ui/hotkeys.js similarity index 100% rename from modules/ui/hotkeys.js rename to src/modules/ui/hotkeys.js diff --git a/modules/ui/ice-editor.js b/src/modules/ui/ice-editor.js similarity index 100% rename from modules/ui/ice-editor.js rename to src/modules/ui/ice-editor.js diff --git a/modules/ui/labels-editor.js b/src/modules/ui/labels-editor.js similarity index 100% rename from modules/ui/labels-editor.js rename to src/modules/ui/labels-editor.js diff --git a/modules/ui/lakes-editor.js b/src/modules/ui/lakes-editor.js similarity index 100% rename from modules/ui/lakes-editor.js rename to src/modules/ui/lakes-editor.js diff --git a/modules/ui/layers.js b/src/modules/ui/layers.js similarity index 100% rename from modules/ui/layers.js rename to src/modules/ui/layers.js diff --git a/modules/ui/markers-editor.js b/src/modules/ui/markers-editor.js similarity index 100% rename from modules/ui/markers-editor.js rename to src/modules/ui/markers-editor.js diff --git a/modules/ui/markers-overview.js b/src/modules/ui/markers-overview.js similarity index 100% rename from modules/ui/markers-overview.js rename to src/modules/ui/markers-overview.js diff --git a/modules/ui/military-overview.js b/src/modules/ui/military-overview.js similarity index 100% rename from modules/ui/military-overview.js rename to src/modules/ui/military-overview.js diff --git a/modules/ui/namesbase-editor.js b/src/modules/ui/namesbase-editor.js similarity index 100% rename from modules/ui/namesbase-editor.js rename to src/modules/ui/namesbase-editor.js diff --git a/modules/ui/notes-editor.js b/src/modules/ui/notes-editor.js similarity index 100% rename from modules/ui/notes-editor.js rename to src/modules/ui/notes-editor.js diff --git a/modules/ui/options.js b/src/modules/ui/options.js similarity index 100% rename from modules/ui/options.js rename to src/modules/ui/options.js diff --git a/modules/ui/provinces-editor.js b/src/modules/ui/provinces-editor.js similarity index 100% rename from modules/ui/provinces-editor.js rename to src/modules/ui/provinces-editor.js diff --git a/modules/ui/regiment-editor.js b/src/modules/ui/regiment-editor.js similarity index 100% rename from modules/ui/regiment-editor.js rename to src/modules/ui/regiment-editor.js diff --git a/modules/ui/regiments-overview.js b/src/modules/ui/regiments-overview.js similarity index 100% rename from modules/ui/regiments-overview.js rename to src/modules/ui/regiments-overview.js diff --git a/modules/ui/relief-editor.js b/src/modules/ui/relief-editor.js similarity index 100% rename from modules/ui/relief-editor.js rename to src/modules/ui/relief-editor.js diff --git a/modules/ui/rivers-creator.js b/src/modules/ui/rivers-creator.js similarity index 100% rename from modules/ui/rivers-creator.js rename to src/modules/ui/rivers-creator.js diff --git a/modules/ui/rivers-editor.js b/src/modules/ui/rivers-editor.js similarity index 100% rename from modules/ui/rivers-editor.js rename to src/modules/ui/rivers-editor.js diff --git a/modules/ui/rivers-overview.js b/src/modules/ui/rivers-overview.js similarity index 100% rename from modules/ui/rivers-overview.js rename to src/modules/ui/rivers-overview.js diff --git a/modules/ui/routes-editor.js b/src/modules/ui/routes-editor.js similarity index 100% rename from modules/ui/routes-editor.js rename to src/modules/ui/routes-editor.js diff --git a/modules/ui/style.js b/src/modules/ui/style.js similarity index 100% rename from modules/ui/style.js rename to src/modules/ui/style.js diff --git a/modules/ui/stylePresets.js b/src/modules/ui/stylePresets.js similarity index 100% rename from modules/ui/stylePresets.js rename to src/modules/ui/stylePresets.js diff --git a/modules/ui/submap.js b/src/modules/ui/submap.js similarity index 100% rename from modules/ui/submap.js rename to src/modules/ui/submap.js diff --git a/modules/ui/temperature-graph.js b/src/modules/ui/temperature-graph.js similarity index 100% rename from modules/ui/temperature-graph.js rename to src/modules/ui/temperature-graph.js diff --git a/modules/ui/tools.js b/src/modules/ui/tools.js similarity index 100% rename from modules/ui/tools.js rename to src/modules/ui/tools.js diff --git a/modules/ui/units-editor.js b/src/modules/ui/units-editor.js similarity index 100% rename from modules/ui/units-editor.js rename to src/modules/ui/units-editor.js diff --git a/modules/ui/world-configurator.js b/src/modules/ui/world-configurator.js similarity index 100% rename from modules/ui/world-configurator.js rename to src/modules/ui/world-configurator.js diff --git a/modules/ui/zones-editor.js b/src/modules/ui/zones-editor.js similarity index 100% rename from modules/ui/zones-editor.js rename to src/modules/ui/zones-editor.js diff --git a/modules/voronoi.js b/src/modules/voronoi.js similarity index 100% rename from modules/voronoi.js rename to src/modules/voronoi.js diff --git a/modules/zoom.js b/src/modules/zoom.js similarity index 100% rename from modules/zoom.js rename to src/modules/zoom.js diff --git a/src/scripts/events.ts b/src/scripts/events.js similarity index 97% rename from src/scripts/events.ts rename to src/scripts/events.js index 420efa86..7bdd00d1 100644 --- a/src/scripts/events.ts +++ b/src/scripts/events.js @@ -1,8 +1,8 @@ import {dragLegendBox} from "../modules/legend"; import {findCell, findGridCell} from "../utils/graphUtils"; import {tip, showMainTip} from "./tooltips"; -import {si, convertTemperature} from "/src/utils/unitUtils"; -import {debounce} from "/src/utils/functionUtils"; +import {si, convertTemperature} from "../utils/unitUtils"; +import {debounce} from "../utils/functionUtils"; export function restoreDefaultEvents() { Zoom.setZoomBehavior(); @@ -51,7 +51,7 @@ function handleMouseMove() { } // show note box on hover (if any) -function showNotes(event: Event) { +function showNotes(event) { if (notesEditor?.offsetParent) return; let id = event.target.id || event.target.parentNode.id || event.target.parentNode.parentNode.id; if (event.target.parentNode.parentNode.id === "burgLabels") id = "burg" + event.target.dataset.id; @@ -70,7 +70,7 @@ function showNotes(event: Event) { } // show viewbox tooltip if main tooltip is blank -function showMapTooltip(point: number[], event: Event, packCellId: number, gridCellId: number) { +function showMapTooltip(point, event, packCellId, gridCellId) { tip(""); // clear tip const path = event.composedPath(); if (!path[path.length - 8]) return; diff --git a/src/scripts/listeners.ts b/src/scripts/listeners.ts index 3e1f18f5..9e51ecbe 100644 --- a/src/scripts/listeners.ts +++ b/src/scripts/listeners.ts @@ -23,7 +23,8 @@ function addInstallationPrompt() { "beforeinstallprompt", async event => { event.preventDefault(); - const Installation = await import("../../modules/dynamic/installation.js"); + // @ts-ignore + const Installation = await import("../modules/dynamic/installation.js"); Installation.init(event); }, {once: true} diff --git a/src/scripts/prompt.ts b/src/scripts/prompt.ts index 0a4030ca..06df1aeb 100644 --- a/src/scripts/prompt.ts +++ b/src/scripts/prompt.ts @@ -1,4 +1,4 @@ -import {ERROR} from "/src/config/logging"; +import {ERROR} from "../config/logging"; // prompt replacer (prompt does not work in Electron) const $prompt: HTMLElement = document.getElementById("prompt")!; diff --git a/src/utils/arrayUtils.ts b/src/utils/arrayUtils.ts index bc88e7f5..f23e2fa4 100644 --- a/src/utils/arrayUtils.ts +++ b/src/utils/arrayUtils.ts @@ -1,4 +1,4 @@ -import {UINT8_MAX, UINT16_MAX, UINT32_MAX} from "/src/constants"; +import {UINT8_MAX, UINT16_MAX, UINT32_MAX} from "../constants"; export function last(array: T[]) { return array[array.length - 1]; diff --git a/src/utils/graphUtils.ts b/src/utils/graphUtils.ts index 4e740e0b..7490ac65 100644 --- a/src/utils/graphUtils.ts +++ b/src/utils/graphUtils.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import {TIME} from "../config/logging"; import {createTypedArray} from "./arrayUtils"; import {rn} from "./numberUtils"; diff --git a/src/utils/languageUtils.ts b/src/utils/languageUtils.ts index 6a93b9ed..29ac8066 100644 --- a/src/utils/languageUtils.ts +++ b/src/utils/languageUtils.ts @@ -1,4 +1,4 @@ -import {P} from "/src/utils/probabilityUtils"; +import {P} from "./probabilityUtils"; // chars that serve as vowels const VOWELS = `aeiouyɑ'əøɛœæɶɒɨɪɔɐʊɤɯаоиеёэыуюяàèìòùỳẁȁȅȉȍȕáéíóúýẃőűâêîôûŷŵäëïöüÿẅãẽĩõũỹąęįǫųāēīōūȳăĕĭŏŭǎěǐǒǔȧėȯẏẇạẹịọụỵẉḛḭṵṳ`; diff --git a/src/utils/probabilityUtils.ts b/src/utils/probabilityUtils.ts index 0613a539..1ab51dc9 100644 --- a/src/utils/probabilityUtils.ts +++ b/src/utils/probabilityUtils.ts @@ -1,4 +1,4 @@ -import {ERROR} from "/src/config/logging"; +import {ERROR} from "../config/logging"; import {minmax, rn} from "./numberUtils"; const d3 = window.d3; diff --git a/src/utils/stringUtils.ts b/src/utils/stringUtils.ts index d703755b..b8275d8d 100644 --- a/src/utils/stringUtils.ts +++ b/src/utils/stringUtils.ts @@ -1,4 +1,4 @@ -import {rn} from "/src/utils/numberUtils"; +import {rn} from "./numberUtils"; // round numbers in string to d decimals export function round(str: string, d = 1) { diff --git a/versioning.js b/src/versioning.js similarity index 98% rename from versioning.js rename to src/versioning.js index 372bb471..bf19a4e5 100644 --- a/versioning.js +++ b/src/versioning.js @@ -3,8 +3,6 @@ // version and caching control const version = "1.87.04"; // generator version, update each time -console.log(`version: ${version}`); - { document.title += " v" + version; const loadingScreenVersion = document.getElementById("version"); diff --git a/vite.config.js b/vite.config.js index e97c9c1f..e0f8fd4a 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,25 +1,25 @@ -import {defineConfig} from "vite"; -import {fileURLToPath} from "url"; -import path from "path"; +// import {defineConfig} from "vite"; +// import {fileURLToPath} from "url"; +// import path from "path"; -const pathName = path.dirname(fileURLToPath(import.meta.url)); -const resolved = path.resolve(pathName, "./src"); +// const pathName = path.dirname(fileURLToPath(import.meta.url)); +// const resolved = path.resolve(pathName, "./src"); -export default defineConfig({ - // base: "/Fantasy-Map-Generator/", - resolve: { - alias: [ - // "@": "./src" - // "@": path.resolve(path.dirname(fileURLToPath(import.meta.url)), "./src") - // "@": path.resolve(path.dirname(fileURLToPath(import.meta.url)), "/src") - { - find: "@", - replacement: path.resolve(pathName, "./src"), - customResolver: request => { - console.log(request); - return request; - } - } - ] - } -}); +// export default defineConfig({ +// // base: "/Fantasy-Map-Generator/", +// resolve: { +// alias: { +// // "@": path.resolve(pathName, "./src") +// // "@": path.resolve(path.dirname(fileURLToPath(import.meta.url)), "./src") +// // "@": path.resolve(path.dirname(fileURLToPath(import.meta.url)), "/src") +// // { +// // find: "@", +// // replacement: path.resolve(pathName, "./src"), +// // customResolver: request => { +// // console.log(request); +// // return request; +// // } +// // } +// } +// } +// }); diff --git a/yarn.lock b/yarn.lock index e2ba76bd..a6622aeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -102,7 +102,7 @@ esbuild-windows-arm64@0.14.47: resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz#86d9db1a22d83360f726ac5fba41c2f625db6878" integrity sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ== -esbuild@^0.14.27: +esbuild@^0.14.43: version "0.14.47" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.47.tgz#0d6415f6bd8eb9e73a58f7f9ae04c5276cda0e4d" integrity sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA== @@ -172,7 +172,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -postcss@^8.4.13: +postcss@^8.4.14: version "8.4.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== @@ -181,7 +181,7 @@ postcss@^8.4.13: picocolors "^1.0.0" source-map-js "^1.0.2" -resolve@^1.22.0: +resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -190,7 +190,7 @@ resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -rollup@^2.59.0: +rollup@^2.75.6: version "2.75.7" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.7.tgz#221ff11887ae271e37dcc649ba32ce1590aaa0b9" integrity sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ== @@ -212,14 +212,14 @@ typescript@^4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== -vite@^2.9.12: - version "2.9.12" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.12.tgz#b1d636b0a8ac636afe9d83e3792d4895509a941b" - integrity sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew== +vite@^3.0.0-beta.3: + version "3.0.0-beta.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.0-beta.3.tgz#6e304167edf2620c510b1ad6cebc769fbe4735bc" + integrity sha512-Zf0wHLSBHyK0uyj+0khIqiKrdO2b72JGULIGqIHE6smBIAHUYDv9xFqfSEkwlNVOM39bbkMJvV99+9i0FdcgIw== dependencies: - esbuild "^0.14.27" - postcss "^8.4.13" - resolve "^1.22.0" - rollup "^2.59.0" + esbuild "^0.14.43" + postcss "^8.4.14" + resolve "^1.22.1" + rollup "^2.75.6" optionalDependencies: fsevents "~2.3.2"