Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • debian-gis-team/josm
1 result
Show changes
Commits on Source (5)
Showing
with 625 additions and 58 deletions
......@@ -2,7 +2,7 @@
<info>
<entry
path="trunk"
revision="15238"
revision="15322"
kind="dir">
<url>https://josm.openstreetmap.de/svn/trunk</url>
<relative-url>^/trunk</relative-url>
......@@ -11,9 +11,9 @@
<uuid>0c6e7542-c601-0410-84e7-c038aed88b3b</uuid>
</repository>
<commit
revision="15238">
revision="15322">
<author>Don-vip</author>
<date>2019-07-09T22:52:47.490134Z</date>
<date>2019-08-26T06:55:27.395789Z</date>
</commit>
</entry>
</info>
......@@ -413,6 +413,8 @@ Build-Date: ${build.tstamp}
<link href="https://docs.oracle.com/en/java/javase/11/docs/api" if:set="isJava11" />
<doctitle><![CDATA[<h2>JOSM - Javadoc</h2>]]></doctitle>
<bottom><![CDATA[<a href="https://josm.openstreetmap.de/">JOSM</a>]]></bottom>
<!-- Disable HTML checking until we switch to Java13+, see https://bugs.openjdk.java.net/browse/JDK-8223552 -->
<arg value="-Xdoclint:-html" if:set="isJava13" />
<arg value="-html5" if:set="isJava9" />
<arg value="--add-exports" if:set="isJava9" />
<arg value="java.base/sun.security.util=ALL-UNNAMED" if:set="isJava9" />
......
This diff is collapsed.
......@@ -2,6 +2,10 @@
* Taginfo query: select keypairs.key1, keypairs.key2, keypairs.count_all, keys.count_all, cast(keypairs.count_all as real)/keys.count_all as from_fraction_all from keys, keypairs where key1='waterway' and keys.key=keypairs.key2 and (key1<>'highway' or keypairs.count_all>12000) and (key1<>'railway' or keypairs.count_all>3000) and (key1<>'waterway' or keypairs.count_all>800) and key2 not like '%:%' and from_fraction_all>0.97 and 1 union select keypairs.key2, keypairs.key1, keypairs.count_all, keys.count_all, cast(keypairs.count_all as real)/keys.count_all as from_fraction_all from keys, keypairs where key2='waterway' and keys.key=keypairs.key1 and (key2<>'highway' or keypairs.count_all>12000) and (key2<>'railway' or keypairs.count_all>3000) and (key2<>'waterway' or keypairs.count_all>800) and key1 not like '%:%' and from_fraction_all>0.97 and 1 order by keypairs.count_all desc limit 1000;
*/
way[surface=~/^(unpaved|compacted|gravel|fine_gravel|pebblestone|ground|earth|dirt|grass|sand|mud|ice|salt|snow|woodchips)$/] { /* without grass_paver as it is controversial */
set unpaved_surface;
}
/* {0.key} without {1.key} (warning level) */
way[junction ][!highway][junction!=yes],
way[lanes ][!highway][leisure!=track][leisure!=swimming_pool],
......@@ -42,6 +46,7 @@ way[have_riverbank ][!waterway],
*[border_type ][!boundary],
*[piste:difficulty ][!piste:type],
*[place ][!name][place!=islet],
*[transformer ][!power],
*[source:date ][!source],
*[source:name ][!name],
*[source:maxspeed:forward ][!maxspeed:forward][!maxspeed],
......@@ -87,9 +92,12 @@ way[lanes:backward][!lanes:forward][oneway!=yes][oneway!=-1],
group: tr("missing tag");
}
/* {0.key} without {1.tag} */
/* {0.key} without {1.tag}, #17997 */
*[generator:source ][power!=generator],
*[generator:method ][power!=generator],
*[generator:type ][power!=generator],
node[fire_hydrant:type ][emergency!=fire_hydrant][disused:emergency!=fire_hydrant],
*[transformer ][!power],
node[manhole ][man_made!=manhole],
way[fence_type ][barrier!=fence],
*[recycling_type ][amenity!=recycling],
*[information ][tourism!=information],
......@@ -211,7 +219,7 @@ way[usage=penstock][waterway!=pressurised] {
}
/* {0.key} without {1.key}, {2.key} or {3.key}, #17253 */
way[oneway ][!highway][!railway][!aerialway][attraction!=summer_toboggan],
way[oneway ][!highway][!railway][!aerialway][attraction!=summer_toboggan][aeroway!~/^(runway|taxiway)$/],
*[snowplowing][!highway][!amenity][!leisure] {
throwWarning: tr("{0} without {1}, {2} or {3}", "{0.key}", "{1.key}", "{2.key}", "{3.key}");
group: tr("missing tag");
......@@ -250,9 +258,12 @@ way[highway=footway][oneway=no] {
group: tr("suspicious tag combination");
}
/* {0.tag} together with {1.tag}, see #17623, #17592, #17594, #17542, #16861, #16147, #10186 */
/* {0.tag} together with {1.tag}, see #17950, #17330, #17623, #17592, #17594, #17542, #16861, #16147, #10186 */
*[amenity=police][police],
node[highway=crossing][crossing=no],
node[railway=crossing][crossing=no],
way[junction=yes][highway],
way[tracktype=grade1][surface][surface=~/^(unpaved|compacted|gravel|fine_gravel|pebblestone|ground|earth|dirt|grass|sand|mud|ice|salt|snow|woodchips)$/],
way[tracktype=grade1][surface].unpaved_surface,
way[tracktype=grade2][surface][surface=~/^(sand|mud)$/],
way[segregated][bicycle=no],
way[segregated][foot=no],
......@@ -262,13 +273,6 @@ way[waterway=canal][tunnel=yes] {
group: tr("suspicious tag combination");
}
way[highway=footway][bicycle=designated],
way[highway=cycleway][foot=designated] {
throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
group: tr("suspicious tag combination");
suggestAlternative: "highway=path";
}
/* {0.tag} together with {1.tag} (error level) */
relation[type=multipolygon][area=no] {
throwError: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
......@@ -277,7 +281,7 @@ relation[type=multipolygon][area=no] {
/* {0.key} together with {1.key}, #17630, #17604 */
*[building:part][building],
*[addr:street][addr:place] {
*[addr:street][addr:place][outside("CZ,DK")] {
throwWarning: tr("{0} together with {1}", "{0.key}", "{1.key}");
group: tr("suspicious tag combination");
}
......@@ -597,4 +601,26 @@ way:areaStyle[highway][highway =~ /motorway|trunk|primary|secondary|tertiary|unc
area[cemetery=sector][landuse=cemetery] {
throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
group: tr("suspicious tag combination");
}
/* #17967 */
*[highway=cycleway][cycleway=track] {
throwWarning: tr("{0} together with {1}. Remove {1}.", "{0.tag}", "{1.tag}");
group: tr("suspicious tag combination");
fixRemove: "cycleway";
}
/* #17973 */
way[highway=path ][foot][foot!=no ][!segregated][bicycle][bicycle!=no]!.unpaved_surface,
way[highway=footway ][bicycle][bicycle!=no][!segregated]!.unpaved_surface,
way[highway=cycleway][foot][foot!=no ][!segregated]!.unpaved_surface {
throwWarning: tr("Combined foot- and cycleway without {1}.", "{3.key}");
group: tr("missing tag");
}
/* #17989 */
node[emergency_ward_entrance][emergency!=emergency_ward_entrance] {
throwWarning: tr("{0} without {1}", "{0.tag}", "{1.tag}");
group: tr("missing tag");
fixAdd: "emergency=emergency_ward_entrance";
}
\ No newline at end of file
......@@ -403,14 +403,12 @@ way[type=palm] {
suggestAlternative: "embankment=yes";
group: tr("deprecated tagging");
}
*[bridge=swing] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "bridge:movable=swing";
suggestAlternative: "bridge:structure=simple-suspension";
group: tr("deprecated tagging");
}
*[bridge=suspension] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "bridge=yes + bridge:structure=suspension";
......@@ -418,6 +416,13 @@ way[type=palm] {
fixAdd: "bridge=yes";
fixAdd: "bridge:structure=suspension";
}
*[bridge=pontoon] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "bridge=yes + bridge:structure=floating";
group: tr("deprecated tagging");
fixAdd: "bridge=yes";
fixAdd: "bridge:structure=floating";
}
/* See #10530 - Incorrect tag proposed in internal preset for years */
*[fee=interval],
......@@ -452,7 +457,8 @@ way[type=palm] {
fixAdd: "park_ride=yes";
}
/* see #10661, #10837, #11737, #12771 */
/* see #17950, #10661, #10837, #11737, #12771 */
*[police=yes],
*[traffic_calming=yes],
*[access=restricted],
*[barrier=yes],
......@@ -960,11 +966,12 @@ node[type][pipeline=marker] {
suggestAlternative: "amenity=gambling";
group: tr("deprecated tagging");
}
*[office=real_estate],
*[office=real_estate_agent] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "office=estate_agent ";
suggestAlternative: "office=estate_agent";
group: tr("deprecated tagging");
fixAdd: "office=estate_agent ";
fixAdd: "office=estate_agent";
}
*[shop=glass] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
......@@ -976,6 +983,7 @@ node[type][pipeline=marker] {
*[amenity=proposed],
*[amenity=disused],
*[shop=disused],
*[highway=abandoned],
*[historic=abandoned] {
throwWarning: tr("{0} is deprecated. Use the {1}: key prefix instead.", "{0.tag}", "{0.value}");
group: tr("deprecated tagging");
......@@ -1247,14 +1255,37 @@ way[direction=down][incline][incline!=down] {
group: tr("deprecated tagging");
}
way[building=y],
way[building=1] {
*[building=true],
*[building="*"],
*[building=Y],
*[building=y],
*[building=1] {
throwError: tr("{0}", "{0.tag}");
suggestAlternative: "building=yes";
group: tr("misspelled value");
fixAdd: "building=yes";
}
/* #17786 */
*[building=abandoned],
*[building=address],
*[building=bing],
*[building=collapsed],
*[building=damaged],
*[building=demolished],
*[building=disused],
*[building=fixme],
*[building=occupied],
*[building=other],
*[building=razed],
*[building=unclassified],
*[building=undefined],
*[building=unknown],
*[building=unidentified] {
throwWarning: tr("{0} is not a building type.", "{0.tag}");
group: tr("deprecated tagging");
}
/* #15675 */
node[power=transformer][location=pole][transformer] {
throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
......@@ -1472,4 +1503,271 @@ way[/^is_in:.*$/] {
throwWarning: tr("{0} is deprecated", "{0.key}");
fixRemove: "contact:google_plus";
group: tr("deprecated tagging");
}
/* #17370 */
*[amenity=garages],
*[amenity=garage] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: concat("building=", "{0.value}");
suggestAlternative: "landuse=garages";
suggestAlternative: "amenity=parking + parking=garage_boxes";
group: tr("deprecated tagging");
}
*[shop=winery],
*[amenity=winery] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "craft=winery";
suggestAlternative: "shop=wine";
group: tr("deprecated tagging");
}
*[amenity=youth_centre] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "amenity=community_centre + community_centre=youth_centre";
fixAdd: "amenity=community_centre";
fixAdd: "community_centre=youth_centre";
group: tr("deprecated tagging");
}
*[building:type][building=yes],
*[building:type][!building] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "building";
group: tr("deprecated tagging");
fixChangeKey: "building:type => building";
assertMatch: "way building:type=church";
assertMatch: "way building:type=church building=yes";
assertNoMatch: "way building:type=church building=supermarket";
}
*[building:type][building][building!=yes] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "building";
group: tr("deprecated tagging");
assertNoMatch: "way building:type=church";
assertNoMatch: "way building:type=church building=yes";
assertMatch: "way building:type=church building=supermarket";
}
*[escalator] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "highway=steps + conveying=*";
group: tr("deprecated tagging");
}
*[fenced] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "barrier=fence";
group: tr("deprecated tagging");
}
*[historic_name][!old_name] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "old_name";
group: tr("deprecated tagging");
fixChangeKey: "historic_name => old_name";
}
*[historic_name][old_name] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "old_name";
group: tr("deprecated tagging");
}
*[landuse=field] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "landuse=farmland";
group: tr("deprecated tagging");
fixAdd: "landuse=farmland";
}
*[leisure=beach] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "natural=beach";
suggestAlternative: "leisure=beach_resort";
group: tr("deprecated tagging");
}
*[leisure=club] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "club=*";
group: tr("deprecated tagging");
}
*[leisure=video_arcade] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "leisure=amusement_arcade";
suggestAlternative: "leisure=adult_gaming_centre";
group: tr("deprecated tagging");
}
*[man_made=jetty] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "man_made=pier";
group: tr("deprecated tagging");
fixAdd: "man_made=pier";
}
*[man_made=village_pump] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "man_made=water_well";
group: tr("deprecated tagging");
fixAdd: "man_made=water_well";
}
*[man_made=water_tank] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "man_made=storage_tank + content=water";
group: tr("deprecated tagging");
fixAdd: "man_made=storage_tank";
fixAdd: "content=water";
}
*[natural=moor] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "natural=heath";
suggestAlternative: "natural=scrub";
suggestAlternative: "natural=grassland";
suggestAlternative: "natural=wetland";
suggestAlternative: "natural=fell";
suggestAlternative: "natural=tundra";
suggestAlternative: "landuse=meadow + meadow=agricultural";
group: tr("deprecated tagging");
}
*[noexit=no][!fixme] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "fixme=continue";
group: tr("deprecated tagging");
fixAdd: "fixme=continue";
fixRemove: "noexit";
}
*[noexit=no][fixme] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "fixme=continue";
group: tr("deprecated tagging");
}
*[shop=dive] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "shop=scuba_diving";
group: tr("deprecated tagging");
fixAdd: "shop=scuba_diving";
}
*[shop=furnace] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "shop=fireplace";
suggestAlternative: "craft=plumber";
group: tr("deprecated tagging");
}
*[sport=paragliding] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "sport=free_flying";
group: tr("deprecated tagging");
fixAdd: "sport=free_flying";
}
*[tourism=bed_and_breakfast] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "tourism=guest_house + guest_house=bed_and_breakfast";
group: tr("deprecated tagging");
fixAdd: "tourism=guest_house";
fixAdd: "guest_house=bed_and_breakfast";
}
/* #17880 */
*[diaper=yes],
*[diaper=no] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: concat("changing_table=", "{0.value}");
group: tr("deprecated tagging");
fixChangeKey: "diaper => changing_table";
set diaper_checked;
}
*[diaper][diaper =~ /^[1-9][0-9]*$/] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: concat("changing_table=yes + changing_table:count=", "{0.value}");
group: tr("deprecated tagging");
fixChangeKey: "diaper => changing_table:count";
fixAdd: "changing_table=yes";
set diaper_checked;
}
*[diaper=room] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "changing_table=room";
suggestAlternative: "changing_table=dedicated_room";
group: tr("deprecated tagging");
set diaper_checked;
}
*[diaper]!.diaper_checked {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "changing_table";
group: tr("deprecated tagging");
}
*[diaper:male=yes] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "changing_table:location=male_toilet";
group: tr("deprecated tagging");
fixAdd: "changing_table:location=male_toilet";
fixRemove: "diaper:male";
set diaper___checked;
}
*[diaper:female=yes] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "changing_table:location=female_toilet";
group: tr("deprecated tagging");
fixAdd: "changing_table:location=female_toilet";
fixRemove: "diaper:female";
set diaper___checked;
}
*[diaper:unisex=yes] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "changing_table:location=unisex_toilet";
group: tr("deprecated tagging");
fixAdd: "changing_table:location=unisex_toilet";
fixRemove: "diaper:unisex";
set diaper___checked;
}
*[diaper:wheelchair=yes],
*[diaper:wheelchair=no] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: concat("changing_table:wheelchair=", "{0.value}");
group: tr("deprecated tagging");
fixChangeKey: "diaper:wheelchair => changing_table:wheelchair";
set diaper___checked;
}
*[diaper:fee=yes],
*[diaper:fee=no] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: concat("changing_table:fee=", "{0.value}");
group: tr("deprecated tagging");
fixChangeKey: "diaper:fee => changing_table:fee";
set diaper___checked;
}
*[/^diaper:/]!.diaper___checked {
throwWarning: tr("{0} is deprecated", "diaper:*");
suggestAlternative: "changing_table:*";
group: tr("deprecated tagging");
}
*[changing_table][changing_table!~/^(yes|no|limited)$/] {
throwWarning: tr("wrong value: {0}", "{0.tag}");
suggestAlternative: "changing_table=yes";
suggestAlternative: "changing_table=no";
suggestAlternative: "changing_table=limited";
}
/* #17990 */
*[roof:shape=half_hipped] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "roof:shape=half-hipped";
group: tr("deprecated tagging");
fixAdd: "roof:shape=half-hipped";
}
/* #18003 */
*[bridge_name] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: "bridge:name";
group: tr("deprecated tagging");
fixChangeKey: "bridge_name => bridge:name";
}
/* #18007 */
*[access=public] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "access=yes";
group: tr("deprecated tagging");
fixAdd: "access=yes";
}
/* #17330 */
*[crossing=island] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "crossing:island=yes";
group: tr("deprecated tagging");
fixRemove: "crossing";
fixAdd: "crossing:island=yes";
}
\ No newline at end of file
......@@ -3,7 +3,7 @@ node[area=no],
node[oneway],
node[bridge],
node[sidewalk],
node[footway],
node[footway][footway!=crossing], /* footway=crossing has own warning in highway.mapcss */
node[man_made=embankment],
node[man_made=groyne],
node[man_made=cutline],
......
......@@ -45,6 +45,18 @@ way[railway=level_crossing] {
assertNoMatch: "node highway=crossing";
}
/* #18060 */
node[footway=crossing] {
throwWarning: tr("{0} on a node", "{0.tag}");
suggestAlternative: "highway=crossing";
suggestAlternative: "railway=crossing";
}
node[cycleway=crossing] {
throwWarning: tr("{0} on a node", "{0.tag}");
suggestAlternative: "highway=crossing + bicycle=yes";
suggestAlternative: "railway=crossing + bicycle=yes";
}
way[highway=unclassified][!name][noname!=yes] {
throwOther: tr("Unnamed unclassified highway");
assertMatch: "way highway=unclassified";
......@@ -52,7 +64,11 @@ way[highway=unclassified][!name][noname!=yes] {
assertNoMatch: "way highway=unclassified name=Foo";
}
way.major_road[!ref][!destination:ref][noref!=yes][junction!=roundabout] {
/* #17970 */
relation[type=route][route=road][ref] > way.major_road {
set road_route_has_ref;
}
way.major_road!.road_route_has_ref[!ref][!destination:ref][noref!=yes][junction!=roundabout] {
throwOther: tr("highway without a reference");
group: tr("missing tag");
assertMatch: "way highway=primary";
......@@ -127,8 +143,8 @@ way[footway][footway!=sidewalk][footway!=crossing]!.fixable_footway!.not_fixable
assertMatch: "way footway=bar";
}
/* #11270, #9297, #15439, #16424 */
way[railway =~ /^(light_rail|miniature|narrow_gauge|preserved|rail)$/][!highway] > node { set .is_in_railway }
/* #11270, #9297, #15439, #16424, #17022 */
way[railway =~ /^(miniature|narrow_gauge|preserved|rail)$/][!highway] > node { set .is_in_railway }
way[highway =~ /^(bridleway|cycleway|footway|path|steps)$/] > node { set .is_in_minor_road }
way[highway =~ /^(bus_guideway|living_street|motorway|motorway_link|pedestrian|primary|primary_link|raceway|residential|road|secondary|secondary_link|service|tertiary|tertiary_link|track|trunk|trunk_link|unclassified)$/] > node { set .is_in_major_road }
node[railway!=crossing][crossing!=no].is_in_railway.is_in_minor_road!.is_in_major_road {
......
......@@ -55,6 +55,7 @@ E:collection
E:addr:state
E:import_uuid
E:image
E:mapillary
E:url
E:website
E:postal_code
......@@ -325,6 +326,7 @@ K:shop=organic
K:shop=pasta
K:shop=tiles
K:shop=vacant
K:shop=games
;
; Craft Key/Value Pairs
K:craft=tailor
......
......@@ -121,6 +121,7 @@ node[emergency=fire_hydrant][fire_hydrant:count=1] {
*[name][name=~/^(?i)(collège)$/][amenity=school]["school:FR"="collège"],
*[name][name=~/^(?i)(lycée)$/][amenity=school]["school:FR"="lycée"],
*[name][name=~/^(?i)(Аптека|farmacia|pharmacy|pharmacie)$/][amenity=pharmacy],
*[name][name=~/^(?i)(hydrant)$/][emergency=fire_hydrant],
*[name][name=~/^(?i)(АГЗС|АЗС)$/][amenity=fuel] {
throwWarning: tr("{0}", "{0.tag}");
group: tr("descriptive name");
......
This diff is collapsed.
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type